admin管理员组

文章数量:1567288

2024年1月6日发(作者:)

虚拟存储器

什么是虚拟存储器?它存储介质是什么?

1、虚拟内存的作用 内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内里储存的文件释放到原来的安装目录里了。下面,就让我们一起来看看如何对虚拟内存进行设置吧。

2、虚拟内存的设置 对于虚拟内存主要设置两点,即内存大小和分页位置,内存大小就是设置虚拟内存最小为多少和最大为多少;而分页位置则是设置虚拟内存应使用那个分区中的硬盘空间。对于内存大小的设置,如何得到最小值和最大值呢?你可以通过下面的方法获得:选择“开始→程序→附件→系统工具→系统监视器”(如果系统工具中没有,可以通过“添加/删除程序”中的Windows安装程序进行安装)打开系统监视器,然后选择“编辑→添加项目”,在“类型”项中选择“内存管理程序”,在右侧的列表选择“交换文件大小”。这样随着你的操作,会显示出交换文件值的波动情况,你可以把经常要使用到的程序打开,然后对它们进行使用,这时查看一下系统监视器中的表现值,由于用户每次使用电脑时的情况都不尽相同,因此,最好能够通过较长时间对交换文件进行监视来找出最符合您的交换文件的数值,这样才能保证系统性能稳定以及保持在最佳的状态。 找出最合适的范围值后,在设置虚拟内存时,用鼠标右键点击“我的电脑”,选择“属性”,弹出系统属性窗口,选择“性能”标签,点击下面“虚拟内存”按钮,弹出虚拟内存设置窗口,点击“用户自己指定虚拟内存设置”单选按钮,“硬盘”选较大剩余空间的分区,然后在“最小值”和“最大值”文本框中输入合适的范围值。如果您感觉使用系统监视器来获得最大和最小值有些麻烦的话,这里完全可以选择“让Windows管理虚拟内存设置”。 3、调整分页位置 Windows 9x的虚拟内存分页位置,其实就是保存在C盘根目录下的一个虚拟内存文件(也称为交换文件),它的存放位置可以是任何一个分区,如果系统盘C容量有限,我们可以把调到别的分区中,方法是在记事本中打开(C:Windows

下)文件,在[386Enh]小节中,将“PagingDrive=C:WindowsWin ”,改为其他分区的路径,如将交换文件放在D:中,则改为“PagingDrive=D:”,如没有上述语句可以直接键入即可。 而对于使用Windows 2000和Windows XP的,可以选择“控制面板→系统→高级→性能”中的“设置→高级→更改”,打开虚拟内存设置窗口,在驱动器[卷标]中默认选择的是系统所在的分区,如果想更改到其他分区中,首先要把原先的分区设置为无分页文件,然后再选择其他分区。

如果你的硬盘够大,那就请你打开”控制面板“中的“系统”,在“性能”选项中打开“虚拟内存”,选择第二项:用户自己设定虚拟内存设置,指向一个较少用的硬盘,并把最大值和最小值都设定为一个固定值,大小为物理内存的2倍左右。这样,虚拟存储器在使用硬盘时,就不用迁就其忽大忽小的差别,而将固定的空间作为虚拟内存,加快存取速度。虚拟内存的设置最好在“磁盘碎片整理”之后进行,这样虚拟内存就分不在一个连续的、无碎片文件的空间上,可以更好的发挥作用。

虚拟内存使用技巧

对于虚拟内存如何设置的问题,微软已经给我们提供了官方的解决办法,对于一般情况下,我们推荐采用如下的设置方法:

(1)在Windows系统所在分区设置页面文件,文件的大小由你对系统的设置决定。具体设置方法如下:打开"我的电脑"的"属性"设置窗口,切换到"高级"选项卡,在"启动和故障恢复"窗口的"写入调试信息"栏,如果你采用的是"无",则将页面文件大小设置为2MB左右,如果采用"核心内存存储"和"完全内存存储",则将页面文件值设置得大一些,跟物理内存差不多就可以了。

小提示:对于系统分区是否设置页面文件,这里有一个矛盾:如果设置,则系统有可能会频繁读取这部分页面文件,从而加大系统盘所在磁道的负荷,但如果不设置,当系统出现蓝屏死机(特别是STOP错误)的时候,无法创建转储文件 (),从而无法进行程序调试和错误报告了。所以折中的办法是在系统盘设置较小的页面文件,只要够用就行了。

(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种。①随机算法:用软件或硬件随机数产生器确定替换的页面。②先进先出:先调入主存的页面先替换。③近期最少使用算法:替换最长时间不用的页面。④最优算法:替换最长时间以后才使用的页面。这是理想化的算法,只能作为衡量其他各种算法优劣的标准。

虚拟存储器的效率是系统性能评价的重要内容,它与主存容量、页面大小、命中率,程序局部性和替换算法等因素有关。

虚拟存储器的基本概念

虚拟存储器是一个逻辑模型,并不是一个实际的物理存储器。

虚拟存储器不仅解决了存储容量和存取速度之间的矛盾,而且也是管理存储设备的有效方法。有了虚拟存储器,用户无需考虑所编程序在主存中是否放得下或放在什么位置等问题。

虚拟地址、虚拟地址空间的定义,物理地址、物理地址空间的定义。

虚拟存储器和Cache都是基于程序局部性原理,它们的相同点在于:

1)

把程序中最近常用的部分驻留在高速度的存储器中。

2)

一旦这部分变的不常用了,把它们送回到低速的存储器中。

