天天看點

作業系統學習(三)

1.每一個中斷或者異常都對與一個中斷服務例程(簡稱ISR interrupt server routine)相關聯。其關聯關系存儲在中斷描述符表(簡稱IDT)中。而這個中斷描述符表的起始位址和大小又儲存在中斷描述符表寄存器(IDTR)中。

中斷發生之後,會産生一個中斷号,CPU會根據這個中斷号,在IDT中找到相應的中斷門或者段選門,然後從裡面取出它的段選擇址,根據這個選擇址進一步查找它的GDT(全局描述符表),GDT裡面存儲的是段描述符,段描述符裡面有一個基位址,這個基位址再加上IDT裡面存的偏移位址offset,合在一起就形成了線性位址,進而可以指向ISR中斷服務例程。

作業系統學習(三)

由于中斷是開着的,是以當執行完一條指令後,cs和eip這對寄存器中已經包含了下一條将要執行的指令的邏輯位址。在處理那條指令之前,控制單元會檢查在運作前一條指令時是否發生了一個中斷或異常。如果發生了一個中斷和異常,那麼控制單元執行下列操作:

确定與中斷或異常關聯的向量i(0≤ i ≤255)。

讀由idtr寄存器指向的IDT表中的第i項。

從gdtr寄存器獲得GDT的基位址,并在GDT中查找,以讀取IDT表項中的選擇符辨別的段描述符。這個描述符指定中斷或異常處理程式所在的段的基位址,如下圖所示。

由中斷編号确定在IDT中偏移值的段位置,根據該段位置中的選擇符選出GDT中的段位址,該段位址裡面儲存了中斷或異常處理程式所在的段的基位址。

shell指令中less用來檢視檔案,并且它不會顯示全部檔案。

kernel檔案是以ELF的格式存放在硬碟上的。

繼續閱讀