第三章 处理器调度与死锁--笔记
来源:互联网 发布:炫浪网络社区小说 编辑:程序博客网 时间:2024/06/05 15:40
处理器调度
原因
处理器调度的好坏会影响系统性能,像吞吐量和响应时间(这个自不必说)
层次
高级调度
又称作业调度,以作业(Job)而不是进程作为调度对象,粗暴来讲 Job = 程序 + 数据 + 作业说明书 ...
Do What:将外存上的后备队列中作业掉入内存,为之新建进程,插入内存就绪队列。
中级调度
以对象为进程
Do What: 将内存中的进程挂起到外存,将外存中的进程掉入内存,插入就绪队列。
低级调度
又称进程调度,以对象为进程
Do What: 1. 保存CPU上下文信息,如PC、寄存器等到PCB中
2. 按算法选取内存就绪队列中的进程
3. 为选中的进程恢复CPU上下文信息,PCB中的信息到PC、寄存器等中
调度方式: 1. 非抢占, 已获分配处理器的进程不得被其他进程剥夺,直至完成或发生某事件,如I/O,P操作阻塞等
2. 抢占,抢占原则:优先级、短进程优先、时间片
(书上把“时间片”列为抢占原则中的一个,我觉得欠妥,因为用到事件的调度算法主要是轮转和多
级反馈队列,轮转不涉及抢占,多级反馈队列虽然有抢占,但是只是在高级队列中的进程可以抢
占低级队列中的进程,当一个进程用完他的时间片却还没执行完毕时,他会掉到下级反馈队列的
末尾,感觉时间片和抢占没什么关系的样子。)
既然,调度分三种,那么自然不同的调度方式,就会有不同的调度模型啦。下面主要介绍三种模型:
华丽丽的分割线。。。
-------------------------------------------------------------------------------------------------------------------------
调度模型
低级调度模型
上图 ! 结合概念,看看图中的模型:
低级调度模型里面的就绪队列是使用FCFS的,维护无耗费
高级、低级调度结合模型
高级、中级、低级调度结合模型
这个模型就更复杂了,加入了中级调度之后,比上面一个模型,多了两个步骤:把就绪挂起队列添加到内存就 绪队列的末尾;把内存就绪队列挂起到外存。图就不画了,想看看书上的。@参考文献 [1]
调度算法准则
面向用户
平均周转时间、平均带权周转时间、响应时间、截止时间、优先级......
(周转时间 = 完成时间-到达时间, 响应时间=等待时间+服务时间, 带权周转时间=周转时间 / 服务时间)
面向系统
吞吐量、CPU等资源的利用率
常见调度算法
FCFS
S(J)PF
高优先权优先调度
高响应比优先调度
轮转
多级反馈队列调度
死锁
原因
1. 竞争非剥夺资源
2. 进程间推进顺序非法
必要条件
1)互斥条件
2)请求和保持条件(进程占有了某些资源,还想请求某些资源)
3) 非剥夺资源
4)环路等待条件 --其实 2) 、 4) 是等价的
解决办法(简要)
(1)死锁预防:至少破坏一个死锁必要条件
(2)避免死锁:防止系统进入不安全状态
(3)死锁检测 和 解除:动态检测死锁,确定与死锁有关的进程和资源--找到所有的 "进程-资源环"(自己 编的),解环--挂起一些进程,拿走资源,让剩下的进程继续运行
你自己推一推就会发现,诶 ? 好像死锁预防的破坏条件,和避免死锁的防止进入不安全状态差不多嘛 ! 的 确是差不多,书上说死锁预防的效果好一些,但是牺牲了进程的并发。
解决办法(具体)
(1)死锁预防
1. 消除 “请求和保持条件”:如果不能为一个进程一次性分配所有需要的资源,那么一个也不分配
2. 消除 “非剥夺资源”:允许运行中的进程的资源被抢占
3. 消除“环路等待条件”:为所有的资源编号,每个进程必须按序号递增的顺序请求需要的资源。
(2)避免死锁
安全状态:
所谓安全状态,是指系统自此状态出发,能够找到某种进程顺序,为每个进程分配资源,最后使得所有进程顺利执行的状态。进入了不安全状态就代表即将死锁。关键在于:如何使系统不进入不安全状态。
银行家算法:
这是Dijkstra提出的,避免死锁的经典算法。好像还沿用至今,用于银行的现金贷款。算法非常直观。华丽丽的分割线。。。
-------------------------------------------------------------------------------------------------------------------------
算法简述:
设资源数目为m、进程数目为n
-------------------------------------------------------------------------------------------------------------------------
involved data structure:
Available: 长度为m的一维数组,Available[j] 表示系统现有 j 类资源的个数
Max: nxm矩阵,Max[i][j] 表示进程 i 需要 j 类资源的最大数目
Allocation: nxm矩阵,Allocation[i][j]表示进程 i 已获得 j 类资源的数目
Need: nxm矩阵,Need[i][j] 进程 i 仍需 j 类资源的数目
-------------------------------------------------------------------------------------------------------------------------
Banker's Algorithm:
1. Main Algorithm
进程 i 发来请求,说需要 j 类资源,个数为
(1) 若 则 跳至 (2);否则出错
(2) 若 则跳至 (3);否则 Pi 须等待
(3) 试探,把资源分配给进程 Pi,修改下列数据结构的值 (先备份)
(4) 检测安全性,若安全,则真正如此分配;若不安全,撤销操作。让进程 Pi 等待去吧
2. Algorithm for checking safety
1. 初始化两个数组: work := Available、finish := false;
2. 若能找到满足两个条件的进程:(1) finish[i] = false; (2) Need[i][j] <= work[j];执行步骤 3,否则执行步骤 4
3. Pi 获得资源顺利执行; work[j] = work[j] + Allocation[i][j];finish[i] = true; 跳至步骤 2
4. 如果对所有的i,finish[i] = true,则表示处于安全状态,否则处于不安全状态
-------------------------------------------------------------------------------------------------------------------------
(3)死锁检测 和 解除
死锁检测:
1. 画资源分配图
2. 死锁定理: S状态为死锁状态的充分条件--S状态的资源分配图是不可完全简化的
嗯,你发现我在水了吧--图的结构没说啊 ?! 怎么简化啊 ?! 这部分的内容请看 文献[1] P112~113
死锁解除:
常采用的解除死锁的两种方法:
(1) 剥夺资源:从其他进程剥夺足够数量的资源给死锁进程;我称之为强势解环
(2) 撤销进程:逐个撤销死锁进程,直至死锁消失;我称之为暴力解环
References:
[1] 计算机操作系统(第三版)汤小丹、梁红兵、哲凤屏、汤子瀛 编著
- 第三章 处理器调度与死锁--笔记
- [OS] 第三章 处理机调度与死锁
- 第三章 、处理机调度与死锁学习
- 操作系统第三章 处理机调度与死锁
- 第三章 处理机调度与死锁
- 【Operating System】第三章 处理机调度与死锁
- 第四章 调度与死锁
- 处理机的调度与死锁笔记
- 操作系统笔记---处理机调度与死锁
- 汤子瀛 操作系统整理[3]——第三章 处理机调度与死锁
- 《linux内核设计与实现》阅读笔记 第三章 调度
- 处理机调度与死锁
- 处理机调度与死锁
- 处理机调度与死锁
- CPU调度与死锁
- 调度与死锁
- 处理机调度与死锁
- 处理机调度与死锁
- error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面)[转]
- 切图那点事
- php 第三方登录
- linux 模拟http请求
- Nutch 快速入门(Nutch 2.2.1)
- 第三章 处理器调度与死锁--笔记
- 关于JNDI,tomcat,jsp的一个小实例
- iOS事件传递
- 使用正确的姿势更新SSIS Data Flow Component以适应字段类型变化
- Java native HelloWorld
- 关于Css控制Web打印
- 九月十七日:安卓发包后的小结
- 一个基于svg的圆形loading动画
- sqoop工具使用大全