Q1. 什麼是中斷?什麼是異常?二者有何不同?
A:
1) 中斷控制是為克服對I/O接口采用程序查詢控制服務方式所帶來的處理器低效率而產生的,它的主要優點是只有在I/O接口需要服務時才能得到處理器的響應,而不需要處理器不斷地進行查詢;因此,最初的中斷全部是對外部設備而言的,稱為外部中斷(或硬件中斷);
2) 異常也叫做內部中斷,它是為解決機器運行時所出現的某些隨機事件及編程的方便而出現的;
3) 256種中斷分為外部可屏蔽中斷(INTR)和外部非屏蔽中斷(NMI),所有I/O設備產生的中斷請求(IRQ)均引起可屏蔽中斷,而緊急事件(如硬件故障)引起的故障則產生非屏蔽中斷;
4) 異常又分為故障(fault)和陷阱(trap),它們的共同特點是既不使用中斷控制器,又不能被屏蔽(異常其實是CPU發出的終端信號)。
Q2. 什麼是中斷向量?Linux是如何分配中斷向量的?
A:
1) 為使處理器可以容易地識別每種中斷源,將256種向量中斷從0到255進行編號,即賦以一個中斷類型碼n,把這個8位的無符號整數叫做向量,即中斷向量;
2) Linux對256個中斷向量的分配如下:
A. 編號為0~31的向量對應於異常和非屏蔽中斷;
B. 編號為32~47的向量(即由I/O設備引起的中斷)分配給可屏蔽中斷;
C. 剩余的、編號為48~255的向量用來標識軟中斷;Linux只用其中的一個(即128或0x80向量)來實現系統調用。
Q3. 什麼是中斷描述符表?什麼是門描述符?
A:
1) 在實地址模式下,CPU將內存中從0開始的1KB空間作為一個中斷向量表,表中每個表項占4個字節;但在保護模式,由4個字節的表項構成的中斷向量表滿足不了要求;因此在保護模式下,中斷向量表中的表項由8個字節組成,中斷向量表也改稱為中斷描述符表(IDT);
2) IDT中的每個表項叫做一個門描述符(gate descriptor)。
Q4. 門描述符有哪些類型?它們有什麼不同?
A:門描述符中類型碼占3位,表示門描述符的類型,主要分為以下幾類:
1) 中斷門(interrupt gate):其類型碼為110,包含了一個中斷或異常處理程序所在段的選擇符和段內偏移量;
2) 陷阱門(trap gate):其類型碼為111;
3) 系統門(system gate):是Linux內核特別設置的,用來讓用戶態的進程訪問陷阱門。