处理器调度算法

本文详细介绍了处理器调度算法,包括FCFS、SPN、SRT、HRRN、优先级调度和轮转法,以及时间片长短对系统性能的影响。
摘要由CSDN通过智能技术生成

处理器调度算法

一、进程切换的实现

1、保存当前运行进程的现场信息。当运行进程因某种原因(如超时或等待I/O)需要放弃CPU时,进程调度程序将进行进程的CPU现场信息,保存到该进程PCB的CPU状态保护区。

2、选择即将运行的进程。进程调度程序根据某种调度算法从进程就绪队列种挑选一个进程,把它的状态由就绪状态改为运行状态,并准备将CPU分配给它。

3、为新选中的进程恢复现场。将选中进程保存在PCB的CPU现场信息送入CPU的各寄存器,然后将CPU的使用权交给选中的进程,使它从上次中断运行的断点处恢复正常运行。

二、调度算法
1、先来先服务(FCFS-First Come First Service)
  • 按照进程就绪的先后顺序来调度进程,到达的越早,其优先级越高(就像队列先进先出)。
  • 获得处理机的进程,在未遇到其他情况时一直运行下去(非剥夺方式)。
  • FCFS算法具有公平的特点,不会发生饿死。但是缺点也很明显:平均周转时间波动大,当长进程先运行时,段进程等待的时间长,平均周转时间长。
2、短进程优先SPN

FCFS对于短进程非常不友好,极端情况下短进程的周转时间会很长,那么将短进程提前是不是就好了呢?

  • 在下一次选择的是所需时间最短的进程,因此短进程会越过长进程,得到优先处理,所以也是非剥夺方式。
  • SPN策略的难点在于需要知道或估计每个进程所需要的处理时间。
  • 但是这样也可能会产生一个极端现象:长进程饿死!假设有两个一长一短进程,短进程先运行,运行完之前又来了一个比长进程短的进程,那么长进程还是不能获得处理器使用权,等两个短进程交替执行完后,才能到他,那么如果一直有短进程来,长进程就可能被饿死。
  • 还有一个问题,SPN不能保证一定是短进程先运行。例如,在某一时刻,A进程需要100分钟,B进程需要200分钟,此时A先运行,一分钟后来了C进程需要1分钟,由于非剥夺方式,C就需要等A运行完,等待这样长的时间显然是不合适的,所以就有了SRT。
3、最短剩余时间优先SRT

SRT在SPN的基础上增加了剥夺策略。

  • 当一个时钟中断周期到后,调度程序总是选择预期剩余时间最短的进程。
  • 当一个新的进程加入就绪队列时,它可能比当前运行的进程具有更短的剩余时间,因此调度程序将剥夺当前程序,将处理器分配给新进程。
  • 当然和SPN一样,进程所需时间难以知道,并且也存在长进程被饿死的危险。
  • SRT比SPN有更短的平均周转时间(短进程一直优先)。
4、最高相应比优先(HRRN)
  • 相应比:R=(w+s)/s=1+w/s(w表示等待时间,s表示执行所需时间)。

  • HRRN是对SRT的一种改进,当当前进程完成或被阻塞时,选择相应比最大的进程先执行,是非剥夺策略。

  • 相应比R就像是进程的年龄,算法既保证了短进程的优先执行又兼顾了长进程,即:

    对于同时到达的进程:

    w相同,s越小R越大—>短进程优先

    对于同一个进程:

    s不变,w越大R越大—>长进程等待足够长的时间后,R值足够大,可以越过短进程运行,所以也就不会被饿死了。

5、优先级(priority)

按进程的优先级调度,选择就绪队列中优先级最高的进程到处理机执行。

(1)优先数确定方式:

  • 静态优先级:每个进程创建时被赋予一个优先数,该优先数在进程整个生命周期都是固定不变的。
  • 动态优先级:每个进程被创建时被赋予一个优先数,该优先数在进程的生命周期是可以动态变化的。

(2)大多数动态优先级设计方案

  • 把交互式和I/O频繁的进程移到优先级队列的顶端,而让计算量大的进程移到较低的优先级上。
  • 对于优先级相同的进程,按先来先服务或轮转法则分配处理机。
  • 对于一给定的时间周期,一个正在运行的进程,每请求一次I/O操作后其优先级就自动加1,直接反映出I/O请求的频率,从而使I/O设备有很高的利用率。

