几种门的介绍:
任务门:
里面包含TSS选择子,可以在GDT, LDT, IDT中
中断门:
里面有例程选择子和对应偏移量,可以在IDT中
陷阱门:
和中断门一样,只是进入后IF位不会自动置0,在IDT中
调用门:
格式和上面一样,用call和jmp,可以在GDT和LDT中
符表特点:
使用IDTR存表的长度和地址,同样是先是16位的表界限,然后是32位的表基址。但是由于int 后面是8位数,所以门描述符中需要利用P位表示是否存在例程
中断过程与保护:
①根据中断向量号定位中断例程
②进行特权级检查,检查方法和调用门检查一样
③执行中断例程,此时NT位和TF位置零,IF位自动置零避免嵌套中断。
④返回,使用IRET
补充:
TF为陷阱标志位,为零表示禁止单步执行。NT位为任务嵌套标志,如果NT为1表示这个任务是嵌套了别的任务才执行的,在IRET的时候会自动返回之前的任务,
否则就直接返回中断点。
中断的时候,同样要判断特权级是否改变,从而决定是否要换特权级栈。处理器依次在旧栈中压入SS_OLD, ESP_OLD, EFLAGS, CS_OLD, EIP_OLD,然后在把
这些值复制到新栈中。同样注意是否有错误码,不然最后还要压入错误码,这个需要在返回的时候手动跳过它。
在返回的时候同样要进行特权级检查
中断错误码:
有32位,功能就是指定中断发生在哪个端上
格式:
高字保留0 15-3为选择子 3为TI 2为IDT 1为EXT
其中IDT表示是否在IDT中,EX表示是否中断源来自处理器外部
全0的时候表示中断的发生与特定的段无关,或者引用了一个空描述符
补充:
通常,压入错误码的中断号在0-32之间
原文:https://www.cnblogs.com/TherLF/p/14849001.html