如上图所以 x86处理器有一个GDTR寄存器,存放段描述符表的物理地址 ,在保护模式下,CS DS 等段寄存器的地址会被mmu解释成指向段描述符表项的索引,段寄存器中高13位用于指向段描述符表中的下表,而TI1位表示该表象在ldtr还是gdtr中,linux内核中并未使用ldtr(不严禁的说法),RPL位则表示该段的特权级别(操作系统的四个环)
内核在初始化和加载程序的时候会将cs ds等寄存技赋初值,我们来看下他们的初值 如下表:
段寄存器初始值根据段描述符表和段寄存器中的内容可以找到相应的段描述符,从图中来看,kernel cs ds分别占用描述符表中第3,第4项,user cs ds占用5,6项
对于段描述符的解释如下
段描述符项从图中可以看到所有的段都是从0开始,长度为4G,所以线性地址和物理地址是重合的,cpu寻址则指落在了ip寄存器的地址上,从而绕过了段映射
网友评论