必威电竞|足球世界杯竞猜平台

中斷向量
來源:互聯網

中斷向量是指一組中斷源與一組中斷服務程序入口地址的一一對應關系,包括中斷服務程序的段基址CS和偏移地址IP。

CPU響應中斷時通過中斷響應信號選通中斷接口,這一過程為向量中斷,也稱矢量中斷。中斷接口將中斷向量號送至數據總線,CPU通過它獲知中斷程序入口地址,轉去執行該中斷服務程序。在向量中斷中,每個中斷服務程序都有一個確定的入口地址,該地址稱為中斷向量。

概念介紹

中斷標識碼(中斷類型號):由硬件(通常是中斷控制器)產生,以標識不同的中斷源。

中斷向量:中斷服務程序的入口地址。在某些計算機中,中斷向量的位置存放一條跳轉到中斷服務程序入口地址的跳轉指令。

中斷向量地址:存儲中斷向量的存儲單元地址

中斷

存放

存放中斷服務程序的入口地址

來存放中斷向量(共256個),稱這一片內存區為中斷向量表,地址范圍是0~3FFH,如圖所示。

PC/AT中由硬件產生的中斷標識碼被稱為中斷類型號(當然,中斷類型號還有其他的產生方法,如指令中直接給出、CPU自動形成等),即在中斷響應期間8259A產生的是當前請求中斷的最高優先級的中斷源的中斷類型號。中斷類型號和中斷向量之間有下面的關系:

中斷類型號×4=存放中斷子程序首地址的存儲區首地址=中斷向量地址

有了存放中斷向量的首地址,從該地址開始的4個存儲單元中取出的就是中斷服務程序的入口。

跳轉

跳轉到中斷服務程序的入口地址

在AVR或ARM微處理器中,中斷向量的大小也是4個字節,但其中存放的不是中斷程服務程序的入口地址,而是可執行的代碼。當響應中斷時,硬件自動執行相應中斷向量處的跳轉代碼,然后跳轉到具體的中斷服務程序的入口地址。

向量表

CPU是根據中斷號獲取中斷向量值,即對應中斷服務程序的入口地址值。因此為了讓CPU由中斷號查找到對應的中斷向量,就需要在內存中建立一張查詢表,即中斷向量表(在32位保護模式下該表稱為中斷描述符表)。80x86微機支持256個中斷,對應每個中斷需要安排一個中斷服務程序。在 80x86實模式運行方式下,每個中斷向量由4字節組成。這4字節指明了一個中斷服務程序的段值和段內偏移值。因此整個向量表的長度為1KB。當 80x86微機啟動時,ROM BIOS中的程序會在物理內存開始地址0x0000:0x0000處初始化并設置中斷向量表,而各中斷的默認中斷服務程序則在BIOS中給出。由于中斷向量表中的向量是按中斷號順序排列,因此給定一個中斷號N,那么它對應的中斷向量在內存中的位置就是0x0000:N×4,即對應的中斷服務程序入口地址保存在物理內存0x0000:N×4位置處。

在BIOS執行初始化操作時,它設置了兩個8259A芯片支持的16個硬件中斷向量和BIOS提供的中斷號為0x10~0x1f的中斷調用功能向量等。對于實際沒有使用的向量則填入臨時的亞中斷服務程序的地址。以后在系統引導加載操作系統時會根據實際需要修改某些中斷向量的值。例如,對于DOS操作系統,它會重新設置中斷0x20~0x2f的中斷向量值。而對于Linux,除了在剛開始加載內核時需要用到BIOS提供的顯示和磁盤讀操作中斷功能,在內核正常運行之前則會在setup.s程序中重新初始化8259A芯片并且在head.s程序中重新設置一張中斷向量表(中斷描述符表)。完全拋棄了BIOS所提供的中斷服務功能。

英特爾 CPU運行在32位保護模式下時,需要使用中斷描述符表(Interrupt Descriptor Table,IDT)來管理中斷或異常。IDT是Intel 8086~80186 CPU中使用的中斷向量表的直接替代物。其作用也類似于中斷向量表,只是其中每個中斷描述符項中除了含有中斷服務程序地址以外,還包含有關特權級和描述符類別等信息。Linux操作系統工作于80x86的保護模式下,因此它使用中斷描述符表來設置和保存各中斷的"向量"信息。下面是80X86中斷向量表各個地址表示的中斷用途。

中斷向量地址和中斷向量

中斷向量:中斷服務程序的入口地址

中斷向量地址:內存中存放中斷服務程序入口地址的地址

參考資料 >

..2024-03-21

..2024-03-21

..2024-03-21

生活家百科家居網