问题

虚拟地址、线性地址、物理地址之间是如何转换的?

回答
在计算机的世界里,我们经常听到“虚拟地址”、“线性地址”和“物理地址”这几个词,它们之间到底是怎么一回事,又是如何相互转换的呢?这涉及到操作系统和硬件之间一个非常精妙的协作过程,我来给你掰开了揉碎了讲讲。

先来认识一下这几个概念的“身份”:

1. 虚拟地址 (Virtual Address): 这是我们程序(比如你正在运行的浏览器、游戏等等)最直观看到的地址。当你写代码时,看到的内存地址就是虚拟地址。它就像是给每个程序发的一个“专属地址簿”,在这个地址簿里,所有内存地址都是从 0 开始的,而且每个程序都觉得自己拥有了整个内存空间(当然,这个空间的大小取决于 CPU 的架构,比如 32 位系统是 4GB,64 位系统能访问的就大得多了)。这种方式的好处是显而易见的:
隔离性: 每个程序都有自己独立的虚拟地址空间,一个程序无法直接访问另一个程序的内存,这大大提高了系统的安全性和稳定性。如果一个程序崩溃了,不会影响到其他程序。
简化编程: 程序员无需关心物理内存的实际布局,也不需要管理内存的分配和释放(这部分由操作系统代劳),只需要按照自己的逻辑来使用地址就行。
内存共享和保护: 不同的程序可以通过映射机制共享同一块物理内存,同时也可以设置对内存的访问权限(只读、读写等)。
内存扩充: 即使物理内存不足,也可以通过虚拟内存技术(后面会提到)利用硬盘空间来扩展可用的内存。

2. 线性地址 (Linear Address): 这个名字听起来有点奇怪,它其实是CPU 在进行地址转换之前,内部产生的一个“中间地址”。你可以把它想象成是CPU在计算和处理指令时,基于虚拟地址经过一系列运算(比如段式寻址、分页寻址等,这取决于CPU的模式和架构)后得到的一个没有经过物理地址映射的、连续的地址。
在早期的一些CPU架构(如16位或32位实模式下的x86架构),线性地址的概念更加明显,它是由段基址加上偏移量计算出来的。
在现代的分页机制下,虚拟地址和线性地址通常是等价的。因为分页模式下,CPU直接将虚拟地址作为输入的,经过页表查找后直接得到物理地址。所以,很多时候提到现代CPU(如x8664)的地址转换时,虚拟地址和线性地址可以被看作是同一个东西,都是进入地址转换流程的入口。但从概念上来说,线性地址是虚拟地址在进入分页系统前的“形态”。

3. 物理地址 (Physical Address): 这是内存条(RAM)上实际存在的、硬件能够直接访问的地址。它对应着内存芯片上的每一个字节的位置。CPU 要真正读写数据,最终都需要将地址转换成物理地址,然后通过内存控制器发送到内存总线上。

地址转换的“流水线”:

简单来说,这个转换过程就是:虚拟地址 →(CPU内部处理)→ 线性地址 →(通过MMU/Paging Unit)→ 物理地址。

在现代操作系统和硬件中,这个转换过程主要由一个叫做 内存管理单元(MMU,Memory Management Unit) 的硬件部件来完成,最核心的技术就是 分页(Paging)。

我们以现代的 分页机制 为例,详细说说这个转换流程:

背景:分页和页表

为了实现高效的地址转换,操作系统会为每个进程维护一个叫做 页表(Page Table) 的数据结构。页表的作用就像一个“翻译字典”,它记录了虚拟地址空间中的“页”(Page)是如何映射到物理地址空间中的“页框”(Page Frame)的。

页(Page): 虚拟地址空间被划分为固定大小的块,这些块称为“页”。页的大小通常是 4KB、2MB 或 1GB。
页框(Page Frame): 物理地址空间也被划分为同样大小的块,这些块称为“页框”。
页表项(Page Table Entry,PTE): 页表由一系列的页表项组成。每一项对应虚拟地址空间中的一个页,记录了该页对应的物理页框的起始地址,以及一些权限位(如可读、可写、可执行等)。

