调度也称dispatcher 这是内核的主要职责之一就是决定该轮到哪一个任务运行了多数实时内核是基于优先级调度算法的每一个任务根据其重要程度的不一样被赋予必定的优先级基于优先级的调度法指CPU 老是让处在就绪态的优先级最高的任务先运行然而究竟什么时候让高优先级任务掌握CPU 的使用权有两种不一样的状况这要看用的是什么类型的内核是非占先式仍是占先式的内核一个良好的任务调度算法应该主要体如今如下几个方面算法
公平保证每一个进程获得合理的CPU 时间
高效使CPU 保持忙碌状态即老是有进程在CPU 上运行
响应时间使交互用户的响应时间尽量短
周转时间使批处理用户等待输出的时间尽量短
吞吐量使单位时间内处理的进程尽量多
很显然在任何操做系统中这几个目标不可能同时达到因此不一样的
操做系统会在这几个方面中作出相应的取舍从而肯定本身的调度算法,经常使用的处理机调度算法有:
先来先服务FCFS
短做业优先SJF
优先级
时间片轮转法
多级队列法
多级反馈队列法
先来先服务:FCFS 是最简单的CPU 调度算法,即按进程到来的前后次序进行调度,这样在系统中等待时间最长的进程被优先调度,而无论其所需运行时间的长短。spa
做业优先SJF 算法是指当CPU 可供使用时SJF 算法把CPU 分给须要运行时间最短的进程。
多级队列调度算法:把就绪队列划分红几个单独的队列通常根据进程的某些特性如内存大小和进程类型永久性地把各个进程分别链入其中某一个队列中,每一个队列都有本身的调度算法,此外在各个队列之间也要进行调度。一般采用固定优先级的抢占式调度,例如某系统中有5 个队列,各个队列的优先级自上而降低低,只有当前3 个队列中都为空的时候队列4 中的进程才能够运行,而当队列4 中的进程在运行时,若是队列1 中进入了一个就绪进程,则队列4 中的进程要马上让出CPU 使用权。多级反馈队列法容许进程在各队列间移动,其基本思想是把具备不一样CPU工做时间这一特性的进程区分开来,若是一个进程要使用很长的CPU 时间,则应把它移至较低级的队列中,这种方式把I/O 繁忙型和交互式进程放在较高优先级的队列中一样在低优先级队列中长时间等待的进程能够移到较高优先级队列中UNIX 系统采用的是多级反馈队列轮转法。
时间片轮转调度法:round-robin scheduling
当两个或两个以上任务有一样优先级,内核容许一个任务运行事先肯定的一段时间叫作时间额度quantum ,而后切换给另外一个任务也叫作时间片调度time slicing ,内核在知足如下条件时把CPU 控制权交给下一个任务就绪态的任务, 当前任务已无事可作,当前任务在时间片还没结束时已经完成了。轮转法主要是为分时系统设计的,其中时间片是一个重要的参数不能取的过大或太小,一般为10 至100ms 数量级,就绪队列能够当作是一个环形队列,CPU 调度程序轮流地把CPU 分给就绪队列中地每一个进程,时间长度为一个时间片Linux 操做系统就是采用时间片轮转的调度算法。操作系统