[理工] [OS] non-busy waiting semaphore

看板Grad-ProbAsk作者 (善良老百姓)時間7年前 (2016/09/26 16:45), 7年前編輯推噓10(10021)
留言31則, 4人參與, 最新討論串1/1
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

09/26 20:38, , 1F
他有說雖然用disable interrupt製作可避免,但不適合用在
09/26 20:38, 1F

09/26 20:38, , 2F
microprocessor system,且風險高,因此很多系統將它設為
09/26 20:38, 2F

09/26 20:38, , 3F
特權指令
09/26 20:38, 3F
可是,他不是用 block 及 wakeup(這個不確定) 的 sys. call 製作嗎? 應該不是 disable interrupt 的指令

09/27 00:19, , 4F
我怎麼也記得是"Disable Interrupt"跟"Enable Interupt"
09/27 00:19, 4F
筆記支援: http://imgur.com/a/J9Phf 我記得 CS Design 就是拿來取代 interrupt 的 solution? 應該不會 CS Design 裡的 entry section 反而用 interrupt 去弄吧

09/27 00:39, , 5F
可是他在教如何設計Entry Sec.時只有講SW和HW的方法吧?
09/27 00:39, 5F
SW 和 HW 好像都是拿來做 busy waiting 的方法?

09/27 00:44, , 6F
皆可吧@@ 恐龍本上都有提到
09/27 00:44, 6F
請問你指哪裡皆可呢 ※ 編輯: kyuudonut (220.132.251.85), 09/27/2016 00:50:01

09/27 00:49, , 7F
突然想起差別了
09/27 00:49, 7F

09/27 00:50, , 8F
Wakeup() block() 這兩個指令是當 signal(S) 大於s w
09/27 00:50, 8F

09/27 00:50, , 9F
ait(S) 小於s使用
09/27 00:50, 9F

09/27 00:53, , 10F

09/27 00:55, , 11F

09/27 00:57, , 12F
而disable interrupt &busy waiting 則是使用 Mutex
09/27 00:57, 12F

09/27 00:57, , 13F
Lock時的選擇作法而已
09/27 00:57, 13F
這邊我想要整理一下 自己也一直搞混 這邊的問題應該分為 (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 的實作方法

09/27 00:59, , 14F
簡單來說 它們皆是解決同步問題的tool 但是是不一樣
09/27 00:59, 14F

09/27 00:59, , 15F
的東西
09/27 00:59, 15F

09/27 01:02, , 16F
恐龍本反而沒提起利用interrupt 去實作 semaphore
09/27 01:02, 16F

09/27 01:02, , 17F
而是利用 block and wakeup去實作
09/27 01:02, 17F

09/27 01:04, , 18F
個人想法是因為 interrupt Cost太高了 反而直接用這
09/27 01:04, 18F

09/27 01:04, , 19F
兩個sys call 比較好
09/27 01:04, 19F
※ 編輯: kyuudonut (220.132.251.85), 09/27/2016 01:06:21

09/27 01:13, , 20F
重新整理一下我的思緒 首先在Semaphore 的wait()
09/27 01:13, 20F

09/27 01:13, , 21F
中 busy waiting 就是指S-- 這點能接受了話
09/27 01:13, 21F

09/27 01:17, , 22F

09/27 01:17, , 23F
洪逸那邊會說無法避免應該是因為它前面的幾個Algo.是定義
09/27 01:17, 23F

09/27 01:17, , 24F
在用SW及HW製作上,但若用block,wakeup sys. call
09/27 01:17, 24F

09/27 01:17, , 25F
事實上是可以避免的。
09/27 01:17, 25F

09/27 01:17, , 26F
是這樣嗎?
09/27 01:17, 26F
我覺得有可能是這樣

09/27 01:20, , 27F
突然好像不太懂你
09/27 01:20, 27F

09/27 01:20, , 28F
的問題 以筆記上表達應該是這個意思吧
09/27 01:20, 28F
是指我嗎? @@

09/27 09:29, , 29F
一樓說的應該是multiprocessor吧?microprocessor 有可
09/27 09:29, 29F

09/27 09:29, , 30F
能是single core 用disable interrupt就沒什麼問題
09/27 09:29, 30F

09/27 09:36, , 31F
(還是我記錯了 手邊沒筆記)
09/27 09:36, 31F
應該是筆誤,會有問題的是 multiprocessor 沒錯 ※ 編輯: kyuudonut (220.132.251.85), 09/27/2016 11:06:51
文章代碼(AID): #1NwE14zl (Grad-ProbAsk)