汇编学习笔记(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位的,分页机制肯定变化很大。

猜你喜欢

转载自www.cnblogs.com/alwaysking/p/12348322.html