进程描述和控制
什么是进程
可以把进程视为由一组元素组成的实体,进程的两个基本元素是程序代码(program code)和与代码相关联的数据集(dataset)
用元素来表征进程:
- 标识符(identifier):与进程相关的唯一标识符,用来区分其他进程
- 状态:若进程正在执行,则进程处于运行态
- 优先级:相对于其他进程的优先顺序
- 程序计数器:程序中即将执行的下一条指令
- 内存指针:包括程序代码和进程相关数据的指针,以及与其他进程共享内存块的指针
- 上下文数据(context data):进程执行时处理器的寄存器中的数据
- I/O状态信息:包括显式I/O请求、分配给进程的I/O设备和被进程使用的文件列表
- 记账信息:包括处理器时间总和、使用的时钟数总和、时间限制、记帐号等
上述信息存放在进程控制块(process control block)
进程状态
两状态进程模型
在任何时刻,进程要么正在执行,要么未执行
使用排队图来描述分派器的行为(被中断的进程转移到等待进程队列中,或在进程结束或取消时销毁掉它)
进程的创建和终止
进程的创建
将一个新进程添加到正被管理的进程集时,操作系统需要建立用于管理该进程的数据结构,并在内存中给它分配地址空间
触发进程创建的事件
- 新的批处理作业
- 交互登录
- 为提供服务而由操作系统创建
- 由现有进程派生(spawn)
一个进程派生另一个进程,前一个为父进程,后一个为子进程
触发进程终止的事件
- 正常完成
- 超过时限
- 无可用内存
- 超出范围
- 保护错误
- 算术错误
- 时间超出
- I/O失败
- 无效指令
- 特权指令
- 数据误用
- 操作员或操作系统干涉
- 父进程终止
- 父进程请求
五状态模型
- 运行态running:进程正在执行
- 就绪态ready:进程做好准备,有机会即开始执行
- 阻塞态blocked:进程在某些事件发生前不能执行
- 新建态new:该新建的进程,还未被加入可执行进程组(未加载到内存)
- 退出态exit:进程自身终止或被取消
两个队列
多个队列
被挂起的进程
原因:处理器比I/O活动速度块,会出现内存中所有进程都在等待I/O的现象
解决:交换,把内存中某个进程的一部分或全部移到磁盘中$\rightarrow$当内存中不存在就绪态的进程时,操作系统就把被阻塞的进程(阻塞态)换出到磁盘中的挂起队列(suspend queue),就新增了挂起态
单挂起态模型
包含两个挂起态的模型
进程挂起原因
- 交换:操作系统需要腾出更多的内存空间以加载更多的就绪进程
- 其他OS原因:OS对可疑进程执行挂起,检测
- 交互式用户请求:用户希望对某个进程进行检查,如程序调试
- 定时:周期执行的程序在下一次执行周期到来前挂起等待执行
- 父进程请求
进程描述
操作系统的控制结构
操作系统为了管理进程和资源,必须掌握每一个的当前状态信息,因此维护四种不同的信息表
- 内存表:跟踪内存和外存
- I/O表:管理I/O设备和通道
- 文件表:提供当前存在文件中的信息
- 进程表:管理进程
进程控制结构
程序、数据、栈和属性的集合称为进程映像(process image)
与每个进程相关的属性集称为进程控制块
(process control block,PCB),它属于一种数据结构,存放了进程的程序段和数据段的位置
进程控制块中的信息
- 进程标识符:每个进程都分配了一个唯一的数字标识符
- 处理器状态信息:由处理器寄存器的内容组成。运行一个程序时。进程的信息一定会出现在寄存器中。中断进程时,必须保存该寄存器的所有信息,以便进程恢复执行时可以恢复所有这些信息
- 进程控制信息:是操作系统控制和协调各种活动进程的所需的额外信息
进程控制
执行模式
大多数处理器至少支持两种执行模式:非特权模式和特权模式
非特权模式也称用户模式;特权模式也称系统模式、控制模式、内核模式
使用两种模式原因:保护操作系统和重要的操作系统表不受用户程序的干扰(内核模式下,软件会完全控制处理器及其所有指令、寄存器和内存)
进程状态
创建一个新进程步骤:
- 为新进程分配一个唯一的进程标识符
- 为进程分配空间
- 初始化进程控制块
- 设置正确的链接
- 创建或扩充其他数据结构
进程切换
何时?:可在操作系统从当前正运行进程中获得控制权的任何时刻发生
- 中断(interrupt):时钟中断、I/O中断、内存失效
- 陷阱(trap):错误或异常条件
- 系统调用