比如说,某个数据库程序可能要对某个数据库进行查询操作,此时并不是数据
库的所有内容都要加载到内存中去,而只加载那些要用的部分。如果此数据库
查询是一个搜索查询而无须对数据库进行添加记录操作,则加载添加记录的代
码是毫无意义的。这种仅将要访问的虚拟页面载入的技术叫请求换页。
当进程试图访问当前不在内存中的虚拟地址时,处理器在页表中无法找到所引
用地址的入口。在图 中,对于虚拟页面框号 &,进程 的页表中没有入口,
这样当进程 试图访问虚拟页面框号 & 内容时,处理器不能将此地址转换成物
理地址。这时处理器通知操作系统有页面错误发生。
如果发生页面错的虚拟地址是无效的,则表明进程在试图访问一个不存在的虚
拟地址。这可能是应用程序出错而引起的,例如它试图对内存进行一个随机的
写操作。此时操作系统将终止此应用的运行以保护系统中其他进程不受此出错
进程的影响。
如果出错虚拟地址是有效的,但是它指向的页面当前不在内存中,则操作系统
必须将此页面从磁盘映象中读入到内存中来。由于访盘时间较长,进程必须等
待一段时间直到页面被取出来。如果系统中还存在其他进程,操作系统就会在
读取页面过程中的等待过程中选择其中之一来运行。读取回来的页面将被放在
一个空闲的物理页面框中,同时此进程的页表中将添加对应此虚拟页面框号的
入口。最后进程将从发生页面错误的地方重新开始运行。此时整个虚拟内存访
问过程告一段落,处理器又可以继续进行虚拟地址到物理地址转换,而进程也
得以继续运行。
使用请求换页将可执行映象加载到进程的虚拟内存中。当命令执行时,
可执行的命令文件被打开,同时其内容被映射到进程的虚拟内存。这些操作是
通过修改描叙进程内存映象的数据结构来完成的,此过程称为内存映射。然而
只有映象的起始部分被调入物理内存,其余部分仍然留在磁盘上。当映象执行
时,它会产生页面错误,这样 将决定将磁盘上哪些部分调入内存继续执
行。
3.1.2 交换
如果进程需要把一个虚拟页面调入物理内存而正好系统中没有空闲的物理页面,
操作系统必须丢弃位于物理内存中的某些页面来为之腾出空间。
如果那些从物理内存中丢弃出来的页面来自于磁盘上的可执行文件或者数据文
件,并且没有修改过则不需要保存那些页面。当进程再次需要此页面时,直接
从可执行文件或者数据文件中读出。
但是如果页面被修改过,则操作系统必须保留页面的内容以备再次访问。这种
页面被称为 -./ 页面, 当从内存中移出来时,它们必须保存在叫做交换文件
的特殊文件中。相对于处理器和物理内存的速度,访问交换文件的速度是非常