2.3 CPU 调度与上下文切换
三级调度,调度的时机、方式与评价指标,调度程序与上下文切换;先来先服务、短作业优先、高响应比优先、优先级、时间片轮转与多级反馈队列调度算法。
调度的概念
在多道程序系统中,进程的数量往往多于处理机的个数,因此进程争用处理机的情况在所难免。处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法(公平、高效的原则)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。
一个作业从提交开始直到完成,往往要经历以下三级调度:
| 调度 | 别名 | 做什么 | 频率 |
|---|---|---|---|
| 高级调度 | 作业调度 | 按照一定的原则从外存上处于后备队列的作业中挑选一个(或多个),给它(们)分配内存、输入/输出设备等必要的资源,并建立相应的进程,以使它(们)获得竞争处理机的权利。简言之,就是内存与辅存之间的调度 | 最低 |
| 中级调度 | 内存调度 | 将那些暂时不能运行的进程调至外存等待,此时进程的状态称为挂起态。当它们已具备运行条件且内存又稍有空闲时,由中级调度来决定把外存上的那些已具备运行条件的就绪进程再重新调入内存。目的是提高内存利用率和系统吞吐量 | 中等 |
| 低级调度 | 进程调度 | 按照某种算法从就绪队列中选取一个进程,将处理机分配给它。进程调度是最基本的一种调度,在各种操作系统中都必须配置这级调度 | 最高 |
调度的时机与方式
不能进行进程调度与切换的情况:
- 在处理中断的过程中:中断处理过程复杂,在实现上很难做到进程切换,而且中断处理是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺处理机资源;
- 进程在操作系统内核临界区中:进入临界区后,需要独占式地访问,理论上必须加锁,以防止其他并行进程进入,在解锁前不应切换到其他进程,以加快临界区的释放;
- 其他需要完全屏蔽中断的原子操作过程中:如加锁、解锁、中断现场保护、恢复等原子操作。
应该进行进程调度与切换的情况:发生引起调度条件且当前进程无法继续运行下去时(非抢占)——当前进程运行结束、进程因请求 I/O 或 P 操作而阻塞;中断处理结束或自陷处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,即可马上进行进程调度与切换(抢占)。
- 非抢占调度方式(非剥夺方式):当一个进程正在处理机上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程运行完成或发生某种事件而进入阻塞态时,才把处理机分配给其他进程。实现简单、系统开销小,适用于早期的批处理系统,但它不能用于分时系统和大多数的实时系统;
- 抢占调度方式(剥夺方式):当一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要使用处理机,则允许调度程序根据某种原则去暂停正在执行的进程,将处理机分配给这个更为重要或紧迫的进程。对提高系统吞吐率和响应效率都有明显的好处,但”抢占”不是一种任意性行为,必须遵循一定的原则,主要有优先权、短进程优先和时间片原则等。
调度的评价指标
- CPU 利用率 = CPU 有效工作时间 / (CPU 有效工作时间 + CPU 空闲等待时间);
- 系统吞吐量:单位时间内 CPU 完成作业的数量;
- 周转时间 = 作业完成时间 − 作业提交时间;平均周转时间 = Σ 周转时间 / n;
- 带权周转时间 = 作业周转时间 / 作业实际运行时间();
- 等待时间:进程处于等待处理机的时间之和,等待时间越长,用户满意度越低。处理机调度算法实际上并不影响作业执行或输入/输出操作的时间,只影响作业在就绪队列中等待所花的时间;
- 响应时间:从用户提交请求到系统首次产生响应所用的时间,在交互式系统中常用响应时间而不用周转时间作为评价指标。
调度程序与上下文切换
调度程序(调度器)通常由三部分组成:排队器(将系统中的所有就绪进程按照一定的策略排成一个或多个队列)、分派器(依据调度程序所选的进程,将其从就绪队列中取出,将 CPU 分配给新进程)、上下文切换器(在对处理机进行切换时,会发生两对上下文的切换操作:第一对,将当前进程的上下文保存到其 PCB 中,再装入分派程序的上下文,以便分派程序运行;第二对,移出分派程序的上下文,将新选进程的 CPU 现场信息装入处理机的各个相应寄存器)。
闲逛进程(idle):如果系统中没有就绪进程,就会调度闲逛进程运行。闲逛进程的优先级最低,没有其他就绪进程时才会运行它,它不需要 CPU 之外的资源,不会被阻塞。
典型的调度算法
模拟器处理机调度算法
| 进程 | 到达 | 运行 | 优先级 | 完成 | 周转 | 带权周转 | 等待 |
|---|---|---|---|---|---|---|---|
| P1 | 0 | 7 | 3 | 16 | 16 | 2.29 | 9 |
| P2 | 2 | 4 | 1 | 7 | 5 | 1.25 | 1 |
| P3 | 4 | 1 | 4 | 5 | 1 | 1 | 0 |
| P4 | 5 | 4 | 2 | 11 | 6 | 1.5 | 2 |
| 平均 | 7 | 1.51 | 3 | ||||
周转时间 = 完成时间 − 到达时间;带权周转时间 = 周转时间 / 运行时间;等待时间 = 周转时间 − 运行时间。
| 算法 | 规则 | 抢占? | 饥饿? | 特点 |
|---|---|---|---|---|
| FCFS 先来先服务 | 按到达顺序 | 非抢占 | 不会 | 公平、简单;对长作业有利,对短作业不利;有利于 CPU 繁忙型作业,不利于 I/O 繁忙型作业 |
| SJF 短作业优先 | 选估计运行时间最短的 | 非抢占(默认) | 会(长作业) | 平均等待时间、平均周转时间最少;对长作业不利;未考虑紧迫程度;运行时间是估计值 |
| SRTF 最短剩余时间优先 | 新进程到达时比较剩余时间 | 抢占 | 会 | SJF 的抢占式版本 |
| HRRN 高响应比优先 | 响应比 最高者 | 非抢占 | 不会 | 综合考虑等待时间和运行时间:等待时间相同时短作业优先;要求服务时间相同时先来先服务;长作业等待越久响应比越高,克服了饥饿 |
| 优先级调度 | 优先级最高者;静态优先级 / 动态优先级 | 两种都有 | 会 | 一般:系统进程 > 用户进程、交互型 > 非交互型、I/O 型 > 计算型 |
| RR 时间片轮转 | 按到达顺序排队,每次运行一个时间片,用完排到队尾 | 抢占 | 不会 | 适用于分时系统;时间片太大退化为 FCFS,太小则切换开销过大 |
| 多级反馈队列 | 多个优先级不同的队列,优先级越高时间片越小;新进程进入第 1 级,时间片用完降级;高级队列空才调度低级队列 | 抢占 | 会(长作业可能一直在低级队列) | 融合了前几种算法的优点:终端型作业用户(短作业优先)、短批处理作业用户(周转时间较短)、长批处理作业用户(不会长期得不到处理) |
即时练习
即时练习6 题
点击选项即可作答
- 1(408 真题 2009)下列进程调度算法中,综合考虑进程等待时间和执行时间的是( )。
- 2(408 真题 2011)下列选项中,满足短任务优先且不会发生饥饿现象的调度算法是( )。
- 3(408 真题 2012)一个多道批处理系统中仅有 P1 和 P2 两个作业,P2 比 P1 晚 5 ms 到达,它们的计算和 I/O 操作顺序如下:P1:计算 60 ms,I/O 80 ms,计算 20 ms;P2:计算 120 ms,I/O 40 ms,计算 40 ms。若不考虑调度和切换时间,则完成两个作业需要的时间最少是( )。
- 4(408 真题 2017)假设 4 个作业到达系统的时刻和运行时间为:J1(0,3)、J2(1,3)、J3(1,2)、J4(3,1)。系统在 t = 2 时开始作业调度。若分别采用先来先服务和短作业优先调度算法,则选中的作业分别是( )。
- 5对上方模拟器的默认作业(P1: 0, 7;P2: 2, 4;P3: 4, 1;P4: 5, 4)采用 SRTF 调度,平均周转时间为( )。
- 6(408 真题 2020)下列与进程调度有关的因素中,在设计多级反馈队列调度算法时需要考虑的是( )。
Ⅰ. 就绪队列的数量 Ⅱ. 就绪队列的优先级 Ⅲ. 各就绪队列的调度算法 Ⅳ. 进程在就绪队列间的迁移条件
学完了吗?
标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。