Re: [理工] 作业系统

楼主: HiltonCool (野兽疯)   2014-07-21 02:21:20
※ 引述《poyao (嘎呗)》之铭言:
: 今天上洪逸的课时
: 讲到Hardware Instruction Support的第二个算法时
: 他说如果把算法中waiting[i]=False;删掉会如何?
: 在笔记里有说违反Progress<i><ii>
: 但是他说违反<i>是因为Pj离开C.S时会侦测到Pi想进入C.S
: 所以Pj会把改变waiting[i]为false而lock仍维持true
: 然而Pi不想进入C.S
: 已违背Progress<i>
: 但是我发现等Pj出了C.S后侦测到Pi时
: 不是有个判断if(j==i)lock=false;
: 所以这个地方应该是先把lock改为false
: 而不是把waiting[i]改为false
: 请问是老师讲错了?
: 还是有其他解释为何违反progress的方法?
当Pj出CS后,此时waiting[i]仍为True,所以Pj会认为Pi想进入CS
但此时Pi并不想进入CS,所以if条件并不会成立
(if(i==j) Lock=False;成立的条件简单来说就是i是否绕完一圈了
【情况一】waiting[i]==False
代表没有人想进入process,所以顺利绕完一圈,最后i会等于j
此时if条件成立,会执行Lock=False
注意:此情况不会发生,因为waiting[i]已被移除
【情况二】waiting[i]==True
代表Pi想进入CS,所以并不会绕完一圈,而此时的i并不等于j
所以if条件不成立,会执行waiting[i]=False
此时Pi被迫进入CS,造成其他人无法进入CS,形成deadlock)
注意:因为waiting[i]已被移除,所以只会发生此种情况
违反progress(i)的原因:
Pi并不想进入CS,但Pj(在RS)却参与进入CS之决策,强迫Pi进入CS
违反progress(ii)的原因:
因为【情况二】之发生,形成deadlock
希望有解决你的问题,有说明错误的地方再麻烦大家指证,感谢!
作者: poyao (嘎呗)   2014-07-21 19:08:00
原来是waiting[i]被移除囉~我懂了!谢谢你~~

Links booklink

Contact Us: admin [ a t ] ucptt.com