プロセス管理@基本ソフトウェア¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. プロセス¶
プロセスとは¶
プログラムは、メモリ上のアドレス空間の区画に割り当てられている。
この時のプログラム自体を『プロセス』という。
プロセスの代わりに『タスク』ということもある。
プロセスとして割り当てられたプログラムはCPUに参照され、CPUのコア上で処理が実行される。
何かのプロセスを正しく終了できないと、メモリ上に不要なプロセスが溜まっていき、メモリ使用率が高くなってしまう。
デーモン (常駐プログラム)¶
OSが稼働している間、メモリ上のアドレス空間の区画に恒常的に割り当てられているプロセスを、特に『デーモン (常駐プログラム) 』という。
シグナル¶
▼ シグナルとは¶
一方のプロセスから他方のプロセスへの命令である。
▼ シグナルの種類¶
代表的なシグナル | 説明 | 実行方法 |
---|---|---|
SIGINT |
プロセスに割り込む。 | キーボードで Ctrl + C を打つ。 |
SIGKILL |
プロセスを強制終了する。 | kill コマンドを実行する。 |
SIGTERM |
プロセスを通常終了する。 | 記入中... |
SIGTSTP |
プロセスを一時中断する。 | キーボードで Ctrl + Z を打つ。 |
SIGQUIT |
プロセスを終了させつつ、コアダンプする。 | キーボードで Ctrl + Q を打つ。 |
親/子プロセス¶
▼ 親/子プロセスとは¶
プロセスが新しいプロセスを作成する場合、プロセス間には親子関係がある。
例えば、ターミナルの親プロセスはshell
プロセスやbash
プロセスであり、任意のユーティリティを実行すると、これの子プロセスを作成することになる。
プロセスIDが1
のプロセスが、全てのプロセスの親である。
# MacOSの場合
$ ps -p 1
PID TTY TIME CMD
1 ?? 9:23.33 /sbin/launchd
▼ 同時処理できるリクエスト数¶
メモリ上には親の通信プロセスが割り当てられており、また1
個のリクエストを処理するために、1
個の子プロセスが割り当てられる。
そのため、子プロセスの最大数は、同時に処理できるリクエストの最大数に相当する。
プロセシングの種類¶
▼ シングルプロセシング¶
単一のメモリ上で、単一のプロセスがアドレスに割り当てられる仕組みのこと。
▼ マルチプロセシング¶
単一のメモリ上で、複数のプロセスがアドレスに割り当てられる仕組みのこと。
優先度の低いプロセスからCPUを切り離し、優先度の高いプロセスにCPUを割り当てる、といった仕組みを持つ。
現代のハードウェアのほとんどがマルチプロセシングの機能を持つ。
OOMキラー:Out Of Memory Killer¶
▼ OOMキラーとは¶
物理メモリ、ストレージ上のスワップ領域などプロセスが使用可能な全ての区画を使用し、プロセスを新しく割り当てる区画がなくなってしまった場合に実行される。
現在割り当てられているプロセスのうち、最も使用領域の大きいプロセスを強制的に終了する。
▼ 確認方法¶
もしOOMキラーが実行された場合は、/var/log/messages
ファイルにログが出力される。
$ cat /var/log/messages | grep Kill
Jan 1 00:00:00 localhost kernel: Out of memory: Kill process 17143 (java) score 468 or sacrifice child
Jan 1 00:00:00 localhost kernel: Killed process 17143 (java), UID 1001, total-vm:7790724kB, anon-rss:4108910kB, file-rss:6822kB, shmem-rss:0kB
02. スレッド¶
スレッドとは¶
メモリ上ではプログラムがプロセスとして割り当てられており、プログラムはCPUのコア上で実行される。
CPUのコアと紐付くプロセスの実行単位を『スレッド』という。
スレッディングの種類¶
▼ シングルスレッディング¶
メモリ上の特定のプロセスで、単一のスレッドを実行できる仕組みのこと。
▼ マルチスレッディング¶
メモリ上の特定のプロセスで、複数のスレッドを実行できる仕組みのこと。
これらのスレッドは、そのプロセスに割り当てられているアドレスを共有する。
マルチスレッディングについて¶
▼ 通常のマルチスレッド¶
CPUのコアが単一のスレッドが紐付くようなマルチスレッドのこと。
▼ 同時マルチスレッド¶
CPUのコアが複数のスレッドが紐付くようなマルチスレッドのこと。
03. CPU上のプロセス管理方式¶
優先順方式¶
各プロセスに優先度を設定し、優先度の高いプロセスから順に、CPUをプロセスに割り当てる。
*例*
作成されたプロセスの到着時刻と処理時間は以下のとおりである。
CPUのプロセスへの割り当ては、『20秒』ごとに起こるとする。
(1)
-
プロセスAが
0
秒に待ち行列へ登録される。 (2)
-
20
秒間、プロセスAは実行状態へ割り当てられる。 (3)
-
20
秒時点で、プロセスAは実行状態から待ち行列に追加される。同時に、待ち行列の先頭にいるプロセスBにCPUを割り当てる。 (4)
-
40
秒時点で、プロセスCは実行状態から待ち行列に追加される。同時に、待ち行列の先頭にいるプロセスAにCPUを割り当てる。
到着順方式¶
待ち行列に登録されたプロセスから順に、CPUをプロセスに割り当てる。
*例*
以下の様に、プロセスがCPUに割り当てられていく。
ラウンドロビン方式¶
ラウンドロビンは、『総当たり』の意味。
一定時間 (タイムクウォンタム) ごとに、実行状態にあるプロセスが強制的に待ち行列に登録される。
交代するように、CPUをプロセスに割り当てる。