- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程地址空间和虚拟内存
进程地址空间和虚拟内存2010-07-06 10:18 jcsnwpu:我对于虚拟地址空间和虚拟内存的理解:32位的CPU中,一个进程都有个4G的虚拟地址空间;虚拟内存是存在于硬盘上的页交换文件。前段时间听了一个报告,报告人竟然一再强调说MMU管理的是虚拟内存,个人认为MMU管理的应该是进程的虚拟地址空间吧?回来查了下《WINODWS核心编程》,发现第五版的中文版本中对这两个概念说的也不清楚,如P362页:磁盘上的文件一般被称为页交换文件,其中包含虚拟内存。难道页交换文件不是等价于虚拟内存吗?欢迎大家讨论,最后能得出个一致的结论。
tumen:搞深了。如果不怕不明白,我就往深处说说。虚拟内存世上本不存在,在8086,或者说80186(不要说没听过,后来多用于单片机了)以前,程序对内存的访问,不管是代码地址还是数据地址,都是直来直去,是几号单元就去几号内存单元找,当然,最复杂的也就算段地址×16+偏移地址了。从286开始引入虚拟内存,当然,我们现在很少见到针对286虚拟内存的程序。经过完善,386时虚拟内存全面登场,虚拟内存加上32位数据和地址两大特性成为划时代的经典CPU,这也是现在很多操作系统文件中残留i386、386、32等字样的历史原因。386的一大突破就是设计了一个功能强大(相对286)可以使用虚拟内存地址寻址的MMU(内存管理单元),把物理内存(简称内存)划分成一页一页来管理,一页内存大小是固定的(一般是4KB并按4KB地址对齐),把每页的首地址按顺序排成一个数组放在内存,称为页表,页表的大小也是固定的,再把页表的首地址排成数组放在内存,称为页目录表,再把页目录表的首地址用一个专用CPU寄存器保存。程序代码通过MMU进行虚拟内存寻址时,先取出专用寄存器中保存的页目录表首地址,再用32位虚拟地址的高20位作为索引来一层一层的查目录表查页表找到物理内存页的首地址,用虚拟地址低12位(对于4kb页)做页内偏移来找到指定单元。如果非要说的再明白一点,那么:虚拟内存就是程序代码不能直接访问物理内存的一种间接访问物理内存的机制。或者说是把程序中的地址值x和物理内存单元地址值y用y=f(x)的方式架开分隔。每个进程都有自己的一套独立的页表和页目录(在进程创建时建立),CPU切换进程时,只要把下一个进程的页目录表的首地址写入专用寄存器,就开始寻址该进程的代码和数据了(页目录表的首地址是领导,领导换了,下面的页目录和页表这些小头目也变成了另一套班子了)。对于一个进程来说,它能见到和使用的一切内存地址都是虚拟内存地址(不管访问最终目标的是在内存中,还是硬盘上),物理内存地址也就只有操作系统偶尔私自在背后把玩把玩,什么时候都不要认为你的程序中的地址是物理内存地址,它会去直接访问物理内存地址。(除非你是在做操作系统)在物理内存中只有一套操作系统的代码,把所有操作系统代码页的页首地址在每个进程的页表和页目录表中都抄一份,那么每个进程就可以共享同一个操作系统的代码了。虚拟内存地址通常绝不等于物理内存地址,隔了十万八千里,风牛马不相及。当然,页表和页目录中有很多不对应物理内存页的空项,这些空项要么是程序没用到那么多的内存,要么该页放在了硬盘上,这些信息在页表项和页目录表项的指定位上有标记指示,当MMU查到这些页表项或页目录表项时,会根据标记确定是出错(因为访问了程序使用范围外的虚拟内存地址)或者调入硬盘中对应的映射页到内在存并登记页表和页目录更改对应项的标记。同样,即使没有映射到硬盘上一个字节,你的程序全部装载到物理内存,进程使用的还是虚拟内存地址,因为虚拟内存和是否使用硬盘没有必然关系,说的直白一点,即使一台没有硬盘的电脑,它也能使用虚拟内存。系统并不机械地建立一个h到0ffffffffh的4GB虚拟内存映射的页表和页目录,只对那些隔三插王的使用了的虚拟地址才建立对应的页表和页目录,否则的话,小小的内存全被一个个进程的页表和页目录填满了。这些基本原理明白后就可以清醒了。
:我也有和楼主一样的疑问,刚找到一篇能解答楼主问题的文章,阐述的生动而且详细,希望对你有帮助前面讲库文件时说到:动态库的函数,有函数地址。其实不仅函数有地址,程序中的各种数据,都有地址。5.4.1.什么叫进程当程序安静地躺在硬盘上时,它是一个文件,非要给点区别的话,它是一个可执行文件;而当程序运行起来,它就从硬盘上一跃进入内存,这时它就被叫做一个进程/process了。请同时按下Ctrl+Alt+Del键,或者在任务栏空白处点右键,弹出菜单中选任务管理器,并切换到进程页,我们可以看到各个进程的一些指标。提示:通过菜单查看-选择列,可以配置更多观察选项,下图是一个示例:图5-6通过任务管理器,观察进程5.4.2.进程的内存空间硬盘上的文
原创力文档


文档评论(0)