标题：虚拟存储器
作用
虚拟内存的作用 内存在计算机中的作用很大，电脑中所有运行的程序都需要经过内存来执行，如果执行的程序很大或很多，就会导致内存消耗殆尽。为了解决这个问题，Window  虚拟存储器s中运用了虚拟内存技术，即拿出一部分硬盘空间来充当内存使用，当内存占用完时，电脑就会自动调用硬盘来充当内存，以缓解内存的紧张。举一个例子来说，如果电脑只有128MB物理内存的话，当读取一个容量为200MB的文件时，就必须要用到比较大的虚拟内存，文件被内存读取之后就会先储存到虚拟内存，等待内存把文件全部储存到虚拟内存之后，跟着就会把虚拟内存里储存的文件释放到原来的安装目录里了。
设置
虚拟内存的设置 对于虚拟内存主要设置两点，即内存大小和分页位置，内存大小就是设置虚拟内存最小为多少和最大为多少；而分页位置则是设置虚拟内存应使用那个分区中的硬盘空间  虚拟存储器。对于内存大小的设置，如何得到最小值和最大值呢？你可以通过下面的方法获得：选择“开始→程序→附件→系统工具→系统监视器”（如果系统工具中没有，可以通过“添加/删除程序”中的Windows安装程序进行安装）打开系统监视器，然后选择“编辑→添加项目”，在“类型”项中选择“内存管理程序”，在右侧的列表选择“交换文件大小”。这样随着你的操作，会显示出交换文件值的波动情况，你可以把经常要使用到的程序打开，然后对它们进行使用，这时查看一下系统监视器中的表现值，由于用户每次使用电脑时的情况都不尽相同，因此，最好能够通过较长时间对交换文件进行监视来找出最符合您的交换文件的数值，这样才能保证系统性能稳定以及保持在最佳的状态。 找出最合适的范围值后，在设置虚拟内存时，用鼠标右键点击“我的电脑”，选择“属性”，弹出系统属性窗口，选择“性能”标签，点击下面“虚拟内存”按钮，弹出虚拟内存设置窗口，点击“用户自己指定虚拟内存设置”单选按钮，“硬盘”选较大剩余空间的分区，然后在“最小值”和“最大值”文本框中输入合适的范围值。如果您感觉使用系统监视器来获得最大和最小值有些麻烦的话，这里完全可以选择“让Windows管理虚拟内存设置”。
调整分页位置
Windows 9x的虚拟内存分页位置，其实就是保存在C盘根目录下的一个  虚拟存储器虚拟内存文件（也称为交换文件）Win386.swp，它的存放位置可以是任何一个分区，如果系统盘C容量有限，我们可以把Win386.swp调到别的分区中，方法是在记事本中打开System.ini（C:\\Windows下）文件，在[386Enh]小节中，将“PagingDrive=C:WindowsWin 386.swp”，改为其他分区的路径，如将交换文件放在D:中，则改为“PagingDrive=D:Win386.swp”，如没有上述语句可以直接键入即可。 而对于使用Windows 2000和Windows XP的，可以选择“控制面板→系统→高级→性能”中的“设置→高级→更改”，打开虚拟内存设置窗口，在驱动器[卷标]中默认选择的是系统所在的分区，如果想更改到其他分区中，首先要把原先的分区设置为无分页文件，然后再选择其他分区。 
如果你的硬盘够大，那就请你打开”控制面板“中的“系统”，在“性能”选项中打开“虚拟内存”，选择第二项：用户自己设定虚拟内存设置，指向一个较少用的硬盘，并把最大值和最小值都设定为一个固定值，大小为物理内存的2倍左右。这样，虚拟存储器在使用硬盘时，就不用迁就其忽大忽小的差别，而将固定的空间作为虚拟内存，加快存取速度。虚拟内存的设置最好在“磁盘碎片整理”之后进行，这样虚拟内存就分布在一个连续的、无碎片文件的空间上，可以更好的发挥作用。
使用技巧
虚拟内存使用技巧 
对于虚拟内存如何设置的问题，微软已经给我们提供了官方的解决办法，  虚拟存储器对于一般情况下，我们推荐采用如下的设置方法：
(1)在Windows系统所在分区设置页面文件，文件的大小由你对系统的设置决定。具体设置方法如下：打开"我的电脑"的"属性"设置窗口，切换到"高级"选项卡，在"启动和故障恢复"窗口的"写入调试信息"栏，如果你采用的是"无"，则将页面文件大小设置为2MB左右，如果采用"核心内存存储"和"完全内存存储"，则将页面文件值设置得大一些，跟物理内存差不多就可以了。 
小提示：对于系统分区是否设置页面文件，这里有一个矛盾：如果设置，则系统有可能会频繁读取这部分页面文件，从而加大系统盘所在磁道的负荷，但如果不设置，当系统出现蓝屏死机(特别是STOP错误)的时候，无法创建转储文件 (Memory.dmp)，从而无法进行程序调试和错误报告了。所以折中的办法是在系统盘设置较小的页面文件，只要够用就行了。
(2)单独建立一个空白分区，在该分区设置虚拟内存，其最小值设置为物理  虚拟存储器内存的1.5倍，最大值设置为物理内存的3倍，该分区专门用来存储页面文件，不要再存放其它任何文件。之所以单独划分一个分区用来设置虚拟内存，主要是基于两点考虑：其一，由于该分区上没有其它文件，这样分区不会产生磁盘碎片，这样能保证页面文件的数据读写不受磁盘碎片的干扰；其二，按照Windows对内存的管理技术，Windows会优先使用不经常访问的分区上的 
页面文件，这样也减少了读取系统盘里的页面文件的机会，减轻了系统盘的压力。
(3)其它硬盘分区不设置任何页面文件。当然，如果你有多个硬盘，则可以为每个硬盘都创建一个页面文件。当信息分布在多个页面文件上时，硬盘控制器可以同时在多个硬盘上执行读取和写入操作。这样系统性能将得到提高。 
提示： 
允许设置的虚拟内存最小值为2MB，最大值不能超过当前硬盘的剩余空间值，同时也不能超过32位操作系统的内存寻址范围——4GB。
相关
虚拟存储器
virtual memory
为了给用户提供更大的随机存取空间而采用的一种存储技术。它将内存与外存结合使用，好像有一个容量极大的内存储器，工作速度接近于主存，每位成本又与辅存相近，在整机形成多层次存储系统。
虚拟存储器源出于英国ATLAS计算机的一级存储器概念。这种系统的主存为16千字的磁芯存储器，但中央处理器可用20位逻辑地址对主存寻址。到1970年，美国RCA公司研究成功虚拟存储器系统。IBM公司于1972年在IBM370系统上全面采用了虚拟存储技术。虚拟存储器已成为计算机系统中非常重要的部分。
虚拟存储器是由硬件和操作系统自动实现存储信息调度和管理的。它的工作过程包括6个步骤：①中央处理器访问主存的逻辑地址分解成组号a和组内地址b，并对组号a进行地址变换，即将逻辑组号a作为索引，查地址变换表，以确定该组信息是否存放在主存内。②如该组号已在主存内，则转而执行④；如果该组号不在主存内，则检查主存中是否有空闲区，如果没有，便将某个暂时不用的组调出送往辅存，以便将这组信息调入主存。③从辅存读出所要的组，并送到主存空闲区，然后将那个空闲的物理组号a和逻辑组号a登录在地址变换表中。④从地址变换表读出与逻辑组号a对应的物理组号a。⑤从物理组号a和组内字节地址b得到物理地址。⑥根据物理地址从主存中存取必要的信息。
调度方式有分页式、分段式、段页式3种。页式调度是将逻辑和物理地址空间都分成固定大小的页。主存按页顺序编号，而每个独立编址的程序空间有自己的页号顺序，通过调度辅存中程序的各页可以离散装入主存中不同的页面位置，并可据表一一对应检索。页式调度的优点是页内零头小，页表对程序员来说是透明的，地址变换快，调入操作简单；缺点是各页不是程序的独立模块，不便于实现程序和数据的保护。段式调度是按程序的逻辑结构划分地址空间，段的长度是随意的，并且允许伸长，它的优点是消除了内存零头，易于实现存储保护，便于程序动态装配；缺点是调入操作复杂。将这两种方法结合起来便构成段页式调度。在段页式调度中把物理空间分成页，程序按模块分段，每个段再分成与物理空间页同样小的页面。段页式调度综合了段式和页式的优点。其缺点是增加了硬件成本，软件也较复杂。大型通用计算机系统多数采用段页式调度。
虚拟存储器地址变换基本上有3种形虚拟存储器工作过程式：全联想变换、直接变换和组联想变换。任何逻辑空间页面能够变换到物理空间任何页面位置的方式称为全联想变换。每个逻辑空间页面只能变换到物理空间一个特定页面的方式称为直接变换。组联想变换是指各组之间是直接变换，而组内各页间则是全联想变换。
替换算法
替换规则用来确定替换主存中哪一部分，以便腾空部分主存，存放来自辅存要调入的那部分内容。常见的替换算法有4种。随机算法用软件或硬件随机数产生器确定替换的页面。先进先出先调入主存的页面先替换。近期最少使用算法替换最长时间不用的页面。最优算法替换最长时间以后才使用的页面。这是理想化的算法，只能作为衡量其他各种算法优劣的标准。
虚拟存储器的效率是系统性能评价的重要内容，它与主存容量、页面大小、命中率，程序局部性和替换算法等因素有关。
工作原理
虚拟存储器是由硬件和操作系统自动实现存储信息调度和管理的。它的工作过  虚拟存储器模型程包括6个步骤： ①中央处理器访问主存的逻辑地址分解成组号a和组内地址b，并对组号a进行地址变换，即将逻辑组号a作为索引，查地址变换表，以确定该组信息是否存放在主存内。
②如该组号已在主存内，则转而执行④；如果该组号不在主存内，则检查主存中是否有空闲区，如果没有，便将某个暂时不用的组调出送往辅存，以便将这组信息调入主存。
③从辅存读出所要的组，并送到主存空闲区，然后将那个空闲的物理组号a和逻辑组号a登录在地址变换表中。
④从地址变换表读出与逻辑组号a对应的物理组号a。
⑤从物理组号a和组内字节地址b得到物理地址。
⑥根据物理地址从主存中存取必要的信息。
调度方式有分页式、段式、段页式3种。页式调度是将逻辑和物理地址空间都分成固定大小的页。主存按页顺序编号，而每个独立编址的程序空间有自己的页号顺序，通过调度辅  存储模型存中程序的各页可以离散装入主存中不同的页面位置，并可据表一一对应检索。页式调度的优点是页内零头小，页表对程序员来说是透明的，地址变换快，调入操作简单；缺点是各页不是程序的独立模块，不便于实现程序和数据的保护。段式调度是按程序的逻辑结构划分地址空间，段的长度是随意的，并且允许伸长，它的优点是消除了内存零头，易于实现存储保护，便于程序动态装配；缺点是调入操作复杂。将这两种方法结合起来便构成段页式调度。在段页式调度中把物理空间分成页，程序按模块分段，每个段再分成与物理空间页同样小的页面。段页式调度综合了段式和页式的优点。其缺点是增加了硬件成本，软件也较复杂。大型通用计算机系统多数采用段页式调度。
虚实地址
1、实地址与虚地址 用户编制程序时使用的地址称为虚地址或逻辑地址，其对应的存储空间称  示意图为虚存空间或逻辑地址空间；而计算机物理内存的访问地址则称为实地址或物理地址，其对应的存储空间称为物理存储空间或主存空间。程序进行虚地址到实地址转换的过程称为程序的再定位。
2、虚存的访问过程
虚存空间的用户程序按照虚地址编程并存放在辅存中。程序运行时，由地址变换机构依据当时分配给该程序的实地址空间把程序的一部分调入实存。每次访存时，首先判断该虚地址所对应的部分是否在实存中：如果是，则进行地址转换并用实地址访问主存；否则，按照某种算法将辅存中的部分程序调度进内存，再按同样的方法访问主存。由此可见，每个程序的虚地址空间可以远大于实地址空间，也可以远小于实地址空间。前一种情况以提高存储容量为目的，后一种情况则以地址变换为目的。后者通常出现在多用户或多任务系统中：实存空间较大，而单个任务并不需要很大的地址空间，较小的虚存空间则可以缩短指令中地址字段的长度。
异构体系
从虚存的概念可以看出，主存-辅存的访问机制与cache-主存的访问机制是类似的。这是由cache存储器、主存和辅存构成的三级存储体系中的两个层次。cache和主存之间以及主存和辅存之间分别有辅助硬件和辅助软硬件负责地址变换与管理，以便各级存储器能够组成有机的三级存储体系。cache和主存构成了系统的内存，而主存和辅存依靠辅助软硬件的支持构成了虚拟存储器。
在三级存储体系中，cache-主存和主存-辅存这两个存储层次有许多相  地址同点：
(1)出发点相同：二者都是为了提高存储系统的性能价格比而构造的分层存储体系，都力图使存储系统的性能接近高速存储器，而价格和容量接近低速存储器。
(2)原理相同：都是利用了程序运行时的局部性原理把最近常用的信息块从相对慢速而大容量的存储器调入相对高速而小容量的存储器。
存储体系
但cache-主存和主存-辅存这两个存储层次也有许多不同之处：
(1)侧重点不同：cache主要解决主存与CPU的速度差异问题；而就性能价格比的提高而言，虚存主要是解决存储容量问题，另外还包括存储管理、主存分配和存储保护等方面。  存储体系(2)数据通路不同：CPU与cache和主存之间均有直接访问通路，cache不命中时可直接访问主存；而虚存所依赖的辅存与CPU之间不存在直接的数据通路，当主存不命中时只能通过调页解决，CPU最终还是要访问主存。
(3)透明性不同：cache的管理完全由硬件完成，对系统程序员和应用程序员均透明；而虚存管理由软件（操作系统）和硬件共同完成，由于软件的介入，虚存对实现存储管理的系统程序员不透明，而只对应用程序员透明（段式和段页式管理对应用程序员“半透明”）。
(4)未命中时的损失不同：由于主存的存取时间是cache的存取时间的5～10倍，而主存的存取速度通常比辅存的存取速度快上千倍，故主存未命中时系统的性能损失要远大于cache未命中时的损失。 虚存机制要解决的关键问题 (1)调度问题：决定哪些程序和数据应被调入主存。  存储体系(2)地址映射问题：在访问主存时把虚地址变为主存物理地址（这一过程称为内地址变换）；在访问辅存时把虚地址变成辅存的物理地址（这一过程称为外地址变换），以便换页。此外还要解决主存分配、存储保护与程序再定位等问题。
(3)替换问题：决定哪些程序和数据应被调出主存。
(4)更新问题：确保主存与辅存的一致性。
在操作系统的控制下，硬件和系统软件为用户解决了上述问题，从而使应用程序的编程大大简化。
页式调度
1、页式虚存地址映射
页式虚拟存储系统中，虚地址空间被分成等长大小的页，称为逻辑页；主存空间也被分成同样大小的页，称为物理页。相应地，虚地址分为两个字段：高字段为逻辑页号，低字段为页内地址（偏移量）；实存地址也分两个字段：高字段为物理页号，低字段为页内地址。通过页表可以把虚地址（逻辑地址）转换成物理地址。 在大多数系统中，每个进程对应一个页表。页表中对应每一个虚存页面  页式虚拟存储系统有一个表项，表项的内容包含该虚存页面所在的主存页面的地址（物理页号），以及指示该逻辑页是否已调入主存的有效位。地址变换时，用逻辑页号作为页表内的偏移地址索引页表（将虚页号看作页表数组下标）并找到相应物理页号，用物理页号作为实存地址的高字段，再与虚地址的页内偏移量拼接，就构成完整的物理地址。现代的中央处理机通常有专门的硬件支持地址变换。
2、转换后援缓冲器
由于页表通常在主存中，因而即使逻辑页已经在主存中，也至少要访问两次物理存储器才能实现一次访存，这将使虚拟存储器的存取时间加倍。为了避免对主存访问次数的增多，可以对页表本身实行二级缓存，把页表中的最活跃的部分存放在高速存储器中，组成快表。这个专用于页表缓存的高速存储部件通常称为转换后援缓冲器(TLB)。保存在主存中的完整页表则称为慢表。
3、内页表和外页表
页表是虚地址到主存物理地址的变换表，通常称为内页表。与内页表对应的还有外页表，用于虚地址与辅存地址之间的变换。当主存缺页时，调页操作首先要定位辅存，而外页表的结构与辅存的寻址机制密切相关。例如对磁盘而言，辅存地址包括磁盘机号、磁头号、磁道号和扇区号等。
段式调度
段式虚拟存储系统
段是按照程序的自然分界划分的长度可以动态改变的区域。通常，程序员把子程序、操作数和常数等不同类型的数据划分到不同的段中，并且每个程序可以有多个相同类型的段。在段式虚拟存储系统中，虚地址由段号和段内地址（偏移量）组成。虚地址到实主存地址的变换通过段表实现  页式虚拟存储系统。每个程序设置一个段表，段表的每一个表项对应一个段。每个表项至少包含下面三个字段： (1)有效位：指明该段是否已经调入实存。
(2)段起址：指明在该段已经调入实存的情况下，该段在实存中的首地址。
(3)段长：记录该段的实际长度。设置段长字段的目的是为了保证访问某段的地址空间时，段内地址不会超出该段长度导致地址越界而破坏其他段。
段表本身也是一个段，可以存在辅存中，但一般驻留在主存中。
段式虚拟存储器有许多优点：
①段的逻辑独立性使其易于编译、管理、修改和保护，也便于多道程序共享。
②段长可以根据需要动态改变，允许自由调度，以便有效利用主存空间。
段式虚拟存储器也有一些缺点：
①因为段的长度不固定，主存空间分配比较麻烦。
②容易在段间留下许多外碎片，造成存储空间利用率降低。
③由于段长不一定是2的整数次幂，因而不能简单地像分页方式那样用虚地址和实地址的最低若干二进制位作为段内偏移量，并与段号进行直接拼接，必须用加法操作通过段起址与段内偏移量的求和运算求得物理地址。因此，段式存储管理比页式存储管理方式需要更多的硬件支持。
段页式调度
段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。实存被等分成页。每个程序则先按逻辑结构分段，每段再按照实存的页大小分页，程序按页进行调入和调出操作，但可按段进行编程、保护和共享。它把程序按逻辑单位分段以后，再把每段分成固定大小的页。程  [1]序对主存的调入调出是按页面进行的，但它又可以按段实现共享和保护，兼备页式和段式的优点。缺点是在映象过程中需要多次查表。在段页式虚拟存储系统中，每道程序是通过一个段表和一组页表来进行定位的。段表中的每个表目对应一个段，每个表目有一个指向该段的页表起始地址及该段的控制保护信息。由页表指明该段各页在主存中的位置以及是否已装入、已修改等状态信息。如果有多个用户在机器上运行，多道程序的每一道需要一个基号,由它指明该道程序的段表起始地址。
虚拟地址格式如下：基号段号页号页内地址
变换算法
虚拟存储器地址变换基本上有3种形虚拟存储器工作过程式：全联想变换、直接变换和组联想变换。任何逻辑空间页面能够变换到物理空间任何页面位置的方式称为全联想变换。每个逻辑空间页面只能变换到物理空间一个特定页面的方式称为直接变换。组联想变换是指各组  段式管理图之间是直接变换，而组内各页间则是全联想变换。替换规则用来确定替换主存中哪一部分，以便腾空部分主存，存放来自辅存要调入的那部分内容。常见的替换算法有4种。 ①随机算法：用软件或硬件随机数产生器确定替换的页面。
②先进先出：先调入主存的页面先替换。
③近期最少使用算法：替换最长时间不用的页面。
④最优算法：替换最长时间以后才使用的页面。这是理想化的算法，只能作为衡量其他各种算法优劣的标准。
虚拟存储器的效率是系统性能评价的重要内容，它与主存容量、页面大小、命中率，程序局部性和替换算法等因素有关。