歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 硬中斷與軟中斷的區別

硬中斷與軟中斷的區別

日期:2017/3/1 9:47:23   编辑:Linux編程

硬中斷:

1. 硬中斷是由硬件產生的,比如,像磁盤,網卡,鍵盤,時鐘等。每個設備或設備集都有它自己的IRQ(中斷請求)。基於IRQ,CPU可以將相應的請求分發到對應的硬件驅動上(注:硬件驅動通常是內核中的一個子程序,而不是一個獨立的進程)。

2. 處理中斷的驅動是需要運行在CPU上的,因此,當中斷產生的時候,CPU會中斷當前正在運行的任務,來處理中斷。在有多核心的系統上,一個中斷通常只能中斷一顆CPU(也有一種特殊的情況,就是在大型主機上是有硬件通道的,它可以在沒有主CPU的支持下,可以同時處理多個中斷。)。

3. 硬中斷可以直接中斷CPU。它會引起內核中相關的代碼被觸發。對於那些需要花費一些時間去處理的進程,中斷代碼本身也可以被其他的硬中斷中斷。

4. 對於時鐘中斷,內核調度代碼會將當前正在運行的進程掛起,從而讓其他的進程來運行。它的存在是為了讓調度代碼(或稱為調度器)可以調度多任務。

軟中斷:

1. 軟中斷的處理非常像硬中斷。然而,它們僅僅是由當前正在運行的進程所產生的。

2. 通常,軟中斷是一些對I/O的請求。這些請求會調用內核中可以調度I/O發生的程序。對於某些設備,I/O請求需要被立即處理,而磁盤I/O請求通常可以排隊並且可以稍後處理。根據I/O模型的不同,進程或許會被掛起直到I/O完成,此時內核調度器就會選擇另一個進程去運行。I/O可以在進程之間產生並且調度過程通常和磁盤I/O的方式是相同。

3. 軟中斷僅與內核相聯系。而內核主要負責對需要運行的任何其他的進程進行調度。一些內核允許設備驅動的一些部分存在於用戶空間,並且當需要的時候內核也會調度這個進程去運行。

4. 軟中斷並不會直接中斷CPU。也只有當前正在運行的代碼(或進程)才會產生軟中斷。這種中斷是一種需要內核為正在運行的進程去做一些事情(通常為I/O)的請求。有一個特殊的軟中斷是Yield調用,它的作用是請求內核調度器去查看是否有一些其他的進程可以運行。

問題解答:

1. 問:對於軟中斷,I/O操作是否是由內核中的I/O設備驅動程序完成?

答:對於I/O請求,內核會將這項工作分派給合適的內核驅動程序,這個程序會對I/O進行隊列化,以可以稍後處理(通常是磁盤I/O),或如果可能可以立即執行它。通常,當對硬中斷進行回應的時候,這個隊列會被驅動所處理。當一個I/O請求完成的時候,下一個在隊列中的I/O請求就會發送到這個設備上。

2. 問:軟中斷所經過的操作流程是比硬中斷的少嗎?換句話說,對於軟中斷就是:進程 ->內核中的設備驅動程序;對於硬中斷:硬件->CPU->內核中的設備驅動程序?

答:是的,軟中斷比硬中斷少了一個硬件發送信號的步驟。產生軟中斷的進程一定是當前正在運行的進程,因此它們不會中斷CPU。但是它們會中斷調用代碼的流程。

如果硬件需要CPU去做一些事情,那麼這個硬件會使CPU中斷當前正在運行的代碼。而後CPU會將當前正在運行進程的當前狀態放到堆棧(stack)中,以至於之後可以返回繼續運行。這種中斷可以停止一個正在運行的進程;可以停止正處理另一個中斷的內核代碼;或者可以停止空閒進程。

Copyright © Linux教程網 All Rights Reserved