看板 Grad-ProbAsk 關於我們 聯絡資訊
Hi 想請問一下 當初洪逸在教 號誌製作 的時候 non-busy 配 cs design,是直接用 entry section & exit section 帶過 後面提到 "busy waiting 是否可以完全避免" , 直接說 entry section 存在 busy waiting 但不是 entry section 也可以使用 sys call 製作嗎? 還是老師當時有什麼特別的解釋@@ 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.138.233.98 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1474879556.A.F6F.html
hopward: 他有說雖然用disable interrupt製作可避免,但不適合用在 09/26 20:38
hopward: microprocessor system,且風險高,因此很多系統將它設為 09/26 20:38
hopward: 特權指令 09/26 20:38
可是,他不是用 block 及 wakeup(這個不確定) 的 sys. call 製作嗎? 應該不是 disable interrupt 的指令
BoSiANg: 我怎麼也記得是"Disable Interrupt"跟"Enable Interupt" 09/27 00:19
筆記支援: http://imgur.com/a/J9Phf 我記得 CS Design 就是拿來取代 interrupt 的 solution? 應該不會 CS Design 裡的 entry section 反而用 interrupt 去弄吧
BoSiANg: 可是他在教如何設計Entry Sec.時只有講SW和HW的方法吧? 09/27 00:39
SW 和 HW 好像都是拿來做 busy waiting 的方法?
ken52011219: 皆可吧@@ 恐龍本上都有提到 09/27 00:44
請問你指哪裡皆可呢 ※ 編輯: kyuudonut (220.132.251.85), 09/27/2016 00:50:01
ken52011219: 突然想起差別了 09/27 00:49
ken52011219: Wakeup() block() 這兩個指令是當 signal(S) 大於s w 09/27 00:50
ken52011219: ait(S) 小於s使用 09/27 00:50
ken52011219: http://i.imgur.com/zk3qgMN.jpg 09/27 00:53
ken52011219: http://i.imgur.com/56bYZqT.jpg 09/27 00:55
ken52011219: 而disable interrupt &busy waiting 則是使用 Mutex 09/27 00:57
ken52011219: Lock時的選擇作法而已 09/27 00:57
這邊我想要整理一下 自己也一直搞混 這邊的問題應該分為 (1) semaphore 的 wait 及 signal 的製作方式 (2) semaphore值 的互斥控制 其中 (1) 就是你貼的圖(筆記也有),他透過這兩個 sys call 去實作 wait 及 signal (non-busy waiting),也可以透過 busy waiting 的方式去做。 (2) 就是單純的互斥控制,可以透過 disable interrupt 及 CS Design 去實作 其中 CS Design 可以有 busy waiting 及 non-busy waiting。 打到這邊,不知道我的理解有沒有問題? 而我這篇主要的問題點是 (2) 因為洪逸自己上 CS design 時就有提到 non-busy waiting 的實作方法
ken52011219: 簡單來說 它們皆是解決同步問題的tool 但是是不一樣 09/27 00:59
ken52011219: 的東西 09/27 00:59
ken52011219: 恐龍本反而沒提起利用interrupt 去實作 semaphore 09/27 01:02
ken52011219: 而是利用 block and wakeup去實作 09/27 01:02
ken52011219: 個人想法是因為 interrupt Cost太高了 反而直接用這 09/27 01:04
ken52011219: 兩個sys call 比較好 09/27 01:04
※ 編輯: kyuudonut (220.132.251.85), 09/27/2016 01:06:21
ken52011219: 重新整理一下我的思緒 首先在Semaphore 的wait() 09/27 01:13
ken52011219: 中 busy waiting 就是指S-- 這點能接受了話 09/27 01:13
BoSiANg: http://i.imgur.com/faXrdVP.jpg 09/27 01:17
BoSiANg: 洪逸那邊會說無法避免應該是因為它前面的幾個Algo.是定義 09/27 01:17
BoSiANg: 在用SW及HW製作上,但若用block,wakeup sys. call 09/27 01:17
BoSiANg: 事實上是可以避免的。 09/27 01:17
BoSiANg: 是這樣嗎? 09/27 01:17
我覺得有可能是這樣
ken52011219: http://i.imgur.com/hMO5akB.jpg 突然好像不太懂你 09/27 01:20
ken52011219: 的問題 以筆記上表達應該是這個意思吧 09/27 01:20
是指我嗎? @@
aa06697: 一樓說的應該是multiprocessor吧?microprocessor 有可 09/27 09:29
aa06697: 能是single core 用disable interrupt就沒什麼問題 09/27 09:29
aa06697: (還是我記錯了 手邊沒筆記) 09/27 09:36
應該是筆誤,會有問題的是 multiprocessor 沒錯 ※ 編輯: kyuudonut (220.132.251.85), 09/27/2016 11:06:51