处理器管理
进程管理
进程的数据描述
进程控制块(Process Control Block)
进程控制块PCB是OS用于记录和刻画进程状态及环境信息的数据结构
- 标识信息: 用于存放唯一标识该进程的信息
现场信息: 用于存放该进程运行时的处理器现场信息
- 用户可见寄存器内容:数据寄存器、地址寄存器
- 控制与状态寄存器内容:PC、IR、PSW
- 栈指针内容:核心栈与用户栈指针
- 控制信息: 用于存放与管理、调度进程相关的信息
进程映像(Process Image)
- 进程控制块
- 进程程序块
- 进程数据块
- 核心栈
某一时刻进程的内容及其执行状态集合
进程映像是内存级的物理实体,又称为进程的内存映像
进程管理的实现
队列管理模块
操作系统实现进程管理的核心模块
进程与资源调度围绕进程队列展开
进程的控制与管理
- 进程创建
- 进程撤销
- 进程阻塞
- 进程唤醒
- 进程挂起
- 进程激活
进程控制过程中涉及对OS核心数据结构(进程表/PCB池/队列/资源表)的修改, 为防止与时间有关的错误, 应使用原语
原语是由若干条指令构成的完成某种特定功能的程序,执行上具有不可分割性
原语的执行可以通过关中断实现
进程控制使用的原语称为进程控制原语, 另一类常用原语是进程通信原语
进程切换与模式切换
进程上下文(Process context)
进程切换
进程切换指从正在运行的进程中收回处理器,让待运行进程来占有处理器运行
进程切换实质上就是被中断运行进程与待运行进程的上下文切换,处理过程是:
- 保存被中断进程的上下文
- 转向进程调度
- 恢复待运行进程的上下文
模式切换
进程切换必须在操作系统内核模式下完成,这就需要模式切换
模式切换又称处理器状态切换
- 用户模式到内核模式
由中断/异常/系统调用中断用户进程执行而触发 - 内核模式到用户模式
OS执行中断返回指令将控制权交还用户进程而触发
多线程技术
多线程环境概述
单线程结构进程
多线程结构进程
在多线程环境中,进程是操作系统中进行保护和资源分配的独立单位, 具有:
- 用来容纳进程映像的虚拟地址空间
- 对进程、文件和设备的存取保护机制
线程是进程的一条执行路径,是调度的基本单位,同一个进程中的所有线程共享进程获得的主存空间和资源。
线程状态有运行、就绪和睡眠,无挂起
OS感知线程环境下:
- 处理器调度对象是线程
- 进程没有三状态(或者说只有挂起状态)
OS不感知线程环境下:
- 处理器调度对象仍是进程
- 用户空间中的用户调度程序调度线程
多线程的实现技术
内核级线程KLT
线程管理的所有工作由OS内核来做
OS直接调度KLT
特点:
- 进程中的一个线程被阻塞了,内核能调度同一进程的其它线程占有处理器运行
- 多处理器环境中,内核能同时调度同一进程中多个线程并行执行
- 内核自身也可用多线程技术实现,能提高操作系统的执行速度和效率
- 应用程序线程在用户态运行,线程调度和管理在内核实现,在同一进程中,控制权从一个线程传送到另一个线程时需要模式切换,系统开销较大
用户级线程ULT
线程管理的所有工作都由应用程序完成,内核没有意识到线程的存在
特点:
- 所有线程管理数据结构均在进程的用户空间中,线程切换不需要内核模式,能节省模式切换开销和内核的宝贵资源
- 允许进程按应用特定需要选择调度算法,甚至根据应用需求裁剪调度算法
- 能运行在任何OS上,内核在支持ULT方面不需要做任何工作
- 不能利用多处理器的优点,OS调度进程,仅有一个ULT能执行
- 一个ULT的阻塞,将引起整个进程的阻塞
Jacketing技术
把阻塞式系统调用改造成非阻塞式的
当线程陷入系统调用时,执行jacketing程序
由jacketing 程序来检查资源使用情况,以决定是否执行进程切换或传递控制权给另一个线程
用户级线程vs. 内核级线程
ULT适用于解决逻辑并行性问题
KLT适用于解决物理并行性问题
多线程实现的混合式策略
线程创建是完全在用户空间做的
单应用的多个ULT可以映射成一些KLT,通过调整KLT数目,可以达到较好的并行效果
特点:
- 线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行
- 一个应用中的多个用户级线程被映射到一些(小于等于用户级线程数目)内核级线程上
- 程序员可以针对特定应用和机器调节内核级线程的数目,以达到整体最佳结果
线程状态
处理器调度
处理器调度的层次
高级调度:又称长程调度,作业调度
决定能否加入到执行的进程池中
中级调度,又称平衡负载调度
决定主存中的可用进程集合
低级调度:又称短程调度,进程调度
决定哪个可用进程占用处理器执行
处理器调度层次与进程状态转换
处理器调度层次与关键状态转换
高级调度
分时OS中,高级调度决定:
- 是否接受一个终端用户的连接
- 命令能否被系统接纳并构成进程
- 新建态进程是否加入就绪进程队列
批处理OS中,高级调度又称为作业调度,功能是按照某种原则从后备作业队列中选取作业进入主存,并为作业做好运行前的准备工作和完成后的善后工作
中级调度
引进中级调度是为了提高内存利用率和作业吞吐量
中级调度决定那些进程被允许驻留在主存中参与竞争处理器及其他资源,起到短期调整系统负荷的作用
中级调度把一些进程换出主存,从而使之进入“挂起”状态,不参与进程调度,以平顺系统的负载
低级调度
按照某种原则把处理器分配给就绪态进程或内核级线程
进程调度程序:又称分派程序,操作系统中实现处理器调度的程序,是操作系统的最核心部分
处理器调度策略的优劣直接影响到整个系统的性能
主要功能
- 记住进程或内核级线程的状态
- 决定某个进程或内核级线程什么时候获得处理器,以及占用多长时间
- 把处理器分配给进程或内核级线程
- 收回处理器
处理器调度算法
选择处理器调度算法的原则
- 资源利用率:使得CPU或其他资源的使用率尽可能高且能够并行工作
- 响应时间:使交互式用户的响应时间尽可能小,或尽快处理实时任务
- 周转时间:提交给系统开始到执行完成获得结果为止的这段时间间隔称周转时间,应该使周转时间或平均周转时间尽可能短
- 吞吐量:单位时间处理的进程数尽可能多
- 公平性:确保每个用户每个进程获得合理的CPU份额或其他资源份额
优先级调度
调度器总是选择优先级较高的进程
提供多个就绪队列 (一组就绪队列) 代表各个级别的优先级
一个进程的优先级应该随着它的时间或执行的历史而变化
调度的模式
非抢占式
一个进程一旦处于运行态,它就不断执行直到终止,或者为等待I/O或请求某些操作系统服务而阻塞自己
抢占式
当前正在运行的进程可能被操作系统中断,并转移到就绪态,关于抢占的决策可能是在一个进程到达时,或者在一个中断发生后把一个被阻塞的进程置为就绪态时,或者基于周期性的时间中断