【操作系统 · 调度】单处理器调度

本文详细介绍了处理器调度的三个层次:长程、中程和短程调度,以及它们各自的作用。短程调度中讨论了多种算法,如FCFS、RR、SPN、SRT和HRRN等,分析了它们的优缺点。此外,还提到了公平共享调度(FSS)策略,用于确保进程组之间的公平资源分配。内容涵盖了调度的目的、响应时间、吞吐量、优先级和调度策略选择等方面。
摘要由CSDN通过智能技术生成


调度类型:

  • 长程调度 :决定加入待执行进程池
  • 中程调度 :决定加入部分/全部位于内存中进程集合
  • 短程调度 :决定处理器执行哪个可运行进程
  • I/O调度 : 决定可用I/O设备处理哪个挂起的I/O请求

1. 处理器调度

目的 :满足系统目标(响应时间、吞吐率、处理器效率)

作用 :决定进程等待/运行(少量开销)

本质 : 队列管理(managing queues):减少延迟、优化性能

调度 + 进程状态转换:

调度 + 进程状态转换

调度层次:

调度层次

调度队列图:

调度队列图

1.1 长程调度

决定哪个程序可进入系统中处理,它控制了并发度。长程调度程序执行频率较低。

1.2 中程调度

决定加入部分/全部位于内存中进程集合。交换功能的一部分,主要操作包括 换入(swapping-in)换出(swapping-out)。中程调度程序执行频率适中。

1.3 短程调度

决定处理器执行哪个可运行进程。短程调度程序(分派程序,dispatcher),执行最为频繁,它精确地决定执行哪个进程。

当前进程 阻塞/被抢占 事件:

  • 时钟中断
  • I/O中断
  • 操作系统调用
  • 信号(eg. 信号量)

2. 调度算法

2.1 短程调度规则

优化系统一个/多个方面行为,以分配处理器时间,从而根据各种调度策略建立规则。

常用规则的两大维度:

  • 面向用户的规则
  • 面向系统的规则

调度规则

  • 面向用户(性能相关)
    • 周转时间
      • 一个进程从提交到完成之间的时间间隔,包括实际执行时间、等待资源 (包括处理器) 时间
    • 响应时间
      • 从提交一个请求到开始接收响应的时间间隔
    • 最后期限
      • 再能指定进程的完成期限时,调度原则将降低目标,使得满足最后期限的作业数量百分比最大。
  • 面向用户(其他)
    • 可预测性
      • 无论系统负载如何,用户不希望响应时间/周转时间过长,则需要在系统抖动时发出信号、处理不稳定性
  • 面向系统(性能相关)
    • 吞吐量
      • 调度策略应使得单位时间内完成的进程数量最大
    • 处理器利用率
      • 处理器处于忙状态的时间百分比
  • 面向系统(其他)
    • 公平性
      • 没有来自用户/系统的指导时,进程应被平等地对待,没有进程处于饥饿状态
    • 强制优先级
      • 指定进程优先级后,调度策略应优先选择高优先级的进程
    • 平衡资源
      • 调度策略使系统中的所有资源处于忙状态,优先调用较少使用紧缺资源的进程

2.2 优先级的使用

许多系统中,每个进程都被指定一个优先级,调度程序总是优先选择具有高优先级的进程。

纯优先级调度方案

纯优先级调度方案

这里给出了一组按优先级(RQ0, RQ1, …)排列的就绪队列。进行一次调度时,调度程序按优先级递减顺序选择队列。

问题 :低优先级进程可能会长时间处于饥饿状态

解决方案 :让一个进程的优先级随时间/执行历史而变化

2.3 选择调度策略

选择函数(selection function) :决定选择哪个就绪进程下次执行。

决策模式(decision mode) :说明选择函数开始执行的瞬间的处理方式:

  • 非抢占 :一旦进程处于运行状态,就会不断执行直至终止。进程仅可被自身事件阻塞(等待I/O、请求操作系统服务)
  • 抢占 :当前正运行进程可被操作系统中断,并转换为就绪态。

两个基本概念:

  • 长进程:运行时间长的进程
  • 段进程:运行时间短的进程

