コンテンツにスキップ

プロセス管理@基本ソフトウェア

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


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を割り当てる、といった仕組みを持つ。

現代のハードウェアのほとんどがマルチプロセシングの機能を持つ。

process


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のコアと紐付くプロセスの実行単位を『スレッド』という。

thread


スレッディングの種類

▼ シングルスレッディング

メモリ上の特定のプロセスで、単一のスレッドを実行できる仕組みのこと。

▼ マルチスレッディング

メモリ上の特定のプロセスで、複数のスレッドを実行できる仕組みのこと。

これらのスレッドは、そのプロセスに割り当てられているアドレスを共有する。

multi-thread


マルチスレッディングについて

▼ 通常のマルチスレッド

CPUのコアが単一のスレッドが紐付くようなマルチスレッドのこと。

multithreading

▼ 同時マルチスレッド

CPUのコアが複数のスレッドが紐付くようなマルチスレッドのこと。

simultaneous-multithreading


03. CPU上のプロセス管理方式

優先順方式

各プロセスに優先度を設定し、優先度の高いプロセスから順に、CPUをプロセスに割り当てる。

*例*

作成されたプロセスの到着時刻と処理時間は以下のとおりである。

CPUのプロセスへの割り当ては、『20秒』ごとに起こるとする。

優先順方式_1

(1)

プロセスAが0秒に待ち行列へ登録される。

(2)

20秒間、プロセスAは実行状態へ割り当てられる。

(3)

20秒時点で、プロセスAは実行状態から待ち行列に追加される。同時に、待ち行列の先頭にいるプロセスBにCPUを割り当てる。

(4)

40秒時点で、プロセスCは実行状態から待ち行列に追加される。同時に、待ち行列の先頭にいるプロセスAにCPUを割り当てる。

優先順方式_2


到着順方式

待ち行列に登録されたプロセスから順に、CPUをプロセスに割り当てる。

到着順方式_1

*例*

以下の様に、プロセスがCPUに割り当てられていく。

到着順方式_2


ラウンドロビン方式

ラウンドロビンは、『総当たり』の意味。

一定時間 (タイムクウォンタム) ごとに、実行状態にあるプロセスが強制的に待ち行列に登録される。

交代するように、CPUをプロセスに割り当てる。

ラウンドロビン方式