09-Linux & Virtual Box

Virtual Box & Linux(Part.19)| Linux プロセスの管理(1)| 現役エンジニア&プログラミングスクール講師

目標

「プロセス」の概要を理解する。
「プロセスID」について概要を理解する。
「プロセスの親子関係」について概要を理解する。
「子プロセスの生成」について概要を理解する。
「ジョブ」「セッション」について概要を理解する。
「フォアグラウンドジョブ」「バックグラウンドジョブ」について概要を理解する。

プロセス

プロセスの概要

プロセスとは

Linux起動後に動作中(「実行状態」や「待ち状態」、もしくは「実行可能状態」)のプログラムのことをプロセスといいます。

実行される前のプログラム(プロセス)は実行ファイルとしてHDDなどの記憶媒体に保管されています。必要なプログラム(プロセス(コマンドやアプリケーション))を呼び出すと、関連する実行ファイルがメモリ上に展開されて実行可能状態になります。

ディスパッチ:
実行状態へ処理が移ること
プリエンプション:
優先順位の高いプロセスに処理を譲って実行可能状態に戻ること
このように、実行状態のプロセスを切り替えることをコンテキストスイッチと呼びます。

出力で代表的なものにプリンターでのプリントアウトがあります。プリンターで出力を行う場合、「PCからのデータの転送+プリンターでの出力」までをひとつの作業として行う必要があるのですが、プリンターの出力にはとても時間がかかるため、複数の出力がある場合、CPUは次のデータ転送について印刷作業の完了を待つ状態になります(実行待ち状態)。ですが、CPUが待ち状態でいるのはもったいないので、PC側では転送データを直接送るのではなく、補助記憶装置などに溜めておいて、プリンター側に「転送のための問い合わせ」をしてもらい、プリンターのペースで出力をしてもらうようにします。こうすることで、PC側ではCPUに発生していた遊休時間で別の処理に割り当てるといったことをします(スプーリング)スプーリングによってスループットが向上します。

プロセスは次の順で準備(プロセスの生成→実行可能状態)が行われます。

  1. プロセステーブルへのエントリ
  2. メモリブロックへの割り当て(プロセステーブルへブロック情報追加)
  3. プログラムファイルの展開(プログラムカウンターへ最初のプロセスを登録)

プロセステーブルは実行可能状態や実行状態のプロセスのプロパティ情報を持っているテーブルです。

プロセスID

プロセスにはプロセスIDといった重複しない整数が割り当てられてプロセステーブルで管理されます。プロセスIDは「PID」 (プロセス識別子)といってプロセスを区別するために利用されます。

プロセスの親子関係

プロセスは別のプロセスの生成を行うことがあります。この時、生成する側を「親プロセス」、生成される側を「子プロセス」といいます。(※プロセスの生成にはメモリの割り当てなどが必要なため、そのような処理はカーネルに依頼します。)

プロセスが生成されると子プロセスは親プロセスのIDを持っていて、親子関係が分かるようになっています。親プロセスのIDをPPID(Parent PID)といいます。

カーネルはLinuxそのものを指します。シェルやそれ以外のプログラムはカーネルの上に載っているソフトウェアとなります。

子プロセスの生成順序について

プロセスはページテーブルという「仮想的なアドレス」と「物理的なアドレス」を紐づけるテーブルを利用してに処理を行います。

親プロセスは子プロセスを生成する時fork()関数を利用します。

fork()関数

Linuxではプロセスが別のプロセスを生成するとき、fork()関数を利用してページテーブルの内容を複製します。(親プロセスのページテーブルが複製されます。)

その後、テーブルの内容を変更した場合、メモリに対しては書き込みの権限がないので「何もない!」となります。この状態を「ページフォールト」と呼びます。

この時、CPUでは書き込みの権限があるカーネルモードに切り替わりって書き込みが可能になります。カーネルモードで「メモリの確保」や「親プロセスのコピー」などを行います。

その後、カーネルモードでの処理を終えると処理はプロセス(ユーザーモード側)へ戻されます。

execve()関数

