一、X86体系的发展历史:
首先先认识以下的寄存器:
DS:数据寄存器
CS:代码寄存器
SS:栈寄存器
IP:偏移寄存器
在8086到80186的时候还没有我们的操作系统,他们属于实地址模式:
DS <<4 + IP = 物理地址;
DS:基地址
IP:偏移地址,偏移量也称逻辑地址;
16位地址的偏移:2^16=64k; 每个段大小16字节~64k之间;IP地址所能记录的偏移是0~64k;段的真实大小的起始位置必须是16的倍数;寻址能力是20位。
保护地址模式:段页式管理
为了保存基地址、段大小和访问权限;在80286后添加了GDTR和LDTR,记录在内存上保存的段描述符表,
GDTR:全局段描述符表寄存器
LDTR:局部段描述符表寄存器
用户进程最多用8180个表项,操作系统默认占据12个表项;
GDTR[DS>>3].baseaddr(基地址)(初始化全为0) + IP(逻辑地址)(ip <= size(段大小)) = 线性地址
未开启分页机制,线性地址 == 物理地址
开启分页机制,线性地址—》虚拟地址,虚拟地址通过页面映射才能到达物理地址;
(在这里区分一下虚拟地址和虚拟地址空间)
如何知晓是否开启了分页机制?通过下面的段表项描述符中有以下三种寄存器:
CR0:最高位PG位, 0(未开启) 1(开启)内存是否开启分页机制
CR2:发生缺页异常的虚拟地址
CR3:存储页目录的起始地址
CR4:PAE位,物理地址扩展 0 1
二级页面映射:
二级页面映射,首先通过段表映射到具体的页表,然后再根据分页机制进行地址映射,最终映射到真是的物理内存上的地址。
根页表:存放在内存中
用户页表:一般存放在交换分区中
初始时,操作系统加载时最多占1M的地址空间。强制进入实地址模式,
交换分区:磁盘上开辟空间以内存管理的方式来管理,作为对于内存空间的补充。当内存空间不足时,可以将内存上的部分数据置换到交换分区上。
可以在内存上驻留更多的进程,每个进程都可以将部分数据存储在交换分区上;
可以执行比内存大的进程;
页面置换(选择)算法:最近最久未被使用LRU算法、最佳置换算法(不可实现)、先来先服务算法
页面置换算法不高效带来的影响,系统抖动:操作系统大部分的时间用来进行页面的置换。