「コンピューターの世界を探検する: 基本概念とプロセスの機能」

ここに画像の説明を挿入

序文

プログラマーとして、コンピューターの構成とコンピューターの仕組みを理解することは非常に重要です。コンピューターを理解することによってのみ、コードを通じてコン​​ピューターの特性をより適切に活用できるからです。今日は、コンピューターの中核の 1 つであるプロセスについて説明します。
ここに画像の説明を挿入

プロセスとは何ですか

プロセスは、コンピューター システム上で実行されているプログラムのインスタンスです。オペレーティング システムでは、プロセスは、独自のメモリ空間、プログラム コード、実行状態を持つ独立した実行単位です。プロセスには 1 つ以上のスレッドを含めることができ、各スレッドは異なるタスクを実行しますが、プロセスのリソースとコンテキストを共有します。

各アプリケーション プログラムが最新のオペレーティング システム上で実行される場合、オペレーティング システムは、あたかもそのプログラムのみがシステム上で実行されているかのように抽象化を提供し、すべてのハードウェア リソースがこのプログラムによって使用されます。この錯覚は、おそらくコンピューター サイエンスで最も重要で成功した概念の 1 つであるプロセスの概念を抽象化することによって実現されます。

プロセスは、オペレーティング システムによる実行中のプログラムの抽象化です。言い換えれば、プロセスはプログラムの実行中のプロセスとみなすことができます。同時に、プロセスはオペレーティング システム内でリソース割り当ての基本単位でもあります。オペレーティングシステムによって。

プロセスをどう説明するか

コンピュータではプロセスの性質を構造体(C言語では構造体)で記述しており、この構造体のことをプロセスコントロールブロック(PCB)とも言います。

プロセス制御ブロック (PCB) は、実行中のプロセスまたはタスクのステータス情報と、プロセス ID、プログラム カウンター、レジスタ、メモリ管理情報など、プロセスまたはタスクに必要なその他の情報を含むデータ構造です。PCB は通常、オペレーティング システム カーネルによって維持されます。オペレーティング システム カーネルは、プロセスとオペレーティング システムの間の仲介者として機能し、オペレーティング システムによるプロセスの動作とリソース割り当ての管理を支援し、複数のプロセスの同時実行と独立した動作を保証します。各プロセスには独立した PCB があり、カーネルはプロセスを切り替えるときに、現在のプロセスの PCB を保存し、次のプロセスの PCB をロードして、CPU の制御を次のプロセスに切り替えます。

基礎となるプロセスでは、ノードは組織化する PCB 線形テーブル、検索ツリーなどです。

プロセスのプロパティ

1. プロセス識別子

プロセス識別子 (プロセス識別子、PID) は、オペレーティング システムで実行中のプロセスを一意に識別するために使用されるデジタル識別子です。各プロセスには、オペレーティング システム内で一意の PID があります。

PID は負ではない整数であり、ほとんどのオペレーティング システムで一意です。プロセスが作成されると、オペレーティング システムによって新しい PID が割り当てられます。この PID は、プロセスが終了するまで、プロセスの存続期間全体にわたって一定のままです。

プロセス識別子の機能は、オペレーティング システムがプロセスの動作を管理および制御できるように、オペレーティング システム内のプロセスを一意に識別することです。

2. メモリポインタ

ここに画像の説明を挿入

オペレーティング システムでは、各プロセスは独自の独立した仮想アドレス空間を持ち、メモリ ポインタはプロセスのメモリにアクセスして管理するために使用される変数またはデータ構造です。メモリ ポインタは、そのアドレスでデータの読み取りまたは書き込みに使用できるメモリ アドレスを格納します。

これらのメモリ ポインタの値は、プログラムの制御フローやメモリ管理の動作に従って、プロセスの実行中に継続的に変化します。これらにより、プロセスはコード領域、ヒープ領域、スタック領域、データ領域などのさまざまなメモリ領域にアクセスし、プログラムの実行やデータの保存とアクセスを実現できます。

