文章目录
- 一.调度的层次
- 二.进程调度的时机、切换与过程、调度方式
- 三.调度器、闲逛进程
- 四.调度算法的评价指标
- 五.调度算法
- (一)先来先服务SCFS
- (二)短作业优先算法SJF
- (三)高响应比优先HRRN
- (四)时间片轮转调度算法RR
- (五)优先级调度算法
- (六)多级反馈队列调度算法
- (七)多级队列调度
一.调度的层次
1.高级调度/作业调度:频率低
- 无→创建态→就绪态
- 外存→内存,面向作业
按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程
2.中级调度/内存调度:提高内存利用率和系统吞吐量
- 挂起态→就绪态(阻塞挂起→阻塞态)
- 外存→内存(阻塞挂起在外存,阻塞态在内存),面向进程
按照某种规则,从挂起队列中选择合适的进程将其数据调回内存,并修改其状态为就绪态,挂在就绪队列上等待
- 挂起态:将那些暂时不能运行的进程调至外存等待,把这时的进程状态称为挂起态。“挂起”和“阻塞”:两种状态都是暂时不能获得CPU的服务,但挂起态是将进程映像调到外存去了,而阻塞态下进程映像还在内存中。
3.低级调度/进程调度:高频,最基本
- 就绪态→运行态
- 内存→CPU
按照某种规则从就绪队列中选择一个进程为其分配处理机
总结
二.进程调度的时机、切换与过程、调度方式
1.需要进行进程调度与切换的情况:
(1)当前运行的进程主动放弃处理机
进程正常终止、运行过程中发生异常而终止、进程主动请求阻塞(如等待I/O)
(2)当前运行的进程被动放弃处理机
分给进程的时间片用完、有更紧急的事需要处理(如I/O中断)、有更高优先级的进程进入就绪队列
2.不能进行进程调度与切换的情况
(1)在处理中断的过程中。中断处理过程复杂,与硬件密切相关,很难做到在中断处理过程中进行进程切换。
(2)进程在操作系统内核程序临界区中
- 临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源。
- 临界区
临界区指的是一个访问共用资源的程序片段(访问临界区的那段代码),而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待
(3)在原子操作过程中(原语)。原子操作不可中断,要一气呵成(如修改PCB中进程状态标志,并把PCB放到相应队列)
3.进程调度的方式
(1)非剥夺调度方式/非抢占方式:只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统。
(2)剥夺调度方式/抢占方式:当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统
- 进程调度和进程切换
(1)(狭义的)进程调度:从就绪队列中选择一个要运行的进程
(2)进程切换:一个进程让出处理机,由另一个进程占用处理机的过程(完成了对原来运行进程各种数据的保存、对新的进程各种数据的恢复)
总结:
1.一个线程是否可被时钟中断抢占?如果是,请说明在什么情况下可被抢占(被动放弃)
是。分给进程的时间片用完、有更紧急的事情需要处理(如I/O中断)、有更高优先级的进程进入就绪队列
2.在非抢占调度方式中,什么情况下正在运行的进程会放弃CPU?(主动放弃)
进程正常终止、运行过程中发生异常而终止、主动阻塞(如等待I/O)
3.什么时候不能进行进程调度
在处理中断的过程中、进程在操作系统内核程序临界区中、原子操作过程中(原语)
三.调度器、闲逛进程
1.什么事件会触发“调度程序”?
创建新进程、进程退出、运行进程阻塞、I/O中断发生(可能唤醒某些阻塞进程)。非抢占式调度策略,只有运行进程阻塞或退出才触发调度程序工作;抢占式调度策略,每个时钟中断或k个时钟中断会触发调度程序工作
2.不支持内核级线程的操作系统,调度程序的处理对象是进程;支持内核级线程的操作系统,调度程序的处理对象是内核线程
3.闲逛进程:没有其他就绪进程时,运行闲逛进程。
特性:优先级最低、可以是0地址指令,占一个完整的指令周期(指令周期末尾例行检查中断)、能耗低
四.调度算法的评价指标
1.CUP利用率:指CPU“忙碌”的时间占总时间的比例。
CUP利用率=忙碌时间/总时间
2.系统吞吐量:单位时间内完成作业的数量
系统吞吐量=总完成作业数/总时间
3.周转时间:从作业被提交给系统开始,到作业完成为止的这段时间间隔。包括作业在外存后备队列上等待作业调度(高级调度)的时间、进程在就绪队列上等待进程调度(低级调度)的时间(就绪态)、进程在CPU上执行的时间(运行态)、进程等待I/O操作完成的时间(阻塞态)
作业周转时间=作业完成时间-作业提交时间
平均周转时间=各作业周转时间之和/作业数
带权周转时间=作业周转时间/作业实际运行的时间
平均带权周转时间=各作业带权周转时间之和/作业数
- 带权周转时间和周转时间越小越好
4.等待时间:指进程/作业处于等待处理机状态时间之和。等待时间越长,用户满意度越低。
等待时间=周转时间-运行时间-I/O操作时间=(完成时间-到达时间)-运行时间-I/O操作时间
平均等待时间=各作业等待时间之和/作业数
- 对于进程来说,等待时间就是指进程建立后等待被服务的时间之和,在等待I/O完成的期间其实进程也是在被服务的,所以不计入等待时间。
- 对于作业来说,不仅要考虑建立进程后的等待时间,还要加上作业在外存后备队列中等待的时间。
5.响应时间:从用户提交请求到首次产生响应所用的时间。
五.调度算法
(一)先来先服务SCFS
先来的先分配处理机,不会导致饥饿,非抢占式的算法
针对:作业调度、进程调度
优点:算法简单、对长作业有利、有利于CPU繁忙型作业(计算型)
缺点:效率低、不利于短作业、不利于I/O繁忙型作业
(二)短作业优先算法SJF
优先选择当前已到达的且预计运行时间最短的进程,会产生“饥饿”现象。SJF(短作业优先)和SPF(短进程优先)是非抢占式的算法。但是也有抢占式的版本——最短剩余时间优先算法(SRTN)
针对:进程调度。(短进程优先用SPF)
优点:平均等待时间、平均周转时间较短(SRTN最短)
缺点:对长作业不利,造成饥饿现象,没有考虑作业的紧迫性,用户可能可以缩短作业预估时间,使得无法做到短作业优先
(三)高响应比优先HRRN
不会导致饥饿,非抢占式的算法
响应比=(等待时间+要求服务时间)/要求服务时间=1+等待时间/要求服务时间
针对:作业调度、进程调度
①等待时间相同情况下,要求服务时间越短响应比越大,有利于短作业进程
②要求服务时间相同,作业响应比由其等待时间决定,等待时间越长响应比越高,实现先来先服务
③对于长作业,作业的响应比可以随等待时间的增加而提高,等待时间足够长时,其响应比可以升到很高,从而获得处理机
以上三类算法一般适用于早期批处理系统
(四)时间片轮转调度算法RR
不会导致饥饿,抢占式算法。
使用与分时系统,使用时间片,就绪进程按照到达先后排成队列,依次在时间片内占用处理机,时间片到达时就释放处理机。时间片选择很重要,过大就变成了先来先服务,过短又变成了短作业优先。
针对:进程调度。进程才能被分配时间片
时间片影响因素:系统响应时间,就绪队列中的进程数目和系统的处理能力
注:①A时间片用完,若进程A仍未执行完,此时有新进程B到达。新进程B进入就绪队列,A再进就绪队列
②若时间片为2,C只用1就完成了运行,则C主动让出处理机,就绪队列的队头元素上处理机
优点:公平、响应快,适用于分时操作系统;
缺点:由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度。
(五)优先级调度算法
产生“饥饿”现象,有抢占式的,也有非抢占式的
分类:
①剥夺型:立即停止当前运行进程,将处理机分配给更高优先级进程
②非剥夺型:等待当前进程运行完成,然后将处理机分配给更高优先级进程
优先级分类:
静态优先级:进程创建后无法对优先级进行修改
动态优先级:可以根据进程运行状态,对进程优先级进行动态调整
优先级设置原则:
系统进程>用户进程
交互型进程>非交互型进程
I/O进程>计算型进程(CPU繁忙型)
前台进程>后台进程
针对:作业调度、进程调度
优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各种作业/进程的偏好程度。
缺点:若源源不断地有高优先级进程到来,则可能导致饥饿
(六)多级反馈队列调度算法
抢占式算法,可能饥饿
①设置多个就绪队列,为每个队列设置不同的优先级,优先级依次递减。
②每个队列中的时间片各不相同,时间片依次递增。
③每个队列按照先来先服务原则进行进程排队,若规定时间片内没有完成,就将进程放入下一级队列。
④只有到高级队列为空的时候,低等级队列才能开始调度。
优点:
①终端型作业用户:短作业优先
②短批处理作业用户:周转时间较短
③长批处理作业用户:前面几个队列得到部分执行,不会长期得不到处理
针对:进程调度
- 为什么多级反馈队列调度算法能较好地满足各类用户的需要?
多级反馈队列调度算法能较好地满足各种类型用户的需要。对终端型用户而言,由于他们提交的作业大多属于交互型作业,作业通常比较短小,系统只要能使这些作业在第1级队列所规定的时间片内完成,便可使终端型作业用户感到满意;对于短批处理作业用户而言,它们的作业开始时像终端型作业一样,若仅在第1级队列中执行一个时间片即可完成,便可获得与终端型作业一样的响应时间,对于稍长的作业,通常也只需要在第2级队列和第3级队列中各执行一个时间片即可完成,其周转时间仍然较短;对于长批处理作业用户而言,它的长作业将依次在第1,2,…n级队列中运行,然后按时间片轮转方式运行,用户不用担心其作业长期得不到处理。
以上三类算法适用于交互式系统
(七)多级队列调度
队列之间可采取固定优先级,或时间片划分
①固定优先级:高优先级空时低优先级进程才能被调度
②时间片划分:如三个队列分配时间50%、40%、10%
③各队列可采用不同的调度策略,如:系统进程队列采用优先级调度,交互式队列采用RR,批处理队列采用FCFS
-
为什么要进行处理机调度?
若没有处理机调度,意味着要等到当前运行的进程执行完成后,下一个进程才能执行,而实际情况中,进程时常需要等待一些外部设备的输入,而外部设备的速度与处理机相比是非常缓慢的,若让处理机总是等待外部设备,则对处理机的资源是极大的浪费,从而提高处理机的利用率。用一句话说就是为了合理地处理计算机的软/硬件资源。 -
调度算法有哪几种?结合第1章学习的分时操作系统和实时操作系统,思考有没有哪种调度算法比较适合这两种操作系统的。
(1)先来先服务算法、短作业优先算法、优先级调度算法、高响应比优先算法、时间片轮转调度算法、多级反馈队列调度算法
(2)先来先服务算法和短作业优先算法无法保证及时的接收和处理问题,因此无法保证在规定时间内响应每个用户的需求,也同样无法达到实时操作系统的及时性要求。优先级调度算法按照任务的优先级进行调度,对于更紧急的任务给予更高的优先级,适合实时操作系统
(3)高响应比优先调度算法、时间片轮转调度算法、多级反馈队列调度算法都能保证每个任务在一定时间内分配到时间片,并轮流占用CPU,适合分时操作系统