【简记】Operating System——CPU Scheduling

来源:互联网 发布:api数据接口大全公司 编辑:程序博客网 时间:2024/04/30 12:16

This memo is based on the course of Dr.Li with Operating System as the reference book.

本章内容:

  • CPU调度
  • 调度算法

5.1 基本概念

5.1.1 CPU-I/O区间周期

进程由CPU执行和I/O等待周期组成。
这里写图片描述
I/O约束程序通常具有很多短CPU区间,CPU约束程序可能有少量的长CPU区间。

===
5.2 调度准则

调度器的使命:从内存中一堆准备就绪的进程中(就绪队列中的就绪进程)选取一个进程,将CPU分配给该进程
这里写图片描述

准则:

  • CPU使用率:
  • 吞吐量:一个时间单元内所完成进程的数量
  • 周转时间:运行该进程需要的时间
  • 等待时间:进程在就绪队列中等待所花的时间
  • 响应时间:是对于交互系统的最佳准则,从请求提出到得到CPU响应的时间

通常的死机体验,来源于响应时间的长短。

调用CPU调度器的时机,通常发生在:

  1. 某一进程从执行转为等待状态(等待I/O操作)
  2. 某一进程从执行转为就绪状态(被优先级更高的进程抢走CPU)
  3. 某一进程从等待转为就绪状态
  4. 某一进程终止

1、4为非抢占式(自愿交出CPU),2、3为抢占式
但不止以上几种情况

CPU分配器
CPU调度器决定了将CPU分配给谁,后续操作由分配器完成。该操作包括:

  • 上下文切换
  • 从内核态转移至用户态
  • 跳转至用户程序中PC寄存器所指示的位置

===
5.3 调度算法

5.3.1 先到先服务算法(FCFS)

FCFS调度算法是非抢占的。
可用链表结构实现。

但是采用FCFS策略的平均等待时间通常较长。而且通常波动较大。
这里写图片描述
启示:短进程先于长进程,会得到意外效果。

====
5.3.2 最短作业优先调度(SJF)

可使平均等待时间最小。

非抢占式:
这里写图片描述

抢占式:
这里写图片描述
某个进程的等待时间=周转时间-执行时间

致命缺陷:无法知道下一个CPU区间的长度。
预测算法(和网络中预测rtt时间很相似)
这里写图片描述

===
补充:最高响应比优先算法

综合了短作业优先,先来先服务,以及长作业也能得到服务的特性,因此,是一种综合的调度算法。

计算公式:
优先权 = (等待时间 + 要求服务时间) / 要求服务时间

这个计算公式,怎么就能体现上面三个综合特性呢?

首先,短作业优先。
短作业优先是因为,要求服务时间在分子,如果要求服务时间很短,且等待时机我们认为相等,那么短作业就有更高的优先权。

其次,先来先服务。
假设要求服务时间相同,那么先来的作业等待时间肯定较长,所以先来的优先级更高。

最后,长作业也不会沦落到没法调度的尴尬局面。因为一个长作业,等啊等,越等自己自己资历越老,优先级是在不断增长的,所以总会有机会熬出头的!

===
5.3.3 优先级调度

给每个进程分配优先级(正整数)。
本书中用小数字表示高优先级。

优先权法也分抢占式和非抢占式。

主要问题是进程饥饿。某个低优先级进程可能会无穷等待。
解决方法之一是老化(aging),等待时间越长,优先级会提高。

===
5.3.4 轮转法调度

每个就绪的进程获得一小段CPU时间,时间片用毕,这个进程被迫交出CPU。

如果有n个就绪进程,时间片为q,则任何就绪进程最多等待(n-1)q单位时间。

人们希望时间片的长度要比上下文切换时间长。

===
5.3.5 多级队列调度

将进程分组,将就绪队列分成多个独立队列。
比如前台(交互)进程和后台(批处理)进程可分开调度。

CPU怎么在队列间分配:

  • 固定优先权,比如前台优于后台
  • 时间片方法,前台8成,后台两成

===
5.3.6 多级反馈队列调度

基本上类似多层队列算法,但进程可以在就绪队列之间“漂移”了。

这里写图片描述

多级(假设为N级)反馈队列调度算法可以如下原理:
1、设有N个队列(Q1,Q2….QN),其中各个队列对于处理机的优先级是不一样的,也就是说位于各个队列中的作业(进程)的优先级也是不一样的。一般来说,优先级Priority(Q1) > Priority(Q2) > … > Priority(QN)。怎么讲,位于Q1中的任何一个作业(进程)都要比Q2中的任何一个作业(进程)相对于CPU的优先级要高(也就是说,Q1中的作业一定要比Q2中的作业先被处理机调度),依次类推其它的队列。
2、对于某个特定的队列来说,里面是遵循时间片轮转法。也就是说,位于队列Q2中有N个作业,它们的运行时间是通过Q2这个队列所设定的时间片来确定的(为了便于理解,我们也可以认为特定队列中的作业的优先级是按照FCFS来调度的)。
3、各个队列的时间片是一样的吗?不一样,这就是该算法设计的精妙之处。各个队列的时间片是随着优先级的增加而减少的,也就是说,优先级越高的队列中它的时间片就越短。同时,为了便于那些超大作业的完成,最后一个队列QN(优先级最低的队列)的时间片一般很大(不需要考虑这个问题)。
多级反馈队列调度算法描述:
1、进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。
2、首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,只有在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。
3、对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列的尾部等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。
4、在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。


5.4 多处理调度

实时调度:调度要及时,不影响进程执行

硬实时系统 — 调度机制能够确保一个关键任务在给定时间点前完成
软实时系统 — 调度机制尽量给予关键人物最高优先级,尽量在预定时间点前完成

处理器亲和性和负载平衡


阅读全文
0 0