プロセスのメモリ ポインタはそれ自身の仮想アドレス空間内でのみ有効であり、他のプロセスは他のプロセスのメモリ ポインタに直接アクセスしたり変更したりすることはできないことに注意してください。オペレーティング システムは、アドレス マッピングとアクセス制御メカニズムを通じてプロセス間のメモリ分離と保護機能を提供し、各プロセスのメモリ空間が独立していて安全であることを保証します。

3. ファイル記述子テーブル

ファイル記述子テーブルは、プロセスによって開かれたファイルを追跡および管理するためにオペレーティング システムで使用されるデータ構造です。各プロセスには独自の独立したファイル記述子テーブルがあり、現在のプロセスによって開かれたファイルまたはその他の I/O リソースに関する情報が記録されます。

ファイル記述子は、開いているファイルまたはその他の I/O リソースを表すために使用される整数です。オペレーティング システムは、ファイル記述子を使用して、I/O 操作、データ転送、およびリソース管理のためにプロセスと開いているファイルの間の関連付けを追跡します。

特定のファイル記述子テーブルの構造と実装はオペレーティング システムによって異なる場合がありますが、通常、オペレーティング システムはファイル記述子を格納するためにプロセスごとに固定サイズの配列を維持します。この配列のインデックスはファイル記述子の値であり、対応する開いているファイルはインデックスを通じてアクセスおよび操作できます。

4. プロセスのステータス

オペレーティング システムでは、プロセスはさまざまな状態になることがあり、これはプロセスの現在の状況または動作の段階を表します。一般的なプロセス状態は次のとおりです。

  1. 作成済み: プロセスが作成されたばかりの場合、プロセスは作成された状態になります。このフェーズでは、オペレーティング システムがプロセスに必要なリソースを割り当て、プロセスの初期状態を設定します。

  2. 準備完了: プロセスは、実行に必要なすべてのリソースを取得し、オペレーティング システムが CPU タイム スライスを割り当てるのを待っているときに準備完了状態になります。準備完了状態のプロセスは、スケジューラが 1 つ以上の使用可能な CPU 上で実行されるのを待ちます。

  3. 実行中: 実行状態のプロセスは、現在命令を実行していることを意味します。一度に 1 つの CPU 上で実行できるプロセスは 1 つだけであり、そのプロセスが現在実行中のプロセスとしてスケジュールされます。プロセスは、その命令を実行するために、実行状態でしばらく過ごすことができます。

  4. ブロッキング: プロセスは、実行中に入出力の待機、リソース割り当ての待機、シグナルの待機などの特定のイベントに遭遇すると、ブロックされた状態になります。ブロッキング状態では、プロセスは実行を一時停止し、準備完了状態に再度入る前に特定の条件が満たされるのを待ちます。

  5. 終了: 実行中のプロセスは、実行完了後、またはエラーや終了信号などの例外的な状況により終了する場合があります。プロセスが終了状態になると、割り当てられたメモリや開いているファイルを含むすべてのリソースが解放されます。

5. 優先順位

プロセス優先度は、プロセスのスケジューリング順序を決定するためにオペレーティング システムによって使用されるメカニズムであり、限られたリソース (CPU タイム スライスなど) をめぐって競合するときにプロセスが割り当てられる優先度と順序を決定します。プロセスごとに異なる優先度を持つことができ、優先度の高いプロセスはより多くの CPU 時間を取得して実行を高速化します。

ほとんどのオペレーティング システムでは、通常、プロセスには数値的な優先度が割り当てられます。この数値は範囲内の整数であり、通常、値が大きいほど優先度が高くなります。たとえば、Windows システムの優先順位の範囲は 0 ~ 31 で、Linux システムの優先順位の範囲は -20 ~ +19 です。

プロセスの優先度のレベルは、プロセスのスケジュールに影響を与える可能性があります。スケジューラは優先度の高いプロセスを優先し、より多くの CPU 時間をそれらのプロセスに割り当てます。これは、優先度の高いプロセスはより頻繁に実行される一方、優先度の低いプロセスは比較的まれに実行される可能性があることを意味します。

プロセスの優先順位を調整することで、さまざまなプロセスのニーズを満たすために、より的を絞った方法でシステム リソースを割り当て、スケジュールすることができます。たとえば、ミッション クリティカルなアプリケーションやリアルタイム アプリケーションの場合、優先順位を高く設定して、CPU リソースがタイムリーに割り当てられるようにすることができます。

