オペレーティング システムのドキュメント分析

1. プロセスとスレッド

1.1 プロセスの概念

1.2 プロセスとプログラムの違いと関係

2. プロセッサのスケジューリング

3. 同期と除外

3.1 同期

3.2 除外

4. デッドロック

(3) これを回避するには、次のような方法があります。

  1. プロセスとスレッド

1.1 プロセスの概念

  1. 特定の独立した機能を備えたプログラムは、特定のデータ収集に対して動的実行プロセスとリソース割り当てプロセスを実行します。
  2. プロセスの要素: コード、データ、プロセス テーブル (プロセス制御ブロック) コード、データ、PT (PCB)。
  3. これはリソース割り当ての基本単位です。
  4. 特性

①動的性:プロセスの数は動的であり、時間の経過とともに状態が変化します。プロセスが作成されると、プロセスは準備完了状態になり、システムがリソースを割り当てて実行状態にスケジュールするのを待ちます。プロセスが実行状態にスケジュールされると、命令の実行が開始されます。プロセスが何らかのイベントの発生を待っているとき (入出力の完了を待っているなど)、プロセスはブロッキング状態に入り、イベントの発生を待ちます。イベントが発生すると、プロセスが起動され、再び準備完了状態になります。

②独立性:各プロセスは独立しており、相互に干渉したり影響を与えたりしにくい。各プロセスには、コード、データ、スタックなどを含む独自のアドレス空間があります。プロセス間の通信は、特定のメカニズム (共有メモリやパイプなど) を通じて行う必要があります。

③同時実行性:マルチプログラミング環境では、複数のプロセスが同時に実行され、各プロセスは独自の独立した実行フローを持ちます。CPU は特定の時間に 1 つのプロセスしか実行できないため、オペレーティング システムは、プロセス間の同時実行性を実現するために、スケジューリング アルゴリズムを使用してどのプロセスを最初に実行するかを決定する必要があります。

④非同期性: プロセス間の実行速度が異なるため、オペレーティング システムは各プロセスが予期された順序で実行できることを保証できません。プロセスは、I/O 操作の完了やシグナルの待機など、実行中に特定のイベントが発生するのを待つ必要があります。この場合、オペレーティング システムは、プロセス間の実行シーケンスを調整するために、セマフォや管理などの対応するメカニズムを提供する必要があります。

1.2 プロセスとプログラムの違いと関係

  1. プロセスは動的であり、プログラムは静的です。
  2. プロセスは一時的なものですが、プログラムは永続的です。
  3. プロセスやプログラムの構成が異なる

①プログラムには主にコードとデータが含まれます。

②プロセスにはコードとデータの他にプロセステーブルがあります。

  1. プロセスとプログラムの間には非常に密接な関係があります

①プログラムは複数回作成されており、異なる処理に対応できます。

②システムコールにより、複数のプログラムからプログラムを利用することができます。

(5) 実行中のプログラムはプロセスと呼ばれます. 各プロセスは独自の空間で実行されます. この空間は比較的独立しており, オペレーティング システムによって保護されています. 各プロセス空間では通常 1 つ以上のスレッドが実行されます.

  1. プロセッサのスケジューリング
  1. これはオペレーティング システムの重要な部分であり、その主な機能は、システム効率とスループット (単位時間あたりに完了できるタスク) を最大化するために、特定の戦略に従ってシステム内のプロセスを利用可能なプロセッサに割り当てることです。処理されるデータはシステム パフォーマンスの重要な指標です)。以下に、プロセッサーのスケジューリングに関する一般的な戦略をいくつか示します。

①先着順スケジューリング(FCFS):プロセスが到着した順にスケジューリングを行い、先に到着したプロセスを先に処理します。

②最短ジョブサービスラインスケジューリング(SJF):プロセスの予想実行時間に基づいてスケジューリングを行い、実行時間の最も短いプロセスから順に実行します。

③優先スケジューリング:各プロセスに優先度を割り当て、優先度に応じてスケジュールを設定し、優先度の高いプロセスから順に実行します。

④ タイムスライスローテーションスケジューリング:プロセッサの時間を複数のタイムスライスに分割し、各プロセスはタイムスライス内で一定時間実行し、タイムスライスを超えると中断して次のスケジューリングを待ちます。

⑤マルチレベルフィードバックキュースケジューリング:優先度に応じて処理を複数のキューに分割し、各キューのタイムスライスサイズが異なり、優先度の高いキューのタイムスライスは短く、優先度の低いキューのタイムスライスは長くなります。プロセスが 1 つのキューでタイム スライスを完了すると、プロセスが完了するまで次のキューに移動されます。

(2) さまざまなシナリオに適したさまざまなスケジューリング戦略 オペレーティング システムは、実際の状況に応じて最適なスケジューリング戦略を選択し、システムの効率とスループットを向上させます。

  1. 共時性と排除

3.1 同期

複数のプロセスまたはスレッドが共有リソースに同時にアクセスすると、データの不整合、競合状態、競合などの同期の問題が発生する可能性があります。これらの問題を回避するには、同期メカニズムを使用してプロセスまたはスレッドの実行順序を調整する必要があります。一般的な同期メカニズムは次のとおりです。

