1. プロセスとスレッドの違い
- プロセスはリソースです割り当て 最小単位であるスレッドは、CPU スケジューリングの基本単位です。
- プロセスには独立したアドレス空間があり、スレッドには独立したアドレス空間はありませんが、独立したスタックとローカル変数があります。
- マルチプロセスとマルチスレッドでは、マルチプロセスはマルチスレッドよりも堅牢です。プロセスは独立したアドレス空間を持っているため、プロセスが異常終了しても他のプロセスに影響を与えることはありませんが、スレッドには独立したアドレス空間がないため、スレッドが異常終了すると他のスレッドに影響を与える可能性があります。
- プロセスを作成するコストはスレッドを作成するコストよりも大きく、プロセス コンテキストを切り替えるコストはスレッド コンテキストを切り替えるコストよりも大きくなります。
2. プロセス間通信の方法は何ですか?
- # #Pipeline: (1) 名前のないパイプ: バイト ストリームの形式で、アフィニティによるプロセス間通信に使用されます。 (2) 有名なパイプ: ロマンチックな関係の境界を打ち破り、2 つの無関係なプロセスがバイト ストリームの形式でパイプを介して通信できるようにします。
- メッセージ キュー: データはブロック単位で送信されますが、ユーザー空間からカーネル空間へのデータのコピーにはコストがかかります。
- ソケット通信: 2 台のコンピュータ間の通信を実装します。
3. プロセス スケジューリング アルゴリズム
- 先着順のスケジューリングアルゴリズム ; キューに参加した順序に従って 1 つのプロセスを実行
- 最短ジョブ優先スケジューリング アルゴリズム ; 実行時間が短いプロセスを優先します
- 高応答率優先スケジューリング アルゴリズム; プロセスをスケジュールするときは、最初に応答率優先度を計算し、次に応答率優先度が最も高いプロセスを選択して実行します
- タイム スライス ローテーション スケジューリング アルゴリズム ; 各プロセスが実行できる時間は同じで、プロセスはタイム スライスに従って順番に実行されます
- # #最優先スケジューリング アルゴリズム; 最も優先度の高いプロセスを選択します
- マルチレベル フィードバック キュー スケジューリング アルゴリズム ; マルチレベルのキューを設定すると、キューの優先順位は高から下、タイム スライスは小から大になります
4。孤立プロセスです
(1) 親プロセスが先です 子プロセスが終了すると、子プロセスは孤立プロセスになります。
(2) Linux システム規定: すべての孤立プロセスは特別なプロセス (プロセス 1、つまり init プロセス) の子プロセスになります。
5. マルチスレッド同期メカニズムとは何ですか?
#6. プロセス メモリ パーティションの簡単な説明
カーネル空間- : オペレーティング システムのコードとデータを格納します
スタック領域- : ローカル変数、関数パラメータ値などを格納します。この領域は制御されます。
動的ライブラリ/共有メモリ マッピング領域- : 実行可能プログラムが依存する動的ライブラリはこの領域にロードされ、共有メモリはオペレーティング システムによってマッピングされます。 mmapもこの領域にあります
ヒープ領域- : プログラマが自ら操作するために用意されたメモリ領域で、このメモリ上でmalloc/freeやnew/deleteが動作します
読み取りおよび書き込み可能なデータ領域- :
(1) .bss
セクション: 初期化されていないグローバル変数と 0 に初期化された静的変数が格納されます。
(2).data
セクション: 0 に初期化されていないグローバル変数、静的変数、および const 定数を格納します。
- 読み取り専用データ領域: バイナリ コード、一部の const 変更変数、文字列定数などを格納します。
7. メモリの断片化
プログラマ プログラムでは、malloc を使用して仮想メモリのヒープ領域から動的にメモリを確保し、free を使用してメモリを解放します。プログラムに多数の malloc/free 操作があり、長時間実行される場合、仮想メモリのヒープ領域によりメモリの断片化が容易に発生する可能性があります。
メモリの断片化とは、ヒープ領域に大量の個別の空きメモリが残っているにもかかわらず、malloc の割り当て要求を満たすことができないことを意味します。メモリの断片化は、外部断片化と内部断片化に分けられます。次の図は、ヒープ領域の一部のメモリ割り当てを示しています。ヒープ領域は 4 バイト単位の多くの割り当てブロックに分割されています。白いブロックは空きメモリを表し、水色と濃い青色のブロックは割り当てられたメモリを表します。メモリ割り当ての最小単位は割り当てブロック (4 バイト) であるとします。
- 外部フラグメンテーション: ヒープ領域には連続割り当てブロック サイズ 4 の空きメモリ (白いブロック) がないため、4 未満の離散メモリが多数存在します。空きメモリの割り当てブロック サイズ。そのため、malloc(16) が 16 バイトに適用されると、割り当ては失敗します。その理由は、連続する 4 つの割り当てブロックには空きメモリがありませんが、4 つ未満の割り当てブロックには空きメモリがあるためです。これらのメモリは外部フラグメントと呼ばれます
- 内部フラグメンテーション: 割り当てられるメモリの最小単位は割り当てブロック (4 バイト) であるため、malloc(5) が 5 バイトに適用されると、ヒープ領域は2 つの空きブロックが割り当てられています 合計 8 バイトですが、プログラムに必要なのは 5 バイトだけであり、残りの 3 バイト (濃い青色) は使用されません。これらの 3 バイトのメモリは内部フラグメンテーションと呼ばれます
8. ヒープとスタックの違いは何ですか?
スタック: システムによって自動的に割り当てられる
ヒープ: プログラマによる手動アプリケーション
スタック: スタック領域のメモリサイズ要求されたメモリがスタック領域の残りのメモリよりも少ない場合、割り当ては成功します。そうでない場合、スタックはオーバーフローします。
ヒープ: ヒープ領域のメモリ サイズは、コンピュータの仮想メモリ
によって決まります。
9. ミューテックス ロックとセマフォの違い
(1) セマフォはスレッドの同期に使用され、ミューテックス ロックはスレッドの相互排他に使用されます。
(2) セマフォは、複数の同様のリソースのマルチスレッド同期を実現できる非負の整数にすることができます。ミューテックスは 0/1 のみにすることができ、相互排他的アクセスにのみ使用できます。 1 つのリソース。
(3) セマフォはあるスレッドで解放し、別のスレッドで取得できます。ミューテックスのロックとロック解除はそれぞれ同じスレッドで使用する必要があり、複数のミューテックスの使用に注意する必要があります。複数のスレッドで順序を統一しないとデッドロックが発生する可能性があります。
#10. 同期と非同期の違い
- 同期: A が B を呼び出します。 A が実行を続行するには、B が処理を完了して戻るまで待機する必要があります。
- 非同期: A は、B の処理が完了するのを待たずに B を呼び出します。A は続行できます。 B が処理を完了すると、コールバックなどを通じて A に通知します。 #デッドロックロックとは何ですか?デッドロックの原因は何ですか?
(1) デッドロックとは、複数のプロセスがリソースを奪い合うことで発生するデッドロック(待ち状態)のことで、外部からの力がなければプロセスは先に進むことができません。
(2) 理由: ① システムリソースが不足しています。 ② リソースの不適切な配分。 ③処理の進行順序が不適切です。 デッドロックに必要な 4 つの条件とは何ですか?
(1)相互排除条件: リソースは一度に 1 つのプロセスのみが使用でき、他のプロセスは待機することしかできません。
(2)要求と保持の条件: プロセスは少なくとも 1 つのリソースを取得しましたが、新しいリソース要求を行っており、そのリソースは他のプロセスによって占有されています。 、プロセスはブロック中ですが、取得したリソースはまだ保持されています。
(3)非剥奪条件: プロセスによって取得されたリソースは、他のプロセスによって剥奪されることはできず、プロセス自身によってのみ解放されます。
(4)ループ待ち条件: 複数のプロセスがエンドツーエンドで循環的にリソースを待つ関係を形成します。
注: 上記 4 つの条件は必須です。
デッドロックに対処するにはどうすればよいですか?
(1) デッドロックの防止: いくつかの制限を設定することで、デッドロックの必要条件を破壊します。
(2) デッドロックの回避: リソース割り当てプロセス中に、システムが安全でない状態にならないように何らかの方法を使用して、デッドロックを回避します。
(3) デッドロックの検出と除去: デッドロックの発生を許可しますが、システムの検出を通過した後、デッドロックを解消するための何らかの措置を講じます。
デッドロックを防ぐにはどうすればよいですか?
(1)「リクエスト アンド ホールド条件」を破棄します:
①静的割り当て。つまり、各プロセスは実行開始時に必要なすべてのリソースに適用されます。
②動的割り当て。つまり、各プロセスは必要なリソースに適用するときにシステムを占有しません。リソース。
(2)「不可譲条件」を破棄する: プロセスがブロックされて待機している間、そのプロセスが占有しているリソースは暗黙的に解放され、他のプロセスによって使用されます。再起動に必要なすべてのリソースのみを取得できます。
(3)「循環待機状態」を破棄します: リソースを規則正しく割り当て、すべてのリソースに番号を付け、希少なリソースには比較的大きな番号を使用し、プロセスはより小さいリソースしか取得できません。番号が大きいリソースのみが、番号が大きいリソースに適用できます
以上がオペレーティング システム インタビューの高頻度テスト ポイントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。