(3)分类

  • 非抢占式:一旦一个高优先级的进程占有了处理器,就一直运行下去,知道因等待某事被阻塞或执行结束,才选择就绪队列中优先级最高的进程来执行。
  • 抢占式:任何时刻都按最高优先级的进程在处理器上运行的原则进行进程调度。当一高优先级进程运行时,若有更高优先级的进程到达就绪队列,则当前运行进程立刻将处理器让给更高优先级的进程。
6、轮转法(RR)

(1)简单轮转法

  • 系统把所有就绪进程按先后次序排队,处理机总是优先分配给就绪队列中的第一个就绪进程,并分配它一个固定的时间片(如50毫秒)。

  • 当该运行进程用完规定的时间片时,被迫释放处理机给下一个处于就绪队列中的第一个进程,自己回到就绪队列的尾部,并等待下次调度。

  • 当某个正在运行的进程的时间片尚未用完,但进程需要I/O时,该进程被送到相应阻塞队列,等I/0完成重新返回到就绪队列尾部,等待调度。

    • 简单轮转法是以就绪队列中的所有进程均以相同的速度往前推进为其特征。其时间片的长短,影响着进程的进展速度
    • 当就绪进程很多时,如果时间片很长,就会影响一些需要“紧急”运行的进程。同样这对短进程和要求I/0操作多的进程显然是不利的
    • 因而,在简单轮转法的基础上又提出了分级轮转法

(2)分级轮转

  • 将一个就绪队列根据进程的优先级不同,划分二个或二个以上的就绪队列,并赋给每个队列不同的优先级,甚至可以分配不同的时间片

  • 一般情况下,调度算法把相同的时间片分配给优先级高的就绪队列中的队首进程

  • 只有当优先级高的就绪队列中的所有进程全部运行完毕或等待I/O操作而没有进程运行时,才把处理机分配给低优先级就绪队列中的进程

    • 为了公平性,低优先级就绪队列的进程如果获得调度,将得到比高优先级就绪队列进程更多的时间片,加以弥补
    • 这样能大大降低长进程的交换频率,减少系统在切换进程时的时间消耗,又给了短进程较高的优先级
7、反馈FB/多级反馈队列调度算法(MLFQ)
  • 分级轮转调度和动态优先级算法的结合,采用剥夺策略。
  • 划分多个就绪队列,优先级逐步降低。
  • 新建进程进入优先级最高的队列中,每当进程规定的时间片用完,被剥夺时,就送往低一级的就绪队列。
  • 进程调度时总是先执行高优先级队列中的进程。高优先级队列为空后,才转去处理低一级优先级队列中的进程。
  • 同一优先级队列(除最低)的进程,按FIFO机制调度。最低优先级队列,按时间片轮转调度算法执行。
  • 对于时间片,通常采用不同优先级队列不同的时间片,优先级高,时间片短些;优先级低,时间片长些。
  • 分析:优先级高的进程一般是I/0密集型的进程,不需要太长的CPU处理时间优先级低的进程,基本都是因为超时才降级的,因此是CPU计算密集型基础,需要大量的CPU处理时间。这样时间片长些不仅符合这类进程的喜好,而且能减少进程切换而引起的额外系统开销。
  • 在反馈调度算法中,长进程也存在饿死的现象(不断有新的进程进入优先级最高的队列)。
  • 当比运行进程更高优先级队列到来一个新进程时,则应该处理高优先级队列的进程。有两种方案:抢占方式:即当高优先级进程到来时,立即抢占处理进程的处理器,被抢占进程回到原来就绪队列的末尾。(没有特殊说明时,认为是抢占方式);非抢占方式:当前进程用完规定的时间片后,再调度高优先级的进程。
  • 对于被阻塞的进程,当阻塞取消后的处理方法:放入高一级的就绪队列中、进入最高级的就绪队列。
三、时间片长短的决定因素
  • 系统的响应时间:当进程数目一定时,时间片的长短直接影响系统的响应时间。
  • 就绪队列中进程的数目:当系统对响应时间要求一定时,就绪队列中进程数少则时间片长,反之亦然。
  • 进程状态转换(即进程由就绪态到运行,或反之)的时间开销。
  • 计算机本身的处理能力:执行速度和可运行作业的道数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值