Linux上のPCBはどこですか


10

PCBまたはプロセス制御ブロックは、ウィキペディアでこのように定義されています

プロセス制御ブロック(PCB、タスク制御ブロック、[1]タスク構造、またはスイッチフレームとも呼ばれます)は、特定のプロセスを管理するために必要な情報を含むオペレーティングシステムカーネルのデータ構造です。PCBは、「オペレーティングシステムでのプロセスの現れです。

そしてその義務は:

Process identification data
Processor state data
Process control data

では、プロセスのPCBはどこにありますか?


Linux on Stack Overflowのプロセス制御ブロックも参照してください。

回答:


15

Linuxカーネルでは、各プロセスはtask_struct二重リンクリストのa で表され、その先頭はinit_task(pid 1ではなくpid 0)です。これは一般にプロセステーブルと呼ばれます

ユーザーモードでは、プロセステーブルはの下の通常のユーザーに表示され/procます。あなたの質問の見出しを取る:

  • プロセス識別データは、プロセスID(パス内にあります/proc/<process-id>/...)、コマンドライン(cmd)、および「識別」の定義に応じてその他の属性です。

  • プロセス状態データには、スケジューリングデータ(schedstatおよびschedstat)、プロセスが現在待機しているもの(wchan)、その環境(environ)などが含まれます。

  • プロセス制御データは、その資格情報(uid_map)およびリソース制限(limits)であると言えます。

したがって、すべては用語の定義方法に依存します...しかし、一般的に、プロセスに関するすべてのデータはにあります/proc


「その頭はinit_task(pid 1ではなくpid 0)です」というようなものはありませんinit_task。それはinitであり、そのpidは0ではなく1です(で確認pidof init)。
AleksandrH

1
@AleksandrH init_taskはカーネル構造であり、プロセスではありません。pid 0で内部的に表されるアイドルタスクを指します。init_taskとinitは完全に異なります。
Flup、2018

しかも、それpidはプロセス専用です...
AleksandrH

1
@AleksandrHカーネルソースツリー(github.com/torvalds/linux/blob/master/init/init_task.c)のinit / init_task.cを読み取ります。
Flup、2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.