1、上下文切换和CPU调度的关系
既然要进行上下文切换,就必须回答一个问题:什么时候进行上下文切换?挑选哪些来进行切换?这就是CPU调度需要学习的内容。
2、 什么时候进行调度?从一个状态到另一个状态变化的时候就会触发一次调度,特别是跟运行态相关的状态变化。因为这个时候就涉及到是否让当前进程执行,或者把当前进程换出内存。
3、内核运行调度程序的条件:调度程序是在内核中执行的,但是进程一般是用户态的用户进程
4、调度原则:其实总的来说,就是如何协调CPU忙的程序和IO忙的程序,令程序执行效率更高
调度算法的评价指标,用来作为依据和参考:
所以,归根到底是需要有一个平衡。可以根据不同的需求,设计不同的调度算法,是需要更大的吞吐量,还是需要更短的响应时间等。
5、调度算法(通常的桌面和服务器操作系统的一些基本调度算法):
一般是以下六种:
(1)FCFS
进程谁先来就调度谁。可以看出,如果把运行时间长的进程放在前面,会造成很长的周转时间。而如果把运行时间短的进程调整一下,放在前面,周转时间会少很多。因此促使我们想一种办法,优先调度执行时间短的进程。
这个算法的优缺点:
(2)选择下一个最短的进程(短任务优先,SPN,SJF)
分为可抢占和不可抢占,可抢占,又叫SRT,就是最短剩余时间。比较的是剩余时间,可以抢占正在运行的进程。
这种算法的优点:理论上平均等待时间是最短的。
缺点:
可能导致饥饿的第一条,违反了公平性原则。
怎么预估下一个CPU突发的执行时间?除了询问用户,还有:
通过计算预估,根据进程的执行历史来推断。
根据之前n段时间来预测。
(3)最高响应比,HRRN。他相比SPN,还多考虑了一个因素,进程的等待时间。如果等待时间越长,这个进程越可能被优先调度。其实就是综合考虑了进程的等待时间和执行时间。缺点:目前这个算法是不考虑抢占的;也要想办法去预估执行时间。优点:饥饿现象得到有效缓解。
(4)轮循算法,RR。其实就是让各个进程轮流占用CPU执行。通过设置CPU时间片,让进程轮流分享时间片。
优缺点(这里,时间量子就是时间片长度):
因此,设置时间片的长度是一个很讲究的事情,主要取决于经验。
(5)多级队列。其实就是把就绪的进程,分成很多队列,每个队列都采用不同的调度策略。通过不同进程的特点,来选择用哪个调度策略更合适。
在进程执行的过程中,可能会在不同阶段有不同的特点。需要找一种调度算法,动态调整进程在不同队列中的级别,可以使用多级反馈队列,MFQ。
对于MFQ,一个进程可以在不同队列中移动,动态调整进程的优先级。
(6)公平共享调度,FSS。这种算法重点强调的是公平。主要是面向服务器等,多用户共享一台计算机。对于用户而言,每个用户的进程是不同的,有些多,有些少。我们希望在用户级别实现公平调度。比较著名的是Linux的CFS(完全公平调度)算法。
6、实时调度(针对一些嵌入式实时系统的特殊调度算法)
实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点。
实时系统更多用于一些工业环境、嵌入式环境等。它在意的是时间约束的及时性,也就是在一定限制时间内一定要执行完,而速度和平均性能相对不重要。它的主要特征是时间约束的可预测性。
它分为:强实时(硬实时)系统和弱实时系统。前者是需要在保证时间内重要任务必须完成,后者是要求重要进程的优先级更高,尽量完成,并非必须。
为了满足硬实时或者软实时的调度需求,主要有两种调度方法:
(1)静态优先级调度
在这个任务执行之前,优先级已经确定了。典型的是RM。
(2)动态优先级调度
任务的优先级随着执行的过程在动态变化。典型的是EDF。
7、多处理器调度
8、优先级反转现象:优先级反转是当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证
这个现象可以发生在任何基于优先级的可抢占调度机制中
当系统内的环境强烈使高优先级任务等待低优先级任务时候发生
优先级反转的持续时间取决于其他不相关任务的不可预测行为
在这个例子里,优先级T1>T2>T3。而T1的执行时间居然取决于T2的执行时间,T2执行时间又不可预测。
解决办法:
(1)优先级继承:
优先级继承是当任务A 申请共享资源S 时, 如果S正在被任务C 使用,通过比较任务C 与自身的优先级,如发现任务C 的优先级小于自身的优先级, 则将任务C的优先级提升到自身的优先级, 任务C 释放资源S 后,再恢复任务C 的原优先级。
(2)优先级天花板
优先级天花板是当任务申请某资源时, 把该任务的优先级提升到可访问这个资源的所有任务中的最高优先级, 这个优先级称为该资源的优先级天花板。