kernel:"process" (1) processの概要

  • LinuxマルチタスクOSであり、あるプログラムを実行している最中に他のプログラムを実行することができる

シングルタスクとマルチタスク

  • シングルタスクの場合、あるプログラムを実行している最中は他のプログラムを実行することはできない
    • シングルタスクはプログラムの開始と終了のみを管理する
  • マルチタスクの場合、実行しているプログラムを中断することにより、複数のプログラムを並行的に実行することができる
    • マルチタスクはプログラムの開始と終了に加えて、中断と再開を管理する
  • マルチタスクは正確には「同時に」複数のプログラムを実行している訳ではないが、非常に短時間で複数のプログラムの処理を切り替えるため、利用者から見ると複数のプログラムが並列して処理されているように感じる

プロセスの情報

  • kernelはprocessを識別するために、各processに"process id"を割り当てる
  • kernelは各processが使用しているメモリやファイル、ソケット、シグナルなどの情報をテーブルとして管理する
    • 管理用のテーブルを"task_struct"という構造体として実装されている
      • 構造体とは、様々な要素を配列として拡張する仕組み

task_struct構造体の内容(一部)

state, pid process自体の状態を示す
files processが使用するファイル情報、socket情報、パイプ処理などを管理する
mm processが使用するメモリ情報を管理する
sighand processにおいて使用されるシグナルハンドラ情報
parent, children, sibling processの親子、兄弟などへのリンク
  • task_struct構造体を図示したものを「テーブル構造図」と呼ぶ
  • ソースコード解析には、テーブル構造図を使用したtask_struct構造体の理解が非常に重要

ulimitコマンドを使用してtask_struct構造体を参照する

[root@tkcent1 ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 8192
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
max rt priority                 (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 8192
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
  • たとえば、"open files"の値は同時に開くことのできるファイル数を示している

ulimitコマンドを使用して同時に開くことのできるファイル数を変更してみる(1024→2048)

[root@tkcent1 ~]# ulimit -n 2048
[root@tkcent1 ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 8192
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
max rt priority                 (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 8192
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited