MMU笔记(4) 内存页映射与内存共享机制

发布于 2021-08-23  40 次阅读


背景

这部分内容主要看的是《琢石成器》一书,这部分写的非常不好(之前的内容一直看的很舒服),有很多关键内容说的太含糊,措辞不严谨,查了一些东西,整理如下

正文

有问题的文段很多,单独拎出来几个,然后再附上作者实际上想表述的意思

其实是应该这样理解:

首先我们不应该把磁盘中的内容认为是内存页的一部分,也就是说磁盘分页虽然是存在的,但是两种页是不同的东西

而当我们说“提交页面”的时候,默认语境其实是“把虚拟地址空间当中的内存页提交给MMU,再由MMU映射到物理内存的页框当中”,而文中混淆了这一默认语境与“将仍处于磁盘当中的数据分页成内存形式,然后提交给虚拟内存地址空间(虚拟内存后续会再经由MMU提交给物理内存)”

另外,“物理储存器”也有一定迷惑性,虽然该词确实可以表示磁盘空间,但是在书中上下文语境下很容易理解为物理内存,实际上指的是纯粹的磁盘空间

所以完整的过程是:

首先PE文件申请其独占的虚拟内存空间,然后加载它自身的代码段,数据段还有外部dll等等,同时实时映射到物理内存

当代码运行到某处需要使用磁盘文件时,磁盘文件会提交到虚拟内存地址空间,然后实时映射到物理内存

补充

这句甚至是完全错误的,作者自己都搞混了,物理储存器这个词就不应该在内存管理这一章节出现

这句话翻译一下就是,可以从物理内存读入内存

写前半句的时候想的是物理储存器是磁盘空间,写后半句的时候想的是物理储存器是物理内存

补充2

有一段话可以写的更好一些

这句话有点像我之前提到的:不应该把虚拟内存看作物理内存的延申空间,而应该把虚拟内存看作磁盘空间

我们只是在磁盘空间上面划分页框和权限而已

补充3

PE的虚拟内存地址空间,也就是每个进程独有的连续平坦内存空间

物理内存暂时借用磁盘空间产生的虚拟内存

二者太容易搞混,翻译的不好,本文因为这个原因修改了好几次措辞

因此,此后笔者会称前者为私有内存或虚拟内存,或者线性内存,线性地址,称后者为磁盘内存,磁盘内存空间