第3章 处理机调度与死锁

1.处理机调度:

多道程序环境下,动态的把处理机分配给就绪队列中的一个进程使之执行。

作业进入系统驻留在外存的后备队列上,再至调入内存运行完毕,可能要经历下述三级调度

(1)高级调度又称作业调度

  主要在早期批处理阶段,处理在外存上的作业。

  决定外存后备队列中的哪些作业调入内存;

  为它们创建进程、分配必要的资源;

  将新创建的进程排在就绪队列上,准备执行。

注意:接纳多少作业——取决于多道程序度。     接纳哪些作业——取决于采用的调度算法。   只有批处理系统有作业调度,分时和实时系统无作业调度

(2)低级调度

决定内存就绪队列中的哪个进程获得处理机,进行分配工作。是最基本的一种调度,在三种基本OS中都有。

1)非抢占方式

  一旦处理机分配给某进程,该进程一直执行。决不允许其他进程抢占已分配运行进程的处理机。

2)抢占方式

  允许调度程序根据某种原则,暂停某个正在执行的进程,将处理机重新分配给另一进程

(3)中级调度

为了提高内存利用率和系统吞吐量。根据条件将一些进程调出或再调入内存。


第3章 处理机调度与死锁_第1张图片

2.选择调度方式和调度算法的若干准则

(1)面向用户的准则

周转时间短:针对批处理系统的性能指标。作业从提交到完成所经历的时间。

            CPU执行用时Ts

            总的等待时间Tw = 在后备队列中等待 + 就绪队列上等待+阻塞队列中等待(等待I/O操作用时)

            周转时间T=Ts+Tw

            带权周转时间W= T/Ts

            平均周转时间、平均带权周转时间(n个作业求平均

响应时间快

均衡性:系统响应时间的快慢与用户所请求的复杂性相适应。

截止时间的保证

优先权准则

2)面向系统的准则

系统吞吐量高:批处理系统的重要指标。

单位时间内所完成的作业数,跟作业本身(与作业平均长度密切相关)和调度算法都有关系。

3.调度算法

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

 按照作业提交,或进程变为就绪状态的先后次序分派CPU

 新作业只有当当前作业或进程执行完或阻塞才获得CPU运行

 被唤醒的作业或进程不立即恢复执行,通常等到当前作业或进程出让CPU。(所以,默认即是非抢占方式)

(2)短作业(进程)优先调度算法SJF/SPF

   SJF/SPF调度算法能有效的降低作业的平均等待时间,提高系统吞吐量。

 (3)高优先权优先调度算法HPF

   照顾紧迫性作业,使其获得优先处理而引入调度算法。常用于批处理系统中的作业调度算法,以及多种操作系统中的进程调度算法

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

  HRRN为每个作业引入动态优先权,使作业的优先级随着等待时间的增加而以速率a提高:

  优先权 =(等待时间+要求服务时间)/要求服务时间 = 响应时间 / 要求服务时间

 (5)基于时间片的轮转调度算法RR

    5.1时间片轮转算法

    1.将系统中所有的就绪进程按照FCFS原则,排成一个队列。

    2.每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。

    3.在一个时间片结束时,发生时钟中断。

    4.调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前就绪的队首进程。

   5.2多级反馈队列算法FB

   1)设置多个就绪队列,各队列有不同的优先级,优先级从第一个队列依次降低。

   2) 赋予各队列进程执行时间片大小不同, 优先权越高,时间片越短。

  4.实时调度

  什么是实时系统?1.指系统能够在限定的响应时间内提供所需水平的服务。

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

1)提供必要的信息

   为了实现实时调度,系统应向调度程序提供有关任务的下述信息:

 就绪时间。该任务成为就绪状态的时间。

 开始截止时间、完成截止时间。

 处理时间。从开始执行到完成所需时间。

 资源要求。任务执行时所需的一组资源。

 优先级。根据任务性质赋予不同优先级。

2)系统处理能力足够强

3)采用抢占式调度机制

4)具有快速切换机制

常用的几种实时调度算法:

(1) 最早截止时间优先EDF:  截止时间越早,其优先级越高

(2)最低松弛度优先LLF:  紧急程度越高(松弛度值越小),优先级就越高。

     松弛度=截止完成时间 – 还需执行时间 - 当前时间

     可理解为当前时刻到开始截止时刻间的差距,随着时间的推进,这个差值逐渐变小,任务越来越紧迫。

5.死锁

1.概念:指多个进程在运行过程中,因争夺资源而造成的一种僵局。当进程处于这种状态时,若无外力作用,它们都将无法再向前推进。

2.原因:

1.竞争资源。系统中供多个进程共享的资源如打印机、公用队列等的数目不满足需要时,会引起资源竞争而产生死锁。

2.进程间推进顺序非法。进程在运行过程中,请求和释放资源的顺序不当,同样会导致死锁。

3.形成死锁的四个必要条件(四个条件都具备就会死锁,缺一就不会死锁)

①互斥条件:进程对所分配到的资源进行排他性使用

②请求和保持条件:进程已经保持了至少一个资源,又提出新的资源请求,而新请求资源被其他进程占有只能造成自身进程阻塞,但对自己已获得的其他资源保持不放,必然影响其他进程。

③不剥夺条件:进程已获得的资源未使用完之前不能被剥夺,只能在使用完时由自己释放。

④环路等待条件

4.处理死锁的基本方法

事先预防:

①预防死锁

②避免死锁

事后处理:

③检测死锁。

③解除死锁。

6.银行间算法

最有代表性的避免死锁的算法,是Dijkstra的银行家算法。由于该算法能用于银行系统现金贷款的发放而得名。

 【思路描述】:随时对系统中的所有资源信息进行统计,包括每种资源的数量、已分配给各进程的数量;每当进程提出某种资源请求时判断该请求分配后是否安全,如果安全才分配。对每个资源请求的处理都要保证系统始终从一个安全状态到另一个安全状态。


第3章 处理机调度与死锁_第2张图片


第3章 处理机调度与死锁_第3张图片


第3章 处理机调度与死锁_第4张图片

(1)T0时刻的初始状态是安全的;

(2)下面出现P1请求资源的操作,具体请求向量为Request1(1,0,2),利用银行家算法进行检查该操作是否是安全可行的:

     两个基本判断

  Request1(1,0,2)<=Need1(1,2,2)

  Request1(1,0,2)<=Available1(3,3,2)

2)先假设为P1分配资源,并修改Available,Allocation1和Need1向量。

3) Request1(1,0,2)后新的资源状态表下再判断新资源状态是否是安全的。

找到一个安全序列{P1,P3,P4,P0,P2},因此系统是安全的,该请求是安全的,可将假设真正实施,将P1所申请的资源分配给它。



7.死锁的检测

资源分配图法


第3章 处理机调度与死锁_第5张图片


简化方法如下:

  1.在资源分配图中找出一个既不阻塞又非独立的进程结点Pi,在顺利的情况下运行完毕,释放其占有的全部资源。

  2.由于释放了资源,这样能使其它被阻塞的进程获得资源继续运行。消去了Pi的边。

  3.经过一系列简化后,若能消去图中所有边,使结点都孤立,称该图是可完全简化的。

  状态为死锁状态的充分条件是当且仅当S状态的资源分配图是不可完全简化的。<死锁定理>

你可能感兴趣的:(第3章 处理机调度与死锁)