CPU调度
CPU调度是多道程序操作系统的基础,通过在进程之间切换CPU,操作系统可以避免因为等待(如IO请求)而浪费CPU资源
对于单道程序处理系统,只有当某个程序执行完成后,才能进行下一个程序,这样会极大的浪费CPU资源。而多道程序的目的就是在任何时候都有程序执行,这样CPU就不会空闲,增大的吞吐率。
CPU-IO调度周期
进程的执行从CPU开始,在这之后便是IO请求,接着就是另一个CPU区间,如果调度周期太长,会导致资源浪费,如果时间过短,会导致进程没能完全执行。
CPU调度程序
调度程序分为抢占调度和非抢占调度,抢占调度的含义是某个程序在CPU调度周期内还没能执行完毕就让出CPU的占用权,将其交给另一个进程执行。Win95之后的系统都采用了抢占调度。当然抢占调度对访问共享数据是有影响的,比如一个程序正在修改数据,被强行退出,会导致数据的不一致。
调度准则
CPU使用率
吞吐率:执行的进程个数
周转时间:一个进程从开始提交到最后返回结果所花费的全部时间。
等待时间:进程在就绪队列中等待的时间。
响应时间:进程从提交到响应所花费的时间。
调度算法
先到先服务调度(FCFS)
先请求的进程先分配CPU
最短作业优先调度(SJF)
将每一个进程与下一个CPU区间关联,按照每个进程的CPU区间的长度进行排序,按照最短进程的顺序依次分配,按照这种调度算法,平均等待时间是最短的。
困难在于很难知道下一个进程的CPU区间,所以有人提出了利用当前的CPU区间对下一个区间进行预测
指的是低n+1个CPU区间,存储了过去历史,指的是最近的信息,参数历史预测的相对加权。
优先级抢占调度
对每个进程进行优先级设定,具有最高优先级的进程先分配,优先级调度可以是抢占的也可以是不抢占的,如果刚到达的进程优先级低于正在执行的,就不抢占,如果大于就进行抢占。
优先级抢占调度导致的一个主要问题是无穷阻塞,如果某个进程优先级过于低,就会一直处于等待状态无法执行。
轮状法调度
定义一个较小的时间片,如果某个进程CPU区间小鱼时间片,执行完成后处理下一个进程,如果大于就会终端,并切换到下一个进程,并将该进程放到就绪队列尾部。
多级队列调度
将就绪队里分成多个独立队列,根据进程的树形,进程优先级,进程类型。每个队列有自己的调度算法,前台队列可能采用轮转法,后台采用FCFS算法调度。每个队列比更低的队列拥有绝对的优先级,只有当更高优先级的队列完全执行完毕后,才能执行下一个队列。
多级反馈队列调度
与多级队列调度相比,这种调度方法允许进程在队列之间移动,主要思想是根据不同的CPU区间的特点以区分进程,如果该进程占用过多CPU时间,就会被转移到低优先级队列,低优先级队列中等待时间过长的进程会被转移到高优先级队列中,防止了老化的产生。
现如今的系统多采用各种调度算法融合的集成性调度算法,如多级反馈队列调度。