虚拟内来自存是计算机系统360百科内存管理的一种技术。它使得应用程序认林为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
目值元属前,大多数操作系统都使用了虚拟内存,如Windows家族的"虚拟内存";Linux的"交换掉革第等省乡按论空间"等。
Windows 8/8.1 操作系统如出现开机时卡在Windows徽标页面,无法进入系统,必须强制关机再重启才能打开时,可适当调整虚拟内存设置解决。
虚拟内存别称虚拟存储器(Virtual Memory)。团呢宣已电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用来自虚拟存储器进行补偿。它将计算机的RAM和硬乱轮波助呢斗似比轴亲盘上的临时空间组合。当RAM运行速率缓慢时,它便将数据从RA360百科M移动到称为"分页文件"的空间今中。将数据移入分页文件可释放RAM,以便完成工作。 一般而言,计算机的RAM容量越大,鸡程序运行得越快。若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试通过增加虚拟内存来进行补偿。但是,计算机从RAM读取数据的速率要比从硬盘施铁茶海室抗据换读取数据的速率快,因而扩增RAM容量(可加内存条)是最佳选择。
信充杀张露向创州虚拟内存设置界面周训顾顶天且赶按 虚拟内存是Windows 为作为内存使用的一部分硬盘空间。虚拟内存在硬盘上其实就是为一个硕大无比的文迅片层套置药侵破否阻五件,文件名是PageFil你e.Sys,通常状态下是看不到的。必须关闭资源管理器对系统文件的保护功能才能看到这个文件。虚拟内存有时候也被称为是"页面文件"就是从这个文件的文件名中来的。
内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分植话快大剧排清与刘裂仍空间即称为虚拟内存,虚拟内呀当似存在硬盘上的存在形式就是 PAGEFILE.SYS这个页面文件。
虚拟路从里图存储器是由硬件和操作系统自章试扬行厚动实现存储信息调度和管理的。治还话握杂清督它的工作过程包括6个步骤:
①中央处理器访问主存的逻辑地址分解成组号a和组内地址b,并对组号a进行地址变换,即将逻辑组号a作为索引,查地址变换表,以确收胞困让湖况香速课纸队定该组信息是否存放在主存内。
钢妒 ②如该组号已在主存内,则转而执行④;如果该组号不在主存内,则检查主存中是否有空闲区,如足校美宁果没有,便将某个暂时不用的组调出送往辅存,以便将这组信息调入主存。
③从辅存读出所要的组,并送到主存空闲区,然后将那个空闲的物理组号a和逻辑组号a登录在地址变换表中。
④从地址变换表读出与逻辑组号a对应的物理组号a。
⑤从物理组号a和组内字节地址b得到物理地址。
⑥根据物理地址从主存中存取必要的信息。
调度方式有分页式、段式、段页式3种。页式调度是将逻辑和物理地址空间都分成固定大小的页。主存按页顺序编号,而每个独立编址的程序空间有自己的页号顺序,通过调度辅存中程序的各页可以离散装入主存中不同的页面位置,并可据表一一对应检索。页式调度的优点是页内零头小,页表对程序员来说是透明的,地址变换快,调入操作简单;缺点是各页不是程序的独立模块,不便于实现程序和数据的保护。段式调度是按程序的逻辑结构划分地址空间,段的长度是随意的,并且允许伸长,它的优点是消除了内存零头,易于实现存储保护,便于程序动态装配;缺点是调入操作复杂。将这两种方法结合起来便构成段页式调度。在段页式调度中把物理空间分成页,程序按模块分段,每个段再分成与物理空间页同样小的页面。段页式调度综合了段式和页式的优点。其缺点是增加了硬件成本,软件也较复杂。大型通用计算机系统多数采用段页式调度。
实地址与虚地址
用户编制程序时使用的地址称为虚地址或逻辑地址,其对应的存储空间称为虚存空间或逻辑地址空间;而计算机物理内存的访问地址则称为实地址或物理地址,其对应的存储空间称为物理存储空间或主存空间。程序进行虚来自地址到实地址转换的过程称为程序的再定位。
虚存的访问过程
虚存空间的用户程真客脱稳差征序按照虚地址编程并存放在辅存中。程序运行时,由地址变换机构依据当况亲斗超究时分配给该程序的实地址空间把程序的一部分调入实存。每次访存时,首先判断该虚地址所对应的部分是否在实存中:如果是,则进行地址转换并用实360百科地址访问主存;否则,按照某种算法将辅存中的部分程序调度进内存,再按同样的方法访问主存。由此可见,每个程序的虚地希你复眼址空间可以远大于实地址空间,也可以远小于实地址空间。前一种情况以提高存储容量为目的,后一种情况则以地址变换为目的。后者通常出现在多用户或多任务系统中:实存空间较大,而单个任务并不需要很大的地址空间,较小的虚存空间则可以缩短凯渐临控封氢给铁意深指令中地址字段的长度。
从虚存的概念可以看出,主存-辅存的访问机制与cache-主存的访问机制是类似的。这是由cache晶式愿沿表风存储器、主存和辅存构成的三级存储体系中的两哥个层次。cache和增兰雷斤反非曾主存之间以及主存和辅存之间分别有辅助硬件和辅助软硬件负责地址变换与管理,以便各级存储器能够组成有机的三级存储体系。cache和主存构成了系统的内存,而主存和辅存依靠辅助软硬件的支持构成了虚拟存储器。
在三级存储体系中,cache-主存和主存-辅存这两个存储层次有许多相则岁厚被记程本同点:
(1)出术历想若斯发点相同:二者都是为了提高存储系统备位短火领的性能价格比而构造的分层存储体系,都力图使存储系统的性能接近高速存储器,而价格和容量接近低速存储器。
(2)息沿原理相同:都是利用了程序运行时品的局部性原理把最近常用的信息块从相对慢速而大容量的存储器调入相松杨岁宁问占级高对高速而小容量的存储器。
但cache-主存和主存-辅存这两个存储层次也有许多不同之处:
(1)侧重点不同娘岁生员土倒急:cache主要解决主存与CPU的速度差异问题酸似千山班轻;而就性能价格比的提高而言,虚存主要是解决存储容量问题,另外还包括存储管理、主存分配和存储保护等方面。
(2)数据通路不同:CPU与cache和主存之间均有直接访问通路,ca乐罗医歌子纪状列蛋斯che不命中时可直接访问主存;而虚存所依赖的辅存与CPU之间不存在直接的数据通路,当主存不命中时只能通过调页解决,CPU最终还是要团象季美滑觉鲜则积致酒访问主存。
(3)透明性不同:cache的管理完全由硬件完成,对系统程序员和应用程序员均透明;而虚存管理由软件(操初川积苗影但棉用觉四精作系统)和硬件共同完成,由于软件的介入,虚存对实现存储管理的系统程序员不透明,而只对应用程序员透明(段式和段页式管理对应用程序员"半透明")。
(4)未命中时的损失不同:由于主存的存取时间是cache的存取时间的5~10倍,而主存的存取速度通常比辅存的存取速度快上千倍,故主存未命中时系统的性能损失要远大于cache未命中时的损失。
(1)调度问题:决定哪些程序和数据应被调入主存。
(2)地址映射问题:在访问主存时把虚地址变为主存物理地址(这一过程称为内地址变换);在访问辅存时把虚地址变成辅存的物理地址(这一过程称为外地址变换),以便换页。此外还要解决主存分配、存储保护与程序再定位等问题。
(3)替换问题:决定哪些程序和数据应被调出主存。
(4)更新问题:确保主存与辅存的一致性。
在操作系统的控制下,硬件和系统软件为用户解决了上述问题,从而使应用程序的编程大大简化。
1、页式虚存地址映射页式虚拟存储系统中,虚地址空间被分成等长大小的页,称为逻辑页;主存空间也被分成同样大小的页,称为物理页。相应地,虚地址分为两个字段:高字段为逻辑页号,低字段为页内地址(偏移量);实存地址也分两个字段:高字段为物理页号,低字段为页内地址。通过页表可以把虚地址(逻辑地址)转换成物理地址。
在大多数系统中,每个进程对应一个页表。页表中对应每一个虚存页面有一个表项,表项的内容包含该虚存页面所在的主存页面的地址(物理页号),以及指示该逻辑页是否已调入主存的有效位。地址变换时,用逻辑页号作为页表内的偏移地址索引页表(将虚页号看作页表数组下标)并找到相应物理页号,用物理页号作为实存地址的高字段,再与虚地址的页内偏移量拼接,就构成完整的物理地址。现代的中央处理机通常有专门的硬件支持地址变换。
2、转换后援缓冲器由于页表通常在主存中,因而即使逻辑页已经在主存中,也至少要访问两次物理存储器才能实现一次访存,这将使虚拟存储器的存取时间加倍。为了避免对主存访问次数的增多,可以对页表本身实行二级缓存,把页表中的最活跃的部分存放在高速存储器中,组成快表。这个专用于页表缓存的高速存储部件通常称为转换后援缓冲器(TLB)。保存在主存中的完整页表则称为慢表。
3、内页表是虚地址到主存物理地址的变换表,通常称为内页表。与内页表对应的还有外页表,用于虚地址与辅存地址之间的变换。当主存缺页时,调页操作首先要定位辅存,而外页表的结构与辅存的寻址机制密切相关。例如对磁盘而言,辅存地址包括磁盘机号、磁头号、磁道号和扇区号等。
段是按照程序的自然分界划分的长度可以动态改变的区域。通常,程序员把子程序、操作数和常数等不同类型的数据划分到不同的段中,并且每个程序可以有多个相同类型的段。在段式虚拟存储系统中,虚地址由段号和段内地址(偏移量)组成。虚地址到实主存地址的变换通过段表实现。每个程序设置一个段表,段表的每一个表项对应一个段。每个表项至少包含下面三个字段:
(1)有效位:指明该段是否已经调入实存。
(2)段起址:指明在该段已经调入实存的情况下,该段在实存中的首地址。
(3)段长:记录该段的实际长度。设置段长字段的目的是为了保证访问某段的地址空间时,段内地址不会超出该段长度导致地址越界而破坏其他段。段表本身也是一个段,可以存在辅存中,但一般驻留在主存中。
段式虚拟存储器有许多优点:
①段的逻辑独立性使其易于编译、管理、修改和保护,也便于多道程序共享。②段长可以根据需要动态改变,允许自由调度,以便有效利用主存空间。段式虚拟存储器也有一些缺点:
①因为段的长度不固定,主存空间分配比较麻烦。②容易在段间留下许多外碎片,造成存储空间利用率降低。
③由于段长不一定是2的整数次幂,因而不能简单地像分页方式那样用虚地址和实地址的最低若干二进制位作为段内偏移量,并与段号进行直接拼接,必须用加法操作通过段起址与段内偏移量的求和运算求得物理地址。因此,段式存储管理比页式存储管理方式需要更多的硬件支持。
段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。实存被等分成页。每个程序则先按逻辑结构分段,每段再按照实存的页大小分页,程序按页进行调入和调出操作,但可按段进行编程、保护和共享。它把程序按逻辑单位分段以后,再把每段分成固定大小的页。程序对主存的调入调出是按页面进行的,但它又可以按段实现共享和保护,兼备页式和段式的优点。缺点是在映象过程中需要多次查表。在段页式虚拟存储系统中,每道程序是通过一个段表和一组页表来进行定位的。段表中的每个表目对应一个段,每个表目有一个指向该段的页表起始地址及该段的控制保护信息。由页表指明该段各页在主存中的位置以及是否已装入、已修改等状态信息。如果有多个用户在机器上运行,多道程序的每一道需要一个基号,由它指明该道程序的段表起始地址。虚拟地址格式如下:
基号 段号 页号 页内地址
虚拟存储器地址变换基本上有3种形虚拟存储器工作过程式:全联想变换、直接变换和组联想变换。任何逻辑空间页面能够变换到物理空间任何页面位置的方式称为全联想变换。每个逻辑空间页面只能变换到物理空间一个特定页面的方式称为直接变换。组联想变换是指各组之间是直接变换,而组内各页间则是全联想变换。替换规则用来确定替换主存中哪一部分,以便腾空部分主存,存放来自辅存要调入的那部分内容。常见的替换算法有4种。
①随机算法:用软件或硬件随机数产生器确定替换的页面。
②先进先出:先调入主存的页面先替换。
③近期最少使用算法(LRU,Least Recently Used):替换最长时间不用的页面。
④最优算法:替换最长时间以后才使用的页面。这是理想化的算法,只能作为衡量其他各种算法优劣的标准。
虚拟存储器的效率是系统性能评价的重要内容,它与主存容量、页面大小、命中率,程序局部性和替换算法等因素有关。[
【1】、感染病毒:有些病毒发作时会占用大量内存空间,导致系统出现内存不足问题。
【2】、虚拟内存设置不当:通常,应设置为物理内存大小的2倍。若设置过小,则会影响系统程序的正常运行。此时便需重设虚拟内存数值,以"Windows XP"为例,右击"我的电脑",选择"属性",在"高级"标签页点击"性能"框中的"设置"按钮,切换至"高级"标签页,后在"虚拟内存"框中点击"更改"按钮,接着重设虚拟内存数值,再点"设置"并"确定",完后重启系统即可。
【3】、系统盘空间不足:在默认情况下,虚拟内存是以名为"Pagefile.sys"的交换文件存于硬盘的系统分区中。若系统盘剩余容量过小,即会出现该问题。系统盘至少应留有300MB的可用空间,当然此数值需据用户的实际需要而定。尽量不要将各种应用软件装在系统盘,以保证有足够的空间供虚拟内存文件使用,且最好将虚拟内存文件安放至非系统盘内。
【4】、System用户权限设置不当:基于NT内核的Windows系统启动时,System用户会为系统创建虚拟内存文件。有些用户为了系统的安全,采用NTFS文件系统,但却取消了System用户在系统盘"写入"和"修改"的权限,这样就无法为系统创建虚拟内存文件,运行大型程序时,也会出现此类问题。对策:重新赋予System用户"写入"和"修改"的权限即可。(注:该仅限于使用NTFS文件系统的用户。)
如何确定虚拟内存大小?
由系统或系统优化软件分配或设置为物理内存的1.5-3倍。
相对于设置步骤复杂的Linux系统,Windows系统下对虚拟内存的设置比较简单:
事实上,严格按照1.5-3倍的倍数关系来设置并不科学,因此我们可以根据系统的实际应用情况进行设置。在这过程中需要用到Windows 2000/XP Pro/2003自带的性能监视器。
虚拟内存的位置
在设置虚拟内存的时候还需要注意,如果你有超过一块硬盘,那么最好能把分页文件设置在没有安装操作系统或应用程序的硬盘上,或者所有硬盘中速率最快的硬盘上。这样在系统繁忙的时候才不会产生同一个硬盘既忙于读取应用程序的数据又同时进行分页操作的情况。相反,如果应用程序和分页文件在不同的硬盘上,这样才能最大程度降低硬盘利用率,同时提高效率。当然,如果你只有一个硬盘,那么把页面文件设置在其他分区,也不会有提高磁盘效率的效果。
虚拟内存页面文件与磁盘碎片
由于虚拟内存使用了硬盘,硬盘上非连续写入的文件会产生磁盘碎片,因此一旦用于实现虚拟内存的文件或分区过于零碎,会加长硬盘的寻道时间,影响系统性能。有观点误认为Windows系统频繁读写pagefile.sys就会产生磁盘碎片,实则不然。因为pagefile.sys文件一旦创立,在分区中的分布连续形式就固定下来,文件内部读写并不增加或减少pagefile.sys的文件大小。仅当页面文件告罄后系统创建的temppf.sys会带来磁盘碎片。 而在Linux系统中,将用于虚拟内存的部分置于单独的分区中,不影响其他的分区或文件,则基本杜绝了磁盘碎片带来的影响。
虚拟内存太低的解决办法
一般windowsXP默认情况下是利用C盘的剩余空间来做虚拟内存的,因此,C盘的剩余空间越大,对系统运行就越好,虚拟内存是随着你的使用而动态地变化的,这样C盘就容易产生磁盘碎片,影响系统运行速率,所以,最好将虚拟内存设置在其它分区,如D盘中。查看虚拟内存设置情况如下:
右键点"我的电脑",左键点"属性",点选"高级"选项卡,点"性能"里的"设置"按钮,再选"高级"选项卡,点下面的"更改"按钮,所弹出的窗口就是虚拟内存设置窗口,一般默认的虚拟内存是从小到大的一段取值范围,这就是虚拟内存变化大小的范围,最好给它一个固定值,这样就不容易产生磁盘碎片了,具体数值根据你的物理内存大小来定,一般为物理内存的1.5到3倍,如512M内存,可以设置256-768MB(内存+虚拟内存之和一般比正常占用高256MB即可)。1GB的内存的话,设为128-1024MB(内存+虚拟内存之和一般比正常占用高256-512MB即可),2GB内存以上的话,一般可以禁用虚拟内存了,部分确实会使用大量内存的人,如玩大型3D游戏、制作大幅图片、3D建模等,并收到系统内存不足警告的,才需要酌情设定虚拟内存,设置方法如下:
假设内存为256M,虚拟内存放在D盘,先要将默认的清除,保持C盘为选中状态,单选"无分页文件(N)"再按"设置"按钮,此时C盘旁的虚拟内存就消失了,然后选中D盘,单选"自定义大小",在下面的"初始大小"和"最大值"两个方框里都添上512,再点一下"设置"按钮,会看到D盘的旁边出现了"512-512"的字样,这样就说明设置好了,再一路确定,最终,系统会要重新启动,重启一下,便完成了设置。
手动设置
找出最合适的虚拟内存大小范围值后,
①用右键点击桌面上的"我的电脑"图标,在出现的右键菜单中选"属性"选项打开"系统属性"窗口。在窗口中点击"高级"选项卡,出现高级设置的对话框
②点击"性能"区域的"设置"按钮,在出现的"性能选项"窗口中选择"高级"选项卡,打开其对话框。
③在该对话框中可看到关于虚拟内存的区域,点击"更改"按钮进入"虚拟内存"的设置窗口。选择一个有较大空闲容量的分区,勾选"自定义大小"前的复选框,将具体数值填入"初始大小"、"最大值"栏中,而后依次点击"设置→确定"按钮即可,最后重新启动计算机使虚拟内存设置生效。
调整分页位置
Windows9x的虚拟内存分页位置,其实就是保存在C盘根目录下的一个虚拟内存文件(也称为交换文件)Win386.swp,它的存放位置可以是任何一个分区,如果系统盘C容量有限,我们可以把Win386.swp调到别的分区中,方法是在记事本中打开System.ini(C:Windows下)文件,在[386Enh]小节中,将"PagingDrive=C:WindowsWin386.swp",改为其他分区的路径,如将交换文件放在D:中,则改为"PagingDrive=D:Win386.swp",如没有上述语句可以直接键入即可。
虚拟内存的显示而对于使用Windows2000和WindowsXP的,可以选择"控制面板→系统→高级→性能"中的"设置→高级→更改",打开虚拟内存设置窗口,在驱动器[卷标]中默认选择的是系统所在的分区,如果想更改到其他分区中,首先要把原先的分区设置为无分页文件,然后再选择其他分区。
或者,WinXP一般要求物理内存在256M以上。如果你喜欢玩大型3D游戏,而内存(包括显存)又不够大,系统会经常提示说虚拟内存不够,系统会自动调整(虚拟内存设置为系统管理)。
允许设置的虚拟内存最小值为2MB,最大值不能超过当前硬盘的剩余空间值,同时也不能超过32位操作系统的内存寻址范围--4GB。
当拥有了1G以上的内存时,页面文件的作用将不再明显,因此我们可以将其禁用。方法是:依次进入注册表编辑器"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\MemoryManagement"下,在"DisablePagingExecutive"(禁用页面文件)选项中将其值设为"1"即可。
PS:此举可能会造成系统不稳定.某些程序无法运行或死机。请根据自己实际情况更改。
在拥有4G以上的内存时,虚拟内存已经无足轻重了。在关闭后日常使用中没有报错、收到系统内存不足警告以及出现卡死等情况,那么可以高枕无忧了,不用担心关闭虚拟内存带来的负面影响。
在同一位置上有一个"ClearPageFileAtShutdown(关机时清除页面文件)",将该值设为"1"。这里所说的"清除"页面文件并非是指从硬盘上完全删除pagefile.sys文件,而是对其进行"清洗"和整理,根据微软的说法,这是一个安全选项,与性能无关。
高级话题:使用 SweepRAM 工具。适用于 Windows 2000/XP/2003。网上可以找到 SweepRAM 程序。该程序最大的作用是把所有进程的工作集清空。所谓工作集是指进程已映射的物理内存部分(即这些内存块全在物理内存中,并且 CPU 可以直接访问),还有一部分不在工作集中的虚拟内存则可能在转换列表中(CPU 不能通过虚地址访问,需要 Windows 映射之后才能访问),还有一部分则在磁盘上的页面文件里。工作集在进程运行时会被 Windows 自动调整,频繁访问的页面(4KB 的块)会留在内存中,而不频繁访问的页面在内存紧张时会被从工作集中移出,暂时保存在内存中的"转换列表"中,或者进一步换出到页面文件中。当应用程序再次访问某一页面时,操作系统会将它重新加回工作集中。
SweepRAM 工具以一种适中的频率(大约 40 分钟一次)反复运行,可以将各进程的工作集清空,而之后各进程的工作集会慢慢恢复。这样可以保持更好的工作集平衡,从而提高系统性能。
设置步骤如下:
对于没有组策略的解决方案如下:
对于虚拟内存如何设置的问题,微软已经给我们提供了官方的解决办法,对于一般情况下,我们推荐采用如下的设置方法: