OS之进程调度(二)

时间片轮转算法

在分时系统中,最简单最常用的是基于时间片的轮转调度算法,让就绪队列上的每个进程仅运行一个时间片。

轮转发的基本原理:

在就绪队列中,系统可设置每隔一定时间便产生一个中断,去激活进程调度程序进行调度,把CPU分配给队首进程,并令其执行一个时间片,当其运行完毕后,又把处理机分配给队列的新的队首进程,也让其执行一段时间。

进程切换时机:

1:若一个时间片还未用完,正在运行的进程就已经完成,就立即激活进程调度程序,将其从就绪队列中删除,在调度就绪队列中队首的进程并启动一个新的时间片。

:一个时间片已经用完,计时器中断处理程序被激活,如果进程尚未运行完毕,调度程序会把它送往就绪队列的末尾。

在轮转算法中,时间片的大小对系统性能影响很大。

优先级调度算法:

在时间片轮转调度算法中,做了一个隐含的假设,即系统中所有的进程的紧迫性是相同的,但实际并非如此。为了满足实际要求引入了优先级,从而形成优先级调度算法。

优先级调度算法的类型:

非抢占式优先级调度算法:该算法规定一旦OS将处理机分配给就绪队列中的优先级高的进程,该进程会一直执行下去直至完成,或者因为某些原因放处理机,OS会将处理机分配给其他高优先级进程。

抢占式优先级调度算法:

把处理机分配给优先级高的进程,使其运行,但在其执行期间,只要出现了另一个优先级更高的进程,调度程序会就将处理机重新分配给新的优先级高的进程。

优先级的类型:

静态优先级:

静态优先级就是在创建进程的时候确定的,进程的整个运行期间保持不变。

确定进程优先级的大小的依据:

进程类型:

通常系统进程的优先级高于一般用户进程的优先级。

进程对资源的需求:

对资源要求少的进程应赋予更高的进程。

用户要求:

根据进程的紧迫程度及用户所付的费用来确定。

动态优先级:

动态优先级是指在创建进程之初,先赋予一个优先级,然后其值随进程的推进或等待时间的增加而改变,以便或的更好的调度性能。这样可以防止一个长作业的长期垄断处理机。

多队列调度算法:

在系统中仅设置一个进程的就绪队列,这种设计方式在多处理机上,这种单一的调度策略缺点就会更多。多级调度算法

多队列调度算法:

上述的各种调度算法中,尤其在应用进程调度时,由于系统中仅设计一个进程就绪队列,低级调度算法是固定的,单一的,无法满足系统中不同用户对进程调度调度策略的不同要求,在多处理机系统中,这种单一策略实现的缺点更突出。因此引入多队列调度算法

该算法将系统中的就绪队列从一个拆分为若干个,将不同类型或性质的进程固定分配在不同的就绪队列中,不同的就绪队列采用不同的调度算法,一个就绪队列中的进程可以设置不同的优先级,不同的就绪队列也可以设计不同的优先级。在多处理机系统中,该算法由于安排了多个就绪队列,因此很方便的为每个处理机设置一个单独的就绪队列。

多级反馈队列调度算法:

对于前面的各种调度算法其实都有一定的局限性,如果为指明进程长度,则段进程优先和基于进程长度的抢占式调度算法都将无法使用,而多级反馈队列调度算法则不必实现知道各种进程所需执行的时间,还可以较好的满足各种类型进程的要求。因此被认为是一种较好的进程调度算法。

调度机制:

1:设置多个就绪队列,并未每个就绪队列赋予不同的优先级,并且该算法为不同队列中的进程所赋予的执行时间片的大小也各不相同,在优先级高的队列中,其时间片就越小。

2:每个队列采用FCFS算法,当新进程进入内存后,首先将它存放在第一队列的末尾,按FCFS原则等待调度,当轮到该进程执行时,如它能在该时间片内完成,便可撤离系统,否则,调度程序会将其转入第二队列的末尾等待调度,如果在第二队列中运行的时间片仍未完成,再依次放入第三。。。。。。直到该进程完成,则撤离系统。

3:按队列优先级调度:

调度程序首先调度最高优先级队列中的各进程运行,仅当高优先级队列空,则才会下一个次优先级队列中的进程。

基于公平原则的调度算法:

前面调度算法,所保证的只是优先级运行,没有考虑到调度的公平性。

1:保证调度算法:

如果在系统中有n个相同类型的金恒同时运行,为公平起见,保证每个进程获得相同的处理机时间1/n

2:公平分享调度算法:

 

 

 

 

 

 

 

 

 

 

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WannerWang/article/details/49716761
文章标签: 操作系统
个人分类: 操作系统
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