fork()関数で作成した子プロセスは親プロセスのコピーとなっています。このあと、子プロセスではexecve()関数を利用して別のプログラムと置き換えを行います。

親子関係のあるプロセスでは子プロセスの終了をうまく行えない問題が発生することがありあます。通常、親子関係のあるプロセスでは子プロセスが先に終了することになります。子プロセスはプロセスを終了すると親プロセスにシグナルを渡します。その終了のシグナルを受けとった親プロセスは子プロセスの後始末(消滅処理)を行います。

※子プロセスが終了した時点の状態をゾンビ状態といいます。その後消滅処理を親プロセスが行うことになります。

仮に何らかの理由で子プロセスの後始末を行えないなどの状態が発生した場合は子プロセスはその後もメモリを占有してしまうといった状況になります。これをゾンビプロセスといいます。

ジョブ

ジョブとセッションの概要

ジョブとは

1つ以上のプロセスをもつ「処理のあつまり」のことをジョブといいシェルで制御できます。単位としては、ひとつのコマンド処理もひとつのジョブ。パイプでつないだ複数のコマンド処理もひとつのジョブとなります。

プロセスグループ…複数のプロセスが集まった「ジョブ」と捉えることができます。

セッションとは

ユーザーがLinuxを操作する場合、そのユーザーがアクセスしてきた端末やSSHのログインセッションに対応するもので各セッションにはセッションIDが割り振られます。このセッションにはプロセスグループを複数存在させることができます。

セッションリーダーとはプロセスの大元になるプロセスのことです。

「フォアグラウンドジョブ」と「バックグラウンドジョブ」

フォアグラウンドジョブ

各セッション(1ユーザーが利用する1端末)に対して1つだけ存在することができるジョブです。基本的なコマンド入力がフォアグラウンドジョブとなります。

フォアグラウンドジョブは入力したコマンドの全ての処理が完了するまで、別のコマンドを受け付けなくなります。シェルを占有した操作と言えます。

ジョブには「フォアグラウンドジョブ」「バックグラウンドジョブ」「サスペンドジョブ」があり「サスペンドジョブ」はフォアグラウンドジョブが「Ctrl+Z」で一時的に止められたジョブのことを指します。

バックグラウンドジョブ

キーボードを利用したコマンド入力にバックグラウンドジョブを指定したジョブをバックグラウンドジョブといいます。コマンドの後に「スペース + &」を入力します。

この時、シェルはこのジョブをバックグラウンドジョブとして管理します。バックグラウンドジョブとして動くジョブはジョブ内のひとつひとつのプロセスの処理の終了を制御しません。全てのプロセスが終了するまで動き続けます。

今回は以上になります。

「Linux」おすすめ書籍6選【初心者・脱初心者用】| 現役エンジニア&プログラミングスクール講師「Linux」初心者の方がLinuxの操作や仕組みを理解するためのお勧めの書籍について取り上げています。また中級者として更に進んだ学習ができる書籍についても1冊取り上げています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】| 現役エンジニア&プログラミングスクール講師「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
09-Linux & Virtual Box

Virtual Box & Linux(Part.20)| Linux プロセスの管理(2)| 現役エンジニア&プログラミングスクール講師

2023年5月20日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
09-Linux & Virtual Box

Virtual Box & Linux(Part.15)| Linux ユーザー管理(3)| 現役エンジニア&プログラミングスクール講師

2023年5月7日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
09-Linux & Virtual Box

Virtual Box & Linux(Part.9)| Linux テキスト処理(1)| 現役エンジニア&プログラミングスクール講師

2023年4月27日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
09-Linux & Virtual Box

Virtual Box & Linux| まとめ | 現役エンジニア&プログラミングスクール講師

2023年5月9日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
09-Linux & Virtual Box

Virtual Box & Linux(Part.14)| Linux ユーザー管理(2)| 現役エンジニア&プログラミングスクール講師

2023年5月2日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
09-Linux & Virtual Box

Virtual Box & Linux(Part.13)| Linux ユーザー管理(1)| 現役エンジニア&プログラミングスクール講師

2023年5月1日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site