处理机的多级调度
处理机的多级调度
-
高级调度(作业/长程/宏观调度)
用于决定把外存上处于后备队列中的那些作业 调入内存,并为它们创建进程和分配必要资源; 然后,再将新创建的进程插入到就绪队列上准 备执行
-
中级调度(中程调度)
为提高内存利用率和系统吞吐量,应使那些暂 时不能运行的进程放弃占用内存资源,即调至 外存上去等待;当内存稍有空闲时,可将外存 中那些重又具备运行条件的就绪进程重新调入 内存,修改其状态和挂到就绪进程队列等待进 程调度
-
低级调度(进程/短程调度)
用来决定就绪队列中的哪个进程将获得处理机, 然后再由分派程序执行把处理 机分配给该进程的具体操作
- 调度方式分类
-
非抢占方式(仅适用于批处理系统)
- 处理机分配给进程直至完成或阻塞
- 引起进程调度的因素:当前进程执行完毕或 因发生事件、提出I/O请求、执行原语操作而 阻塞
- 实现简单、系统开销小,但难以满足紧急任 务要求,故不宜在实时系统中采用
- 抢占方式(分时、实时及批处理系统均可)
- 允许暂停正在执行进程和重新分配处理机
- 抢占原则(优先权/短作业优先/时间片原则)
-
非抢占方式(仅适用于批处理系统)
- 调度方式分类
抢占调度算法
短作业优先调度算法(SJF/SPE)
基本思想:选取服务时间最短的若干道作业装入内存,并采用适当进程调度算法调度执行
高优先权优先调度算法(FPF)
基本思想:见名知意
高响应比优先调度算法
基本思想:短作业优先调度算法+动态优先权机制
动态优先权机制是在创建进程时赋予该进程一个初始优先级,然后其优先级随着进程的执行情况的变化而改变,以便获得更好的调度性能。
优先权(响应比):(等待时间+要求服务时间)/要求服务时间
因此,使得作业的优先权随着等待时间的增加而提高。
优点:
该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使得长作业长时间得不到服务。
缺点:
该算法每次调度前都要进行响应比的计算,增加系统的开销。
时间片轮转调度算法
基本原理:系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度都将cpu交给队首的进程,令其执行一个时间片的时间,执行的时间片用完就令该进程放弃时间片,并将其挂入队尾进行下一次的等待。
优点:
基于时间片轮转,能让每个任务都有时间得到执行,有较好的交互性
缺点:
时间片的确定比较复杂。 时间片太短,有利于短作业,但会频繁的发生中断,进程上下文的切换,增加系统开销;时间片太长,使得每一个进程在一个时间片单位内都能完成任务,算法便退化成了先来先服务算法 (FCFS)算法,无法满足交互式需求。
周转时间:从作业提交到作业完成的时间间隔
带权周转时间:反映长短作业的差别 。带权周转时间越大,作业(或进程)越短;带权周转时间越小,作业(或进程)越长·。
带权周转时间的计算:周转时间/服务时间
进程的上下文切换:
原文连接:https://blog.csdn.net/wb_snail/article/details/105316732
我们知道CPU干的事情很简单,就是取指令然后执行它,作为操作系统,你得让CPU知道从哪里取指令,指令执行时还需要数据,数据从哪里拿你也得告诉它。如果在执行过程中被切换走,CPU计算过程中产生的一些临时数据也得告诉它,这样它才可以正常执行指令。
那怎么告诉CPU这些信息呢?
只要给CPU的各种寄存器赋值就好了,包括程序计数器里的下一条指令地址,数据段寄存器里的程序数据段起始地址,代码段寄存器里的程序指令段的起始地址,各种通用寄存器中的数据等等
所以,切换切的就是CPU各种寄存器中的值,让CPU知道从哪里取指令取数据,然后它就可以愉快的执行了,这些在进程运行时存在寄存器中的值就称作进程上下文
我们要把当前在执行的进程切走,然后把另一个进程切来,后面还会把当前进程切回来接着执行,所以当前进程切走的前一刻,各个寄存器中的值我们得保存下来放到一个地方,后面再切它回来时就从这个地方取出来再赋值给寄存器,CPU就可以接着上次切走该进程前继续执行了。那保存在哪呢?
每个进程创建后,操作系统都会为其维护一个进程控制块(PCB),包括进程标识信息(如PID,父进程PID),进程的控制信息(操作系统需要对进程进行管理和控制,决定其状态),以及处理器状态信息,这里面就保存了进程的运行的上下文信息
现在我们就清楚了,操作系统把当前CPU各个寄存器中的值存到进程的PCB中,从另一个进程的PCB中取出之前某个时刻存进去的内容,赋给寄存器,就完成了一次进程上下文切换
除了正常调度进程需要上下文切换外,还有一种上下文切换,是操作系统检测到中断时发生的,包括IO设备引起的中断,应用程序主动发起系统调用(如文件读写),以及应用程序发生错误(比如除以0操作),操作系统检测到中断信号后,会通过中断向量表找到对应的处理程序,然后切换成处理程序进程,处理完成后再切换回来,过程与上面大致相似
多级反馈队列调度算法
基本原理:
(1)设置多个就绪队列,并为各个队列赋予不同的优先级,每个队列里的进程按时间片的方式执行。 第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。
(2)当一个进程进入内存时,首先将其放入第一队列,按FCFS原则排队等候调度。当调度到该进程时,若能在时间片内完成,便撤离系统,若在一个时间片内未完成,将其挂入第二队列队尾,再按照FCFS原则进行排队等候,之后按照第一队列的方式进行执行。
(3)仅当第一队列空闲时,才会调度第二队列中的进程,仅当第1~(i-1)队列均空闲时,才会调度第i队列中的进程。
优点:
有较好的性能,能很好的满足各类型用户的需求
缺点:
有很多的排队队列,要消耗系统资源
实时调度
实时系统中存在两类不同的任务:硬实时任务(HRT):【必须满足任务对截止时间的要求】 和软实时任务(SRT):【联系着一个截止时间,但是并不严格 】;它们都关联着一个截止时间;实时调度算法必须能够满足实时任务对截止时间的要求,否则会产生严重的后果;所以实时调度算法有一定的条件。
最早截止时间优先算法(Earliest Deadline First)
该调度算法中,根据任务的截止时间确定任务的优先级,任务截止时间越早,优先级越大;具有最早截止时间的任务排在队列队首;
例:
最低松弛度优先调度算法(Least Laxity First)
该调度算法中,根据任务的紧急程度来确定任务的优先级,越紧急的任务,其优先级越大;而越紧急也意味着它的松弛度越低;
任务的松弛度:任务的完成截止时间-任务要求的处理时间-当前时间
调度发生的情况为:某一任务正常结束或者某一任务的最低松弛度变为0;
在刚开始时(t1=0),A1必须在20ms时完成,而它本身运行又需10ms,可算出A1的松弛度为10ms;B1必须在50ms时完成,而它本身运行就需25ms,可算出B1的松弛度为25ms,故调度程序应先调度A1执行 ,以此类推。
优先级倒置现象
优先级倒置 :出现具有高优先级的进程因低优先级的进程而阻塞的情况
例如:低优先级A首先获得了临界资源R(因为比它高级的进程还没到),然后有比它优先级高的进程B到来,A被剥夺处理机,但是临界资源并没有被释放,之后用于最高优先级的进程C到来,B被抢占处理机,但C由于请求临界资源R失败而阻塞(进入阻塞队列),之后B开始运行,结束后A再运行临界区代码,进程A释放临界资源R后,C才能执行。这样B进程比C进程优先级低,但是先得到处理。
解决办法:
- 当进程处于临界区的时候,不允许中断,这样A执行完毕后,因为C的优先级高,处于就绪队列的前面,所以C可以在B之前执行,但是当A的临界区非常长,则C还是要等待较长时间 ,所以只适用于系统中的进程临界区较短,且不多的情况
- 当优先级较高的进程要进入临界区,使用临界资源,如果有一个低优先级进程正在使用该资源,那么高优先级进城被阻塞,而低优先级进程将继承高优先级进程的优先级,直到低进程退出临界区;这样就可以避免低进程被中等进程阻塞而出现优先级倒置现象;