汇编学习笔记(22) - 内存的分页机制
简述
前面提到的分段机制获得了虚拟地址,那么分页直接就是实现了虚拟地址到物理地址的映射,因为枫叶机制可以被关闭,那么此时就相当于虚拟地址一对一的直接映射到物理地址上了
页固定位4K对齐,所以一个32位虚拟地址前20位用来寻找对应的页,后12位作为页内偏移用来定位具体位置。
分页机制
分页机制有两张表,一张叫页目录表,一张叫页表,两个表的表项都采用相同的结构,一个表项32位 4字节
这里的物理地址用20位表示,因为页都是4K对齐的,也就是说个页的开头后12位总是全0,所以只需要20位即可表示页地址,20地址左移12位就是实际的物理地址。
A位表示数据是否被访问过,CPU每次访问该也都会将此位置为1,操作系统可以通过周期性的将其该为零,等待CPU重新置位1来判断哪些页使用比较繁忙,依次作为换页依据
D位表示数据被写过了,操作用系统可以依次为判断依据决定,此页是否需要回写到磁盘文件中
U/S 位可以用来驱动用户态页和系统页,依次隔离用户程序的权限
R/W页可以用来控制是否可写来保护数据
此位还可以用于实现 写时复制功能,将页设为只读,当应用程序尝试写的时候就会触发异常中断,异常处理程序就可以复制此页的物理内存并从定向至新物理内存,同时允许写此页,这样就完成了写时复制功能。
P位表示此想描述的页在物理内存中是否正式存在,如果不存在当访问的时候就会出现缺页中断,缺页处理程序处理完之后需要将此为重新置位1,CPU就能继续跑下去了。
转换方式
STEP1. 首先将32位的地址裁切成 [10位][10位][12位] 的三份,为表述方便即为X,Y,Z
STEP2. 通过CR3找到页目录,并用X作为索引乘上 4,找到对应的页目录项
SETP3. 取出页目录项中断物理地址得到页表
SETP4. 使用Y作为索引乘上4 在页表中找到页表项
SETP5. 从页表项中取出内存也的地址
SETP5. 直接使用Z在内存页中定位
其他说明
注意:
1. 页表中寻址都是使用的物理地址,因为也变本本身就是用作虚拟地址防疫到物理地址的,如果页表还用虚拟地址,就无线重入了。
2. 这只是80386提供的分页管理功能,80386都是老的不能再老CPU了,现在都64位的,分页机制肯定变化很大。