进程调度
进程调度方式
进程调度使操作系统的一种低级调度。进程调度的方式分为抢占式和非抢占式。
非抢占方式:进程一旦被选中运行,它将一直运行下去,直至完成工作,自愿放弃CPU,或因某个事件阻塞,让出CPU。
抢占方式:抢占方式允许进程调度程序根据某种策略终止当前运行的进程,将其移入就绪队列,并根据某种调度算法选择另一个进程投入运行。抢占的情况:新进程到达、发生中断且将阻塞进程变为就绪进程以及用完时间片等。
进程调度策略
(1)先来先服务(FCFS、不可抢占)
对于作业调度(高级调度)来说:从后备作业队列中选择队首的一个作业或者几个作业,将其调入内存,分配相应的资源,创建进程,然后将其放入就绪队列。
进程调度来说:先来先服务从就绪队列中选择最先进入队列的进程,将CPU分配给它。该进程会一直运行下去,直到完成或者由于某事件被阻塞放弃CPU。
优缺点:利于长进程,因为进程获得CPU可以一直运行,如果短进程在长进程后面就悲剧了。造成处理机和I/O设备得不到充分利用。
(2)短作业/进程优先(SJF、不可抢占)
进程调度:进程获得CPU一直运行直到完成或者由于某事件被阻塞放弃CPU,运行结束从当前就绪队列选择最短的进程投入运行。
优缺点:利用短进程,长进程可能由于得不到处理器“饿死”。(有最短的平均周转时间)
(3)最高响应比优先(HRP、不可抢占)
进程调度:进程获得CPU一直运行直到完成或者由于某事件被阻塞放弃CPU,运行结束从当前就绪队列选择最高响应比的进程投入运行。
响应比 = (响应时间+运行时间)/运行时间
在响应时间固定的情况下,利于短进程。长进程随着等待时间变长,响应比会提高,因此长进程也能在足够长的时间被调度。
优缺点:利用短进程、长进程不会被饿死。
(4)最短剩余时间(SRT、抢占)
SRT提供了一种抢占机制的调度算法,只要有进程的剩余时间比当前正在运行的进程小,就可以抢占CPU。但是这种调度策略必须记录进程过去被服务的时间,增加了开销。
优缺点:开销大、不利于长进程。
(5)轮转(RR、抢占)
轮转法基于时钟的抢占策略,以一个周期性间隔产生的时钟中断一次进程调度。当进程跑完分配的时间片,就要进行调度,调度的策略基于FCFS策略。时间片不能太大,太大响应时间长,太小切换发生太频繁增加系统开销。
优缺点:公平对待各种进程。
(6)多级队列(MQ、混合)
多级队列调度算法把就绪队列分成几个单独的队列,根据进程的优先级、类型等固定的把进程加入不同的队列,每个队列有各自的调度算法。例如前台队列利用时间片轮转进程调度、后台进程利用FCFS调度。此外,各队列之间也要进行调度,通常采用固定优先级的抢占式调度。例如,前台进程优先级高于后台优先级,或者各队列分配不同的时间比例,前台80%(RR),后台20%(FCFS)。
(7)多级反馈队列(MFQ、混合)
在多级队列调度算法时,进程被固定放入一个队列中,他们不能从一个队列移到另一个队列。多级反馈队列在多级队列上加入反馈措施:系统设置多个就绪队列,每个队列对应一个优先级,各优先级的时间片不同,第一个优先级最高;新进程进入系统后,进入第一个队列,如果时间片完后没有完成进入第二个队列,依次往下;系统先运行第一个队列的进程,第一个队列完后,运行第二个队列。。。
(8)优先级(HPF、抢占)
每个进程都一个优先级,需要进程调度的时候,总选择优先级最高的进程。进程优先级与进程的紧迫程度有关。关于优先级有静态优先级和动态优先级。
实时调度策略
实时系统对时间有严格的要求。一个特定的任务都有一个截止时间相关联。实时任务有软实时和硬实时之分。硬实时任务执行的截止时间绝对不能被超过,超过了可能就出现致命的错误。软实时的截止时间可以被超过(相当于在这个时间段内完成最好),超过了还可以继续调度它。
两类调度算法:(1)非抢占式:轮转算法和优先级调度算法。
(2)抢占式:基于时钟中断的抢占式算方法和立即抢占调度算法。
几种实时调度算法:最早截止时间有先(即可用于抢占式也可用于非枪占式)和最低松弛度优先(根据任务紧急程度来调度)。
多处理机调度策略
多处理器存在的问题:不能多个处理机选择相同的进程,也不能在并发访问调度队列时丢失进程。
自调度:系统存在唯一的一个就绪队列,新来的进程进入这个就绪队列,某个CPU空下来,由这个队列选择要执行的进程。
组调度:将一组相关的进程同时分派到多台处理器上运行。