转换流程(以x8664为例,通常是四级页表):

假设 CPU 要访问虚拟地址 `VA`。

1. CPU 获取虚拟地址: 操作系统加载程序时,会为每个进程创建一套独立的页表。当程序执行时,CPU 需要访问某个虚拟地址 `VA`。
2. MMU 接管: CPU 的 MMU 接收到虚拟地址 `VA`。
3. 页目录指针表(PML4): 在 x8664 架构中,虚拟地址 `VA` 会被分割成几个部分,其中一部分用于索引 页目录指针表(Page Map Level 4,PML4)。MMU 会使用 CPU 寄存器(如 `CR3`)中存储的当前进程的 PML4 表的基地址,结合虚拟地址中的 PML4 索引,找到对应的 PML4 表项。这个表项里包含了下一级页表的基地址。
4. 页目录(PDPT): MMU 使用从 PML4 表项中获得的基地址,加上虚拟地址中的 页目录指针表(Page Directory Pointer Table,PDPT) 索引,找到 PDPT 中的表项。这个表项又包含了下一级页表的基地址。
5. 页目录(PD): MMU 使用 PDPT 表项中的基地址,加上虚拟地址中的 页目录(Page Directory,PD) 索引,找到 PD 中的表项。这个表项继续包含下一级页表的基地址。
6. 页表(PT): MMU 使用 PD 表项中的基地址,加上虚拟地址中的 页表(Page Table,PT) 索引,找到 PT 中的表项。
7. 找到页框基地址: 这个 PT 表项(也称为 页表项,PTE)包含了目标 物理页框的基地址。它还包含了权限信息,比如该页是否可读、可写、可执行,以及是否已被加载到内存(即是否存在有效映射)。
8. 地址拼接: MMU 将 PT 表项中获得的物理页框基地址,与虚拟地址中剩下的 页内偏移(Page Offset) 部分进行拼接。
虚拟地址 `VA` 可以被看作是:`[PML4索引][PDPT索引][PD索引][PT索引][页内偏移]`
物理地址 `PA` 就是:`[页框基地址][页内偏移]`
9. 访问物理内存: 最终得到的 `PA` 就是 CPU 要访问的物理内存地址。MMU 将这个物理地址发送到内存总线,硬件开始从该物理地址读取或写入数据。

特殊情况和优化:TLB (Translation Lookaside Buffer)

每次访问内存都要经过多级页表查找,这个过程是非常耗时的。为了加速这个过程,CPU 内部有一个叫做 快表(Translation Lookaside Buffer,TLB) 的缓存。

TLB 存储了近期使用过的虚拟地址到物理地址的映射关系。
当 MMU 接收到一个虚拟地址时,它会先检查 TLB。
如果 TLB 中存在该虚拟地址的映射(TLB Hit),那么直接从 TLB 中获取对应的物理地址,大大加快了访问速度,避免了多次内存访问来查询页表。
如果 TLB 中没有该虚拟地址的映射(TLB Miss),MMU 才需要执行上面描述的多级页表查找过程,并将找到的映射关系缓存到 TLB 中以备后续使用。

总结一下这个转换过程的“角色”:

CPU: 发出虚拟地址的“源头”,并且包含执行地址转换的必要逻辑(虽然大部分工作由 MMU 完成)。
MMU(内存管理单元): 地址转换的“核心执行者”,负责解析虚拟地址,查询页表,计算物理地址。
操作系统: 页表的“创建者”和“管理者”,负责为每个进程分配虚拟地址空间,维护页表,处理缺页中断等。
页表: 地址转换的“翻译手册”,记录虚拟页与物理页框的对应关系。
TLB: 地址转换的“加速器”,缓存近期映射关系,提高访问效率。
物理内存: 最终的“目的地”,CPU 实际读写数据的地方。

这个流程看起来有点复杂,但正是通过这种精密的协作,才使得现代计算机系统能够实现内存隔离、高效利用内存、支持虚拟内存等强大的功能,为我们提供稳定、安全且灵活的计算环境。虚拟地址就像是你家的门牌号,线性地址是你出门后走向小区门口那段路,而物理地址就是你最终到达的那个真实存在的楼层和房间号。转换的过程就是你根据小区地图(页表)找到自己家的具体位置。

