上一篇文章学习了中断与异常的概念:【OS学习笔记】三十四 保护模式十:中断和异常区别
本片文章接着学习以下内容:
- 中断描述符表
- 中断门
- 陷阱门
1 中断描述符表
我们前面讲了无数次,在实模式下,是由位于低地址的1M内存中的中断向量表存放中断过程的地址。但是在保护模式下,有一点不一样,存放中断过程地址的是中断描述符表(IDT),且中断描述符不一定位于低地址处。
顾名思义,在中断描述符表(IDT)中,存放是和中断相关的描述符,包括:中断门,陷阱门和任务门。
任务门在这篇文章中已经学习过了:【OS学习笔记】二十六 保护模式八:任务门—任务切换
中断门和陷阱门的描述符格式如下图所示:
由以上图,我们总结以下几点内容:
- 调用门,任务门,中断门和陷阱门的描述符都非常类似,从大的方面来说,因为都用于实施控制转移,故都包括16位的目标代码段选择子,以及32位的段内偏移量
- 中断门和陷阱门的描述符只允许存放在IDT中,任务门可以位于GDT,LDT,IDT中
- 保户模式下的IDT可以位于任何位置。因为处理器内部有一个48位的中断描述符表寄存器IDTR,保存着中断描述符表在内存中的线性基地址和界限。如下图,和GDT一样,因为整个系统中只需要一个IDT就够了,所以,GDTR与IDTR不像LDTR和TR,没有也不需要选择器部分。
- 这就意味着中断描述符表IDT可以位于内存中的任何位置,只要IDTR指向它即可。不过为了利用高速缓存使处理器的工作效率最大化,建议IDT的基地址是8字节对齐的。
2 保护模式下的中断处理过程示意图
最后我们给出在保护模式下,中断处理过程的示意图:
- 当中断和异常发生时,处理器用中断向量乘以8的结果去访问IDT,从中取得对应的中断或者陷阱描述符。因为IDT是由IDTR指向的,所以这很容易做到。
- 找到相应的描述符后,中断门和陷阱门中有目标代码段的选择子,以及段内偏移量。从而找到GDT或者LDT中的代码段描述符
- 找到代码段描述符后,就可以从代码段描述符中取出对应的代码段的基地址与段内偏移量,从而取得具体的中断处理过程的代码,就可以执行代码了。
注意,以上没有考虑分页。
3、总结
本文主要学习中断描述符表,中断门和陷阱门三者之间的协调使用关系。
详细的内容还是要参考原书籍,这里只是做一个简单的总结。
学习探讨加个人:
qq:1126137994
微信:liu1126137994