Linuxでは、PCBはどこにありますか?

Linuxでは、PCBはどこにありますか?

PCBまたはプロセス制御ブロック、Wikipediaで定義されているように

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

その責任は次のとおりです。

Process identification data
Processor state data
Process control data

それでは、プロセス用のPCBはどこで見つけることができますか?

答え1

Linuxカーネルでは、各プロセスは次のように構成されています。task_struct二重接続リストでは、init_task(pid 1ではなくpid 0)。これはしばしば呼び出されます。プロセステーブル

ユーザーモードでは、一般ユーザーはプロセステーブルを表示できます/proc。質問のタイトルを確認してください。

  • 識別データ処理「ID」の定義によっては、プロセスID(パス内/proc/<process-id>/...)、コマンドライン()、およびその他の属性を含めることができます。cmd

  • プロセス状態データスケジューリングデータ(sched、、statおよびschedstat)、プロセスが現在何を待っているか(wchan)、環境(environ)などが含まれます。

  • プロセス制御データおそらく資格情報(uid_map)とリソース制限(limits)があります。

したがって、用語をどのように定義するかによって異なりますが、通常、プロセスに関するすべてのデータはにあります/proc

答え2

LinuxのPCBは一部ですスレッド情報構造

struct thread_info {
struct pcb_struct   pcb;        /* palcode state */

struct task_struct  *task;      /* main task structure */
unsigned int        flags;      /* low level flags */
unsigned int        ieee_state; /* see fpu.h */

mm_segment_t        addr_limit; /* thread address space */
unsigned        cpu;        /* current CPU */
int         preempt_count; /* 0 => preemptable, <0 => BUG */
unsigned int        status;     /* thread-synchronous flags */

int bpt_nsaved;
unsigned long bpt_addr[2];      /* breakpoint handling  */
unsigned int bpt_insn[2];};


struct pcb_struct {
unsigned long ksp; - Kernel Stack Pointer
unsigned long usp; - User stack Pointer
unsigned long ptbr; - Page table address
unsigned int pcc;
unsigned int asn;
unsigned long unique;
unsigned long flags;
unsigned long res1, res2;};

関連情報