プロセスの優先度はスケジューラにとっての単なる参考指標であり、実際のスケジューリングはプロセスのステータスやプロセスが待機しているリソースなどの他の要因にも影響されることに注意してください。また、プロセスの優先度に過度に依存すると、他のプロセスの実行時間が非常に短くなり、システムの公平性や安定性に影響を与える可能性があるため、プロセスの優先度を設定する際には十分な考慮が必要です。

要約すると、プロセスの優先度は、オペレーティング システムがプロセスのスケジュール順序を決定するために使用するメカニズムであり、優先度の高いプロセスはより多くの CPU 時間を取得します。プロセスの優先度を調整することで、より柔軟なシステムリソースの割り当てやスケジューリングを実現できます。

6. コンテキスト

プロセスのコンテキストとは、オペレーティング システムがプロセスをスケジュールおよび実行するときに保存および復元する必要があるプロセスに関連する状態情報を指します。この状態情報には、プロセスのレジスタ内容、プログラム カウンタ、スタック ポインタ、およびプロセスの実行に関連するその他のデータが含まれます。

オペレーティング システムでは、プロセスの実行がスケジュールされると、以前の実行状態からコンテキストが復元され、実行が継続されます。オペレーティング システムは、別のプロセスへの切り替えを決定すると、現在のプロセスのコンテキストを保存し、別のプロセスのコンテキストをロードして復元し、次回プロセスが実行されるときに中断したところから実行を継続できるようにします。前回。

プロセスのコンテキストには通常、次の重要な部分が含まれます。

  1. レジスタ内容:汎用レジスタ、プログラムカウンタ(PC)、スタックポインタ(SP)など これらのレジスタは、プロセスが中断または切り替えられる前の実行状態を保持するため、再開時に実行を正確に継続できます。

  2. メモリ管理情報: ページ テーブル、セグメント テーブル、またはメモリ管理に関連するその他のデータ構造を含みます。この情報は、プロセスのメモリ レイアウトと権限、およびプロセスに関連付けられた物理メモリ ページまたは仮想メモリ ページ間のマッピング関係を説明します。

  3. ファイル記述子テーブル: ファイル記述子、ファイル状態フラグ、オープン ファイル リストなどを含む、プロセスおよび I/O リソースによって開かれたファイルに関する情報を記録します。ファイル記述子テーブルを保存すると、プロセスが再開したときに開いているファイルを適切に管理できるようになります。

  4. プロセスの状態: プロセスの現在の状態 (実行中、準備完了、ブロック済みなど) を記録します。プロセスの状態を保存すると、スケジュール時にプロセスの優先順位と実行順序を決定できます。

プロセスのコンテキストの保存と復元は、プロセスの切り替えとスケジューリングのためのオペレーティング システムの重要な操作です。オペレーティング システムは、別のプロセスに切り替えることを決定すると、現在のプロセスのコンテキストを保存し、制御を他のプロセスに渡し、そのコンテキストを復元します。このようにして、複数のタスクを同時に実行できるため、複数のプロセスがシステム リソースを共有し、特定のスケジューリング戦略に従って実行できます。

7. 請求情報

オペレーティング システムでは、プロセス アカウンティング情報は、プロセスの実行とリソースの使用状況に関する統計を記録および追跡するために使用されます。この情報は、パフォーマンス分析、リソース管理、システム監視の目的で使用できます。

プロセスのアカウンティング情報には通常、次のものが含まれます。

  1. プロセス実行時間: 合計実行時間、ユーザー モード実行時間、カーネル モード実行時間を含む、CPU 上のプロセスの実行時間を記録します。これらのデータは、プロセスの CPU 使用率を計算し、プロセスの実行効率を評価するために使用できます。

  2. プロセス待機時間: プロセスが準備完了状態で CPU タイム スライスを待機した時間を記録します。これを使用して、プロセス待機時間の分布を分析し、潜在的なリソースのボトルネックを発見し、スケジューリング アルゴリズムを最適化できます。

  3. プロセスのスケジュール回数: プロセスの実行がスケジュールされた回数を記録します。これは、プロセスの実行優先度、スケジューリング アルゴリズムの有効性、およびプロセスの応答性を評価するために使用できます。

  4. プロセスによって使用されるシステム リソース: メモリ使用量、開いているファイルの数、ネットワーク接続の数など、プロセスによって使用されるさまざまなシステム リソースを記録します。これは、プロセスによるシステム リソースの過剰使用や乱用を防ぐためのリソース管理とスロットリングに使用できます。

  5. プロセス エラーと例外: プロセスで発生したエラー、例外、中断をログに記録します。これはトラブルシューティングやエラー処理に使用でき、プロセス実行時の問題の分析と解決に役立ちます。

