0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

虚拟地址和逻辑地址的区别是什么?

Linux爱好者 来源:飞天小牛肉 作者:飞天小牛肉 2021-06-17 14:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

先解释下一个困扰了我很久的问题:虚拟地址(vitural address)和逻辑地址(logical address)的区别。

大部分操作系统的书籍要么写的是虚拟地址,要么写的是逻辑地址,看的我一脸懵逼。

在《深入理解 Linux 内核》这本书中终于找到了确切的答案,这里我就不写出来了,扣概念的话这俩确实是有些区别的,不过对于我们日常使用以及理解操作系统来说的话,暂且可以把虚拟地址和逻辑地址理解为同一个意思。

你看到的所有地址都不是真的

我们需要知道的是,所有这些打印出来的地址都是虚拟的,在物理内存中这些地址并不真实存在,它们最终都将由操作系统和 CPU 硬件翻译成真正的物理地址,然后才能从真实的物理位置获取该地址的值。

OK,上述就当作一个引子,让各位对物理地址和虚拟地址有个直观的理解,下面正文开始。

物理寻址 Physical Addressing

物理地址的概念很好理解,你可以把它称为真正的地址。《深入理解计算机系统 - 第 3 版》中给出的物理地址(physical address)的定义如下:

计算机系统的主存被组织成一个由 M 个连续的字节大小的单元组成的数组。每字节都有一个唯一的物理地址。

比如说,第一个字节的物理地址是 0,接下来的字节地址是 1,再下一个是 2,以此类推,给定这种简单的结构,CPU 访问内存的最自然的方式就是使用这样的物理地址。我们把这种方式称为物理寻址(physical addressing)。

举个例子,比如说当程序执行了一条加载指令,指令内容是从物理地址 4 中读取 4 字节字传送到某个寄存器中。

物理寻址过程如下:当 CPU 执行到这条指令时,会生成物理地址 4,然后通过内存主线,把它传递给内存,内存取出从物理地址 4 处开始的 4 字节字,并将它返回给 CPU,CPU 会将它存放到指定的寄存器中。其实不难发现,物理寻址这种方式,每一个程序都直接访问物理内存,其实是存在重大缺陷的:

1)首先,用户程序可以寻址内存的任意一个字节,它们就可以很容易地破坏操作系统,从而使系统慢慢地停止运行。

2)再次,这种寻址方式使得操作系统中同时运行两个或以上的程序几乎是不可能的。

举个例子,我们打开了三个相同的程序(计算器),都执行到某一步。比方说,用户在这三个程序的界面上分别输入了 10、100、1000,其对应的指令就是把用户输入的数字保存在内存中的某个地址中。如果这个位置只能保存一个数,那应该保存哪个呢?这不就冲突了吗?

再举个例子,摘自《现代操作系统 - 第 3 版》:

一个程序给物理内存地址 1000 赋值也就是存入了一些数据后,另一个程序也同样给这个地址赋值,那么第二个程序的赋值会覆盖掉第一个程序所赋的值,这会造成两个程序同时崩溃。

当然了,我们也说了是几乎不可能,不是完全不可能,还是有一些方法可以在物理寻址这种方式下实现多个程序并发运行的。

最简单的方法就是:首先,将空闲的进程存储在磁盘上,这样当它们不运行时就不会占用内存,然后,让一个程序(或者说进程)单独占用全部内存运行一小段时间,当发生上下文切换的时候,就停止这个进程,并将它所有的状态信息保存在磁盘上,再加载其他进程的状态信息,然后运行一段时间...... 只要在某一个时间内存中只有一个程序,那么就不会发生上述所说的地址冲突。这就实现了一种比较粗糙的并发。

为什么说他是粗糙的呢,因为这种方法有一个问题:将全部的内存信息保存到磁盘太慢了!特别是当内存增长的时候。

因此,我们考虑把进程对应的内存一直留在物理内存中,在发生上下 文切换的时候就切换到特定的区域。

如下图所示,有 3 个进程(A、B、C),每个进程拥有从 512KB 物理内存中切出来给它们的一小部分内存,可以理解为这 3 个进程共享物理内存:

79d804b4-ca6f-11eb-9e57-12bb97331649.png

显然,这种方式是存在一定安全隐患的。毕竟如果各个进程之间可以随意读取、写入内容的话那就乱套了。

