一:轮转调度
一种最古老,最简单,最公平且使用最广的算法。
每个进程被分配一个时间段,成为时间片。如果在时间片结束时,进程还在运行,则剥夺CPU并分配给另一个进程。如果进程在该时间片结束前阻塞或者结束,则CPU立即进行切换。
一般一个进程的完成需要多个时间片。下面这张图可以表示多个进程采用轮转调度的实现。
时间片的设置值得讨论。时间片设置太短,虽然可以获得更好的服务,但是进程切换会太过于频繁,而进程切换需要一定的开销,这样会使得CPU的利用率大大降低。时间片设置太长,虽然由于进程切换引起的额外开销降低了,但是也降低了,下一个需要占用CPU的进程需要等待相当长一段时间才能得到CPU的响应(除非前一个进程没有用完整个时间片)。一般来说将时间片设置为20ms~50ms。我们平时在做计算题时,一般去所有进程总时间的最大公约数。
二:优先级调度
这个很好理解,就是先为进程赋优先级,优先级高的进程先执行。
为了防止优先级高的进程无休止地运行下去,调度程序可以在每个时钟中断降低当前进程的优先级。如果这个动作导致该进程的优先级小于原来次高优先级的进程,就会进行进程切换。一个可采用的方法就是优先级调度和轮转调度的结合。每一个进程可以被赋予一个允许运行的最大时间片,当这个时间片结束,下一个次高优先级的进程获得运行机会。
三:多级队列
建立多个队列,同一个队列中进程优先级相同,不同队列优先级不同。
最高优先级上的进程运行1个时间片,次高级上的运行2个时间片,在下一级运行4个,以此类推。每次从队列头开始运行进程,每当一个进程在一个优先级队列中用完它的时间片后,就移动到队列尾部;只有当优先级高的队列为空时才会从不为空的低优先级队列中选择进程运行;在低优先级队列中等待时间过长,将会被移入高优先级队列。
四:最短进程优先
我的理解就是约等于在批处理系统中的最短作业优先。
五:保证调度
向用户做出明确的性能保证,然后去实现它。
假设一种保证:若工作时有N个用户登陆,每个用户获得1/N的CPU处理能力。为了实现保证,系统必须跟踪各个进程自创建以来使用了多少个CPU时间。然后计算各个进程应获得的CPU时间(创建以来的时间除以N)。因而很容易计算出真正获得的时间除以应该获得时间的比率。比率小于1说明进程未获得到应得时间,相反大于1则说明获得了比应得时间更多的时间。该算法转向比率低的进程,以完成保证。
六:彩票调度
基本思想:向系统提供各种系统资源(如CPU时间)的“彩票”,一旦出现需要做出一项调度决策的时候,就随机抽出一张彩票。拥有该彩票的进程获得该资源。
彩票调度具有的性质:
- 在一次抽奖中,一个进程硬赢得奖励的机会和它所持有彩票的数量成正比。
- 希望协作的进程可以交换他们的彩票