中斷相關知識點

中斷的人類定義

第一個概念是把同步和異步中斷分別稱爲異常(exception)和中斷(interrupt);
第二個概念是進一步的,對於中斷和異常,Intel又再細分了很多類,將中斷分爲可屏蔽中斷和不可屏蔽中斷;將異常分爲故障、陷阱、異常中止和編程異常。

中斷:又稱爲異步中斷,是其他硬件依照CPU時鐘信號隨機產生的。中斷又被分爲可屏蔽硬件中斷和不可屏蔽中斷。在微機原理課程中,處理器中有兩個引腳NMI和INTR負責接受中斷信號,還有高級可編程中斷控制器(APIC),如8259A管理中斷信號。則可屏蔽硬件中斷:任何通過INTR或着局部APIC傳遞到處理器的中斷信號都被稱爲可屏蔽硬件中斷,由IO設備產生的IRQ(Interrupt ReQuest)也是可屏蔽硬件中斷。但是通過INTR引腳傳遞的可屏蔽硬件中斷可使用Intel架構定義的中斷向量(0-255),而局部的APIC傳遞的部分只能使用16-255號向量。若中斷信號從NMI引腳傳遞過來,則發生的是一個不可屏蔽中斷。

異常:又稱爲同步中斷,是當指令執行時CPU控制單元產生的,之所以稱爲同步,是因爲只有在一條指令終止執行後CPU纔會發出中斷。在不失進程執行連續性的同時,按引起的異常的指令是否能重新執行,且依據它們被報告的方式,異常分爲錯誤,陷阱,和終止三種情況。

錯誤:錯誤是一種通常可以能夠被修正的異常,一旦修正,程序能夠不失去連續性地接着執行。當報告錯誤發生時,處理器將機器狀態恢復到執行錯誤之前的狀態。錯誤處理例程的返回地址指向產生錯誤的指令,而不是錯誤指令之後的的那條指令。如頁錯誤。

陷阱:當引起陷阱的指令發生時,馬上產生該異常。陷阱允許程序不失去連續性的繼續執行。陷阱處理例程的返回地址指向引起陷阱的指令的下一條指令(與錯誤本質上的區別)。如溢出。

終止:它並不總是報告產生異常的指令的確定位置,也不允許引起終止的進程或任務重新執行。如總線錯誤導致異常終止。

中斷的類型

從不同的角度來說,中斷可以有三種分類方法。
中斷可以分爲同步中斷(synchronous)和異步中斷(asynchronous)。
中斷可分爲硬中斷和軟中斷。
中斷可分爲可屏蔽中斷(Maskable interrupt)和非屏蔽中斷(Nomaskable interrupt)。

• 硬中斷
○ 硬中斷由硬件產生。每個設備或者設備集都有自己的IRQ(中斷請求)。

  • 硬件中斷又可以分爲內中斷和外中斷。
    ○ 處理中斷的驅動是需要運行在CPU上的。在多核處理機上,一箇中斷只能中斷一顆CPU。
    ○ 硬中斷可以直接中斷CPU。硬中斷可以中斷軟中斷。
    ○ 對於時鐘中斷,內核調度代碼會將當前正在運行的進程掛起,從而讓其他的進程運行。他的存在是爲了讓調度器可以調度多任務。
    • 軟中斷
    ○ 軟中斷是當前進程產生的。
    ○ 通常,軟中斷是一些對IO的請求。
    ○ 軟中斷僅與內核聯繫。
    軟中斷不會直接中斷CPU。

中斷類別及其行爲

類別 原因 異步/同步 返回行爲

中斷 來自I/O設備的信號 異步 總是返回到下一條指令
陷阱 有意的異常 同步 總是返回到下一條指令
故障 潛在可恢復的錯誤 同步 返回到當前指令
終止 不可恢復的錯誤 同步 不會返回

中斷向量

一個無符號整數

往往中斷向量都只是一個存儲單元,不足以放用戶自己的響應程序段(與中斷向量表進行鏈接),因此這個向量(地址)中往往放的只是一個跳轉指令,以指引程序跳轉到我的響應程序那裏去執行。