三个重要参数:

  • w:目前位置在系统中停留的时间
  • e:目前为止花费的执行时间
  • s:进程所需的总服务时间(包括e)

调度策略

先来先服务 FCFS轮转 RR最短进程优先 SPN最短剩余时间 SRT最短响应比优先 HRRN反馈
选择函数max(w)常数min(s)min(s - e)max[(w + s) / s]-
决策模式非抢占抢占(时间片用完时)非抢占抢占(到达时)非抢占抢占(时间片用完时)
吞吐量不强调时间片小时, 很低不强调
响应时间进程执行时间差别大时, 较短进程提供较好的响应时间短进程提供较好的响应时间提供较好的响应时间提供较好的响应时间不强调
开销最小最小可能较大可能较大可能较大可能较大
对进程影响① 对短进程不利
② 对I/O 密集型进程不利
公平对待长进程不利长进程不利平衡性好I/O 密集型进程可能有利
饥饿可能可能可能
先来先服务(FCFS)

先来先服务(FCFS),又称先进先出(First-In-First-Out)。每个进程就绪后加入就绪队列。当前正运行进程停止执行时,选择就绪队列中存在时间最长的进程运行。

FCFS对单处理器系统而言效益一般,但可与优先级策略结合以提高效益。

轮转(RR, Round-Robin)

先来先服务(FCFS),也称为时间片(Time-Slicing)技术,一种基于时钟的抢占策略。其周期性地产生时钟中断(时间片),出现中断时,当前正运行进程被放入就绪队列,然后基于FCFS策略选择下一个就绪作业运行。

缺点:当既有处理器密集型,又有I/O密集型时

  • 一方面,I/O密集型进程短时间使用处理器后,会因为I/O被阻塞没等待I/O操作完成后,加入到就绪队列
  • 另一方面,处理器密集型进程在执行完一个完整的时间片后,立即返回就绪队列,它不公平地使用了大部分处理器时间

以上缺陷,导致了I/O密集型进程新弄降低,I/O设备低效,响应时间变化大。

虚拟轮转法(VRR, Virtual Round Robin)

虚拟轮转法避免了上述不公平性,新进程根据FCFS的管理到达并加入就绪队列。一个正运行进程用完其时间片后,会返回到就绪队列中。一个进程因I/O阻塞时,会加入一个I/O队列。

  • 解除I/O阻塞的都会转移到一个FCFS辅助队列中。
  • 进行调度决策时,辅助队列中的进程优先于就绪队列中的进程。
  • 调度辅助队列中的一个进程时,这个进程的运行时间不会长于基本时间减去其上次在就绪队列中被选择运行的总时间。

虚拟轮转法

最短进程优先(SPN, Short Process Next)

最短进程优先(SPN, Short Process Next),解决FCFS策略不利于短作业的一种方法。这是一种非抢占策略,原则:下次选择预计处理器时间最短的进程,但存在长进程饥饿的风险,该策略需要预估服务时间。

最短剩余时间(SRT, Shortest Renaming Time)

最短剩余时间(SRT, Shortest Renaming Time),在SPN中增加了抢占机制的策略。此时,调度程序总是选择与其剩余时间最短的进程,但存在长进程饥饿的风险,该策略需要预估服务时间。

SRT不像FCFS那样偏向长进程,也不像轮转算法那样产生额外中断,降低了开销。但它会记录过去的服务时间,增加了开销。

最高响应比优先(HRRN, Highest Response Ratio Next)

最高响应比优先(HRRN, Highest Response Ratio Next),使用归一化周期时间(周转时间、实际服务时间 比值)。

R = w + s s R=\dfrac{w+s}{s} R=sw+s

原则:当前进程 完成/被阻塞 时,选择R值最大的就绪进程。

该策略说明了进程的年龄(小分母产生大比值),但需要预估服务时间。

反馈法

反馈法,不存在各个进程相对长度的任何信息时,无法使用SPN、SRT、HRRN策略时的方法。

