阅读:1651回复:11
科普第18篇——虚拟内存
虚拟内存,大家或多或少都听说过这个名词了,但很多同学以为虚拟内存就是把硬盘上的一部分空间拿来扩展内存用,这就不对了,或者说这只是其中的一方面。
我们之前介绍过了,内存的每一个字节都有一个地址,而寻址和CPU的地址寄存器有关。(详见科普第9篇) 程序运行时都要加载到内存,包括指令和数据。而这些代码加载到内存的地址都是在程序代码里写好的(当然我指的是机器语言,高级语言不会在程序中写这些东西,相关工作都是由编译器完成的)。 早期的计算机还没有问题,因为计算机里只会运行一个程序。 但是后来,计算机里可以运行多个程序了,问题就来了——因为要使用的内存很可能已经被别的程序用了,如果强行使用的话就可能会意外改写别的程序在内存中的数据或代码,造成程序出错。 所以,现代操作系统引入了“虚拟内存管理”(Virtual Memory Management),这需要CPU里的内存管理单元MMU(Memory Management Unit)支持。 虚拟内存使用虚拟地址(Virtual Address,VA)来访问,而实际的内存使用物理地址(Physical Address,PA)来访问。 MMU会把VA映射到PA,这个映射的基本单位是页(Page),32位处理器的一页是4KB大小。对应的物理内存的页称为页帧(Page Frame)。页面的映射记录在页表(Page Table)里。 程序运行时,操作系统会初始化页面映射,并把映射内容记录到页表里。程序访问内存时,MMU会根据页表把VA翻译成PA,然后再访问物理内存。所以即使两个程序里的内存地址是一样的,经过VA到PA的转换之后也代表着不同的物理内存,这样程序就不用担心会修改到别的程序在内存里的内容了。 而且虚拟内存还能提高安全性,防止程序访问和修改不必要的内存(特别是操作系统内核的部分)。 还有一个好处就是最开始提到的,操作系统可以把暂时不用的页保存到磁盘上,需要的时候再载入到物理内存中。 此外,也是在科普第9篇里提到过的,通过PAE(物理地址扩展),32位CPU的内存地址,可以通过虚拟内存映射到大于4GB的内存上,从而突破内存大小的限制。实际上Intel从Pentium Pro开始就支持PAE了,微软的消费级操作系统不支持完全是出于市场的考虑(服务器操作系统是支持的)。 即使你把操作系统里的虚拟内存设置得再大,也解决不了内存不足的问题。因为硬盘上只是储存暂时不用的页面,要用的时候还是得载入到内存的。加内存才是真正的解决之道! 因为“虚拟内存”是一种内存管理机制,而不是“把硬盘虚拟为内存使用”,所以Windows XP里,这个设置已经改叫做“页面文件”了。 ==========之前的文章========== 科普第1篇——计算机色彩 科普第1篇补遗——CSS颜色 科普第2篇——光盘 科普第3篇——2、8、10、16 科普第4篇——电池 科普第5篇——浏览器 科普第6篇——字符编码 科普第7篇——加密解密 科普第8篇——移动通信技术 科普第9篇——为什么32位CPU不能支持大于4GB内存? 科普第10篇——智能手机简介 科普第11篇——14.52-14.49=0.0299999? 科普第12篇——为什么HTTPS会更安全? 科普第13篇——计算机语言 科普第14篇——字体(上) 科普第15篇——字体(中) 科普第16篇——字体(下) 科普第17篇——域名解析 科普第17篇补遗——域名 科普番外篇1——虽然没用但了解一下也很有趣的知识 |
|
沙发#
发布于:2011-07-22 21:47
Re:科普第篇——虚拟内存
虚拟内存可以自行设置 是你正常内存的2~3倍左右以下为度娘说的 1.运行“perfmon.msc”打开性能监视器,展开左侧的性能日志和警报,并点击选择记数器日志,在右侧的面板中空白处点击鼠标右键,选择新建日志设置,并命名为Pagefile,然后回车确认。 2.在常规选项卡下,点击添加记数器按钮,在新弹出的窗口的性能对象下拉菜单中选择Paging File,并选择“从列表选择记数器”,然后点击% Usage Peak,在范例中选择“_Total”,并接着点击“添加”按钮。 3.然后关闭这个窗口,并点击图三中的“确定”按钮。点击“是”创建日志文件。接着打开“日志文件”选项卡,在日志文件类型下拉菜单中选则“文本文件(逗号分隔)”,然后记住“例如”框中显示的日志文件的路径。 4.这样,点击确定后这个记数器已经开始运行了,你可以在电脑上进行你的日常操作,并尽可能多的打开和关闭各种经常使用的应用程序和游戏。经过几个小时的使用,基本上记数器已经可以对你的使用情况做出一个完整的评估。 5.这时你需要先停止这个记数器的运行,同样是在记数器日志窗口中,选中我们新建的Page File记数器,然后右键点击,并且选择停止。用记事本打开日志文件。 6.需要注意的是,在日志中的数值并不是分页文件的使用量,而是使用率。也就是说,根据日志文件的显示,该系统一般情况下的分页文件只使用了25%左右,而系统当前设置的分页文件足有2GB,那么为了节省硬盘空间,完全可以把分页文件最大值缩小为512MB大小。而对于最小值,可以先根据日志中的占用率求出平均占用率,然后再与最大值相乘,就可以得到了。 |
|
|
2楼#
发布于:2011-07-22 21:58
回 1楼(非Θ好人) 的帖子
不建议自己设置页面文件大小,一旦不够用就可能报警“虚拟内存过小”,还是使用系统自己管理的比较好。Linux的是专门的一个分区“交换空间”(swap),就无法调整大小了。 |
|
3楼#
发布于:2011-07-22 22:19
电脑给我设的虚拟内存为实际内存的1.5倍左右。。。。可怜我4G内存,虚拟内存就6G,C盘就这样活生生的坑没了
后来给换到D盘去了 |
|
4楼#
发布于:2011-07-22 22:29
之前遇到报虚拟内存不足的情况,我把他调大了还是那样提示,于是我发现这东西基本没用,所以就没管他,系统装好是多少就是多少了。
|
|
5楼#
发布于:2011-07-22 22:32
回 3楼(ct一剑) 的帖子
因为“虚拟内存”实际上是一种内存管理机制,而不是“把硬盘虚拟成内存”,所以Windows XP里这个已经改叫“页面文件”了,这样更准确。 |
|
6楼#
发布于:2011-07-22 22:50
简单的说,就是在平常的时候,还是使用物理内存,物理内存不够了才将物理内存中闲置的页面移出放到磁盘上吧
嘛~~加了内存条的无压力 |
|
7楼#
发布于:2011-07-22 23:00
一直系统自己管理的
|
|
|
8楼#
发布于:2011-07-22 23:39
我记得还有分段和段页式管理的,难道现实中的操作系统没有分段的么?
|
|
9楼#
发布于:2011-07-23 09:02
基本都没有自己调过,一般C盘我分了30G装WIN7足够用了。
|
|
10楼#
发布于:2011-07-23 20:22
没去调过,不过知道一点,加内存才是硬道理
|
|
|
11楼#
发布于:2011-07-23 23:47
硬盘上只是储存暂时不用的页面
|
|