首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货!嵌入式系统“四个地址”,划重点!

朋友,你的福气在后头!

哈喽!最近华妹看到很多人在问:“嵌入式系统中物理地址、虚拟地址、逻辑地址、线性地址都有着怎样的特点吗?四者的区别又是怎样的呢?”不知道你是否也存在这些问题,如果有,那就跟华妹来一起看看吧~

1

物理地址

计算机在运行程序时,需要对代码指令及相关数据进行保存,而这些数据将会保存到内存(包括RAM和ROM)中。为了能够在读取数据时,可以直接找到数据的位置所在,因此,会对内存进行编号,从0开始顺序编号,直到其支持的最大存储单元。计算机便是根据这个编号进行数据的读写操作,而这个编号就叫做物理地址。

物理地址,即机器内主存的地址,包括RAM和ROM。因此,存储器的物理地址空间是呈线性增长的。它是用二进制数来表示的,是无符号整数,书写格式为十六进制数。cpu通过“外部地址总线上的物理地址进行寻址”从而进行数据的读写,该地址就是内存储器中的实际有效地址,也叫作绝对地址。

在一台计算机中,计算机系统为了标示唯一的一个内存单元,操作系统会给每一个内存单元编上一个绝对的号,计算机系统就通过这个编号来定为每一个内存单元的物理位置,这个编号称为内存的物理地址。

2

虚拟地址

在实际使用中,应用程序不会直接对内存中的数据进行修改。此时,“操作系统为应用程序提供一个统一的内存访问接口”,这个接口就是虚拟地址。所有的应用程序只需要面向虚拟地址进行编写,而不用考虑实际的物理地址的使用情况。

这样做的好处:

1)不直接对内存进行读写,保证了内存的安全性。

2)方便编译器和操作系统安排程序的地址分布。

3)方便进程之间隔离。

4)虚拟内存管理最主要的作用是让每个进程有独立的地址空间(进程间的安全)。

3

逻辑地址

在虚拟地址中会对虚拟地址进行分区(以32位的操作系统为例):

程序在使用空间地址时,使用的是虚拟地址的空间,而在虚拟空间中,会对其进行了划分,如上图所示。

此时,程序定义一个变量,会开辟对应的空间存放数据。这个时候,是通过找到对应的“空间首地址(逻辑段)?+?(段内)偏移地址”?来进行数据的访问,这种访问数据的方式,就叫做偏移地址。

总结:

逻辑地址是指操作系统或应用程序面对的存储单元地址的表示形式。

分段存储管理方式把内存划分为多个逻辑段(代码段、数据段、堆栈段等),从而把不同的数隔离开。这种情况下,用“段起始地址+段内偏移地址”这种形式来描述数据地址就是很自然的,这就是所谓的逻辑地址。

它的描述形式是:

段号:????段号用来查找段的起始地址,它被存储在段寄存器中

偏移地址/有效地址:????存储单元的物理地址与所在段起始地址的差值

4

线性地址

线性地址,是逻辑地址到物理地址变换之间的中间层。在分段部件中逻辑地址是段中的偏移地址,然后加上基地址就是线性地址。是一个32位无符号整数,可以用来表示高达4GB的地址,也就是,高达4294967296个内存单元。

线性地址通常用十六进制数字表示,值得范围从Ox00000000到Ox11ff)程序代码会产生逻辑地址,通过逻辑地址变换就可以生成一个线性地址。如果启用了分页机制,那么线性地址可以再经过变换以产生一个物理地址。如果没有启用分页机制,那么线性地址直接就是物理地址。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OCvU5tWc58SWMovKS013COHw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com