文章目录
- 前言
 - 磁盘与物理内存 数据交互
 - 局部性原理
 - 页表
 
前言
磁盘是计算机唯一的一个机械设备,在磁盘文件系统中,我们了解到,磁盘的数据读取写入相比物理内存,CPU等效率低了很多。但是其作为数据的载体,物理内存与其交互的工作必定是高频的,所以二者之间的交互肯定不是一字节一字节的读取。
磁盘与物理内存 数据交互
物理内存与磁盘的数据交互,绝不是一字节一字节的读取,大部分的操作系统对此的规定是4KB。我们知道磁盘的基本存储单元是扇区,一个扇区一般为512字节,也就是物理内存一次读取8个扇区的数据
 而为了对接磁盘,物理内存也是以4KB为一个单元,并且使用一个结构体管理,该结构体内部有一个数组,记录各单元之间的划分。
 物理内存的单元叫作页框,磁盘的单元叫作页帧。二者大小都是4KB。
局部性原理
局部性原理是现代计算机预加载数据的理论基础
 允许提前加载正在访问数据的相邻或者附近的数据
 通过预加载附近数据,减少IO次数。
页表
我们知道虚拟地址有4GB,然后通过页表将虚拟地址与物理内存的地址建立映射关系。但是如果是每一个虚拟地址都直接建立映射关系的话,那页表的条目就需要2^32次方个,如果单单映射关系,则一个条目至少需要8字节,极端算下来就需要32GB,这是不可能的。所以页表的映射并不是这样单纯的映射
 
在32位系统下,虚拟地址是4GB的,也就是由32位比特位组成的地址。
 实际的页表映射,是将这32个比特位分为3部分
 前10个比特位为第一部分,再之后10个比特位为第二部分,最后12个比特位为最后一部分。
 如下图

 以下图片来源网络
 
因为物理内存每一个页帧都是4KB,也就是2^12次方,12个比特位,所以最后刚好可以映射虚拟地址的最后12个比特位,省下了不少空间。
 负责映射前10个比特位的页表叫作页目录,负责中间10个比特位的叫作页表项
这样我们就可以访问到物理内存的任意一个字节地址了,而访问变量,其实就是物理内存的起始地址+类型的大小(偏移量),这就是页内偏移。
 定位任意一个内存字节位置:页框+页内偏移(基地址+偏移量)


















