X86cpu有3种模式:实模式,保护模式和虚拟8086模式
X86是由INTEL退出的一种复杂指令集,能够生产支持这种指令集CPU公司主要是Intel和amd
AMD在1999年的时候,扩展了这套指令集,称为X86-64,后改名为AMD64,intel也兼容了这个产品,称为intel64。但AMD64和intel64几乎一样,所有现在统称X64.
实模式就是即实地址访问模式,程序访问的内存空间直接就是物理内存的空间
1.保护模式与实模式相对应。在80286以前,CPU只有实时模式,地址总线有20位,而内存地址是16位,也就是最多能够访问2^20 =1M的内存空间。在80286及以后,内存地址改为16位或32位,至少可以访问到2^32=4G的内存空间。但为了保证后续的CPU能够运行旧的CPU,只能保持向下兼容。因此,80286及以后的CPU首先进入实模式,然后通过切换机制再进入到保护模式。
2.CPU复位(reset)或加电(power on)的时候以实模式启动,处理器以实模式工作。在实模式下,内存寻址方式和8086相同,由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址,最大寻址空间1MB,最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086。在实模式下,所有的段都是可以读、写和可执行的
3.保护模式与实模式相比,主要是两个差别:一是提供了段间的保护机制,防止程序间胡乱访问地址带来的问题,二是访问的内存空间变大
虚拟8086模式是386及以上处理器所独有的运行模式,它全兼容实模式下所有处理方式,并运用分页机构进行内存管理。分页机构的处理单位是固定大小为4KB的页面,它把32位的线性地址分成三部分,即两个指向页表的10位变址和一个12位的页面偏移值(线性地址的格式见下面左图)。由于线性地址空间的虚拟页面和物理空间的页面均对齐到4KB的页面边界,如果将线性地址空间的每一页都对应物理空间的一页则需要4GB的内存开销,而实际内存空间是有限的。
段寄存器的值为段选择子
1.每个段寄存器有一个高速缓冲寄存器 段描述符高速缓冲寄存器或者描述符投影寄存器 不可见
2.选择子被装入到段寄存器 cpu会将描述符表中的描述符的信息保存的缓冲寄存器
3.此后对段的访问 就会直接使用描述符缓冲寄存器的新内容 而不再去描述符表中取
段描述符高速缓冲寄存器 对应cs ss ds es fs gs
内容包括32位基地址 32位段界限 还包括10位的段属性
注意此寄存器的信息更新时机 除了选择子被装入到段寄存器外 还有在改变描述符表中的某个当前段的描述符后 也要更新此时缓冲寄存器的内容 即使选择子未变 需要通过重新装载段寄存器来实现
在32位x86保护模式下,线性地址被分割成4KB大小的页面。物理地址也同样被分割为4KB固定大小的块,称为页框(页帧),页面可以映射到页框里。
页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页于物理页帧的对应关系。每一个进程都拥有一个自己的页表,PCB表中有指针指向页表。
通常页表是一个4KB的数据结构,每一个页表项为4B,所以每个页表中可以存储1024个页表项