操作系统原理及安全
第三章 调度
“原理 机制 算法”
CPU调度是多道程序操作系统的基础
1 基本概念
1.1 调度队列
操作系统中维护了一组进程调度队列,包括:作业队列、就绪队列和设备队列。
- 作业队列:系统中所有进程的集合。
- 就绪队列:所有驻留在内存并处于就绪状态,等待调度执行的进程的集合。
- 设备队列:等待某个I/O设备的进程集合。
进程在整个生命周期中会在各种调度队列之间迁移。可以用队列图来表示进程调度。
1.2 调度的层次
-
调度程序:负责挑选就绪进程的内核模块。主要包含两方面:一是调度策略,即以怎样的原则来选择就绪队列中的进程。二是调度时机,即什么时候进行调度。主要完成以下功能。
- 记录系统中所有进程的状态、优先数和资源情况。
- 从旧需对零中选择获得处理器的进程。
- 分配和回收处理器资源。
-
一个作业从提交到完成通常需要经历多级调度,而不同操作系统中采用的调度层次不完全相同。
-
三级调度:
- 高级调度:
- 作业调度、宏观调度或长程调度。
- 作业是用户在一次解题或一个事务处理过程中要求计算机系统所做工作的集合,包括用户程序、所需的数据及命令等。作业中一个相对独立的工作称为一个作业步。例如在编制程序的过程中通常需要进行编辑输入、编译、链接、运行这几个作业步。作业这个概念更多地用在批处理操作系统中。作业从提交到完成要经历四种状态:提交状态、后备状态、运行状态、完成状态。
- 主要任务是:
1.按照一定的原则从外存中处于后备状态的作业中选择一个或多个作业,将其调入内存。
2.为选中的作业分配内存、I/O等资源,并建立相应的进程。 - 作业调度的运行频率较低,通常为几分钟一次。
- 高级调度通常决定着多道程序的道数。
- 低级调度:
- 进程调度、微观调度或短程调度
- 主要任务:
按照某种原则决定就绪队列中的哪个进程/内核级线程能获得处理器。 - 是操作系统最为核心的部分,其优劣影响着整个系统的性能。
- 进程调度的运行频率很高,一般几十毫秒要运行一次。
- 分为抢占式调度与非抢占式调度
- 中级调度:
- 负载均衡调度、中程调度或交换调度
- 主要任务:
- 将内存中暂时不用的信息移到外存。
- 将需要的信息从外存读入内存。
- 中级调度决定了主存储器中能容纳的进程数,这些进程将竞争处理器资源。
- 中级调度根据存储资源量和进程当前的状态来决定辅存与主存中进程的交换,运行频率介于前两者之间。
- 高级调度:
1.3 进程的一种分类
-
I/O密集型进程(I/O-bound process):执行I/O比计算的时间多,存在许多短的CPU执行区间(CPU burst)。
-
CPU密集型进程(CPU-bound process):执行计算时间多,有少量的长CPU执行区间。
-
多类型进程的组合
- 如果I/O密集型进程过多:就绪队列为空,低级调度没什么事儿做。
- 如果CPU密集型进程过多:I/O队列为空,设备没有得到充分利用。
- 因此系统为了保证资源充分利用,I/O密集型与CPU密集型进程应该混合搭配。
1.4 调度性能的评价准则
- 资源利用率:CPU利用率 = CPU有效工作时间 / CPU总的运行时间
- 响应时间:进程从提交一个请求到接收到第一个响应之间的时间间隔。
- 周转时间:作业提交与作业完成时的时间间隔。
- 应使作业周转时间或平均周转时间尽可能短。这是衡量批处理系统的一个重要指标。
- 平均周转时间:多个作业的周转时间的平均值。
- 带权周转时间:作业周转时间与作业实际运行时间的比值。
- 平均带权周转时间:多个作业带权周转时间的平均值。
- 系统吞吐率:单位时间内CPU完成作业的数量。
- 公平性:确保每个用户、每个进程获得合理的CPU及其他资源份额。
- 对于不同的系统,公平性原则是由差异的。
1.5 引起进程调度的原因
- 进程从运行态切换到等待状态:I/O请求、调用wait……
- 进程从运行态切换到就绪状态:发生中断
- 进程从等待状态切换到就绪状态:系统调用或中断返回
- 进程终止
2 调度算法
(算法的具体内容和举例分析的坑以后再填…)
2.1 先来先服务(FCFS)调度算法
- 适用:作业调度,进程调度
- 非抢占式算法
2.2 短作业优先(SJF,Shortest Job First)调度算法
- 适用:作业调度,进程调度
- 对于作业调度是非抢占的,进程调度中可以改造为抢占的
- 当一批作业同时到达时,SJF为最佳算法,拥有最短的平均周转时间(、平均等待时间)。
2.3 最短剩余时间优先(SRF,Shortest Remaining time First)调度算法
- 抢占式的进程调度算法
2.4 优先级调度算法
- 适用:作业调度,进程调度
- SJF、SRF都是一种优先级算法
- 抢占式和非抢占式都可以实现
- 优先级可以分为动态优先级和静态优先级
- 静态优先级在进程创建时确定且在进程运行期间不再改变。
- 动态优先级也在进程创建时确定,但在进程运行的过程中会发生变化。
2.5 时间片轮转(Round-robin)调度算法
- 为分时系统设计
- 循环的就绪队列
2.6 最高响应比优先调度算法
- 主要用于作业调度:在每次调度作业运行时,先计算后背作业队列中每个作业的相应比,然后挑选相应比最高的作业。
2.7 多级队列调度算法
- 根据作业性质或类型不同,将进程就绪队列分为多个,每个队列采用不同的调度算法(我的理解:其实也可能相同的,总之就是可以比较自由地设置。)
- 缺点:进程进入系统就被永久地分配到某个队列中。虽然调度开销低,但是不灵活。
2.8 多级反馈队列调度算法
- 设置多个就绪队列,并为每个队列赋予不同的优先级。第1个队列的优先级最高,第2队列次之,其余队列的优先级逐次降低。每个队列中进程执行的时间片大小也各不相同,进程所在队列的优先级越高,其相应的时间片就越短。
- 允许进程在队列之间移动。
- 根据CPU区间的特点区分进程,如果进程使用过多的CPU时间,就会被移动到低优先级队列。
- 参数配置与最优化
2.9 公平分享调度算法
- 动机:采用时间片轮转(Round-Robin)调度算法时,对于多个用户,如果他们所拥有的进程数不同,则各用户拥有CPU的时间的占比不同。这样造成某些用户的响应比过低,不利于公平。
- 解决:对于不同用户,基于进程组来分配CPU时间。其实现思想是对系统中的每个用户赋予某种权值,根据用户权值大小,按比例分配处理机时间。
2.10 实时调度
- 优先权调度
- 单调速率调度
- 最早截止期限优先调度
多处理器调度
- 负载共享调度算法
- 群调度算法
- 专用处理器调度算法
- 动态调度算法