オペレーティング システム - 構造、プロセス、スレッド

構造

  • オペレーティング システム サービス:
    • 基本サービス: ユーザー インターフェイス、プログラム実行、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 アドレスとポート番号で構成されます
      • TCP: 接続指向のソケット
      • UDP: コネクションレス ソケット
    • リモート プロシージャ コール RPC: 各独立したリモート コール プロシージャには、通信の詳細を隠すスタブ (スタブ) があります。サブルーチンまたは関数の呼び出し、共通データ構造の転送
    • リモート メソッド呼び出し RMI: リモート オブジェクトのメソッドを呼び出し、オブジェクトを転送できます
  • パイプライン PIPE: 通信中間媒体はファイル FIFO 実装です
    • 匿名パイプ: 半二重、一方向通信。親子プロセスと兄弟プロセスが利用可能
    • 名前付きパイプ: 任意のスコープ

  • 概要: 各スレッドは独立したスケジューリング オブジェクトであり、プロセスは複数のスレッドを持つことができます
    • スレッドの作成 pthread_create(): スタックのコピー、登録
    • スレッド共有: コード セグメント、グローバル変数、オープン ファイル識別子、作業環境
    • マルチスレッドの利点: 高速応答、リソース共有、経済性、マルチプロセッサ アーキテクチャの利用
  • マルチスレッドモデル
    • ユーザー スレッド: カーネル サポート、ユーザー レベルのスレッド ライブラリ管理、カーネル管理なし
    • カーネル スレッド: カーネル管理スケジューリング メンテナンス
    • マッピング: ユーザースレッドとカーネルスレッド間の接続

  • スレッド ライブラリ: 実装方法: 組み込みカーネル、非組み込みカーネル
  • マルチスレッドの問題
    • fork() と exec() を呼び出す
    • スレッドのキャンセル: 非同期 (1 つのスレッドがターゲット スレッドを即座に終了)、遅延キャンセル (一定のチェック)
    • 信号処理: 同期 (内部信号)、非同期 (外部) 信号
      • ハンドラー: デフォルトのシグナルハンドラー、ユーザー定義のシグナルハンドラー
      • 送信信号方式は信号の種類によって異なります
    • スレッド プール: ユーザー スレッドとカーネル スレッドは、多対多および 2 レベル モデルでカーネル スレッドの数を維持するために通信する必要があります。
      • LWP: 仮想プロセッサ

    • スケジューラのアクティブ化: ユーザー スレッド ライブラリとカーネル通信を解決します。このメカニズムは upcall と呼ばれます。

おすすめ

転載: blog.csdn.net/qq_56061892/article/details/126139231