参考:http://blog.thetaphi.de/2012/07/use-lucenes-mmapdirectory-on-64bit.html
/duitang/dist/app/branches/mdrill/trunk/adhoc-mdrill/_tmpindex/t2
理解虚拟内存
http://www.oschina.net/translate/understanding-virtual-memory
linux之旅——关于虚拟内存
http://www.cnblogs.com/lyp3314/archive/2012/03/06/2380637.html
Linux中关于swap、虚拟内存和page的区别
http://www.51testing.com/html/12/81612-811788.html
http://blog.thetaphi.de/2012/07/use-lucenes-mmapdirectory-on-64bit.html
在解释第一个问题之前,先说明一下计算机内存管理的中的四个名词:虚拟内存,虚拟内存地址,物理内存,物理内存地址。
先说说为什么会有虚 拟内存和物理内存的区别。正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的,比如你的内存条是256M,你的程序却要创建一个2G的数据 区,那么不是所有数据都能一起加载到内存(物理内存)中,势必有一部分数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,在通过调度进入物 理内存。所以,虚拟内存是进程运行时所有内存空间的总和,并且可能有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条。有的地方呢,也叫这个 虚拟内存为内存交换区。
那么,什么是虚拟内存地址和物理内存地址呢。假设你的计算机是32位,那么它的地址总线是32位的,也就是它可以 寻址0~0xFFFFFFFF(4G)的地址空间,但如果你的计算机只有256M的物理内存0x~0x0FFFFFFF(256M),同时你的进程产生了 一个不在这256M地址空间中的地址,那么计算机该如何处理呢?回答这个问题前,先说明计算机的内存分页机制。
计算机会对虚拟内存地址空 间(32位为4G)分页产生页(page),对物理内存地址空间(假设256M)分页产生页帧(page frame),这个页和页帧的大小是一样大的,所以呢,在这里,虚拟内存页的个数势必要大于物理内存页帧的个数。在计算机上有一个页表(page table),就是映射虚拟内存页到物理内存页的,更确切的说是页号到页帧号的映射,而且是一对一的映射。但是问题来了,虚拟内存页的个数 > 物理内存页帧的个数,岂不是有些虚拟内存页的地址永远没有对应的物理内存地址空间?不是的,操作系统是这样处理的。操作系统有个页面失效(page fault)功能。操作系统找到一个最少使用的页帧,让他失效,并把它写入磁盘,随后把需要访问的页放到页帧中,并修改页表中的映射,这样就保证所有的页 都有被调度的可能了。这就是处理虚拟内存地址到物理内存的步骤。
现在来回答什么是虚拟内存地址和物理内存地址。虚拟内存地址由页号(与页 表中的页号关联)和偏移量组成。页号就不必解释了,上面已经说了,页号对应的映射到一个页帧。那么,说说偏移量。偏移量就是我上面说的页(或者页帧)的大 小,即这个页(或者页帧)到底能存多少数据。举个例子,有一个虚拟地址它的页号是4,偏移量是20,那么他的寻址过程是这样的:首先到页表中找到页号4对 应的页帧号(比如为8),如果页不在内存中,则用失效机制调入页,否则把页帧号和偏移量传给MMC(CPU的内存管理单元)组成一个物理上真正存在的地 址,接着就是访问物理内存中的数据了。总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。
相关推荐
Linux虚拟内存管理是操作系统设计中的核心部分,它允许程序访问比实际物理内存更大的地址空间,同时优化了内存的...无论是开发人员还是系统管理员,都需要对虚拟内存管理有深入的理解,以便更好地利用和调试Linux系统。
`使用说明.txt`则应该是包含如何使用这个程序和理解虚拟内存相关概念的指南。 在设置虚拟内存时,有几点需要注意: 1. **大小设定**:虚拟内存的大小一般建议设置为物理内存的1.5倍到3倍之间,但不要超过磁盘可用...
### 设置虚拟内存:深入解析与优化策略 #### 核心概念理解 虚拟内存是计算机操作系统中的一个重要特性,它允许系统将部分硬盘空间用作内存来使用,从而在物理内存(RAM)不足时,提供额外的存储空间。在Windows...
虚拟内存是计算机系统中一种重要的资源管理机制,它在操作系统层面起到了扩展物理内存的作用。当计算机的物理内存不足以满足运行...通过理解虚拟内存的工作原理和正确调整方法,用户可以更好地提升计算机的运行效率。
首先,理解虚拟内存的工作原理至关重要。虚拟内存将硬盘空间模拟为RAM(随机存取内存),因为RAM的速度快但容量有限,而硬盘的容量大但速度慢。当RAM满载时,系统会将不常用的数据移动到硬盘的虚拟内存中,释放RAM来...
本课程设计旨在通过C++语言实现虚拟内存的模拟,帮助学生深入理解虚拟内存的工作原理及其在实际操作中的应用。 虚拟内存的基本思想是将物理内存与硬盘空间相结合,创建一个比实际物理内存大得多的逻辑地址空间。...
一、理解虚拟内存 虚拟内存是一种内存管理技术,它可以将计算机的物理内存扩展到硬盘上。虚拟内存可以将暂时不需要的数据从物理内存中交换出去,并将其存储在硬盘上,以释放物理内存的空间。当系统需要使用这些数据...
"Linux虚拟内存管理" Linux操作系统中,虚拟内存管理是指使用磁盘作为RAM的扩展,以增大可用的内存大小。内核会将暂时不用的内存块的内容写到硬盘上,以便释放出内存空间供其他进程使用。当需要用到原始的内容时,...
首先,我们要理解虚拟内存的基本工作机制。虚拟内存将每个进程的地址空间划分为多个页面,这些页面并不直接对应物理内存的地址,而是通过页表进行映射。页表是一个由操作系统维护的数据结构,用于记录虚拟页到物理页...
学生需要理解虚拟内存的原理,编写代码实现地址转换、页表管理、换页算法等功能。通过这样的课程设计,学生不仅能深入理解操作系统如何管理内存,还能锻炼编程和问题解决能力。在实际操作中,可能需要使用到的数据...
### 深入理解Linux虚拟内存管理 #### 知识点概述 《深入理解Linux虚拟内存管理》一书由Mel Gorman撰写,是Bruce Perens的开源系列丛书之一。本书旨在帮助读者深入了解Linux操作系统中的虚拟内存管理系统的工作原理...
本课程设计的主题是“使用C++实现模拟虚拟内存系统”,旨在让学员深入理解虚拟内存的概念,掌握其工作原理,并通过编程实践提升对操作系统内存管理机制的认知。 虚拟内存是现代操作系统中的核心组成部分,它为每个...
本资料“深入理解Linux虚拟内存管理”旨在帮助读者深入了解这一复杂的系统机制,包括虚拟内存的原理、页表、内存映射、交换机制以及缓存管理等关键概念。 首先,虚拟内存的基本理念是将内存地址分为两部分:虚拟...
本项目“虚拟内存分配模拟程序”旨在通过C#编程语言来实现一个简单的模拟系统,帮助理解虚拟内存的工作原理。下面将详细讨论虚拟内存的基本概念、其工作流程,以及如何用C#来模拟这一过程。 虚拟内存的核心思想是为...
首先,我们需要理解虚拟内存的基本概念。虚拟内存是操作系统提供的一种内存管理机制,通过映射技术,将进程的逻辑地址空间与物理地址空间进行分离。这样,即使物理内存不足,程序也可以运行,因为操作系统会将不常用...
【虚拟内存页面置换算法】是操作系统管理内存的重要策略,它涉及到如何在有限的物理内存中高效地处理进程的页面访问需求...通过这样的实验,学生能深入理解虚拟内存管理中的页面置换机制,并能对比不同算法的性能效果。
这对于理解虚拟内存的限制以及如何优化系统配置具有重要意义。 - **[KB283037: Windows NT 4.0 和 Windows 2000 中虚拟内存的使用](http://support.microsoft.com/kb/283037/zh-cn)**:这篇文章深入探讨了在Windows...
【虚拟内存管理】是操作系统中的核心功能之一,它允许程序在有限的物理内存资源中运行,使得计算机可以同时处理多个...通过编写和调试这样的代码,学生可以深入理解虚拟内存管理的工作原理及其在操作系统中的重要性。
虚拟内存是Windows操作系统中的一项重要功能,它允许操作系统在物理内存不足时,使用硬盘空间作为临时内存。...理解虚拟内存的工作原理并合理调整其大小,可以有效地提升计算机的运行效率,避免不必要的性能损失。
Linux 内核的内存管理探秘之四 虚拟内存的管理 Linux 操作系统中,内存管理是非常重要的一部分。虚拟内存技术是现代操作系统中的一个关键技术,它克服了旧有的内存管理的限制,允许系统运行比物理内存大的应用程序...