プロセス - kentakozuka/yetos GitHub Wiki
プログラムとプロセス
- プログラムは,CPUが実行できる機械語命令とそれにより処理されるデータの集合(実行形式,ロードモジュール)がファイルに格納されたもの。
- プロセスには,プログラムに含まれる実行に必要な情報に加えて,プログラムには含まれない実行中の情報が入っている.
プロセス
種類 | 説明 |
---|---|
テキスト領域 | プログラムの機械語命令が置かれる.この領域は読み出し専用になっており,同じプログラムから起動されるプロセスの間で共有可能になっている. |
データ領域(初期値あり) | プログラム中に指定された 0 以外の初期値を持つ大域 (global) 変数,静的局所 (static local) 変数が置かれる. |
データ領域(初期値なし) | 通称 BSS (Block Started by Symbol) セグメント.初期値を持たない,又は初期値が 0 の大域変数,静的局所変数が置かれる.プロセス作成時に確保され,0 に初期化される. 変数の名前(シンボル)だけなのが名前の由来. |
ヒープ領域 | malloc()などにより,プロセス実行時に確保されるデータ領域. |
共有ライブラリ | 共有ライブラリのため領域はヒープとスタックの間にとられる.テキスト領域と同じく読み出し専用で,他のプログラムと共有される. |
スタック領域 | C言語の自動変数(staticでないローカル変数)や,引数,関数呼び出し時の戻り番地などが置かれる. |
引数,環境変数 | コマンドに渡される引数,環境変数は,スタック領域の最上位部分に格納されている. |
プロセスの役割
CPU を分け合うための抽象化 ▶ ユーザはプロセスを作る ▶ 各プロセスは全力で走れば良い (他の人に CPU を譲る 必要ない) ▶ OS がプロセスに CPU を与えたり奪ったりする ▶ メモリを分け合うための抽象化 (アドレス空間) ▶ 他のプロセスのメモリは覗けない, 壊せない
プロセスID (PID)
▶ 存在しているプロセス全てに付けられている一意な識 別子 ▶ Linux では通常, 4194304 までの整数 ▶ あるプロセスの PID を知らなくてはいけない場面はそ う多くはな