更多优质内容
请关注公众号

操作系统入门(十二)进程调度、中级调度 和 作业调度-张柏沛IT博客

正文内容

操作系统入门(十二)进程调度、中级调度 和 作业调度

栏目:其他内容 系列:操作系统入门 发布时间:2022-02-15 13:26 浏览量:2127
本系列文章目录
展开/收起

- 调度类型

调度分为作业调度(高级调度),进程挂起和对换(中级调度)和进程调度(低级调度)这3级。

 

作业调度

作业调度指按策略从作业队列中选一个或多个处于外存的作业,给它们分配内存和其他设备资源,并建立相应的进程(建立PCB),使他们获得竞争CPU的权利。

作业调度是程序任务在外存和内存之间的调度,每个作业只调入1次,调出1次。

 

PS:作业调度可以理解为是对某程序的一次执行请求。

 

中级调度

中级调度指在内存紧张时将一些暂时不运行的进程(处于等待状态或就绪状态的进程)从内存换出到外存上等待(此时该进程就不再参与进程调度),当内存有足够空间时再将合适的进程换入内存,参与低级调度。

引入中级调度是为了提高内存使用率(使内存在逻辑上扩大了,能容纳更多进程)和系统吞吐量(吞吐量指单位时间内系统运行完程序的个数),使内存中存放的进程数目不至于太多。

 

暂时调到外存等待的进程状态称为挂起状态。被挂起的进程PCB会被组织成挂起队列

 

挂起状态不是阻塞状态/就绪状态,他们的区别在于,挂起状态的进程是在外存中的(具体来说是将它的程序段、数据段放在外存,但PCB是常驻内存的,因为OS要根据PCB监控和管理进程),阻塞状态/就绪状态的进程是在内存中的

挂起队列也和就绪队列/阻塞队列不同,挂起队列内的进程是被暂存到外存中的进程,而就绪队列/阻塞队列是放在内存中的进程。

在内存不足时,不运行的进程都可能被换出到外存,也就是说 就绪状态 和 阻塞状态 的进程都可能变成挂起状态,所以有的操作系统将挂起状态分为 就绪挂起 和 阻塞挂起 两种状态。

同理,就绪挂起状态的进程对应就绪挂起队列,阻塞挂起状态的进程对应阻塞挂起队列,就绪挂起队列 / 阻塞挂起队列 和 就绪队列 / 阻塞队列 不是同一种队列。

于是五状态模型演变成七状态模型:

 

进程被挂起的时机只有1种,就是内存不足的情况下。

一个进程可能被多次调入调出内存,因此中级调度的频率高于高级调度。

 

 

进程调度

进程调度指根据一定算法将CPU分派给就绪队列中的一个进程,CPU在进程间的切换就是由进程调度实现的。

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

中级调度就是要决定哪个挂起进程被调入内存;高级调度要决定哪个就绪进程占有CPU运行。

下面是3级调度的关系图:

 

三层调度的对比:

 

 

 

- 进程调度概述

进程调度的时机

进程调度的时机其实就是某个运行态进程放弃CPU的时机,分为两种:当前运行进程主动放弃CPU 被动放弃CPU

 

主动放弃CPU的情况有:进程正常终止/发生异常终止,进程进行IO操作而阻塞。

被动放弃CPU的情况有:人为干预终止,时间片用完,有更紧急的事处理(如IO中断)、有优先级更高的进程进入就绪队列。

需要注意,发起IO请求和IO设备完成IO操作都会发生中断,前者是用户进程主动调用系统调用委托操作系统发起IO请求因而发生trap中断,属于内中断;后者是IO设备发出外中断表示事件就绪。

 

不能进行进程调度和切换的情况:

1. 在CPU处理中断时(当前进程是内核进程)。中断处理过程复杂,与硬件密切相关,很难

做到在中断处理过程中进行进程切换。

2. 进程正在执行的指令在操作系统内核程序临界区中。

3. 在原语执行过程中。

 

为什么进程在操作系统内核程序临界区中不能进行调度和切换,但在用户程序的临界区中可以呢?

首先临界资源是一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源。 临界区是访问临界资源的那段代码。

内核程序临界区一般是用来访问某种内核数据结构的,比如进程的就绪队列。如果内核临界区访问的临界资源不尽快释放的话可能影响到操作系统内核的其他管理工作,因此在这期间不能进行调度切换。

而占用普通临界区访问的临界资源不会直接影响内核的管理工作。

 

进程调度的方式

有的系统只允许进程主动放弃CPU,不允许它被动放弃,有的系统进程可以主动放弃也可以被动放弃。因此进程调度分为 非抢占方式抢占方式 两种。

非抢占方式是只允许进程主动放弃CPU而触发调度和切换的调度方式。在运行过程中即便有更紧迫 的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。非抢占方式下,进程不会被分配时间片,不存在时间片用完被动让出CPU的说法

抢占方式是只允许进程主动和被动放弃CPU而触发调度和切换的调度方式。如果有一个更重要或更紧迫的进 程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。也可实现让各 进程按时间片轮流执行的功能(通过时钟中 断)。

 

 

进程调度发生了什么

1. 对原来运行进程各种CPU现场数据的保存(保存到PCB);

2. 对新的进程各种CPU现场数据的恢复(从PCB恢复);

3. 资源的分配/回收、进程状态的改变,PCB转移到对应队列等;

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

这也是为什么中级调度可以提高系统吞吐量的原因,将进程换出到外存,内存中的进程少了(参与进程调度的进程少了),切换进程的时间也会减少。

 

两级调度模型

作业调度和进程调度是操作系统最重要的两级调度。

作业调度是宏观调度,它选择的作业去执行只是让其具有获得CPU的资格(即放入就绪队列,进程载入内存,分配资源等),但尚未占有CPU;进程调度是微观调度,将CPU实际的分配给就绪队列中的某个进程。

还有一个基本区别是他们执行的频率不同,进程调度非常的频繁,因为每个进程每次运行的时间可能就几十毫秒就要切换,如果进程遇到等待事件时可能运行不到几十毫秒就切换了,一旦切换就要意味着又要发生一次进程调度。

由于进程调度很频繁,因此,进程调度(切换进程)的速度必须要很快才不至于影响CPU真正处理进程任务的效率,例如每个进程要运行10ms,进程调度程序执行一次平均占1ms,那么CPU有1/11 ≈ 9% 的时间花费在进程切换上,91%的时间才是真正处理用户进程或其他正经的系统进程任务。

作业调度执行的频率就很低,因为新作业到达系统的间隔可能很长,比如几分钟一次。这取决于使用计算机的用户,以及用户提交任务的频率,因为用户可能几分钟才去提交一个作业,比如执行一个可执行文件。所以作业调度可以花较长时间决定哪个作业被选中执行。

因此在某些系统中根本没有作业调度,例如分时系统往往没有作业调度程序,只是简单的把每个新作业装进内存,让进程调度选择运行。




更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > 操作系统入门(十二)进程调度、中级调度 和 作业调度

热门推荐
推荐新闻