《一個作業系統的實現》讀書筆記--第三章--中斷機制
1、中斷產生的原因
2、如何將中斷向量與中斷服務程式關聯起來
3、外部中斷
一、中斷
中斷產生的原因有兩種:一是外部中斷,就是由硬體產生的中斷;另一種是由指令int n產生的中斷。
二、如何將中斷向量與中斷服務程式關聯起來
1、真實模式下:
這個過程很簡單,就是通過int n中的n,去中斷向量表中獲取該中斷的中斷服務程式的CS和IP,然後載入CS和IP,跳轉到中斷服務程式。
其中(n*4)(n*4+1)中儲存著中斷服務程式入口地址的偏移量IP
(n*4+2)(n*4+3)中儲存著中斷服務程式入口地址的段地址CS
2、保護模式下:
在保護模式下,不存在中斷向量表,而是使用中斷描述符表--IDT(Interrupt Descriptor Table)。
中斷描述符表,類似於GDT、LDT,實際上就是一個描述符表。
IDT中的描述符可以是下面三種之一:中斷門描述符、陷阱門描述符、任務門描述符
IDT的作用是將每一箇中斷向量和一個描述符對應起來,而描述符中儲存的是中斷服務程式的基地址和偏移量。
三、外部中斷
外部中斷的情況有些複雜,因為需要建立硬體中斷與向量號之間的對應關係。外部中斷分為不可遮蔽中斷(NMI)和可遮蔽中斷兩種,分別由CPU的兩根引腳NMI和INTR來接受。
8259A是可程式設計中斷控制器,對它的設定並不複雜,是通過向相應的埠地址寫入特定的ICW(Initialization Command Word)來實現的。主8259A對應的埠地址是20h和21h,從8259A對應的埠地址是A0h和A1h。ICW共有4個,每一個都是具有特定格式的位元組。8259A初始化過程為:
(1)往埠20h(主片)或A0h(從片)寫入ICW1
(2)往埠21h(主片)或A1h(從片)寫入ICW2
(3)往埠21h(主片)或A1h(從片)寫入ICW3
(4)往埠21h(主片)或A1h(從片)寫入ICW4
下面結合pmtest9.asm 中的Init8259A的函式,來講述初始化8259A的過程。
; Init8259A --------------------------------------------------------------------------------------------- Init8259A: mov al, 011h out 020h, al ; 主8259, ICW1. call io_delay out 0A0h, al ; 從8259, ICW1. call io_delay mov al, 020h ; IRQ0 對應中斷向量 0x20 out 021h, al ; 主8259, ICW2. call io_delay mov al, 028h ; IRQ8 對應中斷向量 0x28 out 0A1h, al ; 從8259, ICW2. call io_delay mov al, 004h ; IR2 對應從8259 out 021h, al ; 主8259, ICW3. call io_delay mov al, 002h ; 對應主8259的 IR2 out 0A1h, al ; 從8259, ICW3. call io_delay mov al, 001h out 021h, al ; 主8259, ICW4. call io_delay out 0A1h, al ; 從8259, ICW4. call io_delay mov al, 11111110b ; 僅僅開啟定時器中斷 ;mov al, 11111111b ; 遮蔽主8259所有中斷 out 021h, al ; 主8259, OCW1. call io_delay mov al, 11111111b ; 遮蔽從8259所有中斷 out 0A1h, al ; 從8259, OCW1. call io_delay ret ; Init8259A ---------------------------------------------------------------------------------------------
0001 0001 主8259A, ICW1
需要ICW4,級聯8259,8位元組中斷向量,edge triggered模式,PC系統
0001 0001 從8259A, ICW1
需要ICW4,級聯8259,8位元組中斷向量,edge triggered模式,PC系統
0010 0000 主8259A,ICW2
80x86系統,IR0對應中斷向量Ox20
0010 1000 從8259A,ICW2
80x86系統,IR8對應中斷向量Ox28
0000 0100 主8259A,ICW3
IR0,IR1,IR3,IR4,IR5,IR6,IR7,無從片;IR2有級聯從片
0000 0010 從8259A,ICW3
級聯於主8259的IR2
0000 0001 主8259A,ICW4
0000 0001 從8259A,ICW4
1111 1111 主8259,OCW1
遮蔽主8259所有中斷
1111 1111 從8259,OCW1
遮蔽從8259所有中斷