linux内核中断向量表,中断向量表
5.4.3? 中斷向量表
上節已指出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所提供的中斷服務功能。
當Intel CPU運行在32位保護模式下時,需要使用中斷描述符表(Interrupt Descriptor Table,IDT)來管理中斷或異常。IDT是Intel 8086~80186 CPU中使用的中斷向量表的直接替代物。其作用也類似于中斷向量表,只是其中每個中斷描述符項中除了含有中斷服務程序地址以外,還包含有關特權級和描述符類別等信息。Linux操作系統工作于80x86的保護模式下,因此它使用中斷描述符表來設置和保存各中斷的"向量"信息。
總結
以上是生活随笔為你收集整理的linux内核中断向量表,中断向量表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 不同ip 相同mac arp
- 下一篇: linux shell 脚本 supre