作者nypgand1 (祈附‧征前御祭)
看板Grad-ProbAsk
標題Re: [理工] [OS] - critical section problem
時間Sat Aug 21 13:51:35 2010
※ 引述《chris750630 (goodness)》之銘言:
: ※ 引述《nypgand1 (祈附‧征前御祭)》之銘言:
: : var flag: array[0..1] of Boolean; (initailly false)
: : turn: 0..1; (initailly 1)
: : The following program is for process Pi (i = 0 or 1),
: : with Pj (j = 1 or 0) being the other process
: : repeat
: : flag[i]:=ture;
: : while turn < > i
: : do begin
: : while flag[j] do no-op;
: : turn:=i;
: : end
: : //critical section
: : flag[i]:=false;
: : //remainder section
: : until fasle;
: : 類似像這樣給code然後要求證明
: : mutual exclusive、progress、bounded waiting
: ME 有 因為有turn的存在 導致進入CS唯一
: progress 無 若turn=j 則Pi要進CS要等Pj進去後才能進
: BW 無 原因同上 Pj若不進去的話 就無窮等待啦
解答只寫了一行說違背mutual exclusion
沒有說另外兩個有沒有符合
這是台大電機的題目沒有寫年份
progress我猜有
bounded waiting我也是猜沒有
可是原因跟c大的好像有點不一樣
想問一下c大或是其他神人
1.progress那邊 Pj只要不是在remainder section 好像會卡住Pi也沒關係耶
2.bounded waiting那邊 我記得無窮等待是指等待process的"個數"
好像不是指等待的"時間" 所以我猜跟Pj進不進去無關
我是想到一種情況是Pi被卡在while flag[j] do no-op;
Pj離開CS並set flag[j]=false後 CPU沒有換Pj作
而是做完RS又從頭要求了一次進入CS 這期間一直都是turn==i沒有變
所以Pi又進去了CS 一直這樣下去可能Pj等Pi無窮多次
3.starvation分成兩種
(1)可能"全部人"都進不去
(2)可能"某些人"都進不去(像前例)
我想問說如果發現了code會造成上面其中一種情況
有一定可以推到說那三個條件之中哪些一定合或不合嗎
4.progress的定義中有提到the selection cannot be postponed indefinitely
這邊的無限延遲是跟bounded waiting一樣指等待process"個數"? 還是指時間?
(如果是"時間"的話 "全部人"starvation就一定違背progress了)
這類題目真的好難
太多可能的情況 要想很久
希望有神人能分享判斷的技巧
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.126.34
※ 編輯: nypgand1 來自: 61.230.126.34 (08/21 13:53)
推 christianSK:bound wait應該是說至多等待n-1次就可以進入 08/21 15:12
→ christianSK:滿足這個條件自然就不會餓死 我想應該是有的 08/21 15:13
推 chris750630:其實吃飯時想想 我解錯了 XDD 08/21 15:24
→ nypgand1:那如果是先看出來了starvation要推到那三個條件呢? 08/21 15:28