文章目录
- 前言
- 磁盘与物理内存 数据交互
- 局部性原理
- 页表
前言
磁盘是计算机唯一的一个机械设备,在磁盘文件系统中,我们了解到,磁盘的数据读取写入相比物理内存,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个比特位的叫作页表项
这样我们就可以访问到物理内存的任意一个字节地址了,而访问变量,其实就是物理内存的起始地址+类型的大小(偏移量)
,这就是页内偏移
。
定位任意一个内存字节位置:页框+页内偏移
(基地址+偏移量)