先来先服务FCFS调度算法
短作业优先SJF算法
优先级调度算法PSA
高响应比优先调度算法HRRN
轮转调度算法RR
多级反馈队列调度算法
实现实时调度的基本条件
1. 提供必要的信息
2. 系统处理能力强
3. 采用抢占式调度机制
4. 具有快速切换机制
最早截止时间优先算法EDF
最低松弛度优先算法LLF
优先级倒置问题
解决方法
低级进程调度算法
先来先服务FCFS调度算法
FCFS是最简单的调度算法,既可以用于作业调度,也可用于进程调度。挡在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度。
FCFS很少作为主调度算法了,但经常把它与其它调度算法相结合使用,形成一种更为有效的调度算法。
短作业优先SJF算法
在实际情况中,短作业占有很大比例,为了能使它们比长作业优先执行,而产生了短作业优先调度算法。SJF算法是以作业要求的运行时间来衡量的,处理机会在外存中选择若干个运行时间最短的作业,优先将它们调入内存。
优先级调度算法PSA
基于作业的紧迫程度,由外部赋予作业相应的优先级,调度算法是根据优先级进行调度的,这样就可以保证紧迫性作业优先运行。系统会在外存的后备队列中选择若干个优先级最高的作业装入内存
高响应比优先调度算法HRRN
高响应比即考虑了作业的等待时间,又考虑了作业运行时间的调度算法。通过设立一个动态优先级保证所有作业都有机会获得处理机。
优先权等待时间要求服务时间要求服务时间响应时间要求服务时间
轮转调度算法RR
系统中所有的就绪进程按FCFS策略排成一个就绪队列。系统可设置每隔一定时间便产生一次中断,去激活进程调度程序进行调度。保证就绪队列中所有进程在确定的时间段内,都能获得一个时间片的处理机时间。
多队列调度算法
由于系统中仅设置一个进程的就绪队列,即低级调度算法是固定的、单一的,无法满足系统中不同用户对进程调度策略的不同要求。多队列调度算法能够一定程度上弥补这一缺点。
该算法将系统中的就绪队列从一个拆分成若干个,将不同类型或性质的进程固定分配在不同的就绪队列。
多级反馈队列调度算法
上述的STF和诸多基于进程长度的抢占式算法在未指明进程长度时无法使用,而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间。
多级反馈队列调度算法的调度机制描述如下:
- 设置多个就绪队列。为每个队列赋予不同的优先级,第一个最高,后面逐个降低。算法为不同队列分配的执行时间片时间也不一样。
- 每个队列都采用FCFS算法。当新进程进入内存后,首先将它放入第一队列的末尾,到它执行时如果能在时间片内完成就将其撤离系统。如果一个时间片结束时尚未完成,就将其转入第二队列的末尾等待调度;然后重复这一操作,当降到n队列之后,便采取RR方式运行。
- 按队列优先级调度。调度程序首先调度最高优先级队列中的诸进程运行,仅当前一个队列空时,才调度后面队列的进程运行。
实时系统中的调度算法
实现实时调度的基本条件
1. 提供必要的信息
- 就绪时间
- 开始截止时间和完成截止时间
- 处理时间
- 资源要求
- 优先级
2. 系统处理能力强
不至于因为处理机处理能力不够强而导致某些实时任务得不到处理
3. 采用抢占式调度机制
方便执行关键性程序和临界区
4. 具有快速切换机制
- 对中断的快速响应能力
- 快速的任务分派能力
“实时任务的调度都十分简单,这里不做细致讲解
”
最早截止时间优先算法EDF
任务的截止时间愈早,其优先级愈高,具有最早截止时间的任务排在队列的队首
最低松弛度优先算法LLF
根据任务的紧急程度,确定任务的优先级。即松弛时间截止时间处理时间
优先级倒置问题
这里重点说一说优先级倒置的问题——高优先级进程被低优先级进程延迟或阻塞。
假设有三个完全独立的进程P1、P2、P3。下面是一段代码:
P1: ...P(mutex); CS-1; V(mutex);...;
P2: ...program2...;
P3: ...P(mutex); CS-3; V(mutex);...;
假如P3最先执行,在执行了P(mutex)操作之后,进入到临界区CS-3。在时刻a,P2就绪,因为优先级比P3高,P2就抢占了P3的处理机时间。在时刻b,P1就绪因为优先级比P2高,P1就抢占了处理机,但是因为临界资源被P3占用,因此,P1被阻塞。出现了高优先级进程被低优先级进程阻塞的情况。这是非常不正常的,而且对系统是有害的。
解决方法
- 当进程进入临界区之后不允许处理机被抢占。
- 当高优先级进程P1要进入临界区,去使用临界资源R,如果有一个低优先级进程P3正在使用该资源,P3就继承了P1的优先级,不会被P2这个不可变因素影响