处理机调度与死锁之三---进程调度

版权声明:见贤思齐焉 https://blog.csdn.net/weixin_28906733/article/details/85080757

1、进程调度的任务、机制和方式

1、进程调度的任务:

进程调度的任务主要有三:
 (1)、保存处理机的现场信息;
 (2)、按某种算法选取进程;
 (3)、把处理器分配给进程;

2、进程调度机制:

为实现进程调度,在进程调度机制中应具有如下三部分:
 (1)、排队器:为了提高进程调度的效率,应事先将系统中的所有就绪进程按照一定的策略排成一个或多个队列,以便调度程序能最快地找到它;
 (2)、分派器:分派器依据进程调度程序所选定的进程,将其从就绪队列中取出,然后进行从分派器到新选出进程间的上下文切换,将处理机分配给新选出的进程;
 (3)、上下文切换器:在对处理机进行切换时,会发生两对上下文的切换操作:①第一对上下文切换时,os将保存当前进程的上下文,再装入分派程序的上下文,以便分派程序运行;②第二对上下文切换时移出分派程序的上下文,而把新选进程的cpu现场信息装入到处理机的各个相应寄存器中,以便新选进程的运行;
在进行上下文切换时,需要执行大量的load和store等操作命令,以保存寄存器的内容。为此已有靠硬件实现的方法来减少上下文切换时间。
一般采用两组(或多组)寄存器,其中一组寄存器供处理机在系统态时使用,而另一组寄存器供应用程序使用。
在这样条件下的上下文切换,只需改变指针使其指向当前寄存器组即可。

3、进程调度方式:

(1)、非抢占方式(Nonpreemptive Mode):
采用这种调度方式时,一旦把处理机分配给某进程后,就一直让它运行下去,绝不会因为时钟中断或任何其它原因去抢占当前正在运行进程的处理机,直至进程完成,或发生某事件而被阻塞时,才把处理机分配给其他进程。
采用非抢占式调度方式时,可能引起进程调度的原因:①正在执行的进程运行完毕,或因发生某事件而使其无法再继续执行;②正在执行中的进程因提出I/O请求而暂停执行;③在进程通信或同步过程中执行了某种原语操作,如Block原语。
(2)、抢占方式(Preemptive Mode):
该种调度方式允许调度程序根据某种规则,去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一进程。在分时系统中只用抢占方式才有可能实现人机交互。
"抢占"方式并不是一种任意性行为,需遵循一定的原则:
①优先权原则:允许优先级高的新进程抢占当前进程的处理机,即当新进程到达时,如果其优先级高于当前进程的优先级,则调度程序将剥夺当前进程的处理机,将其分配给新到的优先级高的进程;
②短进程优先原则:允许新到的短进程可以抢占当前长进程的处理机,即当新到的进程比正在执行的进程明显短时,调度程序将剥夺当前进程的处理机分配给新到的短进程;
③时间片原则:各进程按时间片轮转运行,当正在执行的进程一个时间片用完后,便停止该进程的执行而重新进行调度。
2、轮转调度算法

在分时系统中,最简单也是较常用的是基于时间片的轮转(RoundRobin,RR)调度算法。
1、轮转法的基本原理

在轮转(RR)法中,系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并可设置每隔一定时间间隔即产生一次中断,
激活系统中的进程调度程序,完成一次调度,将cpu分配给队首进程(或新到达的紧迫进程)。
由此可保证就绪队列中的所有进程在一个确定的时间段内能够获得一次cpu的执行。

2、进程切换时机

在RR调度算法中,应在何时进行进程的切换可分为两种情况:
①若一个时间片尚未用完,正在运行的进程便已经完成,就立即激活调度程序,将它从就绪队列中删除,再调度就绪队列中队首的进程运行,并启动一个新的时间片;
②在一个时间片用完时,计时器中断处理程序被激活,若进程尚未执行完毕,调度程序将把它送往就绪队列的末尾。

3、时间片的大小确定:

在RR算法中时间片的大小对系统的性能有很大的影响,一个较为可取的时间片大小是略大于一次典型的交互所需要的时间,
使大多数交互式进程能在一个时间片内完成,从而可以获得很小的响应时间。
3、优先级调度算法

时间片轮转调度算法中默认假定系统中所有进程的紧迫性是相通的,实际系统可能需要对进程进行优先级的设定。
1、优先级调度算法的类型:

(1)、非抢占式优先级调度算法:
(2)、抢占式优先级调度算法:

2、优先级的类型:

(1)、静态优先级:静态优先级是在创建进程时确定的,在进程的整个运行期间保持不变;
确定进程优先级大小的依据有如下三个:
①进程类型;②进程对资源的需求;③用户要求;
(2)、动态优先级:动态优先级是指在创建进程之初先赋予一个优先级,然后其值随进程的推进或等待时间的增加而改变,以获得更好的调度性能;
4、多队列调度算法

该算法将系统中的进程就绪队列从一个拆分为若干个,将不同类型或性质的进程固定分配在不用的就绪队列,不同的就绪队列采用不同的调度算法,一个就绪队列中的进程可以设置不同的优先级,不同的就绪队列本身可以设置不同的优先级。
多队列调度算法由于设置多个就绪队列,因此对每个就绪队列就可以实施不同的调度算法,因此系统针对不同用户进程的需求,很容易提供多种调度策略。

5、多级反馈队列调度算法

1、调度机制:

(1)、设置多个就绪队列:
(2)、每个队列都采用FCFS算法:
(3)、按队列优先级进行调度:

2、调度算法的性能:

(1)、终端型用户:终端型用户提交的作业多属于交互型作业,通常较小,系统只要能使这些作业在第一队列规定的时间片内完成,响应就很及时;
(2)、短批处理作业用户:若在第一队列中执行完成,便获得与终端型作业一样的响应时间;对于稍长的短作业,也只需在第二和第三队列各执行一时间片完成,周转时间依然较短;
(3)、长批处理作业用户:长作业将依次在第1,2,...n个队列中运行,然后再按照轮转方式运行,不必担心长作业长期得不到执行;
6、基于公平原则的调度算法

1、保证调度算法:

该算法向用户做出的保证并不是优先运行,而是明确的性能保证,其可以做到调度的公平性。一种比较容易实现的性能保证是处理及分配的公平性。
在实施公平调度算法时系统中必须具有这样一些功能:
(1)、跟踪计算每个进程自创建以来已经执行的处理时间;
(2)、计算每隔进程应获得的处理机时间,即自创建以来的时间处理n;
(3)、计算进程获得处理机时间的比率,即进程实际执行的处理时间和应获得的处理机时间之比;
(4)、比较各进程获得处理记得比率;
(5)、调度程序应选择比率最小的进程将处理机分配给它,并让该进程一直运行直到超过最近它的进程比率为止;

2、公平分享调度算法:

分配给每个进程相同的处理机时间,这对诸进程而言是体现了一定程度的公平,但如果各个用户所拥有的进程数不同,
就会发生对用户的不公平问题,为此必须考虑到一个用户所拥有的进程数目。

参见《计算机操作系统》相关书籍,此处仅仅作为复习及回顾

猜你喜欢

转载自blog.csdn.net/weixin_28906733/article/details/85080757