(3)处理机调度和死锁
一、处理机调度的概念、层次
1.调度的基本概念
在多道程序系统中,进程的数量往往是多余处理机的个数的,这样不可能同时并行地处理各个进程。处理机调度,就是从就绪队列中按照一定的算法选择一个进程将处理及分配给它运行,以实现进程的并发执行。
2.调度的三次层次——高级调度
高级调度(作业调度):按照一定的原则从外存上处于后备队列的作业中挑选一个(或多个)作业,给他们分配内存等必要资源,并建立相应的进程(建立PCB),以使它们获得竞争处理及的权利。
高级调度是辅存(外存)与内存之间的调度。每个作业只调入一次,调出一次。作业调入时会建立相应的PCB,作业调出时才撤销PCB。
高级调度主要指调入的问题,因为只有调入的时机需要操作系统来确定,但调出的时机必然是作业运行结束才调出。
3.调度的三次层次——中级调度
引入虚拟存储技术之后,可将暂时不能运行的进程调至外存等待。等它重新具备了运行条件且内存又稍有空闲时,再重新调入内存。
这么做的目的时为了提高内存利用率和系统吞吐量。
暂时调到内存外等待的进程为挂起状态。值得注意的是,PCB并不会一起调到外村,而是会常驻内存。PCB中会记录进程数据再外村中的存放位置,进程状态等信息,操作系统通过内存中的PCB来保持各个进程的监控、管理。被挂起的进程PCB会被放到的挂起队列中。
中级调度(内存调度),就是决定将哪个处于挂起状态的进程重新调入内存。
一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高。
4.进程的挂起态与七状态模型
5.调度的三个层次——低级调度
低级调度(进程调度),其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理及分配给它。
进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。
进程调度的频率很高,一般几十毫秒一次。
6.三层调度的联系、对比
7.总结
二、进程调度的时机、切换与过程、方式
1.进程调度的时机
临界资源:一个时间段内只允许一个进程使用的资源。各进程。
临界区:访问临界资源的那段代码。
2.进程调度的方式
3.进程的切换与过程
进程切换的过程主要完成了:
- 对原来运行程序各种数据的保存。
- 对新的进程各种数据的恢复。
(如:程序计数器、程序状态字、各种数据寄存器等处理及现场信息,这些信息一般曹村在进程控制块)
注意:进程切换是有代价的,因此如果过于频繁的进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分事件都花在了进程切换上,而真正用于执行进程的时间减少。
4.总结
三、调度算法的评价指标
1.CPU利用率
2.系统吞吐量
3.周转时间
4.等待时间
5.响应时间
6.总结
四、调度算法——先来先服务、短作业优先、高相应比优先
1.先来先服务FCFS
2.短作业有限SJF
非抢占式的
抢占式的流程:
上图的运算:
3.高响应比优先HRRN
4.三种算法的比较
- 上述三种算法用于早期批处理系统中
五、调度算法:时间片轮转、优先级、多级反馈队列
1.时间片轮转调度算法RR
时间片为5的情况:
- 如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法退化为先来先服务调度算法,并且会增大响应时间。因此时间片不能太大。
- 进程调度、切换是有时间代价的,因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致时机用于进程执行的时间比例减少。
2.优先级调度算法
非抢占式:
3.多级反馈队列调度算法
4.比较
六、死锁的概念
1.什么是死锁
2.进程死锁、饥饿、死循环的区别
- 死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。
- 饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。
- 死循环:某进程执行过程中一直跳不出某个循环的现象。
3.死锁产生的必要条件
4.什么时候会发生死锁
5.死锁的处理策略
6.总结
七、预防死锁
1.破坏互斥条件
2.破坏不剥夺条件
3.破坏请求和保持条件
4.破坏循环等待条件
5.总结
八、避免死锁
1.什么是安全序列
2.什么是系统的不安全状态,与死锁有何联系
3.如何避免系统进入不安全状态——银行家算法
4.总结
九、死锁的检测何解除
1.死锁的检测
2.死锁的解除
如何决定“对谁动手”:
- 进程优先级
- 已执行多长时间
- 还有多久完成
- 进程已经使用了多少资源
- 进程是交互式的还是批处理式的