前言
在我看来,进程之于处理器犹如细胞之于心脏,进程好比体内的细胞,而操作系统那就如整个生理系统。因此,进程对于操作系统来说至关重要。
Ⅰ. 进程
一组元素组成的实体,进程的两个基本元素是程序代码(program code, 可能被执行相同程序的其他进程共享)和代码相关联的数据集(set of data)。
进程控制块:
标识符
状态
优先级
程序计数器
内存指针
上下文数据
I/O状态信息
记账信息
Ⅱ. 进程状态
两状态进程模型
非运行态
运行态
进程的创建和终止
导致进程创建的原因:
新的批处理作业
交互登录
操作系统因为提供一项服务而创建
由现有的进程派生
导致进程终止的原因
正常完成
超过时限
无可用内存
越界
保护错误
算术错误
时间超出
I/O失败
无效指令
特权指令
数据误用
操作员或操作系统干涉
父进程终止
父进程请求
五状态模型
新建态
就绪态
运行态
阻塞态
退出态
被挂起的进程
交换:把内存中某个进程的一部分或全部移到磁盘中
就绪态:进程在内存中并可以执行
阻塞态:进程在内存中并等待一个事件
阻塞/挂起态:进程在外存中并等待一个事件
就绪/挂起态:进程在外存中,但是只要被载入内存就可以执行
比较重要的转换:
阻塞-->阻塞/挂起
阻塞/挂起-->就绪/挂起
就绪/挂起-->就绪
就绪-->就绪/挂起
其他几种转换:
新建-->就绪/挂起及新建-->就绪
阻塞/挂起-->阻塞
运行-->就绪/挂起
各种状态-->退出
挂起进程特点:
- 进程不能立即执行
- 进程可能是或不是正在等待一个事件。如果是,阻塞条件不依赖于挂起条件,阻塞事件的发生不会使进程立即被执行
- 为阻止进程执行,可以通过代理把这个进程置于挂起状态,代理可以是进程自己,也可以是父进程或操作系统
- 除非代理显式地命令系统进行状态转换,否则进程无法从这个状态中转移
导致进程挂起的原因:
交换
其他OS原因
交互式用户请求
定时
父进程请求
Ⅲ. 进程的描述
操作系统的控制结构:
内存表
I/O表
文件表
主进程表
进程控制结构
进程映像是程序、数据、栈和属性的集合
包括 用户数据、用户程序、系统栈和进程控制块
进程控制块:
进程标识信息
处理器状态信息
进程控制信息
Ⅳ. 进程控制
执行模式:用户态和内核态(系统态或控制态)
模式切换
- 把程序计数器置成中断处理程序的开始地址
- 从用户态切换到内核态,使得中断处理代码可以包含有特权的指令
进程创建:
- 给新进程分配一个唯一的进程标识符
- 给进程分配空间
- 初始化进程控制块
- 设置正确的连接
- 创建或扩充其他数据结构
进程切换
进程执行的中断机制
中断:当前指令的外部执行,对异步外部事件的反应,包括时钟中断、I/O中断和内存失效
陷阱:与当前指令的执行相关,处理一个错误或异常条件
系统调用:显示请求,调用操作系统函数
进程状态的变化(与模式切换不同)
- 保存处理器上下文环境,包括程序计数器和其他寄存器
- 更新当前处于运行态进程的进程控制块
- 将进程的进程控制块移到相应的队列
- 选择另一个进程执行
- 更新所选择进程的进程控制块,包括将进程的状态变为运行态
- 更新内存管理的数据结构
- 恢复处理器在被选择的进程最后一次切换出运行态时的上下文环境
Ⅴ. 操作系统的执行
无进程的内核:在所有进程之外执行操作系统内核
在用户进程执行
基于进程的操作系统