那么如何对每个进程使用的地址进行保护(protection)呢?继续使用物理内存模型肯定是不行了,因此操作系统创造了一个新的内存抽象,引入了一个新的内存模型,那就是虚拟地址空间,很多书中都会直接称呼为 “地址空间(Address Space)”。

虚拟寻址 Virtual Addressing

我先通俗地解释下虚拟地址空间和虚拟地址的概念,直接上书中的定义读起来有点生涩。

就是说每个进程的栈啊、堆啊、代码段啊等等它们的实际物理内存地址对于这个进程来说是不可见的,谁也不能直接访问这个物理地址。

那我们怎么去访问这个进程呢?

操作系统会给每个进程分配一个虚拟地址空间(vitural address),每个进程包含的栈、堆、代码段这些都会从这个地址空间中被分配一个地址,这个地址就被称为虚拟地址。底层指令写入的地址也是虚拟地址。

每个进程都拥有一个自己的地址空间,并且独立于其他进程的地址空间。也就是说一个进程中的虚拟地址 28 所对应的物理地址与另一个进程中的虚拟地址 28 所对应的物理地址是不同的,这样就不会发生冲突了。

可以这么理解,物理地址就是一个仓库,虚拟地址就是一个门牌,比方说一共有三十个门牌,那么所有的进程都能看见这三十个门牌,但是他们看见的某个相同门牌,指向的并不是同一个仓库。

OK,下面再来看《现代操作系统 - 第 3 版》书中对于地址空间的解释,应该很容易理解了:

地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间(除了在一些特殊情况下进程需要共享它们的地址空间外)。

地址空间的概念非常通用,并且在很多场合中出现。比如电话号码,在美国和很多其他国家,一个本地电话号码通常是一个 7 位的数字。因此,电话号码的地址空间是从 0 000 000 到 9 999 999。

地址空间也可以是非数字的,以 “.com” 结尾的网络域名的集合也是地址空间。这个地址空间是由所有包含 2~63 个字符并且后面跟着 “.com” 的字符串组成的,组成这些字符串的字符可以是字母、数字和连字符。

到现在你应该已经明白地址空间的概念了,它是很简单的。

有了虚拟地址空间后,CPU 就可以通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到内存之前会先被转换成合适的物理地址,这个虚拟地址到物理地址的转换过程称为地址翻译/地址转换(address translation)。

地址翻译需要 CPU 硬件和操作系统的密切合作:CPU 上的内存管理单元(Memory Management Unit,MMU)就是专门用来进行虚拟地址到物理地址的转换的,不过 MMU 需要借助存放在内存中的查询表,而这张表的内容正是由操作系统进行管理的。

那么,上述这一套 CPU 生成虚拟地址并进行地址翻译的流程就是虚拟寻址(virtual addressing)。

原文标题:你看到的所有地址都不是真的

文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222929
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217962

