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