Linux通过将一个虚拟存储器区域与磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映射.虚拟存储器可以映射到两种类型对象中的一种:
1):文件系统中的普通文件:一个区域可以映射到一个普通磁盘文件的连续部分,例如一个可执行目标文件.文件区被分成页大小的片,每一片包含一个虚拟页面的初始化内容.因为按需进行页面调度, 所以这些虚拟页面没有实际交换进入物理存储器,直到CPU第一次引用到该页面(即发射一个虚拟地址,落在地址空间这个页面的范围之内),如果区域比文件区要大,那么就用0来填充这个区域余下的部分.
2):匿名文件:一个区域页可以映射到一个匿名文件,匿名文件是由内核创建,包含的全是二进制零,CPU第一次引用这样一个区域内的虚拟页面时,内核就在物理存储器中找到一个合适的牺牲页面,如果已经被修改,就写回磁盘,用二进制的零覆盖牺牲页面并更新页表.
共享区域
进程都有自己私有的虚拟地址空间,可以防止其它进程修改其数据.但是,许多进程都有相同的只读文本区域,例如内核代码,数据等,如果每个进程运行时都拷贝一份,那就是极端的浪费了.因此,存储器映射正好解决了这个问题,当一个进程将一个共享对象映射到它的虚拟存储器的一个区域时,那么这个进程对这个区域的任何写操作,对于其它把这个共享对象页映射到自己的虚拟存储器也是可见的.