处理机调度-调度算法

先来先服务(FCFS)调度算法

概念

将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,按照先来先服务的方式进行调度处理。

公平性

1.直观看,该算法在一般意义下是公平的。即每个作业或进程都按照它们在队列中等待时间长短决定它们是否优先享受服务
2.但如果执行时间较短的作业或进程在某些执行时间很长的作业或进程之后到达,则它们将等待很长时间

轮转法

基本思路

基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成比例

过程

将CPU的处理时间分成固定大小的时间片。如果一个进程在被调度选中之后用完了系统规定的时间片,但未完成要求的任务,则它自行释放自己所占有的CPU而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程或作业。

轮转法只能调度可抢占资源

轮转法只能用来调度分配那些可以抢占的资源。将它们随时剥夺再分配给别的进程

例子:

  • CPU是可抢占资源的一种
  • 但如打印机等资源是不可抢占的

作业调度不使用轮转法:
由于作业调度是对除了CPU之外的所有系统硬件资源的分配,其中包含有不可抢占资源,所以作业调度不使用轮转法

轮转法的时间片选取问题

时间片长度的选择会直接影响系统开销和响应时间

过短的问题:如果时间片长度过短,则调度程序剥夺处理机的次数增多。这将使进程上下文切换次数也大大增加,从而加重系统开销

过长的问题:如果时间片长度选择过长,例如一个时间片能保证就绪队列中所需执行时间最长的进程能执行完毕,则轮转法变成了先来先服务法

由于时间片的选取要满足相应时间的要求,所以是有如下的关系:
q=R/Nmax
R:系统对响应时间的要求R
Nmax:就绪队列中所允许的最大进程数Nmax

相应的关系:
1.在q为常数的情况下,如果就绪队列中的进程数远小于Nmax,则响应时间R看上去会大大减小
2.由于q值固定,从而进程上下文切换的时机不变,系统开销也不变。
3.CPU的整个执行时间等于各进程执行时间加上系统开销。在进程执行时间大幅度减少的情况下,如果系统开销也随之减少的话,系统的响应时间有可能更好一点。

为什么需要时间片p可以变化:

随着进程执行,就绪队列中的进程逐渐减小到只剩一个进程,这时候时间片恰好分配为正好让这个进程运行结束,这样减少

可变的时间片p值:

一种可行的办法是,每当一轮调度开始时,系统根据就绪队列中已有进程数目计算一次q值,作为新一轮调度的时间片.

多级反馈轮转法

轮转法加入就绪队列的三种情况

1.分给进程的时间片用完,但进程还未完成,回到就绪队列的末尾等待下次调度继续执行。
2.分给该进程的时间片未用完,只是因为请求I/O或由于进程的互斥与同步关系而被阻塞。当阻塞解除之后再回到就绪队列。
3.新创建进程进入就绪队列。

根据就绪原因给予不同优先级改善效率

1.将就绪队列按照进程到达就绪队列的类型和进程被阻塞时的阻塞原因分成不同的就绪队列
2.每个队列按FCFS原则排列,各队列之间的进程享有不同的优先级,但同一队列内优先级相同
3.当一个进程在执行完它的时间片之后,或从睡眠中被唤醒以及被创建之后,将进入不同的就绪队列。

优先级法

概念

按某种原则为作业或进程指定一个优先级来表示该作业或进程所享有的调度优先权

静态优先级

静态法根据作业或进程的静态特性,在作业或进程开始执行之前就确定它们的优先级,一旦开始执行之后就不能改变

动态优先级

动态法将作业或进程的静态特性和动态特性结合起来确定作业或进程的优先级,随着作业或进程的执行过程,其优先级不断变化。

优先级的规则

  1. 用户根据作业的紧急程度输入一个适当的优先级。为防止各用户都将自己的作业冠以高优先级,系统对高优先级用户收取较高的费用。
  2. 由系统或操作员根据作业类型指定优先级。作业类型(I/O繁忙的作业,CPU繁忙的作业,I/O与CPU均衡的作业,一般作业等)一般由用户约定或由操作员指定。
  3. 系统根据作业要求资源情况(所需处理机时间、内存量大小、I/O设备类型及数量等)确定优先级

