进程PCB学习

转自:https://blog.csdn.net/shuizhilan/article/details/6642040

https://zhuanlan.zhihu.com/p/32341542

1.组成

进程的PCB是系统感知进程的唯一实体。对进程进行操作,也可以理解为对PCB进行操作 PCB是要常驻内存的

所以在创建进程的时候,就是分配一个PCB,里面记录了进程的各种信息,这些信息都包括:

  1. 描述信息:进程的标识号(pid)、用户标识号(uid)、家族关系(gid)
  2. 控制信息:进程当前状态(就绪、运行、阻塞)、进程优先级、程序开始地址、计时信息、通信信息
  3. 资源管理信息:管理内存数据结构的指针、文件系统的指针等包括存储器的信息,IO设备、文件系统的信息。
  4. CPU现场保护结构:各个寄存器的内容

2.组织方式

2.1 链接

 不同的就绪队列有不同的指针指向。

2.2 索引 

 每个状态对应一个索引表。

3.实例

Linux中的进程块:

struct task_struct{
    ...
    unsigned short uid;#用户标识
    int pid;#进程id
    int processor;#标识用户正在使用的CPU
    ...
    volatile long state;#标识进程的状态
    long prority;#优先级
    unsighed long rt_prority;#实时进程的优先级,对于普通进程无效
    long counter;#进程动态优先级计数器,用于进程轮转调度算法
    unsigned long flags;
    unsigned long policy;#进程调度策略
    ...
    Struct task_struct *next_task, *prev_task;#进程PCB双向链表的前后项指针
    Struct task_struct *next_run,*prev_run;#就绪队列双向链表的前后项指针
    Struct task_struct *p_opptr,*p_pptr,*p_cptr,*pysptr,*p_ptr;
#进程家族间的关系,分别为指向祖父进程、父进程、子进程以及新老进程的指针。 ... };

其中上述进程调度策略policy:

SCHED_OTHER(值为0)对应普通进程优先级轮转法(round robin)
SCHED_FIFO(值为1)对应实时进程先来先服务算法;
SCHED_RR(值为2)对应实时进程优先级轮转法

 

posted @ 2021-02-05 17:04  lypbendlf  阅读(245)  评论(0编辑  收藏  举报