01
物理地址
计算机在运行程序时,需要对代码指令及相关数据进行保存,而这些数据将会保存到内存(包括RAM和ROM)中。为了能够在读取数据时,可以直接找到数据的位置所在,因此,会对内存进行编号,从0开始顺序编号,直到其支持的最大存储单元。计算机便是根据这个编号进行数据的读写操作,而这个编号就叫做物理地址。
物理地址,即机器内主存的地址,包括RAM和ROM。因此,存储器的物理地址空间是呈线性增长的。它是用二进制数来表示的,是无符号整数,书写格式为十六进制数。cpu通过“外部地址总线上的物理地址进行寻址”从而进行数据的读写,该地址就是内存储器中的实际有效地址,也叫作绝对地址。
在一台计算机中,计算机系统为了标示唯一的一个内存单元,操作系统会给每一个内存单元编上一个绝对的号,计算机系统就通过这个编号来定为每一个内存单元的物理位置,这个编号称为内存的物理地址。
02
虚拟地址
在实际使用中,应用程序不会直接对内存中的数据进行修改。此时,“操作系统为应用程序提供一个统一的内存访问接口”,这个接口就是虚拟地址。所有的应用程序只需要面向虚拟地址进行编写,而不用考虑实际的物理地址的使用情况。
这样做的好处:
1)不直接对内存进行读写,保证了内存的安全性。
2)方便编译器和操作系统安排程序的地址分布。
3)方便进程之间隔离。
4)虚拟内存管理最主要的作用是让每个进程有独立的地址空间(进程间的安全)。
03
逻辑地址
在虚拟地址中会对虚拟地址进行分区(以32位的操作系统为例):
程序在使用空间地址时,使用的是虚拟地址的空间,而在虚拟空间中,会对其进行了划分,如上图所示。
此时,程序定义一个变量,会开辟对应的空间存放数据。这个时候,是通过找到对应的“空间首地址(逻辑段) + (段内)偏移地址” 来进行数据的访问,这种访问数据的方式,就叫做偏移地址。
总结:
逻辑地址是指操作系统或应用程序面对的存储单元地址的表示形式。
分段存储管理方式把内存划分为多个逻辑段(代码段、数据段、堆栈段等),从而把不同的数隔离开。这种情况下,用 “段起始地址+段内偏移地址” 这种形式来描述数据地址就是很自然的,这就是所谓的逻辑地址。
它的描述形式是:
段号: 段号用来查找段的起始地址,它被存储在段寄存器中
偏移地址/有效地址: 存储单元的物理地址与所在段起始地址的差值
04
线性地址
线性地址,是逻辑地址到物理地址变换之间的中间层。在分段部件中逻辑地址是段中的偏移地址,然后加上基地址就是线性地址。是一个32位无符号整数,可以用来表示高达4GB的地址,也就是,高达4294967296个内存单元。
线性地址通常用十六进制数字表示,值得范围从Ox00000000到Ox11ff)程序代码会产生逻辑地址,通过逻辑地址变换就可以生成一个线性地址。如果启用了分页机制,那么线性地址可以再经过变换以产生一个物理地址。如果没有启用分页机制,那么线性地址直接就是物理地址。
看到这里,对嵌入式系统中物理地址、虚拟地址、逻辑地址、线性地址这四种地址的特点及区别有没有了解清楚呢?欢迎评论区留言交流哦~