[理工] OS Disable interrupt

作者: jerry900287 (滷蛋)   2017-11-12 11:47:02
想請教各位大大們
小弟在讀 OS "Race Condition" Problem 的時候
針對兩大策略 Disable Interrupt 和 Critical Section Design
的 Disable Interrupt 有個疑問
作者: can18 (18號)   2017-11-12 12:00:00
這邊我之前也有相同疑問我自己覺得這邊是有bug上網查有一個實作的方法是 CPU1 會lock memory bus 不讓 CPU2 去讀寫
作者: TMDTMD2487 (ㄚ冰)   2017-11-12 12:29:00
基本上上課沒講都預設單處理器做討論的樣子多核多處理器可能不能講得這麼簡單因因為還有cache還有TLB要做同步,就會變成另一個大課題至少你lock bus但別顆處理器有它自己的cache你也要想辦法讓他不能對再cache的共享變數做存取
作者: nat99up (NAt)   2017-11-12 12:34:00
Disable interrupt是走硬體控制 跟變數存取沒有直接關係
作者: TMDTMD2487 (ㄚ冰)   2017-11-12 12:37:00
可是現在有很多顆cpu你關掉了還是會同時有多個在run只是單核心就只會有一個在run所以關掉中斷可以很簡單的解決共享變數存取的問題
作者: can18 (18號)   2017-11-12 12:40:00
不過我記得課本有提到多處理器不太適合用disable interrupt
作者: TMDTMD2487 (ㄚ冰)   2017-11-12 12:41:00
因為就像我講的你會讓你的每個cpu都有諸多的限制
作者: nat99up (NAt)   2017-11-12 12:41:00
多處理器要關就要全關...然後users就可開轟趴了哈哈
作者: TMDTMD2487 (ㄚ冰)   2017-11-12 12:43:00
單純的關掉所有cpu中斷不能解決歐會存取共享變數的程式還是同時在執行中
作者: nat99up (NAt)   2017-11-12 12:44:00
只要其他顆上的process不參與到那個共享變數就可以吧
作者: TMDTMD2487 (ㄚ冰)   2017-11-12 12:44:00
沒問題的把cpu都power down就可以解決了XD可是你不知道別顆cpu上的process會不會存取壓
作者: nat99up (NAt)   2017-11-12 12:46:00
都可以把別顆CPU的中斷關掉了知道這點應該不難哈哈哈
作者: TMDTMD2487 (ㄚ冰)   2017-11-12 12:46:00
把中斷關掉他們還是可以讀memory的押
作者: can18 (18號)   2017-11-12 12:47:00
想法同t大 基本上要轉成類似單核的模式disable才有用
作者: TMDTMD2487 (ㄚ冰)   2017-11-12 12:48:00
對呀所以要lock住data bus
作者: nat99up (NAt)   2017-11-12 12:48:00
我的意思是確保其他顆上process沒參與這個變數就可以啦
作者: can18 (18號)   2017-11-12 12:49:00
要怎麼確保 啊如果有參與的話怎麼辦基本上除了把其他cpu關掉跟鎖bus無法確保吧
作者: nat99up (NAt)   2017-11-12 12:50:00
把別人的PCB抓出來看 但討論這個也太沒意義XD
作者: TMDTMD2487 (ㄚ冰)   2017-11-12 12:50:00
明明就有很棒的cs設計為什麼我們要執著在關掉中斷呢XD
作者: can18 (18號)   2017-11-12 12:52:00
我只是覺得 n 大的方法比關cpu還複雜XD
作者: nat99up (NAt)   2017-11-12 12:53:00
當然啊哈哈 只是幫這個方法找個藉口說他堪用
作者: TMDTMD2487 (ㄚ冰)   2017-11-12 12:53:00
通常越簡單的方法效率越低XD
作者: can18 (18號)   2017-11-12 12:57:00
弘毅優點是都講很順 不過有些都會有小bug
作者: TMDTMD2487 (ㄚ冰)   2017-11-12 12:59:00
是沒麼小bug拉跟他的書比起來xd
作者: nat99up (NAt)   2017-11-12 13:01:00
OS課本的背面最扯
作者: leoone (里歐一代)   2017-11-12 13:37:00
無法OS就是個理論性質的學科 拿到實際面本來就很多bug 舉個例子 實際上是沒有kernel thread這種東西的
作者: shownlin (哈哈阿喔)   2017-11-12 16:00:00
我記得洪逸上課不是有說多處理器不適合嗎,所以才接後面的臨界區間設計...
作者: TWkobe (中華柯比)   2017-11-22 19:15:00
多處理器一般會在cpu上多一個port叫bus lock誰先搶到會先鎖住bus然後就可以安心disable自己的interrup

Links booklink

Contact Us: admin [ a t ] ucptt.com