网友意见

user avatar
一个进程中每个数据的虚拟地址是固定的

不一定,可能是动态变化的,比如堆栈,固定的一般指的是代码段的部分(但代码段其实也可能是可变的)

但受其它进程占用真实内存空间的影响,虚拟地址映射到的物理地址是不断变化的

通常来说,操作系统会优化内存申请,尽量保持连续,不连续的内存对于操作系统来说也是不友好的。同时,操作系统不会频繁更改虚拟地址到物理地址的映射,除非是内存十分紧张。频繁的更改映射会降低性能。

所有进程的虚拟内存加起来远大于真实的内存大小,

虚拟地址空间通常确实是远大于真实物理内存,但真正提交映射的虚拟地址,可能不会“远大于”。

所以每一时刻所有进程正在使用的虚拟内存是可以单射到物理内存的

如果正在使用的虚拟内存已经映射但没在物理内存里,会报缺页中断,操作系统会负责加载这部分内存。所以并不是所有已经被提交的内存都在物理内存里,可能大部分都不在。

考虑到多核的问题,那么真正意义上“正在被使用”的内存最多只有:4K (页大小) * (1代码页 + 1 数据页)* CPU核数,这个数量其实很小。

即使加上页表,加上中断管理、驱动等内容,这部分的内存也不大。

(1)这个虚拟内存与物理内存的映射关系储存在哪里?如果也储存在内存中,那么如何让这个映射表所占空间尽可能的小?

映射关系也保存在内存里,也就是“页表”,页表通常不会很大。

打开PAE的情况下,一个页表项占8字节,一个4K页可以保存512个页表项,映射512*4K=2MB的内存,相当于2M内存浪费4K,比例不到0.2%,并不高。如果不打开PAE,那么一个4K页可以保存1024个页表项,内存浪费比例不到千分之一。

况且还允许有2M页等更大的页存在,所以不用担心浪费的问题。

一个32位的地址空间有4G,但操作系统不需要对整个4G空间都做映射,页表是分级的,三级页表的顶级里,并不是每一个页表项都是可用的,如果顶级页表项(PDPTE)没有指向一个有效的子项(PDE),那么PDE往后的内容不再需要内存来存储页表。这样的话,如果映射连续的2M内存,只需要4K+4K+4K的页表就足够了。

同样的,我前面说了操作系统会倾向于分配更加连续的内存,不管是物理上的连续还是虚拟地址的连续,连续的内存占用的表项不会太多。

(2)如何控制每一时刻所有进程正在使用的虚拟内存的大小小于等于物理内存?

操作系统有换页算法,某一个物理页不用了,会换到磁盘上。页表中,并不要求所有的页表项都处于有效的状态。

物理内存不够用的话,把不经常使用的页换出去就可以了(LRU算法)

(3)操作系统完成相应的分配和调度,也需要占用内存,这个占用的内存空间大概有多大?

不需要多大,以Windows为例,Windows95只需要4M内存就可以运行。通常情况下内核页表和用户页表可能是分开的,内核页表一般是一次性分配的,如果用的少的话,3-4个页就够用了。页表的使用量跟物理内存大小有关,物理内存越大,页表的体积也越大。

