參考:http://blog.51cto.com/noican/1361087 ?&& ?百度百科 ?&& 操作系統原理與實訓教程(范輝 ?謝青松)
軟中斷的一種典型應用就是所謂的"下半部"(bottom?half),它的得名來自于將硬件中斷處理分離成"上半部"和"下半部"兩個階段的機制:上半部在屏蔽中斷的上下文中運行,用于完成關鍵性的處理動作;而下半部則相對來說并不是非常緊急的,通常還是比較耗時的,因此由系統自行安排運行時機,不在中斷服務上下文中執行
硬中斷:
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調用,它的作用是請求內核調度器去查看是否有一些其他的進程可以運行。
軟中斷:進程 -> 內核中的設備驅動程序
硬中斷:硬件 -> CPU -> 內核中的設備驅動程序
軟件中斷 應該也叫軟中斷,,目前未找到明確說明,,從定義上來看二者是一個東西,
通常稱為異常,是CPU根據軟件當中的某條指令或者軟件對標志寄存器中的某個標志的設置而產生的,典型的軟件中斷是除數為0引起的中斷和指令引起的中斷。異常時不能被屏蔽的
中斷處理的過程
1.保護中斷現場
2.分析中斷原因,先去處理中斷程序
3.恢復現場