码迷,mamicode.com
首页 > 编程语言 > 详细

操作系统中常用的进程调度算法

时间:2016-06-06 01:27:32      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:操作系统   优先级   先来   

操作系统中对进程的调度算法大体上可以分为三类:

1、先来先服务算法

2、优先级法

3、时间片轮法

接下来简要介绍一下这三类算法。

 

 

一、先来先服务算法

(FCFS:    First Come First Service)

 原理:

    这是最简单的一种调度算法,用到了队列的思想。每次调度都从进程就绪队列中选择队首的进程(也就是最先进入队列的进程)进行调度。

    直到进程的执行被阻塞,或进程结束,再调用下一个进程,依然是从队列中选择队首的进程的。

    这里要注意,上文我说的队列中的进程实际上是进程的PCB,因为队列中存放的是PCB而不是进程本身。

 

 一种优化:

短进程优先调度算法:

    在进程PCB队列中选择一个估计运算时间最短的进程,优先对该PCB对应的进程进行调用,直到进程调用结束或阻塞。

 

二、优先级法

原理:

    调度算法用到了优先级队列的思想。每次调度时,对于高优先级的进程优先进行调度,对于相同优先级的进程,才按照“先来后到”的原则进行调用。

 进一步划分

1、非抢占式优先权算法

    进程的调用只会因为【调用结束或阻塞】这两种情况中断,而不会因为队列中出现了比当前进程优先级高的进程而中断。

2、抢占式优先权算法

    这种算法跟上述的 非抢占式算法 相反:当进程调用时,进程队列中出现了比当前进程优先级更高的进程时,就会停止当前的进程而执行队列中优先级更高的进程。

3、高响应比优先权算法

    在前文的【一、先来先服务法】中提到了【短进程优先调度算法】,这种算法的缺点是,每次都选短进程进行调用,而入队的都是短一些的进程,那么队列中已经存在的一些长进程有可能永远都运行不了。而这种方法可以理解成是对【短进程优先调度算法】的一种优化。

    这种调度算法依然是选择队列中短进程进行调用,在每次调用时,对队列中剩余的进程进行优先级加权,这样就可以保证,即使入队的进程一直是短一点的进程,队列中的长进程也依然能够被调用。

 

、时间片轮法

 原理:

     依然是将所有被调用的进程的PCB存入队列中,每次对队首的进程进行调用【一段时间】后,将该进程的PCB存入队尾,再调用当前队首的进程,依次往复的进行调用。

     这个【一段时间】叫做【时间片】。

 一种优化: 

多级反馈队列调度算法:

(这是目前被公认的一种较好的进程调度算法)

原理:

    采用多个就绪队列,分别具有不同的优先级,待调用进程的PCB先存入优先级最高的队列中,然后开始用时间片轮法进行调用。

    在这个优先级最高的队列中,时间片是很短的,也就是说,一次调用,队列中短一点的进程会调用结束,而剩下的进程则是较长的进程,把这些剩下的进程存入优先级比当前队列低一级的队列,循环往复。

    这里,时间片随着队列优先级的降低而增长,也就是说,优先级最高的队列,时间片是最短的,然后越来越长。而只有当高优先级队列空闲时,才考虑调用低优先级队列中的进程。

    可以看出,这种调用结构会优先调用完毕短进程,同时会筛选出长进程并降低它们的优先级,但能保证这些长进程都有被调用的机会,是一种比较合理的调度算法。

操作系统中常用的进程调度算法

标签:操作系统   优先级   先来   

原文地址:http://zhweizhi.blog.51cto.com/10800691/1786347

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!