2013-10-23 54 views
2

BIOS調用在Linux操作系統中不可用。我想知道內核如何防止執行包含調用BIOS子例程的指令?Linux內核如何防止BIOS系統調用?

+0

你的意思是在用戶空間調用BIOS例程嗎? – tristan

+1

Linux並不公開irq,任何程序員都可以使用它,所以bios irq就是這樣。 – icbytes

回答

2

的INTñ指令生成對目標操作數指定的中斷或異常處理程序的調用。目標操作數指定從0到255的中斷向量編號,編碼爲8位無符號中間值。每個中斷向量號爲IDT中的門描述符提供索引。

選定的中斷描述符又包含一個指向中斷或異常處理程序過程的指針。在保護模式下(linux只在保護模式下工作),IDT包含一個8字節描述符的數組,每個描述符都是中斷門,陷阱門或任務門。

此IDT由操作系統設置。 Linux將其設置爲使描述符指向自己的處理程序,而不是BIOS處理程序。

3

BIOS主要以16位模式提供,而不是Linux運行的32位或64位模式的x86

Linux進程運行在user mode,使用virtual memory,它有自己的虛擬address space

某些機器指令(特別是INT,用於進入BIOS)有特權,因此無法在用戶模式下運行。如果你嘗試在用戶模式下運行它們,處理器會產生一個機器異常,內核通過發送一些信號來處理它。 (某些INT也用於系統調用,但SYSENTER指令是首選)。

應用程序使用syscalls與內核進行交互(可能通過VDSO)。

閱讀assembly howto

+0

內核如何確定是否拒絕某個特定的中斷? – KawaiKx

+0

內核處理所有中斷。它並不否認任何一個。 –