linux的内存寻址过程_成长的脚步_百度空间
  Intel公司{dy}个16位处理器8086,标志着Intel x86王朝的开始,也是内存寻址方式的一次飞跃。{dy}次引入了段的概念。它的寻址目标是1MB,地址总线扩展到了20位,可是ALU的宽度,也就是数据总 线还只有16位,也就是说可以直接加以运算的指针长度是16位,于是设置了段寄存器,分别为CS、DS、SS、ES,每个段寄存器都是16位的,每条访问 内存指令中的地址也是16位的,它被送到地址总线前,CPU内部自动把段寄存器左移四位然后和指令中的地址相加。
  80386及其以后的处理器统称为IA32(32bit Intel Architecture)
IA32寄存器:
1、 通用寄存器,8个通用寄存器是8086的超集:EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI。通常保存32位数据。它们的低位部分可 以作为8个16位的寄存器:即AX,BX。。。DI,而AX、BX、CX、DX又可分为8个8位寄存器:AH、BH、CH、DH和AL、BL、CL、DL
2、段寄存器:386中6个16位的段寄存器,但是16位无法存放32的段基址,段基址存放在描述符表中,而段寄存器中存的就是这个描述符表的索引,又称为段选择符。
3、指令指针寄存器和标志寄存器
EIP存放下一条将要执行的指令的偏移量,这是相对于目前正在运行的段代码段CS而言的。EIP的低16位可以单独访问,用于16位寻址。
4、 386有4个32位的控制寄存器,分别是CR0,CR1,CR2,CR3,CRO的0位置1启动保护模式,为0则是实模式。第31位表示是否允许分页。 CR1未定义。CR2保存最近一次缺页的线性地址。CR3是页目录基地址(物理地址)页目录总是在以4KB为单位的存储器边界上,因此低12位总为0
分段机制:
   段是虚拟地址空间的基本单位,需要描述段的数据结构,包括:段的基址、段的界限、段的保护属性(是否可读或写或执行)虚拟地址空间中偏移量为0到limit范围内的一个段,映射到线性空间就是从base到base+limit。
段描述符表
索引    基地址   界限   属性
0 baseA   limitA   attributeA
1 baseB   limitB   attributeB
2 baseC   limitC   attributeC
每个表项(段描述符)占8个字节(基地址32位,界限20位,属性12位)保护模式下可分为全局描述符表、中断描述符表及局部描述符表。保护模式下的段选择符存放的内容就是索引:
0:1 RPL(requestor privilege level)保护模式下有四个特权级,0表示内核态,{zg},3{zd1},表示用户态,很多操作系统只用了这两个。
2bit:TI (Table Indicator) 置0表示从全局描述表选择,置1表示从局部选择
3:15bits 索引
    物理页和虚拟页面大小都是4KB。页表是把线性地址映射到物理地址的一种数据结构,包括:页面物理地址和页的属性(是否在内存中,是否可读或可写)因为页 面大小是4KB,所以物理页面的基址的低12位为0,这12位就用来表示页面的属性,这样一个页表项就是32位,4G空间要分为1M个页面(1个 4KB),这样就需要4M空间来存放页表,而且要求是连续的,这样是不能接受的,所以采用二级页表的方法,即为页表再建立一个页表,称之为页目录。


郑重声明:资讯 【linux的内存寻址过程_成长的脚步_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——