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空间来存放页表,而且要求是连续的,这样是不能接受的,所以采用二级页表的方法,即为页表再建立一个页表,称之为页目录。
|