プロセス
メモリ上で実行中のプログラムのinstanceのこと
プロセスの状態
プロセスの生成
fork()
プロセスの複製
exec()
プロセスの上書き
参考
/mrsekut-book-4774154644/039 (第2章 プロセス)
Shinpeim/process-book: Unix系システムのプロセスについて日本語で解説しています
プロセスに関する緩い解説
使用言語はPerl
Perl、記述量が少なくてノイズが少ないので例示として良いなmrsekut.icon
/mrsekut-book-4627810113/024 (第2章 CPUの仮想化: プロセス)
/mrsekut-book-477419607X/042 (第3章 プロセス管理)
#WIP
プログラムを実行する際、カーネルはプログラムをメモリに読み込む
プログラムの読み込まれたメモリ領域をプロセスに割り当てる
カーネルから見た処理の単位
リソース割当ての対象となる論理的な単位
プロセスは、仮想アドレス空間を持つ
このアドレスを使ってメモリにアクセスする
仮想アドレスはMMUによって、物理アドレスに変換する
各プロセスの仮想アドレス空間は独立している
そのため各プロセスの動作は互いに影響しない
1つのCPU上で同時に実行できるプロセスは1つだけ
そのため、適当な時間で区切って処理するプロセスを入れ替えている
タイムシェアリングシステム
プロセススケジューラ
プロセスは、必ず1つのプロセスグループに属する
プロセスの構成
メモリセグメントの各領域が、1つ1つのプロセスに割り当てるってことか?mrsekut.icon
/mrsekut-book-4774154644/051 (2.3 プロセスに割り当てられるメモリ)
スレッドとか
フォアグラウンド
ユーザーに見えている処理
バックグラウンド
裏で行っている処理
裏で行っているので、実行中に別のコマンドを実行できる
サスペンド
一時休止状態の処理
コマンドに対しcmd-zでサスペンド状態にできる
#??
exec()も結局は、fork後の上書きだから、プロセス全体ではツリー構造は常に保たれる?
initプロセス
psコマンド
軽量プロセス
シグナル
nice()
並列
各プロセスを複数のCPUに割り当てることで並列処理ができる
各プロセスはメモリ空間が独立している
子プロセスでもにょもにょしても親プロセスに影響を与えないので安全
生成コストが大きい
プロセス間通信が大変
プロセスを表す構造体 (Unix V6)
UNIX V6のproc構造体とUNIX V6のuser構造体の組で表される
#??
スレッドがどうのこうのみたいな話は構造体には現れないのかmrsekut.icon
プロセスの形態
ユニプロセッサ・ユニプログラミング方式
一つのCPU上で、一つの処理を逐次的に行う
バッチ処理のみが可能
ユニプロセッサ・マルチプログラミング方式
マルチスレッド的な?
マルチプロセッサ、マルチプログラミング方式
複数CPUを用いて、並列処理ができる
参考
『言語のしくみ』