调用门描述符

调用门描述符

Content #

调用门(Call-Gate)用于在不同特权级的程序之间进行控制转移。本质上,它只是一个描述符,一个不同于代码段和数据段的描述符,可以安装在GDT 或者 LDT 中。该描述符的格式如下图所示,下面是低32 位,上面是高32 位。 调用门描述符的格式

调用门描述符给出了例程所在代码段的选择子,而不是32 位线性地址。有了段选择子,就能访问描述符表得到代码段的基地址,这样做间接了一点,但却可以在通过调用门进行控制转移时,实施代码段描述符有效性、段界限和特权级的检查。

例程在代码段中的偏移量也是在描述符中直接指定的,只是被分成了两个16 位的部分。很显然,在通过调用门调用例程时,不使用指令中给出的偏移量。

描述符中的TYPE 字段用于标识门的类型,共4 比特,值“1100”表示调用门。

描述符中的P 位是有效位,通常应该是“1”。当它为“0”时,调用这样的门会导致处理器产生异常中断。对于操作系统来说,这个机关可能会很有用。比如,为了统计调用门的使用频率,可以将它置“0”。然后,每当因调用该门而产生异常中断时,在中断处理程序中将该门的调用次数加一,同时把P 位置“1”。对于因P 位为“0”而引起的中断来说,它们属于故障中断,从中断处理过程返回时,处理器还会重新执行引起故障的指令。此时,因P 已经为“1”,所以可以执行。就当前的例子而言,因为在提供调用门服务的同时,还要统计门的调用次数,故,可以在该调用门所对应的例程中将P 位清零。这样,下一次该门被调用时,又会重复以上过程。

From #