3)

这种换入、换出操作是由硬件或是OS完成,对用户透明。

4)

力图使存储系统的性能接近高速存储器,价格接近低速存储器。

两者的不同点在于:

1)

Cache用硬件实现,对操作系统透明,而虚拟存储器是用软件、硬件相结合组成。

2)

虚拟存储器对未命中更加明感。

主存-外存的基本信息传送单位有:

段式管理

段是利用程序的模块化性质,按照程序的逻辑结构划分成的多个相对独立部分。把段作为基本信息单位在主存-外存之间传送和定位是比较合理的。把主存按段分配的存储管理方式称为段式管理。

虚拟地址由段号和段内地址组成,地址变换需要一个段表。

优点:段的分界与程序的自然分界相对应;段的逻辑独立性使它易于编译、管理、修改和保护。也便于多进程序共享;某些类型的段(堆栈、队列)具有动态可变长度,允许自由调度以便有效利用主存空间。

缺点:因为段的长度各不相同,段的起点和终点不定.给主存空间分配带来麻烦。而且容易在段间留下许多空余的零碎存储空间不好利用,造成浪费。

页式管理

页式管理系统的基本信息传送单位是定长的页。主存的物理空间被划分为等长的固定区域,称为页面。

优点:页面的起点相终点地址是固定的,给造页表带来了方便。新页调入主存也很容易掌握,只要有空白页面就可容纳。比段式管理系统的段外空间浪费要小得多。

缺点:由于页不是逻辑上独立的实体,所以处理、保护和共享都不及段式来得方便。

段页式管理

段式存储和页式存储管理各有其优缺点,可以采用分段和分页结合的段页式存储管理系统。程序按模块分段,段内再分页,进入主存仍以页为基本信息传送单位。用段表和页表(每段一个页表)进行两级定位管理。

基本原则:段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。在这种方式中,把程序按逻辑单位分段以后,再把每段分成固定大小的页。程序对主存的调入调出是按页面进行的,但它又可以按段实现共享和保护。因此,它可以兼备页式和段式系统的优点。其缺点是在地址映象过程中需要多次查表。在段页式虚拟存储系统中,每道程序是通过一个段表和一组页表来进行定位的。段

表中的每个表目对应一个段,每个表目有一个指向该段的页表起始地址(页号)及该段的控制保护信息。由页表指明该段各页在主存中的位置以及是否已装入、已修改等状态信息。

层次页表:当一个页表的大小超过一个页面的大小时,页表就可能分成几个页,分存于几个不连续的主存页面中,然后,将这些页表的起始地址又放入一个新页表中。这样,就形成了二级页表层次。一个大的程序可能需要多级页表层次。

逻辑页、物理页的概念。

虚拟地址到主存实地址的变换是由放在主存的页表来实现。在页表中,对应每一个虚拟逻辑页号有一个表目,表目内容至少要包含该逻辑页所在的主存页面地址(物理页号),用它作为实(主)存地址的高字段,与虚存地址的页内行地址字段相拼接,就产生了完整的实主存地址,据此访问主存。

为了提高查询页表的速度,可使用高速存储器或是相联存储器作为快表,也可以采用快表、慢表相结合的方法。

替换算法

与Cache相似,虚拟存储器也需要使用到替换算法。方法基本与Cache的相同,但也有不同之处,主要体现在:

对缺页(及未命中)更为明感

页面替换由软件(OS)完成

页面替换的选择余地大

具体算法有FIFO、LRU和LRU+FIFO。

在保护模式下,CPU的寻址方式与实模式不同。实模式下的寻址方式是“段基址+段偏移量”,段的默认大小为64K,所有段都是可读/写的,唯有代码段式可执行的,段的特权级为0。而在保护模式下内存是“线性的”,因为这时段寄存器的意义不同,它里面存放不再是段基址,而是存放段选择子,这个值是不直接参与寻址的,只是全局描述符(Global Description Table,GDT)或本地描述符(Local Description Table,LDT)的一个指针,不同段寄存器有不同的属性(读、写、执行、特权级等),如下图一所示:

虚拟内存不是真正的内存,它通过映射的方法,使可用的虚拟地址达到4GB,每个应用程序可以被分配2GB的虚拟地址,剩下的2GB的虚拟地址留给操作系统自己用。物理内存中,操作系统和系统的DLL代码需要供每个应用程序使用,所以在所有的时间必须映射;用户EXE程序只在自己的时间片内被映射,而用户DLL则有选择地被映射。

简单地说,虚拟内存的实现方法和过程如下:

1、当一个应用程序被启动时,操作系统就创建一个新进程,并给每个进程分配2GB的虚拟地址(不是内存,而是地址);

2、虚拟内存管理器将应用程序的代码映射到每个应用程序的虚拟地址的某个位置,并把当前所需要的代码读取到物理内存地址中(注意,虚拟地址和应用程序代码在物理内存中的位置是没有关系的);

3、如果使用动态链接库DLL,DLL也被映射到进程的虚拟地址空间,在需要的时候被调入物理内存;

4、其他项目(如数据、堆栈等)的空间是从物理内存中分配的,并被映射到地址空间;

5、应用程序通过他的虚拟地址空间中的地址开始执行,然后虚拟内存管理器把每次的内存访问映射到物理位置。

使用虚拟内存的好处是:简化了内存的管理,并可弥补物理内存的不足;可以防止多任务环境下各个应用程序之间的冲突。

本文标签: 页面主存虚拟内存设置内存