保護機制

特權指令


特權等級和特權指令

有一些系統方面的指令,只有特權等級為 0(權限最高)的程序才可以使用。如果一個 CPL 不為 0 的程序試圖執行這些指令,會導致 general-protection fault(#GP)。其中的一些指令則可以設定為可在 CPL 不為 0 的程序中執行。
下面列出這些特權指令: 把 CR4 的 PCE 旗標(第 4 bit)設為 1,可以使 RDPMC 指令可在任何 CPL 下執行。把 CR4 的 TSD 旗標(第 2 bit)設為 1,則可使 RDTSC 指令可在任何 CPL 下執行。
在 EFLAGS 旗標中的 IOPL(第 12 bit 和第 13 bit),設定存取輸出入位址空間(I/O address space)所需的最低權限。例如,如果 IOPL 設為 1,則只有 CPL 為 0 和 1 的程序可以執行 I/O 指令,和存取 I/O 記憶體。這個旗標只能在 CPL 為 0 的程序中,利用 POPF 或 IRET 命令更改。