一、硬中斷
由與系統相連的外設(比如網卡、硬盤)自動產生的。主要是用來通知操作系統系統外設狀態的變化。比如當網卡收到數據包的時候,就會發出一個中斷。我們通常所說的中斷指的是硬中斷(hardirq)。
- 硬中斷是外部設備對CPU的中斷;
- 硬中斷是由硬件產生的,比如,像磁盤,網卡,鍵盤,時鍾等。每個設備或設備集都有它自己的IRQ(中斷請求)。基於IRQ,CPU可以將相應的請求分發到對應的硬件驅動上(注:硬件驅動通常是內核中的一個子程序,而不是一個獨立的進程)。
- 處理中斷的驅動是需要運行在CPU上的,因此,當中斷產生的時候,CPU會中斷當前正在運行的任務,來處理中斷。在有多核心的系統上,一個中斷通常只能中斷一顆CPU(也有一種特殊的情況,就是在大型主機上是有硬件通道的,它可以在沒有主CPU的支持下,可以同時處理多個中斷。)。
- 硬中斷可以直接中斷CPU。它會引起內核中相關的代碼被觸發。對於那些需要花費一些時間去處理的進程,中斷代碼本身也可以被其他的硬中斷中斷。
- 對於時鍾中斷,內核調度代碼會將當前正在運行的進程掛起,從而讓其他的進程來運行。它的存在是為了讓調度代碼(或稱為調度器)可以調度多任務。
二、軟中斷
通常是硬中斷服務程序對內核的中斷;為了滿足實時系統的要求,中斷處理應該是越快越好。linux為了實現這個特點,當中斷發生的時候,硬中斷處理那些短時間就可以完成的工作,而將那些處理事件比較長的工作,放到中斷之后來完成,也就是軟中斷(softirq)來完成。
- 軟中斷的處理非常像硬中斷。然而,它們僅僅是由當前正在運行的進程所產生的。
- 通常,軟中斷是一些對I/O的請求。這些請求會調用內核中可以調度I/O發生的程序。對於某些設備,I/O請求需要被立即處理,而磁盤I/O請求通常可以排隊並且可以稍后處理。根據I/O模型的不同,進程或許會被掛起直到I/O完成,此時內核調度器就會選擇另一個進程去運行。I/O可以在進程之間產生並且調度過程通常和磁盤I/O的方式是相同。
- 軟中斷僅與內核相聯系。而內核主要負責對需要運行的任何其他的進程進行調度。一些內核允許設備驅動的一些部分存在於用戶空間,並且當需要的時候內核也會調度這個進程去運行。
- 軟中斷並不會直接中斷CPU。也只有當前正在運行的代碼(或進程)才會產生軟中斷。這種中斷是一種需要內核為正在運行的進程去做一些事情(通常為I/O)的請求。有一個特殊的軟中斷是Yield調用,它的作用是請求內核調度器去查看是否有一些其他的進程可以運行。
三、硬中斷和軟中斷的差別
①硬中斷是由外部事件引起的,因此具有隨機性和突發性;軟中斷是執行中斷指令產生的,無面外部施加中斷請求信號,因此中斷的發生不是隨機的而是由程序安排好的。
②硬中斷的中斷響應周期,CPU需要發中斷回合信號(NMI不需要);軟中斷的中斷響應周期,CPU不需發中斷回合信號。
③硬中斷的中斷號是由中斷控制器提供的(NMI硬中斷中斷號系統指定為02H);軟中斷的中斷號由指令直接給出,無需使用中斷控制器。
④硬中斷是可屏蔽的(NMI硬中斷不可屏蔽);軟中斷不可屏蔽。
四、轉載於
https://www.cnblogs.com/wx170119/p/11912911.html