大纲:
-----处理机调度概念(处理机调度,调度时机)
-----调度准则
-----调度算法
-----实时调度
-----多处理器调度
-----优先级反转
CPU调度的背景,什么是CPU调度,为什么会有这个概念?要研究它的什么
CPU调度的背景是进程切换,当我们说进程切换,其概念是保存当前进程在PCB中的执行上下文并恢复下一进程的执行上下文,即CPU资源的当前占用者的切换,那么处理机调度的意思就是从众多的就绪队列中挑选调度下一个运行的进程,所谓的调度程序就是挑选就绪进程的内核函数,我们要研究(设计)的就是调度程度依据什么原则从众多就绪进程/线程中挑选下一个,什么时候进行调度,即所谓的调度策略和调度时机
- 调度时机: 进程状态发生变化:进程从运行状态切换到等待状态,或者进程被终结
1)在非抢占系统中是当前进程主动放弃CPU
2)在可抢占系统中就有可能是中断请求被服务例程响应完成时,或者当前进程被抢占(如进程时间片用完,进程从等待切换到就绪) - 调度策略:用各类调度算法实施调度
- 比较调度算法的准则:
1 CPU使用率:CPU处于忙状态所占时间的百分比
2 吞吐量:在单位时间内完成的进程数量
3 周转时间:从用户角度看,一个进程从初始化到结束(包括等待)的总时间
4 等待时间:进程在就绪队列中的总时间
5 响应时间:从一个请求被提交到产生第一次响应所花费的时间
6 公平性:每个进程占用CPU的时间公平与否(不是准则但是在设计调度算法时要考虑
调度算法
- 先来先服务算法FCFS:不公平,利用率低,等待时间不稳定
- 短进程优先算法:3个小变种算法(不公平,预估时间?会产生饥饿)
- 最高响应比算法:进程在队列中的等待时间(可以避免无限期等待,等越久优先级越高
- 时间片轮转算法:让各个进程轮流占用一个时间片,在就绪队列中仍然FCFS,多了额外的上下文切换开销,需要找一个合适的时间片
- 多级反馈队列算法:把就绪队列分成多个子队列,每个队列有独立的调度算法,时间片大小随优先级级别增加而增加……
- 公平共享调度算法:从公平角度……对用户按重要程度进行分组
///如果回忆不起来了,就重新快速看看《学堂在线》第15讲,maybe做了实验作业之后印象会变深。
实时调度系统的调度算法:对时间有要求的调度算法
实时调度系统的正确性依赖时间和功能两方面;其性能指标是时间约束的及时性,速度和平均性能相对来说反而不那么重要;主要特性是时间约束的可预测性,它分为强实时系统(在保证的时间内必须完成重要的任务)和弱实时系统(将重要的进程的优先级设置更高并尽量完成,不是必须)
我们在实时的系统上要求系统完成一系列的任务,我们定义可调度性,即什么调度算法在什么情况下可以满足实现的要求,我们需要确定实时任务的执行顺序,有两类调度算法
①静态优先级调度:运行之前优先级就是确定的
②动态优先级调度:优先级在运行中是动态变化的
:
-
速率单调调度:
->最佳静态优先级调度
->通过周期安排优先级,周期越短,优先级越高
->先执行周期最短的任务 -
最早期限调度
-> 最佳的动态优先级调度
->截止时间越早优先级越高
->先执行截止时间最早的任务
多处理机调度:有多个处理器的系统中的调度算法
1,多处理机调度的特征:多个处理机组成一个多处理机系统,处理机间可负载共享
2,现在用的最多的多处理机是对称多处理机,在对称多处理机系统上的调度算法有两个特点:每个处理机有自己的调度程序各自进行调度,且调度程序对共享资源的访问需要进行同步(对于多处理机调度来说,同步问题是一个很重要的问题!!就是下一讲的同步互斥的内容888)
- 多处理机调度算法很重要的一个问题:进程分配——把一个进程到底放到哪个处理机上运行,针对这个问题有两类调度算法
- 静态进程分配:进程从开始到结束都被分配到一个固定的处理机上执行
->每个处理机有自己的就绪队列
->调度开销小,因为每个进程在调度的时候只需要管自己的一个CPU
->造成的影响就是各处理机可能忙闲不均 - 动态进程分配:进程在执行中可分配搭配任意空闲处理机执行
->所有处理机共享一个公共的就绪队列
->调度开销大
->各处理机的负载是均衡的
优先级反转
优先级发你转可以发生在任何基于优先级的可抢占的调度机制中
当系统内的特殊环境致使高优先级任务等待低优先级任务的情况
->举例说明:
在T2还没有出现之前,一切正常:T3在占用资源s的情况下在正常运行,忽然高优先级的T1出现要运行,T3就中断自己把CPU资源让给T1,可是T1在t4时刻要用T3正在使用的S资源了,没有办法这下T1只能等T3运行完释放s才能继续,所以T1在t4时刻被阻塞,把CPU资源让给T3,让T3号快点运行完把资源释放出来,可以在t5时刻,比T3高优先级的T2出现了,T3只能又把CPU资源让给T2,直到T2运行完,T1才继续运行直到s资源被释放,T1才用上s资源……那么这里就出现了T1的优先级虽然比T2高,但却等到了T2运行完才运行
解决优先级反转的两个方法:
①优先级继承:占有资源的低优先级进程继承申请资源的高优先级进程的优先级。上面的例子中就是,T3的优先级由于S会动态的得到提升,那样T2就无法抢占T3了
②优先级天花板:占用资源进程的优先级和所有可能申请该资源的进程中的最高优先级相同
但是这两个方法都是理论的,实际操作还有不太一样的(听说)