Linux 中斷總結

來源:互聯網
上載者:User

Linux中斷分為硬中斷和非強制中斷。

硬中斷是由硬體裝置觸發的中斷。I/O裝置要產生硬中斷時,會由中斷控制器發送一個電訊號,核心的裝置驅動程式接收到這個電訊號,就會調用相應的中斷處理函數對這個中斷進行處理。硬中斷可以在任何時刻到來,它代表的系統必須馬上處理的緊急任務,也簡稱為中斷的上半部,與此對應的是中斷下半部(buttom half),也稱為非強制中斷,代表的系統不必馬上處理的、沒那麼緊急的任務。

非強制中斷處理函數一般在硬中斷處理函數的末尾調用。硬中斷處於所謂的“中斷上下文中”。與此對應的是“進程上下文”。下面解釋一下進程上下文,每個使用者進程都可以分為使用者態和核心態,一般情況下進程運行在使用者態,當進程調用系統調用函數時,會進入核心態,這個時候進程就處於核心態的“進程上下文”中,當然核心的線程也屬於進程上下文,如ksoftirqd線程。所以核心態有兩種上下文,一種是“中斷上下文”,一種是“進程上下文”。中斷上下文一般處理一些耗時不是很長,對即時性要求很高,執行頻度較高的應用。

比較特殊的是非強制中斷,非強制中斷會在中斷處理完成後返回時執行,這個時候是處於中斷上下文中的。在以前的核心版本中,沒有出現ksoftirqd核心線程來防止非強制中斷的重複調用,此時非強制中斷會一直運行在“中斷上下文中”。在後期的核心版本中,為了防止執行非強制中斷的時候非強制中斷又一直被觸發,而讓別的進程等的太久的情況發生, 在執行次數到了一個最大值的時候就執行核心線程ksoftirqd,然後中斷就返回了.而不是一直 執行非強制中斷.在ksoftirqd這個核心線程中執行非強制中斷,此時就是在進程上下文中了。此時,非強制中斷極可能出現在“中斷上下文”,也可能出現在“進程上下文”。

中斷有各自的優先順序,以響應不同的處理請求。非強制中斷的優先順序相對來說處於低位,可被硬中斷中斷,但不會被使用者的代碼中斷。而

硬中斷不可能被其他中斷中斷。

引用《深入Linux核心架構》書中關於中斷上下文與進程內容相關的不同之處:

(1)中斷是非同步執行的,它們可以在任何時間發生。

(2)中斷上下文中不能調用調度器,因而不能自動地放棄控制權。

(3)中斷處理常式不能進入睡眠狀態。原因是中斷上下文不允許中斷,進程睡眠後,核心只能永遠地等待下去。

這是目前對Linux中斷的理解,可能有偏差,再慢慢修正吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.