暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

操作系统#3——处理机调度算法

别动我的月亮啊 2020-12-29
225


  • 先来先服务FCFS调度算法

  • 短作业优先SJF算法

  • 优先级调度算法PSA

    • 优先级的类型

  • 高响应比优先调度算法HRRN

  • 轮转调度算法RR

  • 多级反馈队列调度算法

  • 保证调度算法

  • 公平分享调度算法

  • 实现实时调度的基本条件

    • 1. 提供必要的信息

    • 2. 系统处理能力强

    • 3. 采用抢占式调度机制

    • 4. 具有快速切换机制

  • 最早截止时间优先算法EDF

  • 最低松弛度优先算法LLF

  • 优先级倒置问题

    • 解决方法


低级进程调度算法

先来先服务FCFS调度算法

FCFS是最简单的调度算法,既可以用于作业调度,也可用于进程调度。挡在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度

FCFS很少作为主调度算法了,但经常把它与其它调度算法相结合使用,形成一种更为有效的调度算法。

短作业优先SJF算法

在实际情况中,短作业占有很大比例,为了能使它们比长作业优先执行,而产生了短作业优先调度算法。SJF算法是以作业要求的运行时间来衡量的,处理机会在外存中选择若干个运行时间最短的作业,优先将它们调入内存。

优先级调度算法PSA

基于作业的紧迫程度,由外部赋予作业相应的优先级,调度算法是根据优先级进行调度的,这样就可以保证紧迫性作业优先运行。系统会在外存的后备队列中选择若干个优先级最高的作业装入内存

优先级的类型

静态优先级

静态优先级在创建进程时确定的,在整个运行其间保持不变。确定进程优先级的大小的依据有如下三个:

  1. 进程类型。系统进程比一般用户进程的优先级高
  2. 进程对资源的需求。对资源要求少的进程应赋予较高的优先级
  3. 用户要求。根据进程的紧迫程度及用户所付费的多少确定优先级

动态优先级

进程优先级随着进程的推进或等待的事件增加而改变。例如,如果所有进程都具有一样的优先级那么最先进入的进程优先获得处理机

高响应比优先调度算法HRRN

高响应比即考虑了作业的等待时间,又考虑了作业运行时间的调度算法。通过设立一个动态优先级保证所有作业都有机会获得处理机。

轮转调度算法RR

系统中所有的就绪进程按FCFS策略排成一个就绪队列。系统可设置每隔一定时间便产生一次中断,去激活进程调度程序进行调度。保证就绪队列中所有进程在确定的时间段内,都能获得一个时间片的处理机时间。

多队列调度算法

由于系统中仅设置一个进程的就绪队列,即低级调度算法是固定的、单一的,无法满足系统中不同用户对进程调度策略的不同要求。多队列调度算法能够一定程度上弥补这一缺点。

该算法将系统中的就绪队列从一个拆分成若干个,将不同类型或性质的进程固定分配在不同的就绪队列。

多级反馈队列调度算法

上述的STF和诸多基于进程长度的抢占式算法在未指明进程长度时无法使用,而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间。

多级反馈队列调度算法的调度机制描述如下:

  1. 设置多个就绪队列。为每个队列赋予不同的优先级,第一个最高,后面逐个降低。算法为不同队列分配的执行时间片时间也不一样。
  2. 每个队列都采用FCFS算法。当新进程进入内存后,首先将它放入第一队列的末尾,到它执行时如果能在时间片内完成就将其撤离系统。如果一个时间片结束时尚未完成,就将其转入第二队列的末尾等待调度;然后重复这一操作,当降到n队列之后,便采取RR方式运行。
  3. 按队列优先级调度。调度程序首先调度最高优先级队列中的诸进程运行,仅当前一个队列空时,才调度后面队列的进程运行。
多级反馈调度算法

基于公平原则的调度算法

以上介绍的几种调度算法所保证的只是优先运行,但并不保证作业占用了多少处理机时间。也没有考虑到算法的公平性下面是两种相对公平的调度算法

保证调度算法

保证调度算法是另外一种类型的调度算法,它向用户所作出的保证并不是优先运行,而是明确的性能保证,该算法可以做到调度的公平性。一种比较容易实现的性能保证是处理机分配的公平性。在实时公平调度算法时系统中必须具有这样一些功能:

  1. 跟踪计算每个进程自创建以来已经执行的时间
  2. 计算每个进程应获得的处理机时间,即自创建依赖的时间除以n
  3. 计算进程获得处理机时间的比率,即进程实际执行的处理时间和应获得的处理机时间之比。
  4. 比较各进程获得处理机时间的比例
  5. 调度程序应选择比率最小的进程将处理机分配给它,并让该进程一直运行,直到超过最接近它的进程比率为止。

公平分享调度算法

考虑到不同用户拥有的进程数不同,分配给每个进程相同的时间实际上对用户是不公平的。因而在该算法中需要考虑用户之间的处理机时间分配问题。

实时系统中的调度算法

实现实时调度的基本条件

1. 提供必要的信息

  1. 就绪时间
  2. 开始截止时间和完成截止时间
  3. 处理时间
  4. 资源要求
  5. 优先级

2. 系统处理能力强

不至于因为处理机处理能力不够强而导致某些实时任务得不到处理

3. 采用抢占式调度机制

方便执行关键性程序和临界区

4. 具有快速切换机制

  1. 对中断的快速响应能力
  2. 快速的任务分派能力

实时任务的调度都十分简单,这里不做细致讲解

最早截止时间优先算法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被阻塞。出现了高优先级进程被低优先级进程阻塞的情况。这是非常不正常的,而且对系统是有害的。

优先级倒置

解决方法

  1. 当进程进入临界区之后不允许处理机被抢占。
  2. 当高优先级进程P1要进入临界区,去使用临界资源R,如果有一个低优先级进程P3正在使用该资源,P3就继承了P1的优先级,不会被P2这个不可变因素影响
动态继承优先级方法


文章转载自别动我的月亮啊,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论