操作系统--课堂问答笔记13--习题答案

课堂笔记学习视频来自 操作系统
说明:其他”课堂问答笔记“也在”操作系统“专栏

【3-2、3-3】

  1. 最早截止时间调度算法分为最早开始截止时间调度算法和最早完成截止时间调度算法,如何区分什么时候使用哪种算法?
    答:看任务对截止时间的要求,有些任务要保证不迟于某个时刻开始,有些任务要保证必须在某个时刻之前完成;特别地,如果是周期性任务,那么必须保证在下一个相同的任务到达之前完成,因此有最早完成截止时间的要求要使用最早完成截止时间调度算法。另外,在使用最早截止时间调度算法时还要保证对任何任务的调度执行都不会“错过”!例如:视频中的示例,系统中有两类周期性任务A(20ms/10ms)和B(50ms/25ms),试用最早完成截止时间调度算法进行调度,会发生什么情况?
    在这里插入图片描述
    此时的调度顺序:A1B1A2…将导致A2错过,因为:A1完成在10ms,此时A2未到(20ms才到),cpu不能空闲等待,所以执行B1,执行B1到35ms结束,A2已经到达了,可以执行,到45ms完成,但其必须40ms完成,因为这时A3已经到达,因此“错过”。
  2. 何种情况下需要使用抢占式调度算法?松弛度的定义及对其含义的理解?
    答:当使用最早截止时间调度算法进行进程调度时,可能会“错过”某些任务的调度执行,那么必须改用抢占式调度算法。
    某个任务(进程)的松弛度=该任务(进程)的完成截止时间-当前时间-还需要处理机执行的时间,通过其定义可知,当松弛度越小,表示当前该任务(进程)距离其完成截止时刻越接近,也就代表当前时刻该任务(进程)越紧迫,当其值为0时,已经到了刻不容缓的地步(若不马上开始执行,则必然“错过”),因此,最低松弛度优先调度算法也是一种基于动态优先权的调度算法(松弛度就是变化的优先权,并且其值越小越优先,回忆一下高响应比优先调度算法:响应比值越高越优先)
  3. 产生死锁的原因有哪些?资源分配图的意义?产生死锁的必要条件?
    答:请看现实生活中的一个死锁的例子:
    在这里插入图片描述
    产生死锁的原因:1)竞争有限的共享资源2)进程推进顺序不当。想象一下过独木桥理解视频中进程推进不当的例子。
    在这里插入图片描述
    过独木桥是可以过的,只要有一个人让一下就行(让别人先走),但大家都在桥中间,都不让(互相占用对方申请的资源,且在得到新的资源之前不放弃已占用的资源)就死锁了。这就是图中4的情况,因此大家都让一让,这个世界才会变得和谐!!
    1、3的情况,先让P1走完,然后P2再走;3的情况是当P2想走时发现P1占有了资源,因此它选择先等待。
    2的情况,先让P2走完,然后P1再走。
    4的情况,P2首先执行,但一开始并未申请资源,然后P1执行也未申请资源…,直到P1申请并占有资源R1,然后P2接着申请并占有R2,但接下来任何一个进程都无法推进,例如:如果接下了P1走,那么它紧接着要申请R2,但目前P2占有R2,因此P1要等待;若是接下了P2走,那么它紧接着要申请R1,但目前P1占有R1,因此P2要等待,这样就导致P1和P2都在等待对方占有的资源,但在得到资源之前不会释放自己占有的资源,系统陷入死锁,无法走出D区域,D区域也叫死锁区!
    注意视频中的图有点错误,是不可能进入蓝框区域的(想象一下为什么?)
    在这里插入图片描述
    资源分配图描述了资源分配给进程和进程申请使用资源的情况,注意这是某个时刻的状态图,随着进程的推进,资源分配图会动态变化,其也是用来判断当前时刻是否发生死锁的工具。
    死锁产生的四个必要条件(这个要牢记)
    1)互斥条件:资源是独占的且排它使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。
    2)不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放(即必须自己放手强抢无效)。
    3)请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源(即得不到新的就不放手旧的)。
    4)循环等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请,也就是前一个进程占有后一个进程所深情地资源(即都等着别人先放手但自己却不自动放手)。
    四个必要条件,只要系统发生死锁则以上四个条件至少有一个成立。
  4. 如何利用资源分配图判断当前时刻是否发生死锁?
    答:首先要找到一个“活”进程(比如进程P1,其当前请求的所有资源都足够满足P1的需求(即其请求的所有资源都空闲),则P1是“活”进程)化简资源分配图:把所有与“活”进程关联的边(含请求边和分配边)都去掉,再重复刚才的步骤(再找下一个“活”进程并去掉与之关联的边),直至所有的进程和资源都成为孤立的点,则无死锁发生,否则发生死锁。
    分析一下,下图表示的系统的某一个时刻是否发生死锁?(实际题目可能并不按颜色区分请求边和分配边)
    在这里插入图片描述
    看黑色的边(请求边:表申请资源或请求使用共享数据),红色(分配边)表占用资源或产生共享数据,判断活进程看申请,即黑色的边,p1和p2都是活进程,任取一个都可以(依据是:当前共有3个R1已被分配给P1和P2各一个,共有2个R2已被分配给P2一个,现在P1申请一个R1和一个R2,正好可以满足其要求。分析P2也可以得到相同结论)。
    若取P1,把所有与P1关联的边都去掉。再重复刚才的步骤,将使得所有的进程和资源都成为孤立的点,所以当前时刻是没有死锁的!化简过程如下:
    在这里插入图片描述
发布了94 篇原创文章 · 获赞 40 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_46218781/article/details/105271737