原文标题:你看到的所有地址都不是真的

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问e203定义的地址空间是虚拟地址还是物理地址

    蜂鸟e203实现的是物理地址,硬件端与软件端的地址分配相同,从而确定软件开发过程中能操作底层寄存器。 硬件端:在总线分发模块sirv_icb1to16_bus定义好各个端口寄存器的地址区间, 软件端
    发表于 11-11 06:20

    唯品会:利用订单地址API校验收货信息,降低因地址错误导致的退货率

    ​  在电子商务领域,退货率高是许多平台面临的挑战,其中地址错误导致的退货占比不小。唯品会作为国内领先的时尚电商平台,通过集成订单地址API(Application Programming
    的头像 发表于 09-11 15:47 379次阅读

    CNC的IP地址相同冲突如何解决?

    在网络世界中,每个设备都需要一个独特的标识来确保信息的准确传输,这个标识就是IP地址。然而,在CNC(数控机床)生产车间中,由于存在多个品牌、不同型号的设备,且这些设备在出厂测试时往往会被配备相同
    的头像 发表于 07-23 14:13 440次阅读
    CNC的IP<b class='flag-5'>地址</b>相同冲突如何解决?

    从零开始学IP地址

    IP地址是一种网络编码,用来唯一标识网络中的设备,以确保主机间正常通信。IP地址由32位二进制(32-bit)组成。
    的头像 发表于 07-08 09:29 1405次阅读
    从零开始学IP<b class='flag-5'>地址</b>

    芯知识|WT2003H语音芯片音频地址详解:一线/UART模式差异及静音地址实践

    广州唯创电子WT2003H系列语音芯片以其高集成度、丰富的控制接口和出色的音质表现,在各类嵌入式语音应用中广受欢迎。正确理解其音频播放地址的编排规则,特别是不同通讯模式下的起始地址差异,是开发稳定
    的头像 发表于 06-19 09:21 514次阅读
    芯知识|WT2003H语音芯片音频<b class='flag-5'>地址</b>详解:一线/UART模式差异及静音<b class='flag-5'>地址</b>实践

    TECS OpenStack资源池虚拟机网络二层地址无法互通的问题处理

    某运营商TECS OpenStack使用主机overlay SDN方案组网,运维人员在创建虚拟机测试虚拟机网络状态时发现问题:在其中一台主机上创建两台同网段虚拟机,虚拟机之间二层
    的头像 发表于 06-12 09:28 681次阅读
    TECS OpenStack资源池<b class='flag-5'>虚拟</b>机网络二层<b class='flag-5'>地址</b>无法互通的问题处理

    季丰推出SRAM错误地址定位黑科技

    近期受晶圆厂委托, 季丰在执行完SRAM芯片在中子辐射下SER测试后, 通过对SRAM芯片的深入研究,对测试失效数据的分析,将逻辑失效地址成功转换为物理坐标地址,最终在图像上显示失效位置,帮助客户直观地看到失效点分布位置。 通过
    的头像 发表于 06-03 10:08 807次阅读
    季丰推出SRAM错误<b class='flag-5'>地址</b>定位黑科技

    局域网地址检测器

    局域网地址检测器是一款非常实用的IP地址冲突快速检测工具。这款它功能强大、操作简单,能帮助用户快速检测在同一局域网内遇到IP冲突的问题,需要的用户可下载!  局域网地址检测器提供了强大的功能和简洁
    发表于 02-17 17:00 2次下载

    NAT网络地址转换的技术原理

    由全球IP地址分配机构,IANA (Internet Assigned Numbers Authority)管理的IPv4地址,于2011年完全用尽。但是需要连接互联网必须要IP地址,但是公网
    的头像 发表于 02-17 10:30 2482次阅读
    NAT网络<b class='flag-5'>地址</b>转换的技术原理

    I2C总线设备地址设置方法

    I2C总线是一种广泛使用的串行通信协议,它允许多个设备在两条线上(数据线SDA和时钟线SCL)进行通信。每个设备都有一个唯一的地址,以确保数据能够正确地发送到目标设备。 I2C地址概述 I2C地址
    的头像 发表于 01-17 15:17 6959次阅读

    ISP与IP地址

    ISP可以为用户提供互联网接入、信息内容、应用服务以及其他增值业务。 要知道,在ISP的网络中,IP地址池几乎可以说不可或缺。IP地址池是指一定范围内可供分配的IP地址的集合。通过分配IP地址
    的头像 发表于 12-27 10:41 917次阅读

    CIDR的IP地址分配与管理

    传统IP地址分类,也就是ABC类等。但是,有一种情况,“如果一个公司可能被分配了一个C类网络地址,但是实际上,它仅需少量的IP地址。”而CIDR的出现解决了这类问题,它提供了一种更灵活的IP
    的头像 发表于 12-26 10:01 940次阅读

    IP地址伪造和反伪造技术

    其他合法或非法的IP地址。在TCP/IP协议栈中,IP层负责数据包的传输和路由选择,而对于源 IP 地址的真实性验证就是相对较弱。 有哪些IP地址常见的伪造手段? 这里主要有两种,分别是
    的头像 发表于 12-20 10:12 976次阅读

    MAC地址的作用范围,MAC地址怎么申请?

    MAC地址(MediaAccessControlAddress),也称为局域网地址(LANAddress)、以太网地址(EthernetAddress)、硬件地址(HardwareAd
    的头像 发表于 12-19 17:44 2605次阅读
    MAC<b class='flag-5'>地址</b>的作用范围,MAC<b class='flag-5'>地址</b>怎么申请?

    通过安卓手机查找IP地址步骤

    我们在使用安卓手机的时候,可以在设备上通过一些方法来查到IP地址,而IP地址也分为公网IP地址和私网IP地址,具体怎么查找可以看下面步骤。 一、如何在手机上查找私网IP
    的头像 发表于 12-12 13:53 4507次阅读
    通过安卓手机查找IP<b class='flag-5'>地址</b>步骤