【操作系统】二、进程管理:2.处理机调度(三个调度层次、调度算法、进程调度切换、调度器)

三、处理机调度

进程调度是有代价的,频繁进行进程调度就会把时间用在进程的调度上,而真正用户数据的处理的时间就变少了,就使整个系统的效率下降。

【注意】处于临界区的进程也可能因为中断、抢占而被调度

1.三个调度层次

1.1高级调度/作业调度

长程调度、作业调度

调度的对象是作业,外存静态的作业。

过程:外存有很多个作业(程序),按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时撤销PCB。

用户向系统提交一个作业 = 用户让操作系统启动一个程序(来处理一个具体的任务)。

1.2中级调度/内存调度

中程调度、内存调度

调度的对象是挂起的进程

目的:提高内存利用率和系统的吞吐量。

暂时调到外存等待的进程状态,就是挂起。但是PCB还是会在内存。

1.3低级调度/进程调度

短程调度、进程调度、处理机调度

调度的对象是进程、LWP。

进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。

进程调度的频率很高,一般几十毫秒一次。

作业调度(高级调度)内存调度(中级调度)进程调度(低级调度)
发生频率
发生方式外存->内存(作业)外存->内存(进程)内存->CPU
对进程状态的影响无->创建态->就绪态挂起态->就绪态就绪态->运行态

2.何时进行进程调度

  • 可以进行调度
    • 进程主动放弃处理机(有的系统中只允许主动放弃处理机)
      • 进程正常终止
      • 进程发生异常终止
      • 进程主动请求阻塞(如等待I/O)
    • 进程被动放弃处理机
      • 进程时间片用完
      • 有更紧急的处理(如I/O中断)
      • 更高优先级的进程进入就绪队列
  • 不可以进行调度
    • 在处理中断的过程。中断处理很复杂,与硬件密切相关,很难进行进程切换。
    • 进程在操作系统内核程序临界区。(但是普通临界区可以调度、切换)
    • 在进行原语操作。

临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源。

临界区:访问临界资源的那段代码。

内核程序临界区:一般是用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程的PCB组成)。

在这里插入图片描述

(2012联考)进程处于临界区时不能进行处理机调度(×)

这里的临界区时普通的临界区,他不会影响操作系统内核的工作,所以可以进行进程调度。

3.进程调度方式

3.1非抢占调度方式

非抢占方式、非剥夺调度方式。

只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。

引起它调度的原因有:

  1. 进程运行完毕
  2. 主动放弃CPU进行阻塞(I/O请求)
  3. 在进程通信、同步的过程中执行了某种原语。

特点:实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统。

3.2抢占调度方式

抢占方式、剥夺调度方式。

当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。

原则:

  1. 优先级原则
  2. 短进程优先原则
  3. 时间片原则

特点:可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统。

4.进程调度、切换

  • “广义的进程调度”、“狭义的进程调度”、“进程切换”的区别:

进程切换:指一个进程让出处理机,由另一个进程占用处理机的过程。

狭义的进程调度:指的是从就绪队列中选中一个要运行的进程。(这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要进程切换)

广义的进程调度:包含了选择一个进程和进程切换两个步骤。

进程切换的过程主要完成了:

  1. 对原来进程保存CPU现场信息(给PCB);
  2. 对新的进程各种数据进行恢复。

