操作系统第二章--cpu的三级调度 和 调度算法

一 cpu的三级调度

参考来自: 和

  • 高级调度

  • 中级调度

  • 低级调度

1.1 高级调度

高级调度:即作业调度,按照一定策略将选择磁盘上的程序装入内存,并建立进程。(存在与多道批处理系统中)

这里解释一下作业和进程的区别与联系

作业可分为:编译、链接、装入、和运行这4个作业步。

当一个作业被作业调度(高级调度)选中进入内存并投入运行时,操作系统为此用户作业生成用户进程完成其计算任务。

进程是已提交完毕并选中运行的作业(程序)的执行实体,也是为完成作业任务向系统申请和分配资源的基本单位,它处于运行,就绪,等待等多个状态变化之中。

综上所述:

  • 作业是任务实体,进程是完成任务的执行实体

  • 没有作业任务,进程无事可做;没有进程,作业任务无法完成

    扫描二维码关注公众号,回复: 10810083 查看本文章
  • 作业的概念更多的用于批处理操作系统;进程多用于各种多道程序设计系统

1.2中级调度

中级调度:即交换调度,按照一定策略在内外存之间进行数据交换。

当内存资源紧缺时,会把暂时不能运行的进程换出内存,此时这个进程处于“挂起”状态,不参与低级调度;当进程具备运行条件且内存资源富裕时,再将进程重新回调内存工作。

起到短期均衡系统负载的作用,充分提高内存利用率和系统吞吐率。

1.3低级调度

低级调度:即CPU调度(进程调度),按照一定策略选择就绪进程,占用cpu执行。

根据某种原则决定就绪队列中的哪个进程/线程获得处理器,并将处理器出让给他使用。

低级调度是各类操作系统的必备功能,在纯粹分时操作系统或实时操作系统中通常不需要高级调度。

图文参考来自 :

1、仅有进程调度(低级调度)

2、仅有低级和高级调度

3、三级调度算法

2.1 批处理系统

批处理系统没有太多的用户操作,在该系统中,调度算法目标是保证吞吐量和周转时间(从提交到终止的时间)。

1 先来先服务 first-come first-serverd(FCFS)

2 短作业优先 shortest job first(SJF)

3 最短剩余时间优先 shortest remaining time next(SRTN)

4 最高响应比优先算法 highest response ratio first (HSRF)

5 时间片轮转

6 优先级调度

7 多级反馈队列

2.1.1 先来先服务 first-come first-serverd(FCFS)

非剥夺式调度算法。

按照请求的顺序进行调度。

按照作业进入系统后备作业队列的先后次序来挑选作业,先进入的作业优先被挑选进入内存,创建用户进程

有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。

2.1.2 短作业优先 shortest job first(SJF)

非剥夺式调度算法。

按估计运行时间最短的顺序进行调度。

缺点:1.需要预先知道作业所需CPU的运行时间,很难精确估算。

2.忽视作业等待时间,会使长作业的等到时间过长

3.缺少剥夺机制,对于分时、实时处理不理想。

2.1.3 最短剩余时间优先 shortest remaining time next(SRTN)

剥夺式调度算法。

按估计剩余时间最短的顺序进行调度。

2.1.4 最高响应比优先算法 highest response ratio first (HSRF)

非剥夺式调度算法。

按计算出的最高响应比最小的顺序进行调度。

优待短作业,但不会发生饥饿现象。

缺点:每次计算各道作业的响应比会导致一定的时间开销。

(1) 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业。

(2) 当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而它实现的是先来先服务。

(3) 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可获得处理机。简言之,该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。因此,该算法实现了一种较好的折衷。当然,在利用该算法时,每要进行调度之前,都须先做响应比的计算,这会增加系统开销。

2.2 交互式系统

交互式系统有大量的用户交互操作,在该系统中调度算法的目标是快速地进行响应。

2.2.1 时间片轮转

1) 基本原理

在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU 分配给队首进程,并令其执行一个时间片。时间片的大小从几ms 到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。

将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。

时间片轮转算法的效率和时间片的大小有很大关系:

  • 因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。

  • 而如果时间片过长,那么实时性就不能得到保证。

2.2.2 优先级调度

为每个进程分配一个优先级,按优先级进行调度。

系统可预先规定策略为非剥夺式或剥夺式。

为了防止低优先级的进程永远等不到调度,可以随着时间的推移增加等待进程的优先级。

在这种方式下,系统同样是把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程。因此,在采用这种调度算法时,是每当系统中出现一个新的就绪进程i 时,就将其优先权Pi与正在执行的进程j 的优先权Pj进行比较。如果Pi≤Pj,原进程Pj便继续执行;但如果是Pi>Pj,则立即停止Pj的执行,做进程切换,使i 进程投入执行。显然,这种抢占式的优先权调度算法能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。

2.2.3 多级反馈队列

一个进程需要执行 100 个时间片,如果采用时间片轮转调度算法,那么需要交换 100 次。

多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同,例如 1,2,4,8,..。进程在第一个队列没执行完,就会被移到下一个队列。这种方式下,之前的进程只需要交换 7 次。

每个队列优先权也不同,最上面的优先权最高。因此只有上一个队列没有进程在排队,才能调度当前队列上的进程。

可以将这种调度算法看成是时间片轮转调度算法和优先级调度算法的结合。

(1) 应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍。

(2) 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第队列便采取按时间片轮转的方式运行。

(3) 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。

2.3实时系统

实时系统要求一个请求在一个确定时间内得到响应。

分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时

发布了519 篇原创文章 · 获赞 69 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_41286356/article/details/105200621