进程的数据描述
进程控制块
进程控制块(PCB)是OS用于记录和刻画进程状态和环境的数据结构。包含标识信息、现场信息、控制信息
标识信息
用于存放标识该进程的信息。包含:
- 系统分配的标识号
- 系统分配的进程组标识号
- 用户定义的进程名
- 用户定义的进程组名
现场信息
用于存放进程运行时的处理器现场信息。包含:
- 用户可见寄存器内容
- 控制与状态寄存器内容
- 栈指针内容
控制信息
用于存放和管理、调度进程相关的信息。包含:
- 调度相关信息:状态、等待事件/原因、优先级
- 进程组成信息:代码/数据地址、外存映像地址
- 队列指引元:进程队列指针、父子兄弟进程指针
- 通信相关信息:消息队列、信号量、锁
- 进程特权信息:内存访问权限、处理器特权
- 处理器使用信息:占用的处理器、时间片、处理器使用时间、执行时间、记账信息
- 资源清单信息:正占用的资源、已使用的资源
进程映像
进程映像是某一时刻进程的内容及其执行状态的集合。包含
- 进程控制块
- 进程程序块:进程执行的程序空间
- 进程数据块:进程处理的数据空间,包括数据、处理函数的用户栈和可修改的程序
- 核心栈:进程在内核模式下运行时使用的堆栈,中断或系统过程使用
进程上下文
OS中的进程物理实体和支持进程运行的环境合成进程上下文,包括
- 用户级上下文:用户程序块、用户数据区、用户栈、用户共享内存
- 寄存器上下文:PSW、栈指针、通用寄存器
- 系统级上下文:PCB、内存区表、核心栈
进程上下文刻画了进程的执行情况
进程管理
进程管理软件
- 系统调用、中断、异常处理程序
- 队列管理程序
- 进程控制程序
- 进程调度程序
- 进程通信程序
- 终端登录和作业控制程序、性能监控程序、审计程序等外围程序
队列模型
某个进程被提交后进入就绪队列。就绪队列中最前的进程被指派至处理器执行。
一种情况下进程完成执行,处理器从就绪队列中取出下一个进程。
一种情况下该进程处理超时,该进程被推入就绪队列,处理器取出下一个进程执行。
一种情况下该进程需要等待某个事件,处理器将其推入该事件的等待队列,然后从就绪队列取出下一个进程执行。而某个事件发送时,该事件对应的等待队列的队首便会被推入就绪队列。
队列管理模块
操作系统为进程建立就绪队列和等待队列,按需组织为先进先出队列或优先队列。队列中的进程可以通过PCB中的队列指引元采用单/双指引元或索引连接。
进程与资源调度围绕进程队列展开
进程控制过程
进程创建
进程表加一项,申请PCB并初始化,生成标识,建立映像,分配资源,移入就绪队列
进程撤销
从队列中移除,归还资源,撤销标识,回收PCB,移除进程表项
进程阻塞
保存现场,修改PCB,移入等待队列,调度其他进程
进程唤醒
等待队列中移除,修改PCB,移入就绪队列(优先级高于运行进程触发抢占)
进程挂起
修改状态并出入相关队列,收回内存等资源并送至对换区
进程激活
分配内存,修改状态并出入相关队列
其他
如修改进程特权
原语
原语时由若干条指令构成的完整功能程序,执行中不可中断。可以通过关中断实现。
进程控制中设计对OS核心数据结构(进程表、PCB池、队列、资源表)的修改应使用原语。
进程切换与模式切换
进程切换
从正在运行的进程中收回处理器,让待运行进程占用处理器运行。流程为
- 保存被中断进程的上下文
- 转向进程调度
- 恢复待运行进程的上下文
模式切换
进程切换必须在操作系统内核模式完成,这就需要模式切换。其中包括:
- 用户模式到内核模式:由中断、异常、系统调用中断用户进程执行而触发
- 内核模式到用户模式:OS执行中断返回指令将控制权交给用户进程而触发
正向模式切换基本任务包括:
- 处理器模式转为内核模式
- 保存当前进程的PC、PSW到核心栈
- 转向中断/异常/系统调用处理程序
逆向则包括:
- 从待运行进程核心栈中弹出PC、PSW
- 处理器模式转为用户模式
进程切换的工作过程
- 正向模式切换并压入PSW、PC
- 保存被中断进程的现场信息
- 处理具体中断/异常
- 把被中断进程的系统堆栈指针SP保存到PCB
- 调整被中断进程的PCB信息,如进程状态
- 把被中断进程的PCB加入相关队列
- 选择下一个占用CPU运行的进程
- 修改被选择进程PCB,如进程状态
- 设置被选择进程的地址空间,恢复存储管理信息
- 恢复被选择进程的SP
- 恢复被选择进程的现场信息
- 逆向模式转换并弹出PSW/PC