①セマフォ:共有リソースへの同時アクセス数を制限するために使用できます。セマフォには、バイナリ セマフォとテクニカル セマフォの 2 種類があります。バイナリ セマフォは、リソースが利用可能であることを示す 2 つの値のみを取ることができます。カウント セマフォは複数の値を取ることができ、利用可能なリソースの数を示します。プロセスまたはスレッドが共有リソースにアクセスする必要がある場合、セマフォの取得を試みます。セマフォの値が 0 の場合は、セマフォの値が 0 以外になるまで待機します。プロセスまたはスレッドがセマフォを取得すると、共有リソースにアクセスできるようになります。アクセスが完了した後、他のプロセスまたはスレッドがセマフォを取得して共有リソースへのアクセスを継続できるように、プロセスまたはスレッドはセマフォを解放する必要があります。

②条件変数:通常、ミューテックスロックと併用します。条件変数を使用すると、共有リソースの待機中にプロセスまたはスレッドを一時停止し、条件が満たされたときにプロセスまたはスレッドを起動することができます。プロセスまたはスレッドが共有リソースにアクセスする必要がある場合、そのリソースが他のプロセスまたはスレッドによってすでに占有されていることが判明した場合、プロセスまたはスレッドは条件変数を待つことができます。条件変数の条件が満たされると、待機中のプロセスまたはスレッドは、目覚めて実行を続行します。

3.2 除外

共有リソースを複数のプロセスまたはスレッドによる同時アクセスから保護し、競合状態や競合を回避します。排他メカニズムは、データの不整合や誤った結果を避けるために、共有リソースの一貫性と完全性を保護するためによく使用されます。一般的な除外メカニズムには、ミューテックス ロック、読み取り/書き込みロックなどが含まれます。

① ミューテックスロック: 常に 1 つのプロセスまたはスレッドだけが共有リソースにアクセスできるようにすることができます。プロセスまたはスレッドが共有リソースにアクセスする必要がある場合、ミューテックスロックを要求します。ロックが既に別のプロセスまたはスレッドによって保持されている場合、プロセスまたはスレッドがミューテックス ロックを取得すると、共有リソースに安全にアクセスできるようになります。同様に、アクセスが完了した後、リソースを解放する必要があります。

② 読み取り/書き込みロック: 同時実行パフォーマンスを向上させるために、読み取り操作と書き込み操作を区別する共通の排他メカニズム。読み取り操作には排他は必要なく、複数のプロセスまたはスレッドは同時に読み取り操作を実行できます。書き込み操作には排他が必要ですが、書き込み操作を実行できるのは 1 つのプロセスまたはスレッドだけです。プロセスまたはスレッドが書き込み操作を実行する必要がある場合、書き込みロックを要求します。書き込みロックが別のプロセスまたはスレッドによってすでに保持されている場合は、書き込みロックが解放されるまで待機します。プロセスまたはスレッドが書き込みロックが設定されている場合、書き込み操作を実行できます。プロセスまたはスレッドは読み取り操作を実行する必要がある場合、読み取りロックを要求します。書き込みロックがすでに保持されている場合は、書き込みロックが解放されるまで待機します。読み取りロックが保持されていない場合は、読み取りロックを取得して読み取り操作を実行できます。読み取り/書き込みロックでは、書き込みロックには排他的効果があり、読み取りロックには共有効果があります。

  1. デッドロック
  1. デッドロックは、同時プログラミングで非常に一般的な問題であり、複数のプロセスまたはスレッドが互いのリソースを待機しているときに発生し、すべてのプロセスまたはスレッドが実行を続行できなくなります。
  2. デッドロックの発生も必須条件であり、相互排他条件、リクエストアンドホールド条件、非剥奪条件、ループ待ち条件が挙げられる。

① 相互排他条件: 各リソースは一度に 1 つのプロセスまたはスレッドによってのみ保持できます。複数のプロセスまたはスレッドが同時に相互に排他的なリソースを要求した場合、そのリソースを取得できるのは 1 つのプロセスまたはスレッドだけです。

② 要求と保持の条件: プロセスまたはスレッドがリソースを保持した後、他のリソースを要求し続け、これらのリソースが他のプロセスまたはスレッドによって保持される可能性があります。プロセスまたはスレッドがリソースを保持しているが、別のリソースへの要求が拒否された場合、元のリソースは解放せずに保持したままになります。

③非剥奪条件:既に割り当てられたリソースを強制的に剥奪することはできません。プロセスまたはスレッドがすでにリソースを保持している場合、他のプロセスまたはスレッドはそのリソースを強制的に奪うことはできません。

④ループ待ち状態:複数のプロセスまたはスレッドが待ちループを形成しており、各プロセスまたはスレッドが他のプロセスまたはスレッドが保持するリソースを待っています。

  1. これを回避するには、次の方法を使用できます。

①複数の共有リソースの利用を避ける

② リソース優先度の導入、タイムアウト機構の導入など、ループ待ち状態を解消します。

③リソースを一定の順序で割り当てる、リソース割り当て図の手法を使用するなど、デッドロックを防止します。

④ デッドロック検出アルゴリズム、デッドロック回復アルゴリズムなどを使用して、デッドロックを検出および回復します。

*上記の対策によりデッドロックの問題を回避または解決できますが、これらの対策によりシステムの複雑さとオーバーヘッドが増加することに注意してください。したがって、システムを設計および実装するときは、デッドロックの問題を十分に考慮し、デッドロックの問題を回避および解決するために適切な方法と戦略を採用する必要があります。

おすすめ

転載: blog.csdn.net/LforikQ/article/details/130552816