第八章
主要内容:进程调度算法
背景
上下文切换
-
切换CPU的当前任务, 从一个进程/线程到另一个
-
保存当前进程/线程在PCB/TCB中的执行上下文(CPU状态)
-
读取下一个进程/线程的上下文
CPU调度
-
从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程
-
调度程序: 挑选进程/线程的内核函数(通过一些调度策略)
-
什么时候进行调度?
内核运行调度程序的条件
-
一个进程从运行状态切换到等待状态
-
一个进程被终结
不可抢占
调度程序必须等待事件结束
可以抢占
-
调度程序在中断被响应后执行
-
当前的进程从运行切换到就绪, 或者一个进程从等待切换到就绪
-
当前运行的进程可以被换出
调度原则
调度策略
目标
:
-
减少响应事件
-
减少平均响应事件的波动
-
增加吞吐量:减少开销(操作系统开销,上下文切换),系统资源高效率利用
-
减少等待时间
评价指标
-
CPU利用率
-
吞吐量
-
周转时间:一个进程从初始化到结束所花费的时间
-
等待时间
-
响应时间
调度算法
FCFS(先来先服务)
如果进程在执行中阻塞,队列中的下一个会得到CPU
优点
: 简单
缺点
:
-
平均等待时间波动较大
-
花费时间少的任务可能排在花费时间长的任务后面
-
可能导致IO和CPU之间的重叠处理(CPU密集型进程会导致IO设备闲置时,IO密集型进程也在等待)
SPN(短作业优先)
选择完成时间最少的进程优先占用cpu资源,最优平均等待时间
缺点
:
-
可能导致饥饿
-
连续的短任务流会使长任务饥饿
-
短任务可用时的任何长任务的CPU时间都会增加平均等待时间
-
-
需要预测未来
HRRN(最高响应比优先)Highest Response Ratio Next
响应比= (等待时间+要求服务时间)/ 要求服务时间
Round Robin(时间片轮循)
使用时间切片和抢占来轮流执行任务
Multilevel Feedback Queues(多级反馈队列)
-
就绪队列分成独立的队列
-
每个队列拥有自己的调度策略
-
进程可以在不同队列中移动
优点
:CPU密集型任务的优先级下降很快,IO密集型任务停留在高优先级
Fair Share Scheduling(公平共享调度)
FSS控制用户对系统资源的访问
-
一些用户组比其他用户组更重要
-
保证不重要的组无法垄断资源
-
未使用的资源按照每个组所分配的资源的比例来分配
-
没有达到资源使用率目标的组获得更高的优先级
评价方式
确定性建模: 确定一个工作量,然后计算每个算法的表现
队列模型: 用来处理随机工作负载的数学方法
实现/模拟: 建立一个允许算法运行实际数据的系统;最灵活,最具一般性
实时调度
实时系统
定义:系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致的运行。
性能指标:时间约束的及时性,速度和平均性能相对不重要
主要特征:时间约束的可预测性
分类
-
强实时系统:需要在保证时间内完成重要的任务,必须完成
-
弱实时系统:要求重要的进程的优先级更高,尽量完成,并非必须
静态优先级调度/动态优先级调度
-
单调速率(RM)
-
最佳静态优先级调度
-
通过周期安排优先级
-
周期越短优先级越高
-
执行周期最短的任务
-
-
截止日期最早优先(EDF)
-
最佳的动态优先级调度
-
Deadline越早优先级越高
-
执行Deadline最早的任务
-
多处理器调度
-
多个相同的单处理器组成一个多处理器
-
优点: 复杂共享
对称多处理器(SMP)
-
每个处理器运行自己的调度程序
-
需要在调度程序中同步
优先级反转
可以发生在任务基于优先级的可抢占的调度机制中
当系统内的环境强制使高优先级任务等待低优先级任务时发生
解决方法
优先级继承
低优先级任务即成高优先级任务的优先级,这个依赖于他们共享的资源。
优先级"天花板":“拥有资源”的优先级和“所有可以锁定该资源任务中优先级最高的那个任务”的优先级相同