一、X86体系的发展历史:

首先先认识以下的寄存器:

DS:数据寄存器

CS:代码寄存器

SS:栈寄存器

IP:偏移寄存器

grafana table 地址 映射 地址映射表存在哪_IP

 

在8086到80186的时候还没有我们的操作系统,他们属于实地址模式:

DS <<4 + IP = 物理地址;

DS:基地址

IP:偏移地址,偏移量也称逻辑地址;

16位地址的偏移:2^16=64k;  每个段大小16字节~64k之间;IP地址所能记录的偏移是0~64k;段的真实大小的起始位置必须是16的倍数;寻址能力是20位。

保护地址模式:段页式管理

为了保存基地址、段大小和访问权限;在80286后添加了GDTR和LDTR,记录在内存上保存的段描述符表,

GDTR:全局段描述符表寄存器

LDTR:局部段描述符表寄存器

grafana table 地址 映射 地址映射表存在哪_grafana table 地址 映射_02

grafana table 地址 映射 地址映射表存在哪_寄存器_03

用户进程最多用8180个表项,操作系统默认占据12个表项;

 

GDTR[DS>>3].baseaddr(基地址)(初始化全为0) + IP(逻辑地址)(ip <= size(段大小)) = 线性地址

未开启分页机制,线性地址 == 物理地址

开启分页机制,线性地址—》虚拟地址,虚拟地址通过页面映射才能到达物理地址;

(在这里区分一下虚拟地址和虚拟地址空间)

grafana table 地址 映射 地址映射表存在哪_虚拟地址_04

如何知晓是否开启了分页机制?通过下面的段表项描述符中有以下三种寄存器:

grafana table 地址 映射 地址映射表存在哪_grafana table 地址 映射_05

CR0:最高位PG位, 0(未开启)  1(开启)内存是否开启分页机制

CR2:发生缺页异常的虚拟地址

CR3:存储页目录的起始地址

CR4:PAE位,物理地址扩展 0   1

二级页面映射:

grafana table 地址 映射 地址映射表存在哪_寄存器_06

二级页面映射,首先通过段表映射到具体的页表,然后再根据分页机制进行地址映射,最终映射到真是的物理内存上的地址。

grafana table 地址 映射 地址映射表存在哪_寄存器_07

根页表:存放在内存中

用户页表:一般存放在交换分区中

初始时,操作系统加载时最多占1M的地址空间。强制进入实地址模式,

交换分区:磁盘上开辟空间以内存管理的方式来管理,作为对于内存空间的补充。当内存空间不足时,可以将内存上的部分数据置换到交换分区上。

可以在内存上驻留更多的进程,每个进程都可以将部分数据存储在交换分区上;

可以执行比内存大的进程;

页面置换(选择)算法:最近最久未被使用LRU算法、最佳置换算法(不可实现)、先来先服务算法

页面置换算法不高效带来的影响,系统抖动:操作系统大部分的时间用来进行页面的置换。