处理机调度与死锁
在多道程序环境下,内存中存在着多个进程,起数目往往多余处理机数目。这就要求系统能按照某种算法,动态地将处理机分配给处于就绪状态的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。对于大型系统运行时的性能,如系统吞吐量,资源利用率,作业周转时间或响应的及时性等,在很大程度上都去决议处理机调度性能的好坏。
处理机调度算法:根据处理机分配策略所规定的处理机分配算法
处理机调度层次:
-
高级调度:又称长程调度或作业调度,主要功能是根据某种算法,为外存作业创建进程,分配资源。高级调度主要用于多道批处理系统中,而在分时和实时系统中不设置高级调度
-
低级调度:又称进程调度或短程调度,调度的对象是进程或内核级线程。主要功能是根据某种算法,分配处理机给就绪队列中的某个进程。在多道批处理,分时和实时三种类型的OS中都必须配置这级调度
-
中级调度:又称中诚调度或内存调度。引入内存调度的只要目的是提高内存利用率和系统吞吐量。把那些暂时不能运行的进程调出外存等待。当他们具备运行条件且内存又有空闲时,由中级调度将其调入内存。
处理机调度算法的目标:
-
资源利用率:CPU利用率=CPU有效工作时间 / ( CPU有效工作时间+CPU空闲等待时间 )
-
公平性
-
平衡性
-
策略强制执行
作业与作业调度:
作业:作业是一个比程序更广泛的概念。它不仅包含了通常的程序和数据,而且还配有一份作业说明书,系统根据该说明书对程序运行进行控制
作业控制块JCB:作业在系统中存在的标识,其中保存了系统对作业进行管理和调度所需的全部信息。
通常在JCB中包含的内容有:
-
作业标识
-
用户名称
-
用户账号
-
作业类型(CPU繁忙型,I/O繁忙型,批量型,终端型)
-
作业状态
-
调度信息(优先级,作业运行时间)
-
资源需求(预计运行时间,要求内存大小)
-
资源使用情况
作业运行过程:当一个作业进入系统,由作业注册程序为该作业建立JCB。在根据作业类型,将它放到相应的作业后背队列中等待调度,调度程序根据调度算法将他们装入内存。运行期间,系统按照JCB中的信息和作业说明书对作业进行控制。
作业运行的三个状态:
-
收容阶段
-
运行阶段
-
完成阶段
调度算法:
-
先来先服务调度算法 FCFS (first-come first-served)
-
缺点:不能反映作业紧迫程度,对短作业非常不利
-
-
短作业优先调度算法 SJF (short job first)
-
缺点:必须预支作业的运行时间,对长作业不理,无法实现人机交互,未考虑作业紧迫程度
-
-
优先级调度算法 PSA (priority-scheduling alogrithm)
-
高响应比优先调度算法 HRRN (highest response ratio next)
-
优先权= (等待时间+要求服务时间)/ 要求服务时间 = 响应时间 / 要求服务时间
-
进程调度:
进程调度的任务:
-
保存处理机的现场信息
-
按某种算法选取进程
-
把处理器分配给进程
进程调度机制
-
排队器:为了提高进程调度的效率,应事先将系统中所有就绪进程按照一定策略排成一个或多个队列,以便调度程序能最快找到它
-
分派器:分派器依据进程调度程序所选的进程,将其从就绪队列中取出,然后进行从分派器选出到进程间的上下文切换,将处理机分配给新选出的进程
-
上下文切换器:包含两次上下文切换操作
-
保存当前进程上下文,装入分派程序上下文
-
一处分派程序上下文,装入所选进程上下文
-
进程调度方式:
-
非抢占式方式:不可抢占,只有当前进程执行完毕或阻塞才将处理器交出。适用于大多数批处理系统,但不能用于分时系统和大多数实时系统
-
抢占式方式:允许调度程序根据某种原则,去暂停正在执行的进程,将已分配给该进程的处理机重新分配给另一个进程。
-
抢占遵循一下原则:
-
优先权原则
-
短进程有限原则
-
时间片原则
-
-
轮转调度算法:系统将降所有的就绪进程按FCFS策略排成一个就绪队列,按照时间片轮转调度
时间片大小的确定对系统性能有着很大的影响
优先级调度算法
-
非抢占式优先级调度算法
-
抢占式优先级调度算法
多队列调度算法
多级反馈队列调度算法(目前公认的一种较好的进程调度算法):在第一队列时间片内未完成则进入第二对了
描述如下:
-
设置多个就绪队列:第一队列优先级最高,时间片短,第二个次之,时间片为第一队列的一倍,第三的时间片长度则是第二的一倍
-
每个队列采用FCFS算法
-
按队列优先级调度:第一队列全部调用完才调用第二队列
调度算法性能:在多级反馈队列调度算法中,如果规定第一个队列的时间片略大于大多数人机交互所需的处理时间,便能较好地满足各种类型用户的需求
-
终端型用户:最好最第一队列规定的时间片中完成用户提交的交互性作业
-
短批处理作业用户
-
长批处理作业用户
基于公平原则的调度算法:以上介绍的调度算法只是保证优先运行,而未考虑作业占用了多少处理机时间,也未考虑调度的公平性
-
保证调度算法
-
公平分享调度算法:分配给每个进程相同的处理机时间,对进程而言公平,对用户就不公平了。
实时调度:
-
最早截止时间优先算法 EDF
-
最低松弛度优先算法 LLF
死锁
资源:
-
可重用性资源和消耗性资源
-
可抢占性资源和不可抢占性资源
死锁起因:
-
竞争不可抢占性资源引起死锁
-
竞争可消耗资源引起死锁
-
进程推进顺序不当引起死锁
产生死锁的必要条件:产生死锁必须同时具备以下四个必要条件
-
互斥条件
-
请求和保持条件
-
不可抢占条件
-
循环等待条件
处理死锁的方法:
-
预防死锁
-
破环“请求和保持条件”
-
第一种协议:所有资源一次分配。缺点:资源严重浪费,进程经常会发生饥饿现象
-
第二种协议:第一种的改进,只需获得运行初期所需的资源后便可运行
-
-
破坏不可抢占:类似让权等待
-
破坏循环等待:
-
-
避免死锁:
-
检测死锁:
-
解除死锁