シングルタスクとマルチタスク
- マルチタスクは正確には「同時に」複数のプログラムを実行している訳ではないが、非常に短時間で複数のプログラムの処理を切り替えるため、利用者から見ると複数のプログラムが並列して処理されているように感じる
プロセスの情報
- 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