存储器映射

    注:本文摘自《深入理解计算机操作系统》第九章--虚拟存储器。

    Linux通过将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映射。虚拟存储器区域可以映射到两种类型的对象中的一种:
    1、unix系统中的普通文件:一个区域可以映射到一个普通磁盘文件的连续部分,例如一个可执行目标文件。文件区被分成页大小的片,每一片包含一个虚拟页面的初始内容。因为按需进行页面调度,所以这些虚拟页面没有实际交换进入物理存储器,直到CPU第一次引用到页面。如果区域比文件区大,那么就用零来填充该区域的余下部分。
    2、匿名文件:一个区域也可以映射到一个匿名文件,匿名文件是由内核创建的,包含的全是二进制零。CPU第一次引用这样一个区域内的虚拟页面时,内核就在物理存储器中找到一个合适的牺牲页面,如果该页面被修改过,就将这个页面换出来,用二进制零覆盖牺牲页面并更新页表,将这个页面标记为是驻留在存储器中的。注意在磁盘和存储器之间并没有实际的数据传送。因为这个原因,映射到匿名文件的区域中的页面有时也叫做请求二进制零的页。

    无论在哪种情况下,一旦一个虚拟页面被初始化了,它就在一个由内核维护的专门的交换文件之间换来换去。交换文件也叫交换空间或者交换区域。需要意识到的是,在任何时刻,交换空间都限制着当前运行着的进程分配的虚拟页面的总数。

猜你喜欢

转载自aisxyz.iteye.com/blog/2304542