[理工] [OS] 交大100

看板Grad-ProbAsk作者 (Eric)時間14年前 (2012/02/13 15:41), 編輯推噓9(9026)
留言35則, 5人參與, 最新討論串1/3 (看更多)
第二題 http://ppt.cc/Qh_J 答案c 我選a 想法是Q要等P呼叫x.signal才能跑 請高手解說orz graduate版有H大提供的這份 還沒碰的快去抓吧 monitor要炸啦啦啦orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.41.177

02/13 15:48, , 1F
你錯了他是要考你Hoare monitor 指是他把PQ對調
02/13 15:48, 1F

02/13 15:49, , 2F
跟恐龍講的相反 Q先前卡住 P救他所以是P Wait
02/13 15:49, 2F

02/13 15:49, , 3F
Q until Q exit or suspended again
02/13 15:49, 3F

02/13 15:50, , 4F
你可能要再去看看 用Semaphore作Monitor那段
02/13 15:50, 4F

02/13 15:58, , 5F
我講錯了0.0,她題目PQ跟恐龍的一樣 不過不影響
02/13 15:58, 5F

02/13 15:59, , 6F
他那個就是signal and wait 你講的有點文不對題
02/13 15:59, 6F

02/13 16:00, , 7F
P就已經呼叫 x.signal ,另外一種叫Signal and Continue
02/13 16:00, 7F

02/13 16:01, , 8F
Q wiat until P exit or another condition
02/13 16:01, 8F

02/13 16:06, , 9F
好謝謝 放棄/誤
02/13 16:06, 9F

02/13 16:16, , 10F
題目有說 P執行 X.signal()且Q suspended 按照題意去trace
02/13 16:16, 10F

02/13 16:18, , 11F
q suspend 是停在Wait(next)?
02/13 16:18, 11F

02/13 16:18, , 12F
由此可知 X_count > 0 而 "Q is suspended"表示Q執行了
02/13 16:18, 12F

02/13 16:19, , 13F
x.wait(), 而且是卡在wait(x_sem)
02/13 16:19, 13F

02/13 16:21, , 14F
這時P執行 X.signal() 執行到wait(next) 停下來(初始值=0)
02/13 16:21, 14F

02/13 16:22, , 15F
途中P有執行signal(x_sem) 因此Q被P救出來
02/13 16:22, 15F

02/13 16:22, , 16F
這時 就出現了兩個救P的分歧點
02/13 16:22, 16F

02/13 16:23, , 17F
嗯嗯 卸卸
02/13 16:23, 17F

02/13 16:24, , 18F
第一個程式碼 顯示說當process執行完時會去檢查next_count
02/13 16:24, 18F

02/13 16:24, , 19F
看來K大已經懂了 那就不用再打下去啦~
02/13 16:24, 19F

02/13 16:26, , 20F
其實我是覺得很奇怪這樣代表一定要先要有人等在那邊 然後
02/13 16:26, 20F

02/13 16:27, , 21F
有人執行x.signal()才能跑 ?
02/13 16:27, 21F

02/13 16:28, , 22F
所以x.signal就會出現兩種作用 1.沒人卡時無作用
02/13 16:28, 22F

02/13 16:28, , 23F
2.有人卡時去wakeup
02/13 16:28, 23F

02/13 16:30, , 24F
那只有一個人時 不就一直停在那..這樣就starvation?
02/13 16:30, 24F

02/13 16:38, , 25F
嗯 只能等到有人來救它 但通常是多個process才會考慮同步
02/13 16:38, 25F

02/13 16:38, , 26F
相信總有一天它會被喚醒的~
02/13 16:38, 26F

02/13 16:39, , 27F
K大是說Q被卡死嗎? 這邊應該是程式設計的目的吧?
02/13 16:39, 27F

02/13 16:41, , 28F
目前理解condition是用來控制operation順序 是這樣嗎?
02/13 16:41, 28F

02/13 16:41, , 29F
就像sem中 A最後call signal B一開始call wait
02/13 16:41, 29F

02/13 16:42, , 30F
讓A必優先於B 是這樣嗎?
02/13 16:42, 30F

02/13 16:48, , 31F
所以當你sem設定初值為0 通常就是希望使用它的process要等
02/13 16:48, 31F

02/13 16:48, , 32F
等某一個process執行了signal此sem 才能夠執行下去
02/13 16:48, 32F

02/13 16:48, , 33F
此時就有了順序之分
02/13 16:48, 33F

02/13 16:49, , 34F
感謝 原本以為這邊可以放的orz
02/13 16:49, 34F

09/11 14:55, , 35F
Q until Q e https://daxiv.com
09/11 14:55, 35F
文章代碼(AID): #1FEBwgA0 (Grad-ProbAsk)
文章代碼(AID): #1FEBwgA0 (Grad-ProbAsk)