处理器调度的层次分为:
- 高级调度:又称长程调度,作业调度,决定能否加入到执行的进程池中
分时OS中,高级调度决定了(1)是否接受一个终端用户的连接;
(2)命令能否被系统接纳并构成进程;
(3)新建态进程是否加入就绪进程队列
在多道批处理OS中,高级调度又称为作业调度,功能是按照某种原则从后备作业队列中选取作业进入主存,并为作业做好运行前的准备工作(为其分配所需资源、创建对应作业的用户进程)和完成后的善后工作
- 中级调度,又称平衡调度、中程调度,决定哪些进程被允许驻留在主存中参与竞争处理器及其他资源,中级调度把一些进程换出主存,从而使之进入“挂起”状态,不参与进程调度,以平顺系统的负载,起到短期调整系统负荷的作用
引进中级调度是为了提高内存利用率和作业吞吐量
- 低级调度:又称进程/线程调度、短程调度,决定哪个可用进程占用处理器执行,按照某种原则把处理器分配给就绪态进程或内核级线程,其优劣直接影响到整个系统的性能
进程调度程序:又称分派程序,操作系统中实现处理器调度的程序,是操作系统的最核心部分,是所有进程的父进程,是0号进程
低级调度的主要功能为:(1)记住进程或内核级线程的状态
(2)决定某个进程或内核级线程什么时候获得处理器,以及占用多长时间
(3)把处理器分配给进程或内核级线程
(4)收回处理器
![](https://i-blog.csdnimg.cn/blog_migrate/d2962738a275712ce9b013c3ae691df0.png)
处理器调度层次与关键状态转换如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/e95b6dbc21b698f0b4e7ab1ecb13ed1e.png)
选择处理器调度算法的原则:
- 资源利用率:使得CPU或其他资源的使用率尽可能高且能够并行工作
- 响应时间:使交互式用户的响应时间尽可能小,或尽快处理实时任务
- 周转时间:提交给系统开始到执行完成获得结果为止的这段时间间隔称周转时间,应该使周转时间或平均周转时间尽可能短
- 吞吐量:单位时间处理的进程数尽可能多
- 公平性:确保每个用户每个进程获得合理的CPU份额或其他资源份额
处理器调度算法主要包括:
- 优先级调度算法:根据分配给进程的优先级决定运行进程
可分为一旦高优先级进程出现就必须占有CPU的抢占式优先数调度算法和CPU空闲后再选择高优先级进程的非抢占式优先数调度算法
优先数的确定准则为进程负担任务的紧迫程度、进程的交互性、进程使用外设的频度、进程进入系统的时间长短
- 最短作业优先算法(SJF):计算时间短(作业/进程)优先,长进程容易有饥饿现象。
- 最短剩余时间优先算法(SRTF):剩余计算时间短进程优先
- 最高响应比优先算法(HRRF):响应比 = 等待时间/进入时间(估计值)
- 先来先服务算法(FCFS):当某个进程就绪时,都加入就绪队列,当前正在运行的进程停止执行时,选择在就绪队列到存在时间最长的进程运行
易于实现但效率不高,只顾及作业等候时间,未考虑作业要求服务时间的长短,不利于短作业而优待了长作业,不利于 I/O繁忙型作业,而有利于 CPU繁忙型作业,因此多用于高级调度
低级调度中,以计算为主的进程过于优越,因此必须加以改造
- 轮转调度/时间片调度算法(RR):根据各个进程进入就绪队列的时间先后轮流占有CPU一个时间片,基于时钟做抢占式调度。
超过时间片进程需要让出CPU,此时会发出间隔时间中断,强迫当前运行进程/线程让出处理器。
RR算法时一种剥夺式调度,系统耗费在进程/线程切换上的开销比较大,因此必须选择长短合适的时间片,过长则退化为先来先服务算法,过短则调度开销大。
操作系统可以规定单时间片,也可以为不同进程规定多时间片,甚至根据执行行为动态调整时间片长度。
- 多级反馈队列调度算法(MLFQ),又称分级调度算法、多队列策略,反馈循环队列,
基本思想为:建立多个不同优先级的就绪进程队列,多个就绪进程队列间按照优先数调度,分级原则一般为:外设访问、交互性、时间紧迫程度、系统效率、用户立场…
单个就绪进程队列中进程的优先数和时间片相同,队列内部使用时间片调度算法。
高优先级就绪进程,分配的时间片短。优先级最低的队列时间片一般很大。
进程在进入待调度的队列等待时,首先进入优先级最高的就绪进程队列等待;用完该队列分配的时间片后,进入优先级更低、时间片更大的下一级队列,直到完成。
饥饿问题的解决方法:对低优先级队列中等待时间足够长的进程提高优先级,从而让它获得运行机会。
![](https://i-blog.csdnimg.cn/blog_migrate/ee0f8c854d9887234584014dc39b4f83.png)
现代操作系统的实现模型:多个高优先级的实时进程队列,如硬实时、网络、软实时;多个分时任务的进程队列,根据基准优先数和执行行为调整,队列数可能多达32-128个
- 彩票调度算法
基本思想:为进程发放针对系统各种资源(如CPU时间)的彩票;当调度程序需要做出决策时,随机选择一张彩票,持有该彩票的进程将获得系统资源;合作进程之间进行彩票交换