具体方法:

  • 调度基于抢占原则(时间片)并使用动态优先级机制。
  • 一个进程首次进入系统 时,会放在RQO中。当它首次被抢占并返回就绪态时,会放在RQ1中。在随后的时间里,每次它被抢占时,都会降级到下一个低优先级队列中。
  • 短进程很快执行完毕,但长进程则会多次降级。因此,新进程、短进程 优于 老进程、长进程。每个队列(除优先级最低队列)均采用FCFS机制。
  • 若进程位于优先级最低队列,无法降级,则重复返回该队列,直至运行结束,此队列可按 轮转RR 方式调度。

一个进程经过多个队列的路径,可以反应这种反馈调度机制的本质,即 多级反馈(multilevel feedback):操作系统把处理器分配给一个进程,当这个进程 被阻塞/被抢占 时,就反馈到多个优先级队列之一。

反馈调度

进程调度示例

先介绍两个概念:

周转时间(turnaround time):驻留时间Tr / 这一项在系统中花费的总时间(等待时间 + 服务时间)

归一化周转时间(normalized turnaround time):周转时间、服务时间 比值,表示一个进程的相对延迟情况。比值越大,服务级别越低。

进程到达时间服务时间
A03
B26
C44
D65
E82

调度策略对比

2.4 公平共享调度(FSS, Fair-Share Scheduling)

公平共享调度(FSS, Fair-Share Scheduling),一种基于进程组的调度策略。

公平共享调度程序(FSS, Fair-Share Scheduler)

调度基于优先级进行,其中包括三大重要参数:

  • 进程基本优先级
  • 进程近期使用处理器情况(进程CPU计数)
  • 组近期使用处理器情况(组CPU计数)

进程j在时间区间i中时,处理器使用情况的测度:
C P U j ( i ) = C P U j ( i − 1 ) 2 CPU_j(i)=\dfrac{CPU_j(i-1)}{2} CPUj(i)=2CPUj(i1)

组k在时间区间i中时,处理器使用情况的测度:
G C P U k ( i ) = G C P U k ( i − 1 ) 2 GCPU_k(i)=\dfrac{GCPU_k(i-1)}{2} GCPUk(i)=2GCPUk(i1)

进程j在时间区间i开始处的优先级(Basej是进程j的基本优先级,Wk是分配给组k的权值):
P j ( i ) = B a s e j + C P U j ( i ) 2 + G C P U k ( i ) 4 W k P_j(i)=Base_j+\dfrac{CPU_j(i)}{2}+\dfrac{GCPU_k(i)}{4W_k} Pj(i)=Basej+2CPUj(i)+4WkGCPUk(i)
Pj越小,优先级越高。

每个进程被分配一个基本优先级。进程的优先级会随进程使用处理器及进程 所在组使用处理器而降低。对于进程组使用的情况。用平均值除以该组的权值来归一化平均值。分配给某个组的全职越大,那么该组使用处理器对其优先级的影响越低。

公平共享调度程序示例(三进程 → 分两组)
公平共享调度程序示例

上图中,进程A在一个组中,进程B、C在另一个组中,每组权值为0.5。
假设所有进程基本优先级为60,处理器每秒中断60次,每次中断当前运行进程&所在组 使用域均增加1,每秒都重新计算优先级。

  • 首先,调度进程A。第1秒结束时,它被抢占。此时进程B和C具有最高优先级,进程B被调度。
  • 在第2个单位时间按结束时,A又具有最高优先级。

内核按照重复顺序调度进程A、B、A、C、A、B……
因此,处理器的50%分配给进程A(第1组),50%分配给进程B、C(第2组)。

