[理工] [OS] test-and-set

看板Grad-ProbAsk作者 (墨)時間9年前 (2014/12/24 21:07), 9年前編輯推噓4(4025)
留言29則, 5人參與, 最新討論串1/1
想問的是使用此指令在design criticl section時, 恐龍的部分程式碼如下, do{ waiting[i] = True; key = True; while ( waiting[i] && key ) key = TestAndSet(&lock); C.S. j = ( i+1 ) % n; while ( j != i && !waiting[j] ) j = ( j+1 ) % n; if ( j = = i ) lock = False; else waiting[j] = False; R.S }while(true); 第三行到第五行為何不能簡寫成如下呢? while(waiting[i] && TestAndSet(&lock)) do no-ip 不了解為什麼要用一個key去接他的值。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.111.134 ※ 文章網址: http://www.ptt.cc/bbs/Grad-ProbAsk/M.1419426459.A.260.html ※ 編輯: galapous (36.228.111.134), 12/24/2014 21:09:38 ※ 編輯: galapous (36.228.111.134), 12/24/2014 21:10:05

12/24 21:30, , 1F
為了讓人覺得有拿到 key?
12/24 21:30, 1F

12/25 03:34, , 2F
個人淺見不知道對不對
12/25 03:34, 2F

12/25 03:35, , 3F
while判斷時中呼叫副程式再傳回這樣花的時間比較久
12/25 03:35, 3F

12/25 03:36, , 4F
當有process卡在while中無法進入臨界區間就會一直
12/25 03:36, 4F

12/25 03:37, , 5F
call副程式,如果寫在while判斷後就可以避免此時間的
12/25 03:37, 5F

12/25 03:37, , 6F
浪費
12/25 03:37, 6F

12/25 03:44, , 7F
call副程式還有可能有搶資源的情形,能避免應該會是
12/25 03:44, 7F

12/25 03:44, , 8F
一大助益
12/25 03:44, 8F

12/25 09:17, , 9F
但照原本那樣寫也是每個while會call一次test-and-set不
12/25 09:17, 9F

12/25 09:17, , 10F
是嗎?
12/25 09:17, 10F

12/25 18:07, , 11F
這份Code在出口段的地方是不是有避免Starvation的動作?
12/25 18:07, 11F

12/25 18:07, , 12F
如果是的話,因為要做環狀的檢查,然後指定下一個進入
12/25 18:07, 12F

12/25 18:08, , 13F
C.S的Process,才會在入口段的地方加入這些條件
12/25 18:08, 13F

12/25 18:52, , 14F
出口有在沒process想進來時把lock設成false,完全沒動到
12/25 18:52, 14F

12/25 18:52, , 15F
key,所以才想說為啥不能省略掉
12/25 18:52, 15F

12/25 19:21, , 16F
就是說出口地方,會指定下一個進C.S的程式是誰,不改Key
12/25 19:21, 16F

12/25 19:22, , 17F
因為如果改到Key的話,會造成大家一起搶Key
12/25 19:22, 17F

12/25 19:22, , 18F
如果有一隻很衰一直搶不到,就違反Bounded-waiting了
12/25 19:22, 18F

12/25 19:28, , 19F
這樣可以在保持Key不變的狀況下,指定某隻程式接續執行
12/25 19:28, 19F

12/25 19:38, , 20F
kkk的解釋蠻好der , 受教惹 , 謝謝你
12/25 19:38, 20F

12/25 20:21, , 21F
如果多個process想進入的話下面是改waiting變成false
12/25 20:21, 21F

12/25 20:22, , 22F
假設現在process i從c.s.出來,那只有從i開始檢查一輪到
12/25 20:22, 22F

12/25 20:23, , 23F
process i-1都沒人想進去,才會改lock成false,這樣應該
12/25 20:23, 23F

12/25 20:24, , 24F
沒有bounded-waiting問題吧?因為沒人想進等於重新開始?
12/25 20:24, 24F

12/25 20:24, , 25F
還是我哪邊想錯了QQ
12/25 20:24, 25F
補上完整程式碼 ※ 編輯: galapous (36.228.111.134), 12/25/2014 20:31:20

12/25 20:32, , 26F
bounded waiting有錯是發生在入口,原先有key的寫法我
12/25 20:32, 26F

12/25 21:00, , 27F
更正 , 這份程式後半段和Peterson不同,我誤會惹
12/25 21:00, 27F

12/25 21:27, , 28F
我想我了解您的意思了,一下子沒有看清楚 不好意思
12/25 21:27, 28F

12/25 21:27, , 29F
而且我開始覺得您說得好像有點道理
12/25 21:27, 29F
文章代碼(AID): #1KchgR9W (Grad-ProbAsk)