处理机调度与死锁

 

1.处理及调度基本概念

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

高级调度
又称作业调度、长程调度、接纳调度,主要在早期批处理阶段,处理在外存上的作业。

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

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

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

 

作业调度决定的细节

  在每次执行作业调度时,都须作出两个决定:

  接纳多少作业——取决于多道程序度。应根据系统的规模和运行速度等情况综合考虑;

  接纳哪些作业——取决于采用的调度算法。如先来先服务,短作业优先等。

 

系统运行并不一定存在高级调度

  批处理系统:作业进入系统后先驻留外存,故需要有作业调度。

  分时系统:为及时响应,作业由终端直接送入内存,故不需作业调度。

  实时系统中,通常也不需作业调度。

 

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

 

进程调度方式

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

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

中级调度

  

2.常用调度算法

  

  先来先服务(FCFS)调度算法
  FCFS调度算法是一种最简单的调度算法,该调度算法既可以用于作业调度也可以用于进程调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,             分配必要的资源,创建进程并放入就绪队列。  在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释           放处理机。FCFS调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SJF和高响应比);有利于CPU繁忙型作业,而不利于I/O繁忙型作业。

  短作业优先(SJF)  短作业(进程)优先调度算法是指对短作业(进程)优先调度的算法。  短作业优先(SJF)调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运       行。而短进程优先(SPF)调度算法,则是从就绪队列中选择一个估计运行时间最短的进程,将处理         机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。  该算法完全未            考虑作业的紧迫程度,因而不能保证紧迫性作业会被及时处理。由于作业的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使          该算               法不一定能真正做到短作业优先调度。

   

  优先级调度算法
  优先级调度算法又称优先权调度算法,该算法既可以用于作业调度,也可以用于进程调度,该算法中的优先级用于描述作业运行的紧迫程度。
  在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列          中选择优先级最高的进程,将处理机分配给它,使之投入运行。
  根据新的更高优先级进程能否抢占正在执行的进程,可将该调度算法分为:
  非剥夺式优先级调度算法。当某一个进程正在处理机上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时(任务完成        或等待事件),才把处理机分配给更为重要或紧迫的进程。
  剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。
  而根据进程创建后其优先级是否可以改变,可以将进程优先级分为以下两种:
  静态优先级。优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。确定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。
  动态优先级。在进程运行过程中,根据进程情况的变化动态调整优先级。动态调整优先级的主要依据为进程占有CPU时间的长短、就绪进程等待CPU时间的长短。

  高响应比优先调度算法HRRN
  短作业优先算法是一种比较好的算法(相当于根据作业长度设定的静态优先权算法),适用于短作业较多的批处理系统中,其主要不足是长作业的运行得不到保证。HRRN为每个作业引入动态优先权,使         作业的优先级随着等待时间的增加而以速率a提高:优先权 =(等待时间+要求服务时间)/要求服务时间= 响应时间 / 要求服务时间

  

  时间片轮转调度算法
  时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。

  在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。如果时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。如果时间片很小,那么处理机将在进程间过于频繁切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此时间片的大小应选择适当。

  时间片的长短通常由以下因素确定:系统的响应时间、就绪队列中的进程数目和系统的处理能力。

  多级反馈队列调度算法(集合了前几种算法的优点)
  多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合和发展,如图2-5 所示。通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。例如,为提高系统吞吐量和缩短平均周转时间而照顾短进程;为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程;同时,也不必事先估计进程的执行时间。

总结

 

 

3.实时调度

实现实时调度的基本条件

提供必要的信息系统处理能力

足够强采用抢占式调度机制具有快速切换机制

  实时调度算法的分类

非抢占调度算法

抢占式调度算法

  常用的几种实时调度算法

(1)最早截止时间优先EDF根据任务的开始截止时间来确定任务的优先级。截止时间越早,其优先级越高。

(2)最低松弛度优先根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急程度越高(松弛度值越小),优先级就越高。

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

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

4.产生死锁的原因和必要条件

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

竞争资源引起进程死锁可把系统中的资源分为两类:可剥夺和非剥夺性资源永久性资源和临时性资源

进程推进顺序不当引起死锁

产生死锁的必要条件互斥条件:进程对所分配到的资源进行排他性使用

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

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

4)处理死锁的基本方法事先预防:

(1)预防死锁

(2)避免死锁

事后处理:
(3)检测死锁

(4)解除死锁

 

5.预防死锁的方法

所谓预防死锁,其实就是破坏产生死锁的四个必要条件之一,使得死锁条件不成立,从而达到预防死锁的目的

摒弃请求和保持条件:一次性申请所需要的全部资源,只要有一种资源不满足,则先等待

缺点:资源利用率低,进程延迟运行


摒弃不剥夺条件:当一个进程申请资源不满足时,释放自己拥有的所有资源,以后重新申请

缺点:复杂、代价大


摒弃环路等待条件:所有资源进行线性排队,赋予不同的序号,请求资源时,只能按照资源序号递增的次序提出

缺点:资源序号必须稳定、限制编程的简单性

 

6.死锁的检测与解除

资源分配图:圆圈代表进程,方框代表资源,方框中的点代表资源的数量
死锁定理:如果能将该资源分配图简化到所有的节点都是孤立节点,则说明不存在死锁,否则,存在死锁

死锁解除

剥掉资源:从其他进程剥夺资源,分配给死锁进程,使其打破死锁
撤销进程

撤销所有死锁进程
每次选择代价最小的进程进行撤销,直至死锁解除

posted @ 2018-12-07 21:13  panda~  阅读(258)  评论(0编辑  收藏  举报