您的位置:首页 > 运维架构 > Linux

Linux下的进程控制块(PCB)

2016-06-05 16:52 399 查看
进程在操作系统中都有一个户口,用于表示这个进程。这个户口操作系统被称为PCB(进程控制块),在linux中具体实现是 task_struct数据结构。
进程控制块(PCB)(系统为了管理进程设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程。系统利用PCB来控和管理进程,所以PCB是系统感知进程存在的唯一标志。进程与PCB是一一对应的)在不同的操作系统中对进程的控制和管理机制不同,PCB中的信息多少不一样,通常PCB应包含如下一些信息。

1、进程标识符 name:每个进程都必须有一个唯一的标识符,可以是字符串,也可以是一个数字。2、进程当前状态 status:说明进程当前所处的状态。为了管理的方便,系统设计时会将相同的状态的进程组成一个队列,如就绪进程队列,等待进程则要根据等待的事件组成多个等待队列,如等待打印机队列、等待磁盘I/O完成队列等等。3、进程相应的程序和数据地址,以便把PCB与其程序和数据联系起来。4、进程资源清单。列出所拥有的除CPU外的资源记录,如拥有的I/O设备,打开的文件列表等。5、进程优先级 priority:进程的优先级反映进程的紧迫程度,通常由用户指定和系统设置。6、CPU现场保护区 cpustatus:当进程因某种原因不能继续占用CPU时(如等待打印机),释放CPU,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复CPU的各种状态,继续运行。7、进程同步与通信机制 用于实现进程间互斥、同步和通信所需的信号量等。8、进程所在队列PCB的链接字 根据进程所处的现行状态,进程相的PCB参加到不同队列中。PCB链接字指出该进程所在队列中下一个进程PCB的首地址。9、与进程有关的其他信息。 如进程记账信息,进程占用CPU的时间等。在linux 中每一个进程都由task_struct 数据结构来定义. task_struct就是我们通常所说的PCB。

struct task_struct {

long state; /*任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)*/

long counter;/*运行时间片计数器(递减)*/

long priority;/*优先级*/

long signal;/*信号*/

struct sigaction sigaction[32];/*信号执行属性结构,对应信号将要执行的操作和标志信息*/

long blocked; /* bitmap of masked signals */

  /* various fields */

int exit_code;/*任务执行停止的退出码*/

unsigned long start_code, end_code, end_data, brk, start_stack;/*代码段地址 代码长度(字节数)

  代码长度 + 数据长度(字节数)总长度 堆栈段地址*/

long pid, father, pgrp, session, leader;/*进程标识号(进程号) 父进程号 父进程组号 会话号 会话首领*/

unsigned short uid, euid, suid;/*用户标识号(用户id) 有效用户id 保存的用户id*/

unsigned short gid, egid, sgid; /*组标识号(组id) 有效组id 保存的组id*/

long alarm;/*报警定时值*/

long utime, stime, cutime, cstime, start_time;/*用户态运行时间 内核态运行时间 子进程用户态运行时间

  子进程内核态运行时间 进程开始运行时刻*/

unsigned short used_math;/*标志:是否使用协处理器*/

  /* file system info */

int tty; /* -1 if no tty, so it must be signed */

unsigned short umask;/*文件创建属性屏蔽位*/

struct m_inode * pwd;/*当前工作目录i 节点结构*/

struct m_inode * root;/*根目录i节点结构*/

struct m_inode * executable;/*执行文件i节点结构*/

unsigned long close_on_exec;/*执行时关闭文件句柄位图标志*/

struct file * filp[NR_OPEN];/*进程使用的文件表结构*/

  /* ldt for this task 0 - zero 1 - cs 2 - ds&ss */

struct desc_struct ldt[3];/*本任务的局部描述符表。0-空,1-代码段cs,2-数据和堆栈段ds&ss*/

  /* tss for this task */

struct tss_struct tss;/*本进程的任务状态段信息结构*/

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: