1、处理机调度的层次(重要)与目标
高级调度(长程调度)
- 调度对象
- 作业
- 作用
- 作业管理程序的实现。
- 动作
- 将外存作业调入内存,创建
PCB
等。
- 将外存作业调入内存,创建
实时系统无作业调度。
中级调度(内存调度)
- 调度对象
- 静止就绪进程
- 作用
- 实现内存管理中的进程对换。
- 动作
- 将外存中已经具备运行条件的就绪进程重新载入内存。
具有对换功能的操作系统有该调度。
低级调度(短程调度)
- 调度对象
- 就绪进程
- 作用
- 决定就绪队列中哪个进程应获得处理机,并将处理机分配给选中的进程。
- 动作
- 选择就绪进程分配处理机。
处理机调度算法的目标(掌握)
- 资源利用率
- 公平性
- 平衡性
- 策略强制执行
批处理系统的目标
- 平均周转时间短
T = 1 n ∑ i = 1 n T i T=\frac{1}{n}\sum^{n}_{i=1}T_i T=n1i=1∑nTi - 平均带权周转时间短
W = 1 n ∑ i = 1 n T i T s W=\frac{1}{n}\sum^n_{i=1}\frac{T_i}{T_s} W=n1i=1∑nTsTi - 吞吐量大
- 指单位时间内系统所完成的作业数。
分时系统的目标
- 响应时间短
- 从客户发出请求到处理结果返回到显示器的时间间隔。
- 均衡性好
- 系统响应时间长短和请求的复杂性相适应。
实时系统目标
- 截止时间保证
- 可预测性
不同分类的目标
- 用户
- 周转时间短
- 响应时间快
- 截止时间保证
- 优先权准则
- 系统
- 吞吐量大
- 处理机利用率高
- 平衡性
2、作业与作业调度(算法)
批处理系统的作业
- 作业
- 程序+数据+作业说明书
- 作业控制块
- 作业管理系统用于管理和控制作业运行的数据结构。
- 作业运行的三个阶段和三种状态
阶段 | 状态 |
---|---|
收容阶段 | 后备状态 |
运行阶段 | 运行状态 |
完成阶段 | 完成状态 |
作业调度的主要任务
决定以下问题
- 接纳多少个作业?
- 取决于多道程序度允许多少个作业同时在内存中运行。
- 接纳哪些作业?
- 取决于所采用的调度算法。
先来先服务(FCFS)和短作业优先(SJF)
适用场景
- 作业调度和进程调度。
先来先服务
- 新作业放队尾。
- 缺陷
- 对短作业(进程)不公平。
短作业优先
- 短作业优先调度。
- 抢占式:新作业调度。
- 非抢占式:新作业不调度。
比较剩余时间,而非总时间。
- 缺陷
- 对长作业不利。
优先级调度算法和高响应比优先调度算法
优先级调度算法
- 适用场景
- 作业调度和进程调度。
- 赋予静态优先级。
高响应比优先调度算法
- 赋予动态优先级。
P r i o r i t y = T w a i t + T s e r v e T s e r v e Priority=\frac{T_{wait}+T_{serve}}{T_{serve}} Priority=TserveTwait+Tserve
Twait为当前等待时间,Tserve为需要占用的时间
- 优点
- 长短作业兼顾。
3、进程调度
进程调度的任务、机制和方式
- 任务
- 选取进程
- 保存现场
- 分配处理器
- 方式
- 抢占式
- 批处理:防止长作业霸占
CPU
- 分时:人机交互
- 实时:紧迫任务
- 批处理:防止长作业霸占
- 非抢占式
- 抢占式
轮转调度算法
- 先到先服务+时钟中断+时间片原则。
- 每个进程运行一个时间片即被抢占
CPU
。
- 每个进程运行一个时间片即被抢占
新进程到达时不调度
多队列调度算法
- 不同类型的进程组织在不同队列中。
多级反馈队列调度算法
- 优先级越高的队列执行时间片越小。
- 新进程(统一为抢占式)首先进入最高优先级队列,每个队列采用先到先服务。
- 时间片结束后若未执行完,则加入下一级队列末尾。
- 时间片未结束却被其他进程抢占的进程,不降级,到队列末尾。
同时只有一个队列在运行,该队列为所有非空队列中优先级最高的队列。
- 特点
- 长短作业兼顾,有较好的响应时间。
5、产生死锁的原因和必要条件(重要)
- 死锁
- 多个进程在运行过程中因争夺资源而造成的一种僵局。
资源问题
- 互斥访问不可被抢占的资源(临界资源)。
产生死锁的原因
竞争资源
- 竞争非剥夺性资源
- 资源数量不能满足各个进程运行的需要。
- 形成环形等待。
- 竞争临时性资源
- 可以创建和撤销的资源为临时性资源。
- 处理顺序不当。
进程间推进顺序非法
- 进入了不安全状态,就可能发生死锁。
死锁的定义、必要条件和处理方法
定义
- 一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件。
资源使用的释放很重要。
必要条件
- 互斥条件
- 进程对分配到的资源进行排它性使用。
- 请求和保持条件
- 进程保持了至少一个资源,但又提出新的资源请求。
- 不剥夺条件
- 进程已获得的资源只能在用完时自己释放。
- 环路等待条件
- 发生死锁时一定形成了环形等待链。
解决死锁的方法
- 预防死锁
- 破坏四个必要条件的一个或几个。
- 避免死锁
- 防止系统进入不安全状态(控制资源分配)。
- 检测死锁
- 解除死锁
6、预防死锁(重要)
- 除了互斥条件,其他必要条件都可以破除。
破坏请求和保持条件
- 必须一次性地申请整个运行过程需要的全部资源。
- 不会保持的同时又请求。
破坏不剥夺条件
- 新请求不能满足时,必须释放它已经保持了的所有资源。
破坏环路等待条件
- 所有进程对资源的请求必须严格按照资源序号递增的次序给出。
7、避免死锁(重要)
安全状态
- 依次为
n
个进程分配资源,直至最大需求,每个进程都可顺利地完成。- 完成后释放资源。
银行家算法
- 避免死锁的关键
- 准确的预测是否出现死锁。
数据结构 | 变量名 | 作用 |
---|---|---|
可利用资源向量 | Avaliable | 可利用的资源数目 |
最大需求矩阵 | Max | 对资源的最大需求 |
分配矩阵 | Allocation | 已分配的资源数 |
需求矩阵 | Need | 尚需的资源数 |
- 检查
- 请求数不超过尚需需求数?
- 请求数不超过可利用资源数?
- 试探
- 假装请求得到分配。
- 检测
- 判断当前系统是否处于安全状态。
- 安全性算法
数据结构 | 变量名 | 作用 |
---|---|---|
工作向量 | Work | 可提供给进程运行的资源数目 |
结束数组 | Finish | 判断能否顺利完成 |
答题最后要给出安全序列。
习题
题目一