プログラムはファイルに保存された実行コードとデータです。プロセスは実行中のコンテキストで、マップされたコード、メモリ、認証情報、開いたファイル記述子、シグナル状態、スケジューリング情報、1つ以上のスレッドを含みます。同じプログラムから多数の独立したプロセスを実行できます。
プロセス · レッスン 3
プロセス詳細
実行中のプロセスをディスク上のプログラムと区別する状態とリソースを学びます。
プログラムのインスタンスと PID
たとえば2つの端末で引数なしの cat を起動すると、それぞれが入力を待ち、別のプロセス ID を持ちます。
$ pgrep -a cat
18420 cat
18457 cat
同じプログラムを実行していても、入力ストリーム、メモリ内容、認証情報、作業ディレクトリ、寿命は異なり得ます。PID は一度に1つの実行中プロセスを識別し、その終了後は再利用される場合があります。
同じプログラムを実行する2つのインスタンスを区別するものは何ですか?
カーネルが追跡する状態
カーネルは各プロセスのスケジュールと制御に必要な情報を保持します。
- プロセス ID と親プロセス ID
- ユーザーとグループの認証情報
- 仮想メモリマッピング
- 開いたファイル記述子と現在のディレクトリ
- シグナルの処理方法と保留中シグナル
- スケジューリング方針、優先度、実行状態
- CPU 時間などの使用記録
基になるリソースを共有する場合もあります。関連プロセスがマップ済みメモリを共有でき、同じプロセス内のスレッドはアドレス空間と多くのプロセス全体リソースを共有します。プロセスは分離境界を提供しますが、全バイトやカーネルオブジェクトが物理的に専有されるとは限りません。
Linux プロセスのスケジューリング状態と認証情報を保持する構成要素はどれですか?
CPU スケジューリングとメモリ
実行可能なスレッドは CPU 時間を競います。カーネルスケジューラーはスケジューリングクラス、優先度、CPU affinity、負荷、方針に従い、どの CPU でどのスレッドを動かすかを選びます。全プロセスが等しい割合を得るという保証ではありません。
通常、各プロセスには仮想アドレス空間が見えます。カーネルとハードウェアが仮想アドレスを物理メモリなどへ対応付け、保護を適用し、必要に応じてページを共有します。そのため ps や top のメモリ値が、そのプロセスだけに帰属する物理 RAM 量とは限りません。
Linux スケジューラーは何を選択しますか?
プロセス終了とリソース解放
プロセス終了時、カーネルは大半の私有リソースを解放し、残る記述子を閉じ、親のために終了情報を記録します。親が終了状態を取得するまで、小さなプロセス表の記録がゾンビとして残る場合があります。そのため「実行を終えた」と「プロセス表から全痕跡が消えた」は必ずしも同時ではありません。
終了したプロセスが一時的にゾンビとして残るのはなぜですか?
Linux プロセスの管理と監視 で複数のインスタンスを開始して PID と状態を比較できます。Linux top コマンド ではスケジューリングとリソース指標の変化を確認できます。
レッスン完了
プロセス詳細 を完了しました
プロセスを単なるプログラムファイル以上のものとして説明できるようになりました。
保存された実行コードと実行中のプロセスインスタンスを区別する。
カーネルが追跡する状態とリソースを特定する。
スケジューリングを均等配分ではなく、実行可能なスレッドへ関連付ける。
親が回収するまで終了状態が残り得ると理解する。