千里之行始于足下

Linux内核源代码情景分析读书笔记(1)-Intel X86CPU寻址方式

Posted on By Peter Yang

  1. CPU的位数,如16位或32位,是指处理器中算术逻辑单元(ALU)的宽度。通常,系统总线中的数据部分(数据总线),与ALU具有相同的宽度(但也有例外)。

  2. Intel采用分段方法进行寻址,且对于段寄存器的访问指令不属于特权级,因此,称其为实地址模式

  3. 80386的段式内存管理机制

    CPU中增设两个寄存器:全局段描述表寄存器GDTR(global descriptor table register)和局部段描述表寄器LDTR(local descriptor table register)。访问这两个寄存器的指令被设计成为特权指令。 段寄存器的高13位被用作访问段描述表的偏移量,与GDTR或LDTR相加得到描述表项的起始地址。

  4. 80386页式内存管理机制

    段式内存管理存在灵活性和效率性的缺陷,而页式内存管理可以解决弥补。本来页式管理与段式管理没有从属关系,但是由于Intel X86 CPU需要在段式管理中保存访问权限的信息,故只能在段式管理基础上加上页式管理。 页式管理的一个线性地址由目录(b31-b22),页表(b21-b12),偏移量(b11-b0)组成。其中目录中的值加上页面目录基址寄存器CR3寻址目录中的页面描述符,从目录描述符中再读取页表的基址加上线性地址中的偏移量形成最终的地址,到实际内存页面中去寻找地址。 另外,由于页面大小为4KByte,所以目录和页表中的地址低12位都为0。这12位可用于进行控制相关。