《操作系统》第三章 处理机调度与死锁

第三章

3.1 处理机调度的层次和调度算法

3.1.1 处理机调度的层次

1.高级调度
又称长程调度或作业调度。调度对象是作业。功能是根据某种算法,将外存上处于后备队列中的哪几个作业调入内存,为他们创建进程、分配资源,并放入就绪队列。

2.低级调度
又称进程调度或短程调度。调度对象是进程。功能是根据某种算法,决定将就绪队列中的哪个进程应获得处理机,并由分派程序将处理机分配给被选中的进程。

3.中级调度
又称内存调度。目的是提高内存利用率和系统吞吐量。即将暂时不能运行的进程,调至外存等待,此时进程的状态称为就绪驻外存状态(或挂起状态)。

3.1.2 处理机调度算法的目标

CPU的利用率 = CPU有效工作时间/(CPU有效工作时间+CPU空闲等待时间)

调度算法的目标是使周转时间最短,即指从作业被提交给系统开始,到作业完成为止的这段时间时间最短。

周转时间 = 完成时间 - 到达时间

3.2 作业调度算法

1.先来先服务调度算法(FCFS)

系统按照作业到达的先后次序来进行调度,每次调度从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,直到该进程运行结束或阻塞,进程调度程序才将处理机分配给其他进程。

优缺点:
有利于长作业,不利于短作业
有利于CPU密集/繁忙型作业,不利于I/O繁忙型作业

2.短作业优先调度算法(SJF)

以作业的长短来计算优先级,作业越短,其优先级越高

缺点:
1.必须预知作业的运行时间。
2.对长作业不利,并且忽视了作业的等待时间,可能出现饥饿现象。
3.采用该算法,人机无法实现交互。
4.未考虑到作业的紧迫程度。

3.高响应比优先调度算法(HRRN)

为每个作业引入一个动态优先级,令它随等待时间延长而增加,这使得长作业的优先级在等待期间不断地增加。

优先权 = 响应时间/要求服务时间 = 1 + 作业等待时间/作业要求服务时间

由以上可以看出:
① 如果作业等待时间相同,则要求服务时间愈短,其优先级愈高。有利于短作业。
② 要求服务时间相同,作业优先权决定于其等待时间。因而该算法类似于FCFS算法。

3.3 进程调度

3.3.1 进程调度的任务和方式

1.进程调度的任务
(1)保存处理机的现场信息。
(2)按某种算法选取进程。
(3)把处理机分配给进程。

2.进程调度方式
1)非抢占方式
采用这种调度方式,一旦把处理机分配给某进程后,就一直让它运行下去,绝不允许因为时钟中断或任何其他原因去抢占当前正在运行进程的处理机,直至该进程完成。

2)抢占方式
允许调度程序根据某种原则,去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一个进程。

原则:
① 优先权原则
② 短进程优先原则
③ 时间片原则

3.3.2 轮转调度算法(RR)

1.基本原理:
在轮转法中,系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并设置每隔一定时间间隔产生一次中断,激活系统的进程调度程序,完成一次调度,将CPU分配给队首进程,令其执行。直到该进程的时间片耗尽或运行完毕时,系统再重新将CPU分配给队首进程。

2.进程切换时机
① 若一个时间尚未用完,正在运行的进程便已经完成。
② 在一个时间片用完时。

3.3.3优先级调度算法

1.优先级的类型

1)静态优先级
静态优先级是在创建进程时确定的,在进程的整个运行期间保持不变。优先级是利用某一范围内的一个整数来表示。

2)动态优先级
动态优先级是指在创建进程之初,先赋予其一个优先级,然后其值随进程的推进或等待时间的增加而改变,以便获得更好的调度性能。

3.4 实时调度

3.4.1 最早截止时间优先(EDF)

该算法根据任务的截止时间确定任务的优先级,任务的截止时间愈早,其优先级愈高

3.4.2 最低松弛度优先(LLF)

该算法根据任务的紧急(或松弛)程度。任务紧急程度愈高,赋予该任务的优先级就愈高。松弛度最低的任务排在最前面。

松弛度 = 必须完成时间 - 其本身的运行时间 - 当前时间

3.5死锁

3.5.1 死锁的定义、条件和处理方法

1.死锁的定义
如果一组进程中的每一个进程都在等待仅由该进程中的其他进程才能引发的事件,那么该组进程是死锁的。

2.死锁产生的必要条件
① 互斥条件
② 请求和保持条件
③ 不可抢占条件
④ 循环等待条件

3.处理死锁的方法
① 预防死锁
② 避免死锁
③ 检测死锁
④ 解除死锁

3.6 预防死锁

3.6.1 破坏“请求和保持”条件

为了能破坏“请求和保持”条件,系统必须做到:当一个进程在请求资源时,不能持有不可抢占资源

实现
1) 第一种协议:所有进程在开始运行之前,必须一次性申请其在整个运行过程中所需要的全部资源。这样该进程在整个运行期间,便不会再提出资源请求,从而破坏了“请求”条件。

缺点:
(1)资源被严重浪费,严重地恶化了资源的利用率。
(2)使进程经常会发生饥饿现象。

2)第二种协议:允许一个进程只获得运行初期所需的资源后,便开始运行,进程运行过程中再逐步释放已分配给自己的、且已用毕的全部资源,然后再追求新的所需资源。

3.6.2 破坏“不可抢占”条件

当一个已经保持了某些不可被抢占资源的进程,提出新的资源请求而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。这意味着进程已占有的资源会被暂时释放,或者说被抢占了。

3.6.3 破坏“循环等待”条件

对系统所有资源类型进行线性排序,并赋予不同的序号,并且规定每个进程必须按序号递增的顺序请求资源。

3.7 避免死锁

3.7.1 系统安全状态

1.安全状态
在死锁避免方法中,把系统的状态分为安全状态和不安全状态。当系统处于安全状态时,可避免发生死锁。反之,当系统处于不安全状态时,则可能进入到死锁状态。

3.7.2 利用银行家算法避免死锁

1.银行家算法中的数据结构
设置有四个数据结构:系统中可利用的资源所有进程对资源的最大需求系统中的资源分配以及所有进程还需要多少资源的情况

3.8 死锁的检测与接触

3.8.1 死锁的检测

(1)抢占资源
从一个后多个进程中抢占足够数量的资源,分配给死锁进程,以接触死锁状态。
(2)终止进程。终止系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。

猜你喜欢

转载自blog.csdn.net/swpu_ocean/article/details/80444016