Linux 上的 PCB 在哪里

Linux 上的 PCB 在哪里

PCB 或过程控制块,在维基百科上是这样定义的

进程控制块(PCB,也称为任务控制块、[1] 任务结构或 Switchframe)是操作系统内核中的一个数据结构,包含管理特定进程所需的信息。 PCB是“操作系统中进程的表现形式

其职责是:

Process identification data
Processor state data
Process control data

那么一个工艺的PCB在哪里可以找到呢?

答案1

在Linux内核中,每个进程都由一个task_struct在一个双向链表中,其头是init_task(pid 0,不是 pid 1)。这通常被称为工艺表

在用户模式下,进程表对普通用户可见/proc。获取您问题的标题:

  • 处理识别数据是进程 ID(位于 路径 中/proc/<process-id>/...)、命令行 ( cmd),以及可能的其他属性,具体取决于您对“标识”的定义。

  • 过程状态数据包括调度数据(schedstatschedstat)、进程当前正在等待什么(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;};

相关内容