その中で、プロセスのステータス、優先度、コンテキスト、およびアカウンティング情報は、プロセス スケジューリングに関連する属性であり、プロセスの中核的な属性でもあります。

メモリ割り当て

プロセス メモリ割り当てとは、プロセスが必要なデータとコードを保存してアクセスできるように、オペレーティング システムがプロセスにメモリ領域を割り当てるプロセスを指します。プロセス メモリの割り当てには、プロセス アドレス空間の分割と仮想メモリの管理という 2 つの側面が含まれます。

  1. プロセス アドレス空間の分割
    プロセス アドレス空間は、プロセスがアクセスできる仮想メモリ空​​間を指し、通常は次の部分に分割されます。
  • コードセグメント: プログラムコードを格納します。
  • データセグメント: 初期化されたグローバル変数と静的変数を格納します。
  • BSS セグメント: 初期化されていないグローバル変数と静的変数を格納します。
  • ヒープ領域: malloc などの関数によって割り当てられるメモリなど、動的に割り当てられるメモリを格納します。
  • スタック領域:関数呼び出し時の一時変数や戻りアドレスなどの情報を格納します。
  1. 仮想メモリ管理
    仮想メモリは、オペレーティング システムがアドレス変換テクノロジを通じてプロセスに提供する抽象メモリを指します。そのため、プロセスから見えるメモリ空間は、必ずしも実際の物理メモリに対応するとは限りません。仮想メモリの管理には主に次の側面が含まれます。
  • ページ置換: 物理メモリが不十分な場合、オペレーティング システムはプロセス データの一部を物理メモリからハードディスクにスワップアウトして、他のプロセスが使用できるように物理メモリ領域を解放する必要があります。このプロセスはページ置換と呼ばれます。
  • ページング: ページングとは、アクセスが要求された仮想ページをシステムが管理するプロセスを指します。プロセスが仮想ページにアクセスするとき、ページがまだ物理メモリにない場合は、ハード ディスクからページを取得して物理メモリにロードする必要があります。このプロセスはページングと呼ばれます。
  • ページ サイズ: ページ サイズは、プロセスの仮想メモリ空​​間が分割される一連の等しいサイズのブロックです。一般的なページ サイズには、4KB、8KB などが含まれます。
  • ページ テーブル: ページ テーブルは、仮想アドレスと物理アドレスの対応を記録するデータ構造です。プロセスが仮想アドレスにアクセスする場合、ページ テーブルを通じて仮想アドレスを物理アドレスに変換する必要があります。

プログラムで取得されるメモリアドレスは実際の物理メモリアドレスではなく、抽象化層を経た仮想アドレスです。

メモリ上のどのアドレスのデータにもアクセスする速度は非常に速く、時間はほぼ同じです。配列への添字アクセスが現れるのは、まさにこのメモリの特性のためです。現在のプロセスのコードにバグがある場合、アクセスされたメモリが範囲外になり、他のプロセスに影響を与える可能性があります。

プロセスによって使用されるメモリ空間を「分離」すると、仮想アドレス空間が導入されます。コードは実際の物理アドレスを直接使用するのではなく、仮想アドレスを使用するようになり、オペレーティング システムと専用ハードウェア デバイス (MMU) が仮想アドレスを物理アドレスに変換する役割を果たします。

ここに画像の説明を挿入
どのプロセスにバグがあるのか​​、どのプロセスがクラッシュするのか、他のプロセスには影響を与えません。

並列処理と同時実行

並列処理とは何ですか

