一、进程及其状态
【进程的提出】
- 操作系统必须全方位的管理计算机系统中运行的程序
- 因此,操作系统为正在运行程序建立一个管理实体——进程
【进程的概念】
- 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动
- 进程是操作系统进行资源分配和调度的一个独立单位
- 一个进程包括五个实体部分,分别是:
#(OS管理运行程序的)数据结构P
#(进行程序的)内存代码C
#(运行程序的)内存数据D
#(运行程序的)通用寄存器信息R
#(OS控制程序执行的)程序状态字信息PSW
【进程举例】
- 不同程序在不同数据集上运行:构成两个无关进程
- 不同程序在相同数据集上运行:构成两个共享数据的交往进程
- 相同代码在不同数据集上运行:构成两个共享代码的无关进程
- 共享代码称为可再入程序,如编辑器
- 可再入程序是纯代码的
- 前述的程序与数据集均是内存级的
- 那么,在不同时段中针对(同一个外存数据文件)运行(同一个外存程序文件),意味着完全不同的(P,C,D,R,Psw)
- 所以两次运行构成两个不同的进程
【概念级的进程状态】
- 运行态指进程占有处理器运行
- 就绪态指进程具备运行条件等待处理器运行
- 等待态指进程由于等待资源,输入输出、信号等而不具备运行条件
【进程三态模型】
- 运行态->等待态:等待资源、I/O、信号
- 等待态->就绪态:资源满足、I/O结束、信号完成
- 就绪态->运行态:处理器空闲时选择更高优先权进程抢占
- 运行态->就绪态:运行时刻片到、有更高优先权进程
【进程挂起的概念】
- OS无法预期进程的数目与资源需求,计算机系统在运行过程中可能出现资源不足的情况
- 运行资源不足的表现为性能低和死锁两种情况
- 解决办法:剥夺某些进程的内存及其他资源,调入OS管理的对换区,不参加进程调度,待适当时候再调入内存、恢复资源、参与运行
- 这就是进程挂起
- 挂起态与等待态有着本质的区别,后者占有已申请到的资源处于等待,前者没有任何资源
【进程挂起的选择与恢复】
- 一般选择等待态进程进入挂起等待态
- 也可以选择就绪态进程进入挂起就绪态
- 运行态进程还可以挂起自己
- 等待事件结束后,挂起等待态进入挂起就绪态
- 一般选择挂起就绪态进程予以恢复
二、进程的数据描述
【进程控制块,Process Control Block】
- 进程控制块PCB是OS用于记录和刻画进程状态及环境信息的数据结构
- 借助PCB,OS可以全面管理进程的物理实体,刻画进程的执行现状,控制进程的执行
【进程控制块—标识信息】
- 用于存放唯一标识该进程的信息
#系统分配的标识号
#系统分配的进程组标识号
#用户定义的进程名
#用户定义的进程组名
【进程控制块—现场信息】
- 用于存放该进程运行时的处理器现场信息
#用户可见寄存器内容:数据寄存器、地址寄存器
#控制与状态寄存器内容:PC、IR、PSW
#栈指针内容:核心栈与用户栈指针
【进程控制块—控制信息】
- 用于存放与管理、调度进程相关的信息
#调度相关信息:状态、等待事件/原因、优先级
#进程组成信息:代码/数据地址、外存映像地址
#队列指引元:进程队列指针、父子兄弟进程指针
#通信相关信息:消息队列、信号量、锁
#进程特权信息:如内存访问权限、处理器特权
#处理器使用信息:占用的处理器、时间片、处理器使用时间/已执行总时间、记账信息
#资源清单信息:如正占有的资源、已使用的资源
【进程映像,Process Image】
- 某一时刻进程的内容及其执行状态集合
#进程控制块:保存进程的标识信息、状态信息和控制信息
#进程程序块:进程执行的程序空间
#进程数据块:进程处理的数据空间,包括数据、处理函数的用户栈和可修改的程序
#核心栈:进程在内核模式下运行时使用的堆栈,中断或系统过程使用 - 进程映像是内存级的物理实体,又称为进程的内存映像
【进程的内存映像示意图】
【进程上下文,Process context】
- 进程的执行需要环境支持,包括CPU现场和Cache中的执行信息
- OS中的进程物理实体和支持进程运行的环境合成进程上下文,包括以下:
#用户级上下文:用户程序块/用户数据区/用户栈/用户共享内存
#寄存器上下文:PSW/栈指针/通用寄存器
#系统及上下文:PCB/内存区表/核心栈 - 进程上下文刻画了进程的执行情况
三、进程的管理
【概念级的OS进程管理软件】
- 关键的进程管理软件包括:
#系统调用/中断/异常处理程序
#队列管理模块
#进程控制程序
#进程调度程序(独立进程居多)
#进程通信程序(多个程序包)
#终端登录与作业控制程序、性能监控程序、审计程序等外围程序
【进程实现的队列模型】
【队列管理模块】
- 队列管理模块是操作系统实现进程管理的核心模块
- 操作系统建立多个进程队列,包括就绪队列和等待队列
- 按需组织为先进先出队列与优先队列
- 队列中的进程可以通过PCB中的队列指引元采用单/双指引元或索引连接
- 出队和入队操作
- 进程与资源调度围绕进程队列展开
【进程的控制与管理】
- 进程创建:进程表加一项,申请PCB并初始化,生成标识,建立映像,分配资源,移入就绪队列
- 进程撤销:从队列中移除,归还资源,撤销标识,回收PCB,移除进程表项
- 进程阻塞:保存现场信息,修改PCB,移入等待队列,调度其他进程执行
- 进程唤醒:等待队列中移出,修改PCB,移入就绪队列(该进程优先级高于运行进程触发抢占)
- 进程挂起:修改状态并出入相关队列,收回内存等资源送至兑换区
- 进程激活:分配内存,修改状态并出入相关队列
- 其他:如修改进程特权
【原语与进程控制原语】
- 进程控制过程中涉及对OS核心数据结构(进程表/PCB池/队列/资源表)的修改
- 为防止与时间有关的错误,应使用原语
- 原语是由若干条指令构成的完成某种特定功能的程序,执行上具有不可分割性
- 原语的执行可以通过关中断实现
- 进程控制使用的原语称为进程控制原语
- 另一类常用原语是进程通信原语
四、进程切换与模式切换
【进程切换】
- 进程切换指从正在运行的进程中收回处理器,让待运行进程来占有处理器运行
- 进程切换实质上就是被中断运行进程与待运行进程的上下文切换,处理过程是:
#保存被中断进程的上下文
#转向进程调度
#恢复待运行进程的上下文
【模式切换】
- 进程切换必须在操作系统内核模式下完成,这就需要模式切换
- 模式切换又称处理器状态切换,包括:
#(正向的)用户模式到内核模式中断/异常/系统调用:中断用户进程执行而触发
#(逆向的)内核模式到用户模式OS执行中断返回指令:将控制权交还用户进程而触发
【模式切换的基本工作任务】
- 中断装置完成正向模式切换,包括:
#处理器模式转为内核模式
#保存当前进程的PC/PSW值到核心栈
#转向中断/异常/系统调用处理程序 - 中断返回指令完成逆向模式转换,包括:
#从待运行进程核心栈弹出PSW/PC值
#处理器模式转为用户模式
【进程切换的工作过程】
- (中断/异常等触发)正向模式切换并压入PSW/PC
- 保存被中断进程的现场信息
- 处理具体中断/异常
- 把被中断进程的系统堆栈指针SP值保存到PCB
- 调整被中断进程的PCB信息,如进程状态
- 把被中断进程的PCB加入相关队列
- 选择下一个占用CPU运行的进程
- 修改被选中进程的PCB信息,如进程状态
- 设置被选中进程的地址空间,恢复存储管理信息
- 恢复被选中进程的SP值到处理器寄存器SP
- 恢复被选中进程的现场信息进入处理器
- (中断返回指令触发)逆向模式转换并弹出PSW/PC
【进程切换的发生时机】
- 进程切换一定发生在中断/异常/系统调用处理过程中,常见的情况是:
#阻塞式系统调用、虚拟地址异常导致被中断进程进入等待态
#时间片中断、I/O中断后发现更高优先级进程导致被中断进程转入就绪态
#终止用系统调用、不能继续执行的异常致被中断进程进入终止态
【进程切换与模式切换】
- 一些中断/异常不会引起进程状态转换,不会引起进程切换,只是在处理完成后把控制权交回给被中断进程,处理流程是:
#(中断/异常触发)正向模式切换压入PSW/PC
#保存被中断进程的现场信息
#处理中断/异常
#恢复被中断进程的现场信息
#(中断返回指令触发)逆向模式转换弹出PSW/PC