[Linux]-プロセスの概要

1.オペレーティングシステムによるプロセスの管理

1.プロセスを理解する

(1)概念
簡単に言うと、プロセスとは実行中のプログラムであり、ディスクからメモリにプログラムをロードすることを指します。
ただし、具体的には、プロセスは実行可能プログラムコードに限定されません(コードセグメントと呼びます)。通常、プロセスには、オープンファイル、中断された信号、カーネルの内部データ、処理ステータス、メモリマッピングを含む1つ以上のメモリアドレススペース、1つ以上の実行スレッドなど、他のリソースも含まれます。グローバル変数などを格納するためのデータセグメント したがって、プロセスは、順序付けされた命令+データ+リソースのセットです。実際、プロセスは実行されているプログラムコードのリアルタイムの結果です

(2)プロセス内のアクティブオブジェクト
スレッドは、プロセス内のアクティブオブジェクトです。各スレッドには、独立したプログラムカウンター、プロセススタック、および一連のプロセスレジスタがあります。カーネルはスレッドではなくオブジェクトスケジュールします現在のオペレーティングシステムでは、プロセスに複数のスレッドを含めることができますが、Linuxの場合、スレッドは単なる特別なプロセスです。

(3)2つ以上の異なるプロセスがあります。プロセスは同じプログラムを実行します。プロセスは、
作成されると存続し始めます。Linuxシステムでは、fork()が呼び出され、既存のプロセスをコピーして完全に新しいプロセスを作成します。呼び出しの終わりに、戻り点と同じ位置で、親プロセスが実行を再開し、子プロセスが実行を開始します。fork()システムコールはカーネルから2回戻ります。1回は親プロセスに戻り、もう1回は新しく作成された子プロセスに戻ります。通常、新しいプロセスは、新しいプログラムや異なるプログラムをすぐに実行するために作成され、次にexec()を呼び出して新しいアドレススペースを作成します。

2.オペレーティングシステムがプロセスを制御する方法

オペレーティングシステムはPCBを介してプロセスの関連属性を記録します
(1)PCB
PCB の最初の知人はプロセス記述子とも呼ばれ、どちらも<linux / sched.h>ファイルで定義されているtask_structタイプです。プロセス記述子には、特定のプロセスに関するすべての情報が含まれています。
task_structは比較的大きく、32ビットマシンでは約1.7KBあります。プロセスデータ記述子は、実行中のプログラムの完全な記述に含めることができる。アドレス空間の彼の状態は、開いているファイル、プロセス、ペンディング信号、プロセス、その他の付加情報、以下のように:
ここに画像の説明を挿入
また、次の図に示すように、カーネルはプロセスのリストをタスクキューと呼ばれる二重循環リンクリストに格納します。Linuxは、slabディストリビューターを通じてtask_struct構造を配布します。
ここに画像の説明を挿入

(2)プロセスの生成とリサイクル

プロセスが新たに生成される場合、PCB構造が最初に割り当てられ、次にプロセス本体が生成される必要があります。カーネルは各プロセスを一意のプロセス識別値またはPIDで識別します。PIDは数値です。最大値はデフォルトで32768に設定されています(short intの最大値)。カーネルは各プロセスのPIDを独自のプロセスに保存します記述子内。
プロセスの最後に、最初に本体が解放され、次にPCBの構造が解放されます。終了コードなど、ここでPCBを解放するために必要な特定の条件があるため、ゾンビプロセスと孤立プロセスと呼ばれるものがあります。
ゾンビプロセスプロセス本体は解放されますが、PCBは残ります。ゾンビプロセスの存在は有害です。前に説明したように、PCBはメモリ内の1.7kのスペースを占有します。多数のゾンビプロセスが存在すると、メモリがいっぱいになりすぎます。
孤立プロセス:親プロセスは終了しましたが、子プロセスは終了していません。システムは、すべての孤立プロセスをINITの下にマウントします。

第二に、プロセスの状態

1. 3つの状態
最も単純なプロセスは、実行中、準備完了、ブロッキング状態を含む3つの状態に分けることができます。実行とは、CPUがプロセス内の命令を実行していることを意味し、準備とは、CPUがプロセスを実行するのを待つことを意味し、ブロッキングとは、I / Oイベントの発生を待つことを意味します。それらの関係を次の図に示します
ここに画像の説明を挿入
。2. 5つの状態
(1)TASK_RUNNING(実行中):実行キューで実行中または実行待機中のいずれかであることを示します。これは、ユーザー空間で実行可能なプロセスの唯一の状態であり、この状態は、カーネル空間で実行されているプロセスにも適用できます。
(2)TASK_INTERRUPTIBLE(割り込み可能):プロセスはブロックされ、特定の条件に到達してプロセスの状態を実行中に設定するのを待ちます。
(3)TAK_UNINREREUPTIBLE(中断なし):信号を受信して​​も、ウェイクアップしないか、操作を開始する準備ができていません。この状態は、中断可能な状態と同じです
(4)_TASK)TRACED:他のプロセスによって追跡されるプロセス
(5)_TASK_STOPPED ):運用しないとプロセスは運用できません。
具体的な遷移図は次のとおりです
ここに画像の説明を挿入
。3. 7つの状態ここに
画像の説明を挿入
ここに画像の説明を挿入
ここでは、主に終了ステータスに重点を置いています。4つの終了方法があります:
(1)通常の終了(自発的):プロセスは出口の呼び出しなどの作業と終了
(2)エラー出口(自発的):通常、不正な命令の実行、存在しないコンテンツへの参照、除数がゼロなどのプログラムのエラーが原因で発生します。このタイプのエラーでは、プロセスは中断されるシグナルを受け取ります
(3)重大なエラー(不本意):たとえば、存在しないプログラムをコンパイルする場合。
(4)他のプロセスによる強制終了(非自発的):Linuxシステムでは、システムはkillを呼び出します。

公開された98元の記事 ウォンの賞賛9 ビュー3648

おすすめ

転載: blog.csdn.net/qq_43412060/article/details/105416698