[理工] 想問一個OS的觀念問題(C.S. Design)

看板Grad-ProbAsk作者 (白影弓)時間6年前 (2019/04/25 01:40), 6年前編輯推噓7(7020)
留言27則, 3人參與, 6年前最新討論串1/1
想問一下 不管是原文書或洪逸筆記 都說: 在多處理器系統下採用Diasble/Enable Interrupt方法, 只要Disable all CPU’s Interrupt 就可解決C.S. Problem,(但會造成系統產能低落 ) 但我覺得就算Disable all CPU’s interrupt了, 感覺還是不能防止在不同CPU上執行的process/thread去同樣的C.S.執行,進而違反mutua l exclusion,無法解決C.S. Problem, 在這部分想請教是我的觀念有誤嗎?感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.206.150 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1556127612.A.39E.html ※ 編輯: gash55025502 (180.217.206.150), 04/25/2019 01:42:39

04/25 10:18, 6年前 , 1F
你說的沒錯 課本這說法很有問題 假設c.s問題最低要求是
04/25 10:18, 1F

04/25 10:21, 6年前 , 2F
只要自增自減某個變數 那用atomic instr和disable interr
04/25 10:21, 2F

04/25 10:21, 6年前 , 3F
upt有機會做到
04/25 10:21, 3F

04/25 10:24, 6年前 , 4F
更別說要扯到亂序、mem、cache的影響 我猜課本是理想的假
04/25 10:24, 4F

04/25 10:24, 6年前 , 5F
04/25 10:24, 5F

04/25 10:40, 6年前 , 6F
一般而言單核會使用interrupt disable + preemtion
04/25 10:40, 6F

04/25 10:40, 6年前 , 7F
disable
04/25 10:40, 7F
想請問一下:Interrupt disable跟Preemption disable有什麼差別嗎?preempt別人不是 就要先Interrupt嗎

04/25 10:41, 6年前 , 8F
然而你說的沒有錯除非你綁定在同一顆cpu不然沒有用
04/25 10:41, 8F

04/25 10:42, 6年前 , 9F
至於out of order/ cache,TLB flush 的問題在hardware
04/25 10:42, 9F

04/25 10:42, 6年前 , 10F
會解決掉
04/25 10:42, 10F

04/25 10:43, 6年前 , 11F
另外值得注意的事情是補習班不會跟你說的,所謂的spin
04/25 10:43, 11F

04/25 10:44, 6年前 , 12F
lock 本身會帶有disable preemtion的效果
04/25 10:44, 12F

04/25 10:44, 6年前 , 13F
所以spinlock裡面不能sleep,而且在單核的狀態下spinl
04/25 10:44, 13F

04/25 10:45, 6年前 , 14F
ock也純粹只是disable preemtion
04/25 10:45, 14F

04/25 10:46, 6年前 , 15F
然後我發現一直把preemption打錯字XD
04/25 10:46, 15F

04/25 10:52, 6年前 , 16F
樓上說的沒錯 至於爲什麼spinlock 不能sleep 考量有二:
04/25 10:52, 16F

04/25 10:52, 6年前 , 17F
第一 要是睡了就沒人能取回了 第二 spinlock就是要快 要
04/25 10:52, 17F

04/25 10:52, 6年前 , 18F
睡處理時間長請改用semaphore
04/25 10:52, 18F
原來如此!小弟受益良多XD,謝謝兩位的回答!

04/25 10:59, 6年前 , 19F
04/25 10:59, 19F
※ 編輯: gash55025502 (180.217.206.150), 04/25/2019 12:17:19

04/25 12:39, 6年前 , 20F
preemption是指能不能去做task switch
04/25 12:39, 20F

04/25 12:42, 6年前 , 21F
timer可以發interrupt近來然後cpu跳去處理interrupt
04/25 12:42, 21F

04/25 12:43, 6年前 , 22F
routine,但如果結束時去call sched,會因為preemptio
04/25 12:43, 22F

04/25 12:44, 6年前 , 23F
n關掉,所以sched繼續回去執行原本的task
04/25 12:44, 23F

04/25 12:45, 6年前 , 24F
disable interrupt跟disable preemption是不一樣的事
04/25 12:45, 24F

04/25 12:48, 6年前 , 25F
另外一點是spin lock通常是kernel implement在用的
04/25 12:48, 25F

04/25 13:16, 6年前 , 26F
補充一下 spinlock 本來是kernel structure不適合直接用
04/25 13:16, 26F

04/25 13:16, 6年前 , 27F
在 user space , user space請用pthread spinlock
04/25 13:16, 27F
文章代碼(AID): #1Sm9zyEU (Grad-ProbAsk)