进程控制块,英文名(Processing Control Block),简称 PCB 。
进程控制块是系统为了管理进程设置的一个专门的数据结构,主要表示进程状态。
每一个进程都对应一个PCB来维护进程相关的信息;
在Linux中,PCB结构为task_struct;
task_struct是Linux内核的一种数据结构,它会被装载到RAM里并且包含进程的信息,每个进程都把它的信息放在task_struct这个数据结构里。
task_struct结构图:
task_struct描述:
1.进程状态:是调度和兑换的依据
linux进程的状态
内核表示
含义
TASK_RUNNING
可运行
TASK_INTERRUPTIBLE
可中断的等待状态
TASK_UNINTERRUPTIBLE
不可中断的等待状态
TASK_ZOMBIE
僵死
TASK_STOPPED
暂停
TASK_SWAPPING
换入/换出
2.标识符:描述本进程的唯一标识符,用来区别其它进程
每个进程都有一个唯一的标识符,内核通过这个标识符来识别不同的进程,同时,进程标识符PID也是内核提供给用户程序的接口,用户程序通过PID对进程发号施令。PID是32位的无符号整数,它被顺序编号:新创建进程的PID通常是前一个进程的PID加1。然而,为了与16位硬件平台的传统Linux系统保持兼容,在Linux上允许的最大PID号是32767,当内核在系统中创建第32768个进程时,就必须重新开始使用已闲置的PID号。
各种标识符
域名
含义
pid
进程标识符
ppid
父进程
uid、gid
用户标识符、组标识符
euid、egid
有效用户标识符、有效组标识符
suid、sgid
备份用户标识符、备份组标识符
fsuid、fsgid
文件系统用户标识符、文件系统组标识符
3.进程调度信息
调度程序利用这部分信息决定系统中哪个进程应该优先运行,并结合进程的状态信息保证系统运转的公平和高效。这一部分信息通常包括进程的类别(普通进程还是实时进程)、进程的优先级(priority)等等
进程调度信息
域名
含义
need_resched
调度标志
nice
静态优先级
counter
动态优先级
policy
调度策略
rt_priority
实时优先级
当need_resched被设置时,在“下一次的调度机会”就调用调度程序schedule(