[爆卦]disable意思是什麼?優點缺點精華區懶人包

為什麼這篇disable意思鄉民發文收入到精華區:因為在disable意思這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者jerry900287 ()看板Grad-ProbAsk標題[理工] OS Disable in...


想請教各位大大們

小弟在讀 OS "Race Condition" Problem 的時候

針對兩大策略 Disable Interrupt 和 Critical Section Design

的 Disable Interrupt 有個疑問

---------------------------------------------------------=

假設說 今天有兩顆CPU

CPU1 做 Process1
CPU2 做 Process2

而 Process1 和 Process2 都有個作共用變數 S 之存取

------------------------------------------------------------

那麼現在 Process1 以及 Process2 都已經進入CPU

而 Process1 比 Process2 先作 S 之存取

因此 Disable Interrupt

可是 Disable Interrupt 不是只是關掉 CPU 中斷而已嗎?

根據洪毅的筆記
它是確保Process在存取共享變數期間
CPU不被其他Process Preempted

那怎麼防止已經進入 CPU2 的 Process2 去存取 S 呢 ?



謝謝!!

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.243.94.96
※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1510458426.A.407.html
※ 編輯: jerry900287 (111.243.94.96), 11/12/2017 11:49:51
can18: 這邊我之前也有相同疑問 11/12 12:00
can18: 我自己覺得這邊是有bug 11/12 12:09
can18: 上網查有一個實作的方法是 CPU1 會lock memory bus 不讓 CP 11/12 12:11
can18: U2 去讀寫 11/12 12:11
所以就把Disable Interrupt 直接當作
關閉其他Process對共享變數存取 且 不被其他Process Preempted
就好了嗎 XD
※ 編輯: jerry900287 (111.243.94.96), 11/12/2017 12:19:58
TMDTMD2487: 基本上上課沒講都預設單處理器做討論的樣子 11/12 12:29
TMDTMD2487: 多核多處理器可能不能講得這麼簡單因 11/12 12:30
TMDTMD2487: 因為還有cache還有TLB要做同步,就會變成另一個大課題 11/12 12:31
TMDTMD2487: 至少你lock bus但別顆處理器有它自己的cache你也要想 11/12 12:33
TMDTMD2487: 辦法讓他不能對再cache的共享變數做存取 11/12 12:34
nat99up: Disable interrupt是走硬體控制 跟變數存取沒有直接關係 11/12 12:34
TMDTMD2487: 可是現在有很多顆cpu你關掉了還是會同時有多個在run 11/12 12:37
TMDTMD2487: 只是單核心就只會有一個在run所以關掉中斷可以很簡單 11/12 12:38
TMDTMD2487: 的解決共享變數存取的問題 11/12 12:38
can18: 不過我記得課本有提到多處理器不太適合用disable interrupt 11/12 12:40
TMDTMD2487: 因為就像我講的你會讓你的每個cpu都有諸多的限制 11/12 12:41
nat99up: 多處理器要關就要全關...然後users就可開轟趴了哈哈 11/12 12:41
TMDTMD2487: 單純的關掉所有cpu中斷不能解決歐 11/12 12:43
TMDTMD2487: 會存取共享變數的程式還是同時在執行中 11/12 12:44
nat99up: 只要其他顆上的process不參與到那個共享變數就可以吧 11/12 12:44
TMDTMD2487: 沒問題的把cpu都power down就可以解決了XD 11/12 12:44
TMDTMD2487: 可是你不知道別顆cpu上的process會不會存取壓 11/12 12:45
nat99up: 都可以把別顆CPU的中斷關掉了知道這點應該不難哈哈哈 11/12 12:46
TMDTMD2487: 把中斷關掉他們還是可以讀memory的押 11/12 12:46
can18: 想法同t大 基本上要轉成類似單核的模式disable才有用 11/12 12:47
TMDTMD2487: 對呀所以要lock住data bus 11/12 12:48
nat99up: 我的意思是確保其他顆上process沒參與這個變數就可以啦 11/12 12:48
TMDTMD2487: 把bus lock住了你整個系統就真的是什麼都不能做了XD 11/12 12:48
can18: 要怎麼確保 啊如果有參與的話怎麼辦 11/12 12:49
can18: 基本上除了把其他cpu關掉跟鎖bus無法確保吧 11/12 12:50
nat99up: 把別人的PCB抓出來看 但討論這個也太沒意義XD 11/12 12:50
TMDTMD2487: 明明就有很棒的cs設計為什麼我們要執著在關掉中斷呢XD 11/12 12:50
can18: 我只是覺得 n 大的方法比關cpu還複雜XD 11/12 12:52
nat99up: 當然啊哈哈 只是幫這個方法找個藉口說他堪用 11/12 12:53
TMDTMD2487: 通常越簡單的方法效率越低XD 11/12 12:53
nat99up: 連Kernel都幾乎捨棄的方法只能幫他QQ 11/12 12:53
OK!! 那我大概知道了XD
只是想說洪毅這塊講這麼順 都沒有提及關於這些的討論
害我念的心理不安

總之 感謝尼們QQ!
※ 編輯: jerry900287 (111.243.94.96), 11/12/2017 12:55:47
can18: 弘毅優點是都講很順 不過有些都會有小bug 11/12 12:57
TMDTMD2487: 是沒麼小bug拉跟他的書比起來xd 11/12 12:59
nat99up: OS課本的背面最扯 11/12 13:01
leoone: 無法OS就是個理論性質的學科 拿到實際面本來就很多bug 舉 11/12 13:37
leoone: 個例子 實際上是沒有kernel thread這種東西的 11/12 13:37
shownlin: 我記得洪逸上課不是有說多處理器不適合嗎,所以才接後 11/12 16:00
shownlin: 面的臨界區間設計... 11/12 16:00
TWkobe: 多處理器一般會在cpu上多一個port叫bus lock 11/22 19:15
TWkobe: 誰先搶到會先鎖住bus然後就可以安心disable自己的interrup 11/22 19:16

你可能也想看看

搜尋相關網站