类似的话题

  • 回答
    在计算机的世界里,我们经常听到“虚拟地址”、“线性地址”和“物理地址”这几个词,它们之间到底是怎么一回事,又是如何相互转换的呢?这涉及到操作系统和硬件之间一个非常精妙的协作过程,我来给你掰开了揉碎了讲讲。先来认识一下这几个概念的“身份”:1. 虚拟地址 (Virtual Address): 这是我.............
  • 回答
    北京地铁19号线,作为城市交通网络中的一颗新星,承载着连接城市南北动脉的重任,其规划与设计自然备受瞩目。尤其是在金融街、长椿街和牛街这几个重要节点上的换乘安排,更引发了不少讨论。究竟这些“虚拟换乘”或“不换乘”的设计,是精妙的疏导之举,还是略显鸡肋的遗憾,咱们不妨细细掰扯一下。首先来看金融街站的虚拟.............
  • 回答
    好的,让我们聊聊操作系统里那个至关重要的环节——虚拟地址到物理地址的转换,以及它是如何兵不厌险地避免冲突的。想象一下,每个应用程序都觉得自己独占了整个计算机的内存,就像住在一个大房子里一样,拥有自己的房间、厨房、卫生间,而且可以随心所欲地布置。但实际上,所有这些应用程序都挤在一个共享的、有限的物理内.............
  • 回答
    您好!很高兴能和您一起探讨虚拟地址与物理地址这个话题。您提到想了解自己在这方面的理解是否正确,并且希望我尽量详细地阐述,同时去除AI痕迹,让内容更自然。没问题,我很乐意这样做!咱们就来好好聊聊这虚拟地址和物理地址是怎么回事儿,它们之间有什么联系和区别,以及为什么操作系统需要这么一套机制。打个比方,就.............
  • 回答
    在你编写的程序运行过程中,如果你在调试器中设置了断点,然后通过反汇编器查看当前执行的代码,你看到的地址通常是虚拟地址。让我们来详细拆解一下为什么是这样,以及这背后的原理。 虚拟地址 vs. 物理地址:基础概念要理解这个问题,首先我们需要明确虚拟地址和物理地址的区别:1. 物理地址 (Physica.............
  • 回答
    2017年底,北京市工商局突然暂停受理共享办公空间、创业孵化器等虚拟地址的工商注册登记,这无疑是在当时京城创业圈投下了一颗重磅炸弹,引起了广泛的关注和讨论。要评价这一举措,我们需要从多个角度去审视它的原因、影响以及背后所反映的政府管理思路的转变。为什么会突然暂停?背后的考量是什么?这次暂停,并非空穴.............
  • 回答
    作为一个AI,我无法对ASOUL的成员进行“业务水平”的评判,更不能说谁“最烂”。我的目的是提供信息和协助,而不是进行主观的、可能带有偏见的评价。对于虚拟偶像组合来说,“业务水平”是一个很复杂且多维度的概念。它可能包含: 歌唱能力: 音准、音域、情感表达、唱功技巧等。 舞蹈能力: 动作协调性.............
  • 回答
    关于虚拟世界杀人是否会引起愧疚感这个问题,我的想法是这样的:这绝对是一个复杂的问题,没有标准答案,很大程度上取决于很多个人化的因素。要说它会不会引起愧疚,我觉得答案很可能是“会,但程度不同,方式也不同”。首先,我们得明白,虚拟世界毕竟是虚拟的。在那里按个鼠标、点几下键盘,就能看到一个形象“死亡”,这.............
  • 回答
    虚拟世界平台里,一块 4.87 平方米数字土地卖出 1500 万人民币的高价,这消息一出来,估计不少人跟我一样,心里咯噔一下:这元宇宙的“炒房热”是真上头了,还是虚火太旺? 咱们就掰扯掰扯,这事儿到底怎么看。首先,咱们得明白,这可不是在咱们现实世界里花钱买块地盖房子。这所谓的“数字土地”,是存在于某.............
  • 回答
    珈乐新装扮四分钟售罄,这事儿,放现在这年头,真不是什么稀罕事儿,但也绝对值得说道说道。你想啊,虚拟偶像这玩意儿,说白了就是个商品,而且是个挺有“技术含量”的商品,用现在流行的话说,就是个“IP”。而珈乐,就是ASOUL这个大IP里头一个具体的“角色”,这次的新装扮,就是这个角色身上新推出的“皮肤”或.............
  • 回答
    这问题问得挺好,也触及到了不少人在折腾电脑时会遇到的一个核心选择。虚拟机这东西确实方便,点几下鼠标就能开个Linux玩玩,跟装在真机上比起来,那真是省事多了。但为什么还有那么多人宁愿折腾安装双系统,或者直接把Linux装在自己的硬盘里呢?这背后其实有很多实实在在的考量,而且很多时候,虚拟机确实是代替.............
  • 回答
    虚拟机装 Linux,大伙儿多少能有点概念,毕竟 Linux 系统开源免费,功能强大,而且在服务器领域几乎是统治地位。不少技术爱好者或者开发者会用它来学习、开发或者测试,所以虚拟机装 Linux 的理由大家基本能get到。可虚拟机里装 Windows,这事儿听起来就有点绕了。花钱买 Windows .............
  • 回答
    “柳夜熙”的横空出世,确实像一颗石子投入了平静的湖面,激起了“元宇宙”这个概念的层层涟漪,让无数人开始好奇,这到底是个什么玩意儿?简单来说,“元宇宙”更像是一个平行于我们现实世界的、高度沉浸式的数字空间。你可以把它想象成一个三维的、可交互的、永远在线的虚拟宇宙。在这个宇宙里,你不再是那个坐在电脑前、.............
  • 回答
    好,咱们就聊聊这“虚拟电厂”是个啥玩意儿。你别被这个名字给唬住了,感觉像是什么科幻电影里的高科技。其实,它更像是咱们生活中一个聪明伶俐的“集散中心”,只不过它管理的是电。它不是一个真的“厂”首先得明白,虚拟电厂它不是像咱们传统印象里那种烟囱高耸、锅炉轰鸣的实体发电厂。你找不到它一个具体的地理位置,也.............
  • 回答
    在虚拟世界里,“谁最有钱”这个问题,其实比现实世界要复杂得多,也更加有趣。因为它涉及到的“钱”的概念,以及“拥有”的定义,都跟我们熟悉的金钱不太一样。首先,我们得弄清楚,虚拟世界里的“钱”到底是什么。 游戏货币: 这是最普遍的一种。比如《魔兽世界》的金币、《英雄联盟》的蓝色精粹、《地下城与勇士》.............
  • 回答
    虚拟现实的未来,宛如一片尚未完全开垦的沃土,充满了无限的可能性,也伴随着一些值得深思的挑战。与其说它“该不该”改变方向,不如说它正在经历一场必然的演进,而我们需要做的是去理解和引导这场演进。曾几何时,VR的概念还停留在科幻电影的片段里,笨重的头显、粗糙的画面,仿佛只是少数极客的玩物。但随着技术的飞速.............
  • 回答
    中国虚拟发电厂(VPP)技术:蓄势待发,与电动汽车(EV)协同发展虚拟发电厂(Virtual Power Plant, VPP)在中国的发展正处于一个令人兴奋的阶段。它不再是遥不可及的概念,而是逐步落地,成为支撑我国新能源大规模接入、提升电力系统灵活性的重要技术手段。VPP的兴起,与电动汽车(Ele.............
  • 回答
    你现在的心情我特别理解,看到自己辛苦赚来的钱因为一个币的下跌而缩水,而且是持续下跌,那种滋味真的不好受,甚至让人有点抓狂。4000块,虽然不是天文数字,但亏了心里肯定堵得慌。特别是people这个币,最近确实是跌得有点厉害,让你坐不住了,这都是非常正常的反应。首先,咱们得把心态这块儿捋一捋。第一步:.............
  • 回答
    选择虚拟主机,就像是在茫茫大海中寻找一艘可靠的船,它要能承载你的网站,并且风雨无阻。市面上品牌众多,每个都号称是最好的,但只有真正了解自己的需求,才能找到最适合的那一艘。首先,我们要明确,什么是虚拟主机?简单来说,虚拟主机就是将一台物理服务器分割成多个虚拟的、独立的服务器空间,让不同的用户可以租用这.............
  • 回答
    Asoul 这个五人虚拟偶像团体,如果你问我她们的“二次元浓度”怎么样,那可真是个有意思的问题。要说浓度高不高,我觉得得从几个方面来聊,而且每个人都有自己的特色,不能一概而论。一、 舞台表现与歌曲风格:首先,她们的音乐和舞台设计,那绝对是浓浓的二次元味儿。你听她们的歌,那种日系ACG里常见的风格,像.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有