lrhya

步履不停。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

一、处理器调度

处理器调度可按照层级分为三级:

  • 高级调度

  • 中级调度

  • 低级调度

用户作业从进入系统成为后备作业开始,知道运行结束退出系统为止,最多经历三层级别的调度。

低级调度是各类操作系统的必备功能。

在纯粹分时操作系统或实时操作系统中通常不需要高级调度。

一般操作系统都配置了高级调度和低级调度,而功能完善的操作系统为了提高内存利用率和作业吞吐率引进了中级调度。

所以从处理器调度的层次来说,可分为三级调度模型和两级调度模型。

 

1.1 高级调度

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

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

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

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

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

综上所述:

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

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

  • 作业的概念更多的用于批处理操作系统;进程多用于各种多道程序设计系统

 

1.2中级调度

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

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

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

 

1.3低级调度

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

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

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

 

 

二、进程调度算法

首先了解一下低级调度(进程调度)的基本类型:

  • 剥夺式 (preemptive):剥夺式又称为抢先式。当进程/线程正在处理器上运行时,系统可根据规定的与原则剥夺分配给此进程/线程的处理器,并将其移入就绪队列,选择其他进程/线程运行。

    有两种常用处理器剥夺原则:

    1.高优先级进程/线程可以剥夺低优先级进程/线程;

    2.当运行进程/线程时间片用完后被剥夺,在动态改变进程/线程优先级的系统中,经常会出现这种情况。

    剥夺式策略可以避免进程/线程长时间独自占用处理器,对于实时系统和分时系统有利。

  • 非剥夺式 (nonpreemptive):非剥夺式又称为非抢先式。一旦某个进程/线程开始运行后便不再让出处理器,除非此进程/线程运行结束或主动放弃处理器,或因发生某个事件而不能继续运行。

 

不同环境的调度算法目标不同,因此需要针对不同环境来讨论调度算法。

 

2.1 批处理系统

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

 

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)

非剥夺式调度算法。

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

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

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

 

2.2 交互式系统

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

 

2.2.1 时间片轮转

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

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

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

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

 

2.2.2 优先级调度

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

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

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

 

2.2.3 多级反馈队列

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

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

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

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

 

2.3实时系统

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

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

 

(如有错误,还望指正)

参考文章:

CS-Notes

posted on 2019-04-09 20:11  LRH呀  阅读(2700)  评论(0编辑  收藏  举报