进程控制
进程控制块-PCB
Process Control Block
- 进程实体的一部分,拥有描述进程情况及控制进程运行所需的全部信息的记录性数据结构
- 使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程
- 操作系统控制和管理并发执行进程的依据
- 进程存在的唯一标志
- 常驻内存,且存放于操作系统开辟的专门区域-PCB区
进程控制块中的信息
- 进程标识符
- 内(pid)/外部(进程名)、父/子进程、用户标识符
- 处理器调度信息
- 通用、PC、PSW、用户占指针寄存器
- 进程调度信息
- 进程状态、进程优先级(静态优先级,动态优先级)、事件及其他
- 进程控制信息
- 程序和数据地址、进程同步通信机制
- 资源清单、链接指针、进程图
进程图(进程树)
- 描述进程家族的有向树
- 结点/有向边
- 父/子进程
- 祖先进程/祖先
知道进程的子进程有助于在知道父进程的情况下,杀死其子进程
知道进程的祖先进程有助于当子进程被杀死后通知父进程
PCB的组织方式
执行指针
就绪队列指针
阻塞队列指针
空闲队列指针
- 链接方式
- 通过链表查询队列
- 索引方式
- 建立索引表用于查询队列
进程的创建与终止
引起创建进程的事件
- 用户登录
- 分时系统中,验证为合法的终端用户登录
- 作业调度
- 批处理系统中作业调度到某作业
- 提供服务
- 运行中的用户程序提出某种请求
- 应用请求
- 基于用户进程的需要由其自身创建新进程
引起终止进程的事件
- 正常结束
- 批处理系统中的Halt,分时系统中的LogsOff
- 异常结束
- 越界错误、保护错误
- 特权指令错误
- 非法指令错误
- 运行超时、等待超时
- 算数运算错、I/O故障
- 外界干预
- 操作员或者操作系统干预
- 发送SIGKILL信号强制杀死
- 父进程请求/终止
- 操作员或者操作系统干预
进程创建过程
Create()原语
- 分配标识符,并申请空白进程控制块
- 为新进程的程序和数据及用户占分配必要的内存空间
- 所需内存大小问题
- 初始化进程控制快
- 自身/父进程标识符
- 处理机状态/调度信息
- 讲新进程插入到就绪队列
进程终止过程
Terminate()原语
- 检索被终止进程PCB,读取其进程状态
- 若其正处于执行状态,立即终止执行并设置调度标志为真,来重新调度其他进程
- 终止子孙进程
- 资源归还-最重要的过程
- 一处被终止进程PCB,等待其他程序查询利用
进程的阻塞与唤醒
引起进程阻塞的事件
- 请求系统服务
- 但不能立刻满足,需要阻塞自己等待系统服务的响应
- 启动某种操作
- 某种动作是本进程下一个动作的前趋,不满足不能向后执行
- 新数据尚未到达
- 相互合作的进程必须先获得另一方的进程数据才能继续
- 无新工作可做
- 特定功能的系统进程当完成任务且当前暂无任务
引起进程唤醒的事件
- 系统服务满足
- 操作完成
- 数据到达
- 新任务出现
进程阻塞过程
Block()原语
- 先立即停止执行,把进程控制块中的现行状态由执行状态改为阻塞状态,并将它插入到对应的阻塞队列中
- 转调度程序进程重新调度,将处理机分配给另一就绪进程,并进行切换
进程唤醒过程
Wakeup()原语
首先把阻塞进程从等待该事件的阻塞进程队列中移出,将其PCB中的现行状态由阻塞改为就绪,并插入到就绪队列中
进程的挂起与激活
进程挂起过程
Suspend()过程
- 检查被挂起进程的状态并修改和插入到对应队列
- 复制PCB到指定域
- 若被挂进程正在执行则转向调度程序重新调度
进程激活过程
Activate()原语
- 检查进程现行状态并修改和插队
- 若有新进程进入就绪队列并采用了抢占式调度策略,则检查和决定是否重新调度

