--------------------转自“iihero”博客-----------------
1. 内存及虚存基本布局
提起虚存,大都能说出几条来。
对于32位系统,大多数操作系统都会将4GB的内存空间的一部分挪给内核使用,应用程序无法直接访问这一段内存,这部分内存空间称为内核空间。Windows默认情况下会将高地址的2GB分配给内核(也可配置为1GB),而Linux默认情况下将高地址的1GB空间分配给内核。参考阅读:《程序员的自我修养—链接、装载与库》第10章--内存
Linux进程地址空间分布图]:
windows进程地址空间分布图如下图所示:
2. Windows上的虚存概况
以windows平台为例,应用程序可以调用堆API、.NET的垃圾回收器或者C运行时malloc相关API来分配虚拟内存,但是所有这些实现都依赖于VirtualAlloc API的实现。当应用用完地址空间的时候,接着会调用VirtualAlloc,然后可能会报错(返回NULL地址). 使用TestLimit工具,http://download.sysinternals.com/files/TestLimit.zip,
该工具带命令行参数-r 会不断的调用VirtualAlloc,直至出错。当在32位操作系统下运行时,会耗掉整个2GB的地址空间:
我们注意到2010MB并不等于2GB,但是Testlimit的其它代码和数据,包括可执行码和系统DLL,应该是是造成结果不同的原因,使用进程管理器,可能会看到实际虚存消耗:
有些应用,像SQL Server或者微软的Active Directory,管理了大量的数据结构,如果加载到地址空间的数据越多,表现得会越好。因此,在Windows NT4 SP3 当中引入了boot启动选项,/3GB,它允许将4GB的地址空间中的3GB提供给用户态,也就是让系统(内核)地址空间减少了1GB。Windows XP和win2003还引入了选项 /userva,来迁移2GB和3GB之间的内存碎片。详见下图:
如果要充分利用2G以上的空间,进程必须在exe文件中设定大地址标识。因为2GB空间的高位始终是0,这个高位同时也是用户态自己的标识。如果超过了2G,高位将变成1,如果没有相关处理,将会出错。
所有的微软服务器产品以及一些数据集中的程序都设定了大地址标识,如chkdsk.exe, lsass.exe (目录服务会用到),Smss.exe(会话管理器进程), esentutl.exe(目录Jet数据库修复工具), 我们可以使用dumpbin工具来检查exe中的该标志值, dumpbin是Visual Studio自带的工具,如下图所示:
Testlimit同样也用上了大地址标识:
3. 64位环境下的虚存
64位windows下,地址空间远远不止4GB, 这时,windows可以把32位进程序的最大的4GB全部用上,而剩余的地址空间都留给操作系统的虚存。如果您在64位的windows下运行Testlimit,可以看到它可以利用所有的32位地址空间:
64位进程序使用的是64位字长的指针,它们的理论最大地址空间为2^^64,然而windows并没有为用户进程序和操作系统提供比较平均的地址空间,而是在此空间中划分了一部分区域给用户进程,另一部分划给不同的系统内存资源,如系统页表的入口(PTE),文件缓存,页缓冲池和非页缓冲池。
IA64和x64体系下的进程地址空间大小是不同的,其大小取决于应用程序对内存用于支撑地址空间的总体需要(页表中的页和缓冲翻译表 TLB)。对于x64体系(AMD),是8T的量,而IA64下,则是7168GB(7T)的量,中间有1T的差异,主要源于IA64下,有1TB的空间用于顶级页目录用于为系统的Wow64映射表保留。 IA64和x64版本的windows, 各种资源的地址空间,大概都是128GB (如非页池,分配的就是的28GB的地址空间),只有一个例外,文件缓冲,它分配的是1TB的地址空间。总体来看,64位进程的地址空间,看起来如下图所示:
可以明显的看出,图里边有很大的地址空间空档,可能会用于将来的地址扩展。当您运行64位版本的Testlimit,它会消耗8TB,那将是它能管理的地址空间范围:
分享到:
相关推荐
1. **虚拟化技术**:虚拟化是一种资源管理技术,它将一台物理计算机的硬件资源(CPU、内存、磁盘和网络接口等)抽象、转换并分配给多个虚拟机,使得每个虚拟机都能像独立的计算机一样运行自己的操作系统和应用程序。...
标题中的“一个可以指定回发数据的虚拟网络服务”指的是一个能够模拟真实网络环境并根据用户配置回应特定数据的软件工具。这样的工具在IT行业中通常用于测试、开发或调试目的,特别是当实际硬件设备不可用或者成本...
64位VDM虚拟光驱是一款专为64位Windows操作系统设计的虚拟光驱软件,尤其在Windows 7 64位系统下表现出良好的兼容性和稳定性。它允许用户创建和管理虚拟光盘,以模拟物理光驱的功能,而无需实际的光盘。这种技术对于...
与传统物理仪器相比,虚拟仪器的“面板”和“功能”都是通过软件实现的,用户可以通过图形界面操作这些虚拟控件,就像操作真实的物理按钮和旋钮一样,而其背后的测试与控制功能则由专门的软件算法执行。 ### 软件即...
测试环境模拟了一个包含多种虚拟化环境的真实场景,涉及大量不同类型的数据。测试结果表明,该方案能够有效应对虚拟化数据中心面临的挑战,特别是在数据保护、恢复速度、管理便捷性等方面表现出色。 #### 三、方案...
* 虚拟系统:指在游戏机上安装的虚拟操作系统 * 区分方法:可以通过系统版本号和游戏机的性能来区分 Q4:破解成功的机器,查看系统版本后,为什么又不能玩游戏了? * 原因:破解成功后,游戏机的系统版本号可能会...
虚拟机是一种通过软件技术模拟真实计算机环境的技术,它可以让你在一台物理计算机上同时运行多个操作系统。每一个虚拟机都是一个独立的计算环境,拥有自己的CPU、内存、硬盘以及其他硬件资源,这使得用户能够在同一...
3. **配置虚拟机参数**:根据需要设置虚拟机的操作系统类型、内存大小、硬盘容量等。 4. **安装操作系统**:选择合适的操作系统镜像文件进行安装。 5. **联网配置**:配置虚拟机的网络设置,使其能够访问互联网或...
- 软件环境:使用Oracle 10g XE数据库,Tomcat 5.5作为应用服务器,采用Framework 4.0版本,操作系统为Windows XP。 4. 系统操作 用户通过快捷方式启动软件,登录界面需要输入全拼用户名、初始密码(六个一)和...
另一方面,操作系统作为管理计算机硬件与软件资源的系统软件,其在考研中的考察点主要包括进程管理(进程创建、同步与通信)、内存管理(分页、分段、虚拟内存)、文件系统(目录结构、文件的存取方法)以及操作系统...
虚拟现实VR系统开发软件是一种基于客户/服务器架构的工具,其中服务器存储VR文件及支持资源,用户则通过网络下载并利用本地的VR浏览器访问和交互这些虚拟环境。该软件设计的核心是实现硬件平台无关性,通过ASCII码...
一旦镜像加载成功,系统会识别出虚拟光驱,并能像对待物理光盘一样进行读取操作。 在软件安装过程中,虚拟光驱有着显著的优势。用户可以直接从镜像文件安装软件,避免了物理光盘的磨损,同时也提高了安装速度。此外...
软件环境涉及Oracle 10g XE数据库,Tomcat 5.5应用服务器,以及Windows XP操作系统。 2.1 登录界面 用户通过快捷方式启动程序,输入全拼用户名、初始密码(六个一)和验证码,登录系统主界面。 2.2 系统主界面 ...
虚拟打印机是一种计算机软件技术,它模拟了实际物理打印机的功能,但并不实际打印文档。这种技术使得用户能够在不使用真实打印机的情况下预览、保存或转换文件。在本文中,我们将深入探讨虚拟打印机的工作原理、用途...
在"老孙的游戏课之第1篇 Unity5.x入门 第4讲 未来的游戏是什么样"这堂课中,老孙老师将带领我们探讨游戏行业的未来趋势,并结合Unity5.x的特性讲解如何利用这一工具来实现这些创新理念。 首先,Unity5.x在图形渲染...
《虚拟服装中人体拓扑无关的试穿技术研究》这篇论文探讨了在3D试衣领域的一项重要技术,即如何高效地将设计好的三维服装模型适配到不同体型和拓扑结构的人体模型上。传统的计算机辅助设计(CAD)系统在创建三维服装时...
首先,“影子系统”是一种虚拟化技术,它能够在主机操作系统之上创建一个独立的、与真实系统并行运行的虚拟环境,被称为“影子模式”。在这个模式下,所有的操作和安装的程序都不会对实际系统造成影响,而是被保存在...