进程管理
进程与线程
进程的概念与特征
进程的概念
引入目的实现
更好的描述和控制程序的并发执行,操作系统的并发性和共享性(两个最基本特性)
进程控制块(PCB)
目的
为了使参与并发的程序(包含数据)能够独立运行,配备专门的数据结构
用途
描述进程的基本情况和运行状态,控制和管理进程
进程映像(进程实体)
- 程序段
- 相关数据段
- PCB
Note
创建进程实际上是创建进程映像的 PCB
撤销进程实际上是撤销进程的 PCB
进程映像是静态的,进程是动态的
进程的特征
- 动态性(最基本):包含创建、活动、暂停、终止等过程,动态的产生、变化、消亡
- 并发性:多个进程实体同时存在与内存中
- 独立性:能够独立运行、独立获得资源、独立接受调度的基本单位
- 异步性:按各自独立的、不可预知的速度向前推进
- 结构性:进程实体是由程序段+数据段、进程控制块组成
进程的状态与转换
- 运行态:进程正在处理机上运行
- 就绪态:进程获得除了处理机外的一切资源,一旦得到处理机便可立即运行
- 阻塞态:进程正在等待某一时间而暂停运行
- 创建态:进程正在被创建:首先申请一个空白 PCB,并向 PCB 中填写一些控制和管理进程的信息,系统为该进程分配运行时所必须的资源,然后转入就绪态
- 结束态:进程正在从系统中消失
进程控制
一般把进程控制的程序段称为原语,特点是执行期间不允许中断
进程的创建
- 为新进程分配一个唯一的进程标识号,并申请一个空白 PCB(有限的)
- 为进程分配资源、为新进程的程序和数据分配必要的内存空间
- 初始化 PCB,包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,设置进程的优先级
- 若进程就绪队列能够接纳新进程,将新进程插入就绪队列
进程的终止
进程终止的原因
- 正常结束
- 异常结束
- 外界干预
过程
- 根据被终止进程的标识符,检索 PCB,从中读出该进程的状态
- 被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程
- 若还有子孙进程,则终止其子孙进程
- 将资源归还给父进程或操作系统
- 将 PCB 从队列删除
进程的阻塞和唤醒
进程的阻塞
进程的阻塞是进程自身的一种主动行为
- 通过标识号找到对应的 PCB
- 若该进程为运行态,则保护现场,将其状态转为阻塞态,停止运行
- 将 PCB 插入相应的时间等待队列,将处理机资源调度给其他就绪进程
进程的唤醒
- 在该事件的等待队列中找到相应进程的 PCB
- 将其从等待队列中移出,并设置状态为就绪态
- 将该 PCB 插入就绪队列,等待调度
进程切换
- 保存处理机上下文,包括程序计数器和其他寄存器
- 更新 PCB 信息
- 把进程的PCB 移入相应的队列
- 选择另一个进程执行,并更新 PCB
- 更新内存管理的数据结构
- 回复处理机的上下文
进程的组织
进程控制块
- 进程描述信息
- 进程标识符
- 用户标识符
- 进程控制和管理信息
- 进程当前状态
- 进程优先级
- 资源分配清单
- 处理机相关信息
程序段
能被进程调度程序调度到 CPU 执行的程序代码段,多个进程可以运行同一个程序
数据段
可以是进程对应的程序加工的原始数据也可以是程序执行时产生的中间或最终结果
进程的通信
共享存储
- 基于数据结构的共享
- 基于存储区的共享
消息传递
- 直接通信方式:
- 间接通信方式:进程把消息发送到某个中间实体,接收进程从中间实体取得消息
管道通信
采用半双全工通信,某一时刻要先写满,写进程先把缓冲区写满才让读进程读
线程概念和多线程模型
线程的基本概念
引入线程的目的
减小程序在并发执行时付出的时空开销,提高操作系统的并发性能
结构特点
- 进程中的一个实体
- 系统独立调度和分派的基本单位
- 线程自己不拥有系统资源
- 运行中间呈现间断性,也有就绪、阻塞和运行三种状态
线程与进程的比较
方式 | 线程 | 进程 |
---|---|---|
调度 | 独立调度的基本单位 | 拥有资源的基本单位 |
拥有资源 | 不拥有资源 | 拥有资源的基本单位 |
并发性 | 线程之间可以并发执行 | 进程之间可以并发执行 |
系统空间 | 小 | 大 |
地址空间和其他资源 | 统一进程中的线程间共享进程的资源 | 进程之间的地址空间互相独立 |
通信 | 直接读写进程数据段 | 需要进程同步和互斥手段的辅助 |
线程的属性
- 线程是一个轻型实体,不拥有系统资源,每个线程对应一个唯一的标识符和线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态
- 不同的线程可以调用执行相同的程序,即同一个程序被不同的用户调用时,操作系统把他们创建成不同的线程
- 同一进程中的各个线程共享该进程所拥有的资源
- 线程是处理机的独立调度单位,多个线程可以并发执行
- 一个线程被创建后就开始它的生命周期
线程的实现方式
用户级线程
有关线程管理都由应用程序完成,内核意识不到线程的存在。
应用程序通过线程库设计成多线程程序
内核级线程
线程的管理工作由内核完成
多线程模型
多对一模型
多个用户级线程映射到一个内核级线程
优点:线程管理在用户空间进行,效率比较高
缺点:一个线程被阻塞时,整个进程都会被阻塞,多个线程不能并行运行在处理机
一对一模型
每个用户级线程映射到一个内核级线程
优点:并发能力强
缺点:创建线程的开销比较大,影响到应用程序的性能
多对多模型
n 个用户级进程映射到 m 个内核级线程,m <= n
处理机调度
调度的概念
调度的基本概念
对处理机进行分配,从就绪队列中选择一个进程并将处理机分配给它运行,实现进程并发执行
调度的层次
高级调度(作业调度)
内存与辅存之间的调度
中级调度(内存调度)
提高内存的利用率和系统吞吐量
低级调度(进程调度)
从就绪队列选取一个进程将处理机分配给它
三级调度的联系
高级调度 | 中级调度 | 低级调度 | |
---|---|---|---|
次数 | 低 | 中等 | 高 |
调度的实际、切换、过程
不能进行进程的调度和切换的情况
- 处理中断过程
- 进程处于操作系统内核程序临界区
- 其他需要完全屏蔽中断的原子操作过程:加锁、解锁、中断现场保护、恢复等
应该进行进程的调度和切换
- 发生引起调度条件且无法继续运行下去(非剥夺调度)
- 中断处理结束或自陷处理结束后(剥夺方式)
进程的调度方式
- 非剥夺调度方式(非抢占方式)
- 剥夺调度方式(抢占方式)
调度的基本准则
- CPU 利用率
- 系统吞吐量
- 周转时间
- 作业的周转时间
周 转 时 间 = 作 业 完 成 时 间 − 作 业 提 交 时 间 周转时间=作业完成时间-作业提交时间 周转时间=作业完成时间−作业提交时间 - 平均周转时间
$平均周转时间=(作业 1 的周转时间+\cdots +作业 n 的周转时间)/ n $ - 带权周转时间
代 权 周 转 时 间 = 作 业 周 转 时 间 作 业 实 际 运 行 时 间 代权周转时间=\frac{作业周转时间}{作业实际运行时间} 代权周转时间=作业实际运行时间作业周转时间 - 平均带权周转时间
平 均 带 权 周 转 时 间 = ( 作 业 1 的 带 权 周 转 时 间 + ⋯ + 作 业 n 的 带 权 周 转 时 间 ) / n 平均带权周转时间=(作业 1 的带权周转时间+\cdots +作业 n 的带权周转时间)/n 平均带权周转时间
- 作业的周转时间