[理工] OS Disable interrupt

看板Grad-ProbAsk作者時間8年前 (2017/11/12 11:47), 8年前編輯推噓8(8036)
留言44則, 6人參與, 8年前最新討論串1/1
想請教各位大大們 小弟在讀 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

11/12 12:00, 8年前 , 1F
這邊我之前也有相同疑問
11/12 12:00, 1F

11/12 12:09, 8年前 , 2F
我自己覺得這邊是有bug
11/12 12:09, 2F

11/12 12:11, 8年前 , 3F
上網查有一個實作的方法是 CPU1 會lock memory bus 不讓 CP
11/12 12:11, 3F

11/12 12:11, 8年前 , 4F
U2 去讀寫
11/12 12:11, 4F
所以就把Disable Interrupt 直接當作 關閉其他Process對共享變數存取 且 不被其他Process Preempted 就好了嗎 XD ※ 編輯: jerry900287 (111.243.94.96), 11/12/2017 12:19:58

11/12 12:29, 8年前 , 5F
基本上上課沒講都預設單處理器做討論的樣子
11/12 12:29, 5F

11/12 12:30, 8年前 , 6F
多核多處理器可能不能講得這麼簡單因
11/12 12:30, 6F

11/12 12:31, 8年前 , 7F
因為還有cache還有TLB要做同步,就會變成另一個大課題
11/12 12:31, 7F

11/12 12:33, 8年前 , 8F
至少你lock bus但別顆處理器有它自己的cache你也要想
11/12 12:33, 8F

11/12 12:34, 8年前 , 9F
辦法讓他不能對再cache的共享變數做存取
11/12 12:34, 9F

11/12 12:34, 8年前 , 10F
Disable interrupt是走硬體控制 跟變數存取沒有直接關係
11/12 12:34, 10F

11/12 12:37, 8年前 , 11F
可是現在有很多顆cpu你關掉了還是會同時有多個在run
11/12 12:37, 11F

11/12 12:38, 8年前 , 12F
只是單核心就只會有一個在run所以關掉中斷可以很簡單
11/12 12:38, 12F

11/12 12:38, 8年前 , 13F
的解決共享變數存取的問題
11/12 12:38, 13F

11/12 12:40, 8年前 , 14F
不過我記得課本有提到多處理器不太適合用disable interrupt
11/12 12:40, 14F

11/12 12:41, 8年前 , 15F
因為就像我講的你會讓你的每個cpu都有諸多的限制
11/12 12:41, 15F

11/12 12:41, 8年前 , 16F
多處理器要關就要全關...然後users就可開轟趴了哈哈
11/12 12:41, 16F

11/12 12:43, 8年前 , 17F
單純的關掉所有cpu中斷不能解決歐
11/12 12:43, 17F

11/12 12:44, 8年前 , 18F
會存取共享變數的程式還是同時在執行中
11/12 12:44, 18F

11/12 12:44, 8年前 , 19F
只要其他顆上的process不參與到那個共享變數就可以吧
11/12 12:44, 19F

11/12 12:44, 8年前 , 20F
沒問題的把cpu都power down就可以解決了XD
11/12 12:44, 20F

11/12 12:45, 8年前 , 21F
可是你不知道別顆cpu上的process會不會存取壓
11/12 12:45, 21F

11/12 12:46, 8年前 , 22F
都可以把別顆CPU的中斷關掉了知道這點應該不難哈哈哈
11/12 12:46, 22F

11/12 12:46, 8年前 , 23F
把中斷關掉他們還是可以讀memory的押
11/12 12:46, 23F

11/12 12:47, 8年前 , 24F
想法同t大 基本上要轉成類似單核的模式disable才有用
11/12 12:47, 24F

11/12 12:48, 8年前 , 25F
對呀所以要lock住data bus
11/12 12:48, 25F

11/12 12:48, 8年前 , 26F
我的意思是確保其他顆上process沒參與這個變數就可以啦
11/12 12:48, 26F

11/12 12:48, 8年前 , 27F
把bus lock住了你整個系統就真的是什麼都不能做了XD
11/12 12:48, 27F

11/12 12:49, 8年前 , 28F
要怎麼確保 啊如果有參與的話怎麼辦
11/12 12:49, 28F

11/12 12:50, 8年前 , 29F
基本上除了把其他cpu關掉跟鎖bus無法確保吧
11/12 12:50, 29F

11/12 12:50, 8年前 , 30F
把別人的PCB抓出來看 但討論這個也太沒意義XD
11/12 12:50, 30F

11/12 12:50, 8年前 , 31F
明明就有很棒的cs設計為什麼我們要執著在關掉中斷呢XD
11/12 12:50, 31F

11/12 12:52, 8年前 , 32F
我只是覺得 n 大的方法比關cpu還複雜XD
11/12 12:52, 32F

11/12 12:53, 8年前 , 33F
當然啊哈哈 只是幫這個方法找個藉口說他堪用
11/12 12:53, 33F

11/12 12:53, 8年前 , 34F
通常越簡單的方法效率越低XD
11/12 12:53, 34F

11/12 12:53, 8年前 , 35F
連Kernel都幾乎捨棄的方法只能幫他QQ
11/12 12:53, 35F
OK!! 那我大概知道了XD 只是想說洪毅這塊講這麼順 都沒有提及關於這些的討論 害我念的心理不安 總之 感謝尼們QQ! ※ 編輯: jerry900287 (111.243.94.96), 11/12/2017 12:55:47

11/12 12:57, 8年前 , 36F
弘毅優點是都講很順 不過有些都會有小bug
11/12 12:57, 36F

11/12 12:59, 8年前 , 37F
是沒麼小bug拉跟他的書比起來xd
11/12 12:59, 37F

11/12 13:01, 8年前 , 38F
OS課本的背面最扯
11/12 13:01, 38F

11/12 13:37, 8年前 , 39F
無法OS就是個理論性質的學科 拿到實際面本來就很多bug 舉
11/12 13:37, 39F

11/12 13:37, 8年前 , 40F
個例子 實際上是沒有kernel thread這種東西的
11/12 13:37, 40F

11/12 16:00, 8年前 , 41F
我記得洪逸上課不是有說多處理器不適合嗎,所以才接後
11/12 16:00, 41F

11/12 16:00, 8年前 , 42F
面的臨界區間設計...
11/12 16:00, 42F

11/22 19:15, 8年前 , 43F
多處理器一般會在cpu上多一個port叫bus lock
11/22 19:15, 43F

11/22 19:16, 8年前 , 44F
誰先搶到會先鎖住bus然後就可以安心disable自己的interrup
11/22 19:16, 44F
文章代碼(AID): #1Q1yGwG7 (Grad-ProbAsk)