静态优先级

1.用户进程vs系统进程

  • 系统进程享有比用户进程高的优先级

用户进程

  • I/O繁忙的进程
  • CPU繁忙的进程
  • I/O与CPU均衡的进程
  • 其他进程

系统进程:

  • 调度进程
  • I/O进程
  • 中断处理进程
  • 存储管理进程等

2.将作业的静态优先级作为它所属进程的优先级

动态优先级

1.根据进程占有CPU时间的长短决定
一个进程占有处理机的时间愈长,则在被阻塞之后再次获得调度的优先级就越低,反之,其获得调度的可能性就会越大

  1. 根据就绪进程等待CPU的时间长短决定
    一个就绪进程在就绪队列中等待的时间越长,则它获得调度选中的优先级就越高

确定优先级开销问题:由于动态优先级随时间推移而变化,系统要经常计算各进程的优先级,因此付出一定的开销

线性优先级调度策略

为什么引入线性优先级调度策略?

解决新进程放入就绪队列末尾享受平等的处理机时间片,这对于执行时间长的进程来说是不公平的问题,由于它需要多个时间片才能完成

如何解决问题

划分为两个队列:
新创建进程:线性优先级调度策略将新创建进程按FCFS方式排成就绪队列
旧进程也就是享受过时间片的进程:其他已得到过时间片服务的进程也按FCFS方式排成另一个就绪队列或称享受服务队列

两个队列的优先级


1.设新创建进程队列中进程的优先级以速率a (a>0)增加。
2.设享受服务队列中进程的优先级以速率b (a>b>0 )增加

设某一进程在时刻t1被创建,则时刻t该进程的优先级为P(t)=a×(t-t1) (t1<t<t1′)。

又设该进程在t1′时刻转入享受服务进程队列,则时刻t该进程的优先级变为P(t)=a× (t1′-t1)+b× (t-t1′) (t1′<t<t2′)

何时新创建进程等待多长时间之后进入享受服务队列?

1.当新创建进程就绪队列中的头一个进程的优先级与与享受服务队列中最后一个就绪进程的优先级相等时,新创建进程队列中的头一个进程可以转入享受服务进程队列
也就是两个函数相交的时候,即P(t)=a*(t-t2)=a× (t1′-t1)+b× (t-t1′)
2.当享受服务进程队列为空时,新创建进程队列的头一个进程也将移入享受服务进程队列

为什么享受队列中的进程优先级增加速率b要比新创建进程优先级增长率a低呢?

1.在线性优先级调度法中,a>b>0 的条件是必要的。b>a>0 时,两个不同队列中的就绪态进程的优先级将永远不会相等,从而享受服务进程队列中永远只有一个进程。线性优先级调度策略退回到FCFS方式

2.a>b=0,线性优先级调度策略即轮转法调度方式。线性优先级调度策略是介于轮转法和FCFS方式之间的一种调度策略

最短作业优先算法

选择需要执行时间最短的作业投入执行,为它们创建进程和分配资源

优点

吞吐量高:直观上来说,采用最短作业优先的调度算法,可使得系统在同一时间内处理的作业个数最多,从而吞吐量就于其他调度方式。

缺点

但是,对于一个不断有作业进入的批处理系统来说,最短作业优先法有可能使得那些长作业永远得不到调度执行的机会

各种调度算法的性能评估

1.轮转法在响应时间上优于FCFS调度方式
2.对于需要服务时间短的顾客,轮转法响应时间<线性优先法响应时间<FCFS响应时间
3.对于需要服务时间长的顾客,FCFS响应时间<线性优先法响应时间<轮转法响应时间

版权声明:本文为mengxiaoleng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mengxiaoleng/p/11891457.html