处理器内部进行特权级检查。
由于中断是通过中断向量号通知到处理器的,中断向量号只是个整数,其中并没有 RPL,所以在对由
中断引起的特权级转移做特权级检查中,并不涉及到 RPL。中断门的特权检查同调用门类似,**对于软件主动发起的软中断,当前特权级 CPL 必须在门描述符 DPL 和门中目标代码段 DPL 之间。**这是为了防止位于3 特权级下的用户程序主动调用某些只为内核服务的例程。
(a) 如果是由软中断 int n、int3 和 into 引发的中断,这些是用户进程中主动发起的中断,由用户代码控制,处理器要检查当前特权级 CPL 和门描述符 DPL,这是检查进门的特权下限,如果 CPL 权限大于等于 DPL,即数值上 CPL≤门描述符 DPL,特权级“门槛”检查通过,进入下一步的“门框”检查。否则,处理器抛出异常。
(b) 这一步检查特权级的上限(门框):处理器要检查当前特权级 CPL 和门描述符中所记录的选择子对应的目标代码段 DPL,如果 CPL 权限小于目标代码段 DPL,即数值上 CPL>目标代码段 DPL,检查通过。否则 CPL 若大于等于目标代码段 DPL,处理器将引发异常,也就是说,除了用返回指令从高特权级返回,特权转移只能发生在由低向高。
若中断是由外部设备和异常引起的,只直接检查 CPL 和目标代码段的 DPL,和上面的步骤 b)是一样的,要求 CPL 权限小于目标代码段 DPL,即数值上 CPL >目标代码段 DPL,否则处理器引发异常。
注意:中的 IF 位被自动置 0,避免中断嵌套,即中断处理过程中又来了个新的中断,但是陷阱门和任务门不会把IF位自动置0