オペレーティング システム - 構造、プロセス、スレッド
開発
2023-05-08 07:59:22
訪問数: null
構造
- オペレーティング システム サービス:
- 基本サービス: ユーザー インターフェイス、プログラム実行、I/O 操作、ファイル システム、通信、エラー検出
- 付加価値サービス: リソース割り当て、統計、保護、セキュリティ
- オペレーティング システムのユーザー インターフェイス: CLI\GUI
- システム コール: API (アプリケーション プログラミング インターフェイス) を介してアクセスされるプログラム
- 各システム コールには固有の番号があり、オペレーティング システムはシステム コール番号テーブルを介してシステム コール インターフェイスを管理します (Linux の「syscalls.h」または「unistd.h」)。
- システム コールでパラメータを渡すには、レジスタ、ブロック、スタックの 3 つの方法があります。
- システム プログラム: カーネルの一部ではなく、オペレーティング システムの一部
- オペレーティング システムの設計と実装: ハードウェアの選択とシステム タイプの影響を受ける
- OS 構造: シンプル、階層、マイクロカーネル (ユーザー カーネル間のオーバーヘッドの増加)、モジュール (オブジェクト指向アプローチを使用)、ハイブリッド
- カーネル: ハードウェアの上とシステム コール インターフェイスの下のすべて
プロセス
- プロセスの概念: 実行中のプログラム (パッシブ エンティティ)、アクティブ エンティティ
- プログラムはメモリにロードされ、プロセスになります
- 構造/式: コード セグメント、ヒープ、スタック、データ セグメント
- オペレーティング システムは、コントロール テーブルを通じてヒープ システム内の各リソースを管理します。
- データ構造: PCB: プロセス制御ブロック (プロセス ID、プロセス ステータス、プロセス カウンタ、CPU レジスタ、CPU スケジューリング情報、メモリ管理、アカウンティング、I/O ステータス)
- プロセス状態
- プロセスのスケジューリング
- プロセス スケジューリング キュー: レディ キュー、デバイス キュー
- 次のイベントが発生すると、実行中状態は準備完了状態になります。
- プロセスは I/O 要求を送信し、I/O キューに配置されます
- 子プロセスを作成し、子プロセスが終了するのを待ちます
- CPU の解放を強制するための割り込みを待機しています
- スケジューラー (スケジューラー)
- 長期 (ジョブ) スケジューラ: ストレージ デバイスのバッファ プールから準備完了キューへのロードを選択します (I/O スケジューリング)
- 中期スケジューラ (タイムシェアリング システム): プロセスはメモリから移動されます。つまり、CPU の競合から解放され、マルチプログラミングの程度が減少し、タイムシェアリング システムは中期スケジューラを追加します。
- 短期スケジューラ (CPU スケジューラ): 実行可能キューから CPU を選択します。
- コンテキストの切り替え: 別のプロセスに切り替えて、現在のプロセス状態を保存し、別のプロセス状態を復元します。これは、ハードウェア サポート (メモリ速度、メモリ容量など) に応じて異なります。
- 複数のレジスタ セットを提供し、レジスタ セット ポインタのみを変更してコンテキスト オーバーヘッドを削減する
- プロセス操作
- create fork(): リソース共有、実行、アドレス空間オプション
- 手順: プロセス制御ブロックの作成、メモリの割り当て、実行可能ファイルのロード、プログラムの初期化
- abort() を終了します
- 子プロセスが、割り当てられたリソースを超えて使用しています
- 親プロセスの終了が子プロセスの終了につながる (カスケード終了)
- ゾンビ プロセス: プロセスは終了しますが、親プロセスが待機するのは役に立ちません。
- プロセス通信
- システム内で同時に実行されるプロセスは、独立して (データを共有せずに) 動作することも、協調して (共有データを使用して) 動作することもできます。
- メッセージパッシング: カーネルの介入が必要、データ量が少ない、実装が簡単
- 通信回線ロジックの実装: 直接または間接通信、同期または非同期通信、自動または表示バッファリング。
- 直接通信: 明示的に名前が付けられた通信は、送信者を受け入れます。対称アドレッシング (1 対 1) (行は 2 つのプロセスにのみ関連し、2 つのプロセス間は 1 つの行のみに関連する)、非対称アドレッシング (多対 1)
- 間接通信: ポート/メールボックス経由で送信、回線は複数のプロセスに関連付け可能
- ブロッキング (同期) 送信: 送信プロセスは送信が成功するまでブロックされ、受信プロセスはメッセージが利用可能になるまでブロックされます。
- バッファ: 通信プロセスによって交換されるメッセージは、一時キューであるバッファに存在します。
- メッセージ キューの実装方法: ゼロ容量、限定容量、無制限容量
- Windows でのメッセージングは LPC になります
- 共有メモリ: カーネルの介入は不要、高速
- 共有メモリ領域の実装: 無制限のバッファ、限定されたバッファ
- クライアントとサーバーのシステム通信
- ソケット ソケット: IP アドレスとポート番号で構成されます
- リモート プロシージャ コール RPC: 各独立したリモート コール プロシージャには、通信の詳細を隠すスタブ (スタブ) があります。サブルーチンまたは関数の呼び出し、共通データ構造の転送
- リモート メソッド呼び出し RMI: リモート オブジェクトのメソッドを呼び出し、オブジェクトを転送できます
- パイプライン PIPE: 通信中間媒体はファイル FIFO 実装です
- 匿名パイプ: 半二重、一方向通信。親子プロセスと兄弟プロセスが利用可能
糸
- 概要: 各スレッドは独立したスケジューリング オブジェクトであり、プロセスは複数のスレッドを持つことができます
- スレッドの作成 pthread_create(): スタックのコピー、登録
- スレッド共有: コード セグメント、グローバル変数、オープン ファイル識別子、作業環境
- マルチスレッドの利点: 高速応答、リソース共有、経済性、マルチプロセッサ アーキテクチャの利用
- マルチスレッドモデル
- ユーザー スレッド: カーネル サポート、ユーザー レベルのスレッド ライブラリ管理、カーネル管理なし
- カーネル スレッド: カーネル管理スケジューリング メンテナンス
- マッピング: ユーザースレッドとカーネルスレッド間の接続
- スレッド ライブラリ: 実装方法: 組み込みカーネル、非組み込みカーネル
- マルチスレッドの問題
- スレッドのキャンセル: 非同期 (1 つのスレッドがターゲット スレッドを即座に終了)、遅延キャンセル (一定のチェック)
- 信号処理: 同期 (内部信号)、非同期 (外部) 信号
- ハンドラー: デフォルトのシグナルハンドラー、ユーザー定義のシグナルハンドラー
- スレッド プール: ユーザー スレッドとカーネル スレッドは、多対多および 2 レベル モデルでカーネル スレッドの数を維持するために通信する必要があります。
- LWP: 仮想プロセッサ
- スケジューラのアクティブ化: ユーザー スレッド ライブラリとカーネル通信を解決します。このメカニズムは upcall と呼ばれます。
転載: blog.csdn.net/qq_56061892/article/details/126139231