1 / 52

第7章 CPU 调度

第7章 CPU 调度. 多道程序的关键是调度: 对 CPU 资源进行合理的分配使用,以提高处理机利用率,并使各用户 公平 地得到处理机资源。 处理机调度是 OS 的重要功能之一。 WHAT: 按什么原则分配 CPU — 进程调度算法 WHEN: 何时分配 CPU — 进程调度的时机 HOW: 如何分配 CPU —CPU 调度过程(进程的上下文切换). 7.1 处理器调度的类型. 处理器调度 对 CPU 资源进行合理地分配使用,以提高 CPU 的利用率 ,使各用户 公平 地得到 CPU 资源。 处理器调度的目标

chyna
Télécharger la présentation

第7章 CPU 调度

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章 CPU调度 多道程序的关键是调度:对CPU资源进行合理的分配使用,以提高处理机利用率,并使各用户公平地得到处理机资源。 处理机调度是OS的重要功能之一。 WHAT:按什么原则分配CPU —进程调度算法 WHEN:何时分配CPU —进程调度的时机 HOW:如何分配CPU —CPU调度过程(进程的上下文切换)

  2. 7.1 处理器调度的类型 • 处理器调度 • 对CPU资源进行合理地分配使用,以提高CPU的利用率,使各用户公平地得到CPU资源。 • 处理器调度的目标 • 以满足系统目标(如响应时间、吞吐率、处理器效率)的方式,把进程分配在一个处理器或多个处理器上执行。

  3. 处理器调度的准则 • 面向用户的准则 • 响应时间 (min); • 周转时间(结束时间-进入系统时间)(min); • 优先级 • 面向系统的准则 • 吞吐量(max) • CPU利用率(max) • 公平 • 资源的平衡使用 • 系统开销 (min)

  4. 7.1 处理器调度的类型 • 长程调度(高级调度):从外存的后备队列中选择一个或者多个作业调入内存,并为它们创建进程,分配必要的资源。 • 长程调度程序决定OS可以接纳一个还是多个进程 • 创建的进程越多,每个进程执行时间百分比就越小。 • 每当一个进程终止时或空闲时间片超过了一定的域值 ,调度程序可能会决定增加一个或多个新进程,或调用长程调度程序。 • 决定下一次允许哪个进程进入: • 基于简单的FIFO原则,基于优先级、执行时间、I/O需求等 • 进程状态的变化为: • 创建->就绪/挂起;创建->就绪

  5. 7.1 处理器调度的类型 • 中程调度(中级调度):将进程的部分或全部加载到内存中,提高内存利用率。进程状态变化(通过执行挂起和激活操作): • 就绪/挂起<->就绪 • 阻塞/挂起<->阻塞 • 短程调度(低级调度、进程调度、分派程序dispather):选择哪个进程在处理机上执行,执行最频繁) • 进程状态:就绪<->运行 • 当可能导致当前进程挂起或可能剥夺当前正在运行的进程的事件发生时,调用短程调度程序。包括如下事件: • 时钟中断、I/O中断、操作系统调用、信号

  6. 其它:按照OS类型的分类 • 批处理调度--应用场合:大中型主机集中计算,如工程计算、理论计算 • 分时调度、实时调度 • 多处理机调度

  7. 7.1 处理器调度的类型 • 三种调度类型之间的关系: • 当创建新进程时,执行高级调度,将新进程加入到当前活动的一组进程中。 • 中级调度是交换功能的一部分,它将一个进程至少部分换入内存中,使之以后能够执行。 • 低级调度才真正决定哪个就绪进程是下一个得以执行的进程。

  8. 调度和进程状态转换

  9. 用于调度的队列图 超时 长程调度 就绪队列 批作业 短程调度 CPU 释放 就绪、挂起队列 交互用户 事件发生 中程调度 阻塞、挂起队列 阻塞队列 事件等待

  10. New Admit Admit Suspend Dispatch Exit Activate Release Ready Suspend Ready Running Suspend Timeout Occurs Event Event Occurs Event Wait Activate Blocked Suspend Blocked 低级调度 Suspend 中级调度 高级调度 调度的层次

  11. 几个概念:CPU burst vs. I/O burst • 阵发期 : • CPU burst cycle: 进程(线程)使用CPU计算; • I/O burst cycle: 进程(线程)使用设备I/O。 • 进程运行行为: • CPU burst, I/O burst, CPU burst, I/O burst, …… • CPU调度:考虑处于CPU burst进程集合 • CPU burst时间根据以前行为推定。

  12. 7.2 进程调度算法-基本类型 • 非抢占调度(NonPreemptive):就绪进程不可以从运行进程手中抢占CPU。 • 一旦进程处于运行状态,它就不断执行直到终止或者为等待I/O或请求某些操作系统服务而阻塞自己,才把CPU让给别人 • 抢占调度(Preemptive):就绪进程可以从运行进程手中抢占CPU。 • 允许调度程序根据某种策略中止当前运行进程的执行,将其转移到就绪状态,并选择另一个进程投入运行。 • 时机: • 一个新进程到达时 • 一个中断的发生 • 将一个被阻塞进程置为就绪态 • 周期性的时间中断

  13. 7.2 进程调度算法-基本类型 • 比较: • 抢占策略可能会导致较大的开销,但是可对所有进程提供较好的服务,避免任一个进程独占CPU太长时间 • 通过使用有效的进程切换机制以及提供比较大的主存,使得大部分程序都在主存中,剥夺的代价可以相对比较低。

  14. 7.2 进程调度程序的功能 • 保存现场:记录放弃CPU的进程A的现场信息(如PC,通用寄存器的内容等) • 选择进程:当进程出让CPU或调度程序剥夺执行状态进程占用的CPU时,选择适当的进程B分派CPU • 完成上下文切换 • 用户态执行进程A代码,之后进入OS内核(通过时钟中断或系统调用) • 保存进程A的上下文,载入进程B的上下文(CPU寄存器和一些表格的当前指针) • 用户态执行进程B代码

  15. 7.2 进程调度-执行时机 与引起进程调度的原因及进程调度的方式有关: • 创建进程。决定运行父进程还是子进程; • 进程终止。正在执行的进程执行完毕; • 执行中进程自己调用阻塞原语将自己阻塞进入阻塞状态; • 执行中进程调用了P原语操作或V操作原语; • 执行中进程提出I/O请求后被阻塞; • 在分时系统中时间片已经用完; • 在执行完系统调用等系统程序后返回用户进程时,这时可看作系统进程执行完毕,从而可调度选择一新的用户进程执行 在CPU执行是可剥夺的方式下,还有: • 就绪队列中的某进程的优先级变得高于当前执行进程的优先级,也引发进程调度。

  16. 7.3 调度算法(1)- 先来先服务FCFS • 先来先服务FCFS (First-Come-First-Served) • 当每个进程就绪后,它加入就绪队列。当正在运行的进程停止执行时,选择在就绪队列中存在时间最长的进程运行(要事先知道每个进程的结束时间). • 评价 • 非抢占调度 • 对于长进程有利,而不利于短进程。 • 有利于CPU繁忙型的进程,而不利于I/O繁忙型的进程 • 不能用于分时系统。 • 改进 • FIFO自身对于单处理器系统并不是很有吸引力,通常与优先级策略结合,维护多个队列,每个优先级一个队列,每个队列采用FCFS的方法。如反馈法。

  17. 7.3调度算法(2)-最短作业优先(shortest-job-first,SJF)7.3调度算法(2)-最短作业优先(shortest-job-first,SJF) • 原则: • 非剥夺的,下一次选择所需处理时间最短的进程(最短下一个CPU区间)。如果两个进程剩余时间相同,则使用FCFS来调度。 • 问题: • 需要知道或至少需要估计每个进程所需要的处理时间。 • 评价: • 有利于短进程。可以证明:SJF算法平均等待时间最小 • 长进程就可能被饿死:只要有持续不断的短进程存在 。 • 缺少剥夺机制,不适用于对分时系统或事务处理环境

  18. 7. 3调度算法(3)-最短剩余时间调度SRT(shortest remaining Timer,SRT) • 原理: • 对SJF增加了剥夺机制 • 选择预期剩余时间最短的进程,当一个新进程加入就绪队列时,它可能比当前运行的进程具有更短的剩余时间,只要新进程就绪,调度程序就进行剥夺。 • 优点: • 既不偏爱长进程,也不像RR算法那样会产生额外的中断,从而减少了开销。 • 周转时间方面,SRT比SJF性能要好,短作业可以立即被选择执行。

  19. 7. 3调度算法(3)-最短剩余时间调度SRT(shortest remaining Timer,SRT) • SRT问题: • 需要知道或至少需要估计每个进程所需要的处理时间。 • 只要有持续不断的短进程存在,长进程就可能被饿死 • 它必须记录过去的服务时间,从而增加了开销。

  20. 7.3 调度算法(4)-优先级调度 • 优先级 • 每个进程都有一个优先级,调度程序总是选择具有较高优先级的进程。 • 静态优先级(static) • 优先数在进程创建时分配,生存期内不变。 • 响应速度慢,开销小。 • 适合批处理进程 • 动态优先级(dynamic) • 进程创建时继承优先级,生存期内可以修改。 • 响应速度快,开销大。

  21. 7.3 调度算法(4)-优先级调度 • 问题 • 低优先级的进程可能会饿死(无穷阻塞)。如果一直有高优先级的就绪进程的话。 • 改进 • 一个进程的优先级随着它的时间或执行历史而变化-老化策略(aging)。

  22. 7.3调度算法(5)-轮转调度RR (Round Robin) • 轮转调度(或称时间片调度(time slicing) :以一定的时间间隔周期性产生一个时钟中断,当中断发生时,当前正在运行的进程被置于就绪队列中,然后基于FCFS选择下一个就绪进程运行。专门为分时系统设计。 • 执行过程 • 将系统中所有的就绪进程按照FCFS原则,排成一个队列。 • 每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。 • 在一个时间片结束时,发生时钟中断。 • 调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。 • 进程可以未使用完一个时间片,就出让CPU(如阻塞)。

  23. 超时 完成 CPU F … D C B A 阻塞 7.3调度算法(5)-轮转调度RR (Round Robin) 适用于分时系统

  24. 7.3调度算法(6)-轮转RR (Round Robin) • 时间片长度变化的影响 • 过长->响应时间长。退化为FCFS算法,进程在一个时间片内都执行完, • 过短->响应时间长。用户的一次请求需要多个时间片才能处理完,上下文切换次数增加。 • 因为处理时钟中断、执行调度和分派函数都需要处理器开销 • 策略:时间段最好略大于一次典型的交互所需要的时间,否则使响应时间延长(使用两个时间片)。 • 评价: • 在分时系统或事务处理器系统中特别有效 • 缺点:偏向于CPU型的进程。

  25. 7.3调度算法(7)-最高响应比调度算法(HRRN) • 原理: • 当前进程完成或被阻塞时,选择响应比最大的就绪进程运行。 • 响应比R定义: R=(w+S)/S (R:响应比,W=等待时间,S=运行时间 响应比R= 周转时间 / 运行时间 =(运行时间 + 等待时间)/ 运行时间 = 1 +(等待时间 / 运行时间) • 评价: • 该算法是FCFS和SJF的结合,克服了两种算法的缺点 • 公平,吞吐率大 • 需要估计期待的服务时间,增加了计算,增加了开销

  26. 7.3调度算法(8)-多级队列调度算法 • 多级队列调度算法:将就绪队列分成多个独立队列,进程所属的队列固定。通过各队列的区别对待,达到一个综合的调度目标。 • 例如:通用系统中: • 队列1:实时进程就绪队列(优先级) • 队列2:分时进程就绪队列 (RR) • 队列3:批处理进程就绪队列 (优先级)

  27. 7.3调度算法(8)-多级队列调度算法 • 各队列的不同处理:不同队列可有不同的优先级、时间片长度、调度策略等。如前台对队列可能用RR,而后台队列可能是用FCFS。 • 队列之间也要进行调度:采用固定优先级、可抢占调度来实现。如前台队列优先级高于后台队列优先级。 • 各队列的优先级自上而下降级。只有优先级高的队列中没有进程时,才可以调度优先级低的队列中的进程

  28. 7.3调度算法-多级队列调度算法

  29. 7.3调度算法(9)-多级反馈队列调度 • 多级反馈队列(Feed-Back): • 多个就绪队列,进程所属队列可变,即进程可以在不同的就绪队列之间移动 • 设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列1的优先级最高。每个队列执行时间片的长度也不同,规定优先级越低则时间片越长,如:逐级加倍 队列优先级逐级降低,而时间片长度逐级递增

  30. 7.3调度算法(9)-多级反馈队列调度 • 出发点 • SJF,SRT都需要知道进程的运行时间,有局限性。如果没有关于各个进程相对长度的任何信息,则可以以已经执行了的时间进行衡量 • 调度基于剥夺原则(按时间片),使用动态优先级机制。 • OS将处理器分配给一个进程,当这个进程被阻塞或被剥夺时,就反馈到多个优先级队列中的一个队列中。 • 多级反馈队列算法是时间片轮转算法和优先级算法的综合和发展,基于抢占式,使用动态优先级机制 • 问题:可能饿死。

  31. Multilevel Feedback Queues 优先级递增 时间片递增

  32. 7.3调度算法-多级反馈队列调度 • 多级队列反馈过程: • 新进程进入内存后,先投入RQ0队列的末尾,按FCFS损顺序调度;若它在一个时间片未能执行完,则降低投入到RQ1队列的末尾,同样按FCFS算法调度;如此下去,直到最后的队列。最后队列则按"时间片轮转"算法调度直到完成。 • 仅当较高优先级的队列为空,才调度较低优先级的队列中的进程执行。如果进程执行时有新进程进入较高优先级的队列,则抢先执行新进程,并把被抢先的进程投入原队列的末尾。 • 系统开销小。计算量大的进程落入底层队列。位于优先级最低的队列中的进程,会重复地返回到这个队列,直到运行结束。(循环方式)

  33. 几点考虑 • I/O型进程:让其进入最高优先级队列,以及时响应I/O交互。通常执行一个小时间片,要求可处理完一次I/O请求的数据,然后转入到阻塞队列。 • 计算型进程:每次都执行完时间片,进入更低级队列。最终采用最大时间片来执行,减少调度次数。 • I/O次数不多,而主要是CPU处理的进程。在I/O完成后,放回原先I/O请求时离开的队列,以免每次都回到最高优先级队列后再逐次下降。 • 为适应一个进程在不同时间段的运行特点,I/O完成时,提高优先级;时间片用完时,降低优先级。

  34. 7.3调度算法-反馈法 • 特点 • 短进程和新进程优先于长进程和老进程。运行时间短的进程在经过前面几个队列之后便已经执行完,而这些队列中的进程被优先调度。 • 响应速度快:交互式进程反应及时 • 设备资源利用率高。因为与设备打交道的进程可能经常会由于下面原因而进入等待状态:所申请的资源被占用,启动了I/O传输。当等待事件发生时,它将进入最高优先级就绪队列,尽快获得处理机并使用资源。 • 系统开销小。因为运行时间长的进程最后进入低优先级的队列,这些队列的时间片较长,因而进程的调度频率较低。

  35. 7.3调度算法-例子 假设在单道批处理环境下有四个进程,已知它们进入系统的时间、估计运行时间: 要求:应用先来先服务、最短进程调度算法,分别给出进程调度的顺序、并计算出平均周转时间

  36. 先来先服务调度算法(FCFS)--计算结果 时间 P1 120 P2 50 P3 10 P4 20 8:00 10:00 10:50 11:00 11:20

  37. P1 P2 P3 P4 最短作业优先算法(SJF)--计算结果 时间 P1 120 P3 10 P4 20 P2 50 8:00 10:00 10:10 10:30 11:20

  38. 最高响应比优先算法--计算结果 80+50, 20+20 50 20 70+50, 60+10,10+20 50 10 20 时间 P1 120 P3 10 P2 50 P4 20 8:00 10:00 10:10 10:30 11:20

  39. 调度算法—举例(甘特图表示)

  40. FCFS

  41. RR--时间片轮转调度算法(q=1)

  42. RR--时间片轮转调度算法(q=4)

  43. SJF--短作业优先调度算法

  44. 最高响应比优先调度算法(HRRN)

  45. 多级反馈队列调度算法(q=1)

  46. 调度算法—几种常用调度算法的比较 • 相关参数 • w—— 至今,在系统中用于等待所花费的时间。 • e —— 至今为止在CPU上执行用去的时间。 • s—— 进程所需的总体运行时间(包括e)

  47. 7.4 影响调度算法选择的主要因素 • 设计目标。批处理系统、分时系统、实时系统等 • 公平性。使每个进程可以公平地共享CPU; • 均衡性。使各种资源都同时得到利用。 • 统筹兼顾。兼顾响应时间和资源利用率。 • 开销。开销小。

  48. 7.4 调度性能评价准则 • CPU使用率。 • 吞吐量:指一个时间单元内所完成的进程的数量。 • 周转时间:从进程提交到进程完成完成的时间间隔。包括:等待进入内存、在就绪队列中等待、在CPU和I/O上执行 • 等待时间:进程在就绪队列中等待的时间和; • 响应时间:从提交请求到产生第一响应的时间。 目标:使CPU使用率和吞吐量最大化,使周转时间、等待时间和响应时间最小化。

More Related