(如:程序计数器PC、程序状态字PSW、各种数据寄存器等处理机现场信息,这些信息一般保存在进程控制块PCB

【注意】进程切换是有代价的,因此如果过于频繁的进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分时间都花在了进程切换上,而真正用于执行进程的时间减少。

5.调度器、闲逛进程

5.1调度器/调度程序 scheduler

调度程序:控制让哪个程序运行,运行多久。

调度时机――什么事件会触发“调度程序”?

  1. 创建新进程。
  2. 进程退出。
  3. 运行进程阻塞。
  4. I/O中断发生(可能唤醒某些阻塞进程)。
  5. 非抢占式调度策略,只有运行进程阻塞退出才触发调度程序工作。
  6. 抢占式调度策略,每个时钟中断或k个时钟中断会触发调度程序工。

5.2闲逛进程 idle

CPU不会彻底闲下来,调度程序永远的备胎,没有其他就绪进程时,运行闲逛进程(idle)

闲逛进程的特性:

  1. 优先级最低
  2. 可以是0地址指令,占一个完整的指令周期(指令周期末尾例行检查中断)
  3. 能耗低

6.调度算法目标

处理机调度算法的共同目标:

  1. 资源利用率
  2. 公平性
  3. 平衡性
  4. 策略强制执行

批处理系统的目标:

  1. 平均作业周转时间短
  2. 系统吞吐量高
  3. 处理机利用率高

分时操作系统目标:

  1. 保证响应时间快
  2. 保证均衡性

实时操作系统目标:

  1. 保证满足截止时间要求
  2. 保证可预测性

7.调度算法的评价指标

CPU利用率
C P U 利用率 = 有效工作时间 总工作时间(有效 + 空闲等待) CPU利用率=\frac{有效工作时间}{总工作时间(有效+空闲等待)} CPU利用率=总工作时间(有效+空闲等待)有效工作时间
系统吞吐量:单位时间完成的作业数量。
系统吞吐量 = 总共完成的作业数 总共花费的时间 系统吞吐量=\frac{总共完成的作业数}{总共花费的时间} 系统吞吐量=总共花费的时间总共完成的作业数
周转时间:作业从提交的系统到作业完成是时间(越小越好)。
(作业)周转时间 = 作业完成时间刻 − 作业提交时间刻 = 等待时间 + 运行时间(理解,但这个不常用) \color{red}(作业)周转时间=作业完成时间刻-作业提交时间刻 \\ =等待时间+运行时间(理解,但这个不常用) (作业)周转时间=作业完成时间刻作业提交时间刻=等待时间+运行时间(理解,但这个不常用)
平均周转时间:
平均周转时间 = 周转时间之和 作业数 \color{red} 平均周转时间=\frac{周转时间之和}{作业数} 平均周转时间=作业数周转时间之和

带权周转时间一定是 >=1 的。(越小越好)。
带权周转时间 = 周转时间 作业实际运行的时间 带权周转时间=\frac{周转时间}{作业实际运行的时间} 带权周转时间=作业实际运行的时间周转时间

等待时间:在等待处理机的时间。调度算法一般影响的就是等待时间。

响应时间:用户从提交请求到首次产生响应的时间。

相应比:
相应比 = 等待时间 + 要求服务时间 要求服务时间 相应比 = \cfrac{等待时间+要求服务时间}{要求服务时间} 相应比=要求服务时间等待时间+要求服务时间

❗8.调度算法

8.1非抢占式

这几种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心“响应时间”,也并不区分任务的紧急程度,因此对于用户来说,交互性很糟糕,不适合用于现在交互式系统的调度算法。

因此这三种算法一般适合用于早期的批处理系统,当然,FCFS算法也常结合其他的算法使用,在现在也扮演着很重要的角色。

8.1.1先来先服务FCFS

first come first server

按照作业/进程到达的先后顺序进行服务。

用于作业、进程调度。

优点:公平,算法实现简单,系统开销小

缺点:排在长作业后面的短作业的带权周转时间大。对长作业有利,对短作业不利

长作业是占用很长时间CPU,少用I/O的进程,可以理解成CPU繁忙型

不会造成饥饿。

在这里插入图片描述

8.1.2短作业优先SJF

short job first

短作业优先级高(先运行):先来的作业先进行,进行完了之后,使用SJF挑选最短的作业放入后面。

用于进程时叫短进程优先SPF。SJF和SPF都是非抢占式的,但是最短剩余时间优先(SRTN) 是抢占式的。

最短剩余时间优先(SRTN):每次进入一个新的作业(进程),会重新计算每一个作业剩余的时间有多少,重新规划下一个剩余时间最短的作业放入后面。

优点:最短的平均等待时间

缺点:对短作业有利,对长作业不利。

可能会导致长作业饥饿

【注意】

  1. 如果题目中未特别说明,所提到的“短作业/进程优先算法”默认是非抢占式的。
  2. 在所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最少(可以抢占的话那就SRTN,所有实际是不一定)。
8.1.3高响应比优先HRRN

highest response ratio next

第一个进程先进行,完成之后主动放弃,这时候计算作业的响应比(等待时间是:不同的进程此时已经等待的时间)。响应比(response ratio)的优先。

相应比一定>=1。
相应比 ( > = 1 ) = 已经等待时间 + 要求服务时间 ( 运行时间 ) 要求服务时间 相应比(>=1)=\frac{已经等待时间+要求服务时间(运行时间)}{要求服务时间} 相应比(>=1)=要求服务时间已经等待时间+要求服务时间(运行时间)
用于作业、进程调度。

优点:综合考虑了等待时间和运行时间,从而避免了长作业饥饿的问题。

不会造成饥饿。

8.2抢占式

交互式系统

8.2.1时间片轮转RR

round robin

用于分时操作系统。

将就绪进程按照FCFS排成一个就绪队列,设置一个时间片(分割为大小相同的时间片),一个进程在时间片内未执行完,剥夺处理机(时钟中断),并把它重新放到队尾。

仅用于进程调度。

优点:公平、响应快,适合分时操作系统,人机交互

缺点:高频率进程切换,开销太大。不区分任务紧急程度。

不会造成饥饿。

【2010年408真题】进程时间片用完是降低进程优先级的合理时机。


如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度RR算法退化为先来先服务FCFS调度算法,并且会增大进程响应时间。因此时间片不能太大

另一方面,进程调度、切换是有时间代价的(保存、恢复运行环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。可见时间片也不能太小

一般来说,设许时间片时要让切换进程的开销占比不超过1%。

8.2.2优先级调度算法

priority-scheduling algorithm

可以抢占也可以不抢占。

实时系统的进程调度是抢占式优先级高优先算法。

用于作业、进程调度。

根据优先级是否可以动态改变,可将优先级分为静态优先级和动态优先级两种:

  • 静态优先级:优先级在创建进程时确定,保持不变。
  • 动态优先级:在进程创建初赋予一个优先级,后续会随着进程或时间改变而改变。

优点:用优先级区分紧急程度,可以灵活地调整进程。

缺点:如果一直有高优先级的进程进入,那么低优先级就饥饿。

低优先级可能会造成饥饿


【注意】就绪队列未必只有一个,可以按照不同优先级来组织。也可以把优先级高的进程排在更靠近队头的位置。

  • 如何设置优先级:

系统进程优先级高于用户进程

前台进程优先级高于后台进程

I/O型进程(I/O繁忙型进程)优先级高于计算型进程(CPU繁忙型进程)

因为I/O尽早的开始工作,资源利用率、系统吞吐量越高

  • 如何调整动态优先级:

可以从追求公平、提升资源利用率等角度考虑:

  1. 如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级
  2. 如果某进程占用处理机运行了很长时间,则可适当降低其优先级
  3. 如果发现一个进程频繁地进行l/O操作,则可适当提升其优先级
8.2.3多级反馈队列MLFQ

multilevel feedback queue

FCFS算法的优点是公平。
SJF算法的优点是能尽快处理完短作业,平均等待/周转时间等参数很优秀。
RR算法可以让各个进程得到及时的响应。
优先级调度算法可以灵活地调整各种进程被服务的机会。

综合上述5种算法,得到综合表现最好的算法:多级反馈队列调度算法MLFQ

设计多级反馈队列调度算法,需要考虑的是:(2020年408真题)

  1. 就绪队列的数量;
  2. 就绪队列的优先级;
  3. 各级就绪队列的调度算法;
  4. 进程在就绪队列的迁移时间。

流程:划分多个队列,每个队列内部采用FCFS,队列1的进程执行完成之后进入队列2的队尾。当队列1有进程时,队列2内进程无法进行,上一级队列空,下一级队列开始进行

当发生更高优先级进程进入,会剥夺当前进程的处理机,放入它当前出发的队列(而不是下一级队列),然后进程新来的优先级高的进程。

在这里插入图片描述

时间片越往下越大,优先级越往下越小。

在这里插入图片描述

用于进程调度。目前公认最好。

可能会造成饥饿

缺点:系统开销大


【注意】各队列可采用不同的调度策略,如:

  • 系统进程队列采用优先级调度
  • 交互式队列采用RR
  • 批处理队列采用FCFS
  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值