`
liuguxing
  • 浏览: 94959 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

理解:虚拟内存,虚拟内存地址,物理内存,物理内存地址

    博客分类:
  • C
 
阅读更多
在解释第一个问题之前,先说明一下计算机内存管理的中的四个名词:虚拟内存,虚拟内存地址,物理内存,物理内存地址。

先说说为什么会有虚拟内存和物理内存的区别。正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的,比如你的内存条是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虚拟内存管理是操作系统设计中的核心部分,它允许程序访问比实际物理内存更大的地址空间,同时优化了内存的使用效率。这一系统通过映射技术,将进程的虚拟地址转换为实际物理地址,使得多个进程可以共享同一...

    深入理解Linux虚拟内存管理.rar

    首先,虚拟内存的基本理念是将内存地址分为两部分:虚拟地址和物理地址。每个进程都有自己独立的虚拟地址空间,这使得进程之间不会相互干扰,提高了系统的安全性。Linux采用分页技术将内存划分为固定大小的页,通过...

    重大软院操作系统实验四:虚拟内存

    在Linux操作系统中,虚拟内存是由内核管理的,它通过页表来实现虚拟地址与物理地址之间的映射。页表包含了一系列的页表项,每个页表项对应一个虚拟页,并记录了该页对应的物理页地址和访问权限等信息。Linux的虚拟...

    Linux虚拟内存管理.pdf

    在Linux中,虚拟内存管理是通过地址映射机制把用户程序的逻辑地址映射到物理地址实现的。当用户程序运行时,如果发现程序中要用的虚地址没有对应的物理内存,就发出请求页要求。如果有空闲的内存可供分配,就请求...

    虚拟内存太低怎么办,虚拟内存怎么设置最好.docx

    虚拟内存是一种重要的计算机概念,它可以在物理内存不足时,充当内存使用,避免系统崩溃的情况。然而,虚拟内存太低或配置不当将会导致系统性能下降、程序崩溃等问题。因此,了解如何设置虚拟内存、解决虚拟内存太低...

    深入理解Linux虚拟内存管理CD.rar

    虚拟内存管理系统的主要任务包括:内存分配、页面置换、地址转换以及缓存管理等。 一、虚拟内存的原理 1. 地址空间:Linux虚拟内存将进程的地址空间划分为几个区域,如堆、栈、文本(代码)、数据、共享库等。每个...

    linux 内存管理(虚拟地址到物理地址)

    虚拟地址到物理地址的转换是通过页表机制实现的,确保了每个进程只能访问分配给它的虚拟地址,并在需要时将这些虚拟地址映射到物理内存。 Linux将这个4GB的虚拟地址空间划分为两个主要部分:用户空间(0到3GB)和...

    深入理解Linux虚拟内存管理

    本文将详细介绍Linux虚拟内存管理机制,包括物理内存的描述、页表管理、进程地址空间、启动时内存分配器、物理页面分配、非连续内存分配、slab分配器以及高内存管理等核心概念和技术细节。 #### 物理内存描述 物理...

    Linux内核的内存管理探秘之四 虚拟内存的管理.pdf

    虚拟内存技术是现代操作系统中的一个关键技术,它克服了旧有的内存管理的限制,允许系统运行比物理内存大的应用程序,同时也允许把暂时不用的页交换到磁盘,从而得到更多的可用内存。本文将深入剖析 Linux 内核的...

    虚拟内存设置工具

    1. **虚拟内存的工作原理**:虚拟内存将硬盘上的空间划分为页,这些页可以被映射到进程的地址空间中,使得程序认为它们拥有比实际更多的内存。操作系统负责管理和调度这些虚拟页面,根据需要在物理内存和硬盘之间...

    Win10调整虚拟内存以提高电脑运行速度.docx

    一、理解虚拟内存 虚拟内存是一种内存管理技术,它可以将计算机的物理内存扩展到硬盘上。虚拟内存可以将暂时不需要的数据从物理内存中交换出去,并将其存储在硬盘上,以释放物理内存的空间。当系统需要使用这些数据...

    虚拟内存设置程序

    虚拟内存是计算机系统中一种重要的资源管理机制,它允许操作系统使用硬盘空间来模拟RAM(随机存取内存),以此扩展物理内存的容量。当系统需要更多内存但物理内存不足时,虚拟内存便发挥作用,将暂时不活跃的数据从...

    虚拟内存的基本概念

    在虚拟内存系统中,每个进程都有一个独立的虚拟地址空间,而这个虚拟地址空间的一部分会被映射到物理内存上,其余部分则存储在硬盘上的交换文件或分区中。当进程需要访问未映射到物理内存的虚拟地址时,系统会自动将...

    虚拟地址物理地址转换

    kmalloc()函数用于小内存分配,返回的是物理地址,而不是虚拟地址。__get_free_page()函数用于整页分配,返回的是物理地址。 kmalloc()函数基于slab实现的,slab是一种高效机制,用于分配小内存。slab是基于页分配...

    物理地址逻辑地址虚拟地址的概念

    物理地址、逻辑地址和虚拟地址都是计算机系统中内存管理的重要概念。它们之间的转换机制是操作系统和硬件之间紧密合作的结果,确保了程序能够高效地访问内存资源,同时也为开发者提供了更高层次的抽象。通过了解这些...

    保护模式与虚拟内存

    5. **地址转换**:当应用程序访问虚拟地址时,虚拟内存管理器将其转换为相应的物理地址。 #### 五、虚拟内存的优势 - **内存隔离**:每个进程都有自己的虚拟地址空间,这确保了不同进程之间的内存相互隔离。 - **...

    第9章 虚拟内存IV:动态内存分配-高级概念(1).pdf

    在计算机科学与技术中,虚拟内存是一个核心概念,它允许程序访问更多的内存空间,而不受物理内存的限制。虚拟内存IV:动态内存分配-高级概念是计算机系统中一个重要的部分,本节将对其进行详细的介绍。 虚拟内存IV...

    虚拟内存分配示例的资源

    虚拟内存是计算机操作系统中的一种重要概念,它是一种内存管理技术,允许程序使用超过物理内存容量的地址空间。在本文中,我们将深入探讨虚拟内存分配的原理、作用以及如何在实际应用中进行分配。 虚拟内存的核心...

    逻辑地址、线性地址、物理地址和虚拟地址

    b) 线性地址转换为物理地址:CPU的页表机制会将线性地址映射到实际的物理内存地址。 总的来说,这些地址类型的存在是为了提供一种灵活、安全且高效的内存管理方式,让程序员可以不必关心底层硬件的细节,同时使...

Global site tag (gtag.js) - Google Analytics