並列処理とは、複数のタスクまたは操作を同時に実行できる機能を指します。コンピュータの分野、特にマルチコア CPU や分散システムでは、並列処理を使用してタスクの実行速度を高速化し、システムの計算能力を向上させることができます。並列小宇宙では同時に 2 つのコア上のプロセスが同時に実行されます

並列処理では、複数のタスクまたは操作が異なる処理ユニットまたはコンピューティング リソースに割り当てられ、同時に実行されます。これらの処理ユニットは、独立した CPU コア、マルチコア CPU 内の異なるコア、異なるコンピュータ ノードまたはサーバーなどであってもよい。各処理ユニットは独立してタスクを実行し、それらの間で計算やデータ操作を並行して実行できます。

並列処理は、科学計算、大規模データ処理、画像およびビデオ処理など、高いパフォーマンスと計算能力を必要とするタスクを解決するためによく使用されます。問題をより小さなサブ問題に分割し、各サブ問題を異なる処理ユニットに割り当てて並列処理することにより、タスクの実行時間を大幅に短縮できます。

同時実行とは何ですか
同時実行性とは、システムまたはプログラムによる複数の独立したタスクまたは操作の同じ期間内での実行を指します。コンピュータの分野において、同時実行とは複数のタスクを同時に処理する仕組みのことで、タスクの切り替えやスケジューリングによってタスクの交互実行を実現します。

同時実行の主な目的は、システムの効率とリソース使用率を向上させることです。複数のタスクを同時に処理することにより、システムは CPU、メモリ、およびその他のリソースをより完全に活用して、ユーザーのニーズによりよく対応し、全体のスループットを向上させることができます。

同時実行性は、シングルコア CPU やシングル スレッドなどの単一の処理ユニット上で実装することも、マルチコア CPU、マルチスレッド システムや分散システムなどの複数の処理ユニット間で実装することもできます。同時実行性を実現する具体的な方法には、タイム スライス ラウンドロビン スケジューリング、スレッド切り替え、プロセス切り替えなどが含まれます。

並列処理と同時実行の違い

同時実行はマクロ レベルで同時、シリアルはマイクロ レベル
で同時実行されます。並列はマクロ レベルで同時実行されますが、マイクロ レベルでは異なるコア上で同時に実行されます。

  1. 意味:
  • 並列 (Parallel): 複数のタスクの同時実行を指します。各タスクは複数の処理ユニットで同時に実行され、各処理ユニットは独立した CPU コアまたはマルチコア CPU 内のコアになります。
  • 同時実行性: 複数のタスクを同時に処理すること、複数のタスクを交互に実行すること、タイム スライスまたはタスク スケジューリングを通じて複数のタスクを切り替えることを指します。
  1. 実装方法:
  • 並列処理: 複数のタスクが同時に実行され、各タスクは独立した処理装置上で並行して実行されます。
  • 同時実行: 複数のタスクが交互に実行され、各タスクが同じ処理ユニット上で順番に実行されます。タスクの同時実行を実装するには、タイム スライスまたはタスク切り替えが使用されます。
  1. 目的:
  • 並列処理: 複数のタスクを同時に実行することにより、全体的な計算能力と実行速度が向上し、タスクの完了が加速されます。
  • 同時実行性: タスクの交互の実行とスケジューリングを通じて、複数のタスク間でリソースの公平な共有が実現され、システムの効率とスループットが向上します。
  1. 実現方法:
  • 並列処理: マルチコア CPU、マルチ CPU、または分散コンピューティングを通じて、異なるタスクが異なる処理ユニットに割り当てられ、同時に処理されます。
  • 同時実行性: タスク間の交互の実行は、タスクのスケジューリング、スレッドまたはプロセスの切り替えによって実現されます。
  1. コンテキストスイッチ:
  • 並列処理: 各タスクは独立した処理装置で実行されるため、コンテキスト切り替えのオーバーヘッドはありません。
  • 同時実行性: タスク間で実行を切り替える必要があるため、タスクの実行コンテキスト情報の保存と復元を含むコンテキスト切り替えのオーバーヘッドが発生します。

おすすめ

転載: blog.csdn.net/m0_73888323/article/details/132071826