虚拟存储器对存储器管理的作用

注:本文中的大部分内容均是摘录自《深入理解计算机系统》一书,权当记录之用。
   
    虚拟存储器作为现代操作系统中的一个重要概念,其重要性自然不言而喻。如果你还不了解虚拟存储器的概念,务必请查阅相关资料,本文并不打算纠结于此,而只是介绍其众多作用中的冰山一角,即如何作为存储器管理的工具。
    我们知道,磁盘和主存是以数据块的形式作为传输单元,所以物理存储器一般会被划分成一个个大小固定的块,叫做物理页,也叫页帧。但仅仅这样是不够的,因为 CPU 与磁盘的速度完全不在一个等级,因此虚拟存储器才得以有了用武之地。为了更好操作,虚拟存储器也被分割成了固定大小的块,即所谓的虚拟页。在任意时刻,虚拟页面集合都分为三个不相交的子集:
    1、未分配的:无数据关联,不占用内存。
    2、缓存的:缓存在物理存储器中的已分配页。
    3、未缓存的:未缓存在物理存储器中的已分配页。

    虚拟存储器的按需页面调度算法和进程独立的虚拟地址空间的结合将会影响系统中存储器的使用和管理。概括来讲,以下就是虚拟存储器在存储器管理方面起的重要作用:
    1、简化链接。独立的地址空间允许每个进程的存储器映像使用相同的基本格式,而不管代码和数据实际存放在物理存储器的何处。栈占据进程地址空间最高的部分,并向下生长。这种一致性简化了链接器的设计和实现,允许链接器生成全链接的可执行文件,这些文件是独立于物理存储器中的代码和数据的最终位置的。
    2、简化加载。虚拟存储器使得容易向存储器中加载可执行文件和共享文件对象。加载器从不实际从磁盘拷贝任何数据到存储器,虚拟存储器系统会按照需要自动地调入数据页。在此顺便提一下存储器映射的概念,它就是一种将一组连续的虚拟页映射到任意一个文件中的任意位置的表示法。unix中就有一个叫mmap的系统调用,它允许应用程序自己做存储器映射。
    3、简化共享。一般而言,每个进程都拥有自己的独立地址空间,这是操作系统通过创建页表将相应的虚拟页映射到不同的物理页来实现的。但需要进程共享代码和数据时(如操作系统内核代码,标准库函数等),只需将不同进程中适当的虚拟页面映射到相同的物理页面,再安排多个进程共享这部分代码的一个拷贝,而不是在每个进程中都包括单独的内核和标准库的拷贝。
    4、简化存储器分配。虚拟存储器为用户进程提供了一个简单的分配额外存储器的机制。当用户进程要求额外的堆空间时,操作系统就分配适当k个连续的虚拟存储器页面,并可将它们映射到物理存储器中任意位置的任意k个物理页面上,从而使得页面可以随机地分散在物理存储器中。

猜你喜欢

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