Intel x86共支持256中向量中斷,Intel給每種中斷源編號,從0-255,並把這個無符號整數叫做一箇中斷向量。不可屏蔽中斷的向量和異常的向量是固定的,而可屏蔽的硬件中斷可以通過對中斷控制器編程來改變。
Linux中的中斷向量:
0-19的中斷向量對應於異常和非屏蔽中斷。
20-31Intel保留
32-127可屏蔽硬件中斷
128用於系統調用的可編程異常
129-238可屏蔽硬件中斷
239本地APIC時鐘中斷
240本地APIC高溫中斷
241-250由Linux留作將來使用
251-253處理器間中斷
254本地APIC錯誤中斷
255本地APIC僞中斷(CPU屏蔽某個中斷時產生的)

中斷向量表

中斷向量表即中斷描述符表(叫法不同):中斷描述符表(Interrupt Descriptor Table,IDT)是一個系統表,它與每一箇中斷或異常向量相關,每一個向量在表中有相應的中斷或異常處理程序的入口地址。內核在允許中斷髮生前,必須適當地初始化IDT,用lidt彙編指令初始化idtr。

當系統發生中斷時,芯片的程序會自動跳轉到一個特定的位置,一般是程序開始處,去執行那裏的代碼。不同的中斷,芯片會自動計算在中斷向量表中的偏移量。而那裏的代碼其實是一個跳轉地址,會跳轉到中斷處理函數的位置進行中斷處理。中斷向量表,其實是一連串的跳轉地址。向量也有指引跳轉的意思。

中斷的優點與缺點

中斷與計算機病毒 計算機操作系統是開放的,用戶可以修改擴充操作系統,在計算機上實現新的功能。
修改操作系統的主要方式之一是擴充中斷功能。計算機提供很多中斷,合理合法地修改中斷會給計算機增加非常有用的新功能。如 INT 10H是屏幕顯示中斷,原只能顯示西文,而在各種漢字系統中都可以通過修改INT 10H使計算機能夠顯示中文。另一方面,計算機病毒則篡改中斷爲其達到傳染、激發等目 的服務,與病毒有關的重要中斷有: INT 08H和INT 1CH定時中斷,每秒調用18.2次,有些病毒利用它們的記時判斷 激發條件。 INT 09H鍵盤輸入中斷,病毒用於監視用戶擊鍵情況。 INT 10H屏幕輸入輸出中斷,一些病毒用於在屏幕上顯示字符圖形表現自己。 INT 13H磁盤輸入輸出中斷,引導型病毒用於傳染病毒和格式化磁盤。 INT 21H DOS功能調用,包含了DOS的大部分功能,已發現的絕大多數文件型病毒 修改INT 21H中斷,因此也成爲防病毒的重點監視部位。 INT 24H DOS的嚴重錯誤處理中斷,文件型病毒常進行修改,以防止傳染寫保護磁 盤時被發現。
中斷子程序的入口地址存放在計算機內存的最低端,病毒竊取和修改中斷的人口地 址獲得中斷的控制權,在中斷服務過程中插入病毒的“私貨”。

總之,中斷可以被用戶程序所修改,從而使得中斷服務程序被用戶指定的程序所替代。這樣雖然大大地方便了用戶,但也給計算機病毒製造者以可乘之機。病毒正是通過修 改中斷以使該中斷指向病毒自身來進行發作和傳染的。

中斷處理

中斷處理一般分爲兩個部分,中斷處理程序是上半部:接收到一箇中斷就立即執行,但只做有嚴格時限的工作,這些工作都是在所有中斷被禁止的情況下完成的。能夠被允許稍後完成的工作被推遲到下半部去。通常情況下,下半部會在中斷處理程序返回時立即執行。

更深層次的中斷處理過程就要深入至驅動,硬件電路了。由於驅動涉及的利益,旁人是看不到代碼與設計架構的,只能分析,因此就不做討論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章