实验二 处理器系统的进程调度 1.实验目的 加深对进程概念的理解,明确进程和程序的区别; 深入了解系统如何组织进程、创建进程; 进一步认识如何实现处理器调度。 2.实验预备知识 进程的概念; 进程的组织方式; 进程的创建; 进程的调度。 3.实验内容 编写程序完成处理机系统中的进程调度,要求采用时间片轮转调度算法。实验具体包括:首先确定进程控制块的内容,进程控制块的组成方式;然后完成进程创建原语和进程调度原语;最后编写主函数对所作工作进程测试。 4.提示与讲解 这个实验主要要考虑三个问题:如何组织进程、如何创建进程和如何实现处理器调度。 考虑如何组织进程,首先就要设定进程控制块的内容。进程控制块PCB记录各个进程执行时的情况。不同的操作系统,进程控制块记录的信息内容不一样。操作系统功能越强,软件也越庞大,进程控制块记录的内容也就越多。这里的实验只使用了必不可少的信息。一般操作系统中,无论进程控制块中信息量多少,信息都可以大致分为以下四类: ① 标识信息 每个进程都要有一个惟一的标识符,用来标识进程的存在和区别于其他进程。这个标识符是必不可少的,可以用符号或编号实现,它必须是操作系统分配的。在后面给出的参考程序中,采用编号方式,也就是为每个进程依次分配一个不相同的正整数。
实验内容: 编写一个处理机下的进程调度程序,模拟操作系统对进程的调度。 要求: 能够创建指定数量的进程,每个进程由一个进程控制块表示。 实现先来先服务调度算法:进程到达时间可由进程创建时间表示。 实现短作业优先调度算法:可指定进程要求的运行时间。(说明:对不可剥夺的短作业优先算法,当作业运行时间相等时,优先调度进程号小的进程执行;对可剥夺式的短作业优先算法,即选最短剩余时间的进程进行运行,在剩余时间相同的情况下,选择到达时间早的进程进行运行) 实现时间片轮转调度算法:可指定生成时间片大小。(说明:新进程到来时插入到就绪队列的队尾,当进程P运行完一个时间片时,若同时有进程Q到达,则先在就绪队列队尾插入新到达的进程Q,之后再插入进程P) 实现动态优先级调度算法:可指定进程的初始优先级(优先级与优先数成反比,优先级最高为0),优先级改变遵循下列原则:进程在就绪队列中每停留一个时间片,优先级加1,进程每运行一个时间片,优先级减3。(说明:本算法在优先级相同的情况下,选择到达时间早的进程进行运行) 测试用例格式如下: 输入:调度算法    进程号/到达时间/运行时间/优先级/时间片 输出:调度顺序/进程号/开始运行时间/结束运行时间/优先级 其中调度算法选项为:1----先来先服务,2----短作业优先,3----最短剩余时间优先,4----时间片轮转,5----动态优先级
实现了如下四种调度算法的模拟: (1)时间片轮转调度 (2)优先数调度 (3)最短进程优先 (4)最短剩余时间优先 模拟过程使用了JProgressBar作为进程状态条,更为直观地观察到每个进程的执行状态。 程序用户说明: 1、在上图标号1处输入要创建随机进程的个数,仅可输入正数,非正数会有相关提示。然后点击标号2处的“创建进程”按钮,随进创建的进程显示在程序界面的中央窗口,如标号3所示。 2、创建好随机进程后,在标号4的选框选择将要模拟执行的调度算法,然后点击标号5处的“开始模拟”,程序开始执行。标号3的列表会显示相应的调度变化。 3、模拟过程中,可以继续添加新的进程,操作同上。 4、 一个算法模拟执行完毕之后,可以点击标号6的“复位”按钮,可以重置列表的内容为程序模拟运行前的内容。复位成功后,可以继续选择其他调度算法进行模拟。 5、标号7显示为程序模拟过程中的时间,从1秒开始累计。 6、点击标号8的“清空”按钮,可以清空类别的进程,以便程序的下次执行。 题目要求: 题目四 处理器系统的进程调度 一 、 课 程 设 计 目 的 1. 加深对进程概念的理解, 明确进程和程序的区别。 2. 深入了解系统如何组织进程、 创建进程。 3. 进一步认识如何实现处理器调度。 二 、 课 程 设 计 内 容 编写程序完成处理器系统中的进程调度, 要求实现时间片轮转、 优先数、 最短进程优 先和最短剩余时间优先四种调度算法。 实验具体包括: 首先确定进程控制块的内容, 进程控 制块的组成方式; 然后完成进程创建原语和进程调度原语; 最后编写主函数对所作工作进行 测试。 模拟程序只对你所设置的“ 虚拟 PCB” 进行相应的调度模拟操作, 即每发生“ 调度” 时, 显示出当前运行进程的“ 进程标识符”、“ 优先数”、“ 剩余运行时间” 等, 而不需要对系 统中真正的 PCB 等数据进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值