理解内存地址

物理内存和物理地址

物理内存:内存条实际提供的内存空间

内存寻址:在内存上找到正确的位置以便进行存取的过程

内存地址:在内存空间中描述位置的方法

物理内存地址:无符号的整数编号,以byte划分,从0开始编号,逐渐线性增大

硬编码:通过物理地址操作物理内存的写码方式

线性内存和线性地址

线性内存和物理内存:

相似点:从0编号,线性增加;

不同:
1.物理地址一一对应于实际物理内存空间的位置,而线性地址可多对一(多个线性地址对应一个物理地址)
2.物理地址的增加,总是线性地对应着内存空间的位置;但是线性地址的增加,对应到物理地址上,可以分段跳跃。

逻辑内存(虚拟内存)和逻辑地址(虚拟地址)

分段:不同级别的程序、程序的不同数据类型,存放在不同的「段」上面,然后再定义在「段」上的偏移量。现代程序看到的地址都不是线性的,而是分段过的地址,形如:segment:offset。

逻辑内存空间:段 + 偏移量组成的空间

逻辑地址:二元组

宽度

宽度:位宽;某东西在同一时刻能处理的数据量;单位:位(bit)

CPU寻址能力

对于 xx 位 CPU 来说,它一次性能够表示的无符号数的范围是 [0,2x−1][0,2x−1]。因此,对这枚 CPU 来说,它以字节(Byte)为单位寻址时,最多能在 2x Bytes2x Bytes 的内存空间中找到它需要的数据。如果在寻址时,不加入其它信息,那么这是它的寻址能力上限。

CPU 需要通过地址总线去内存寻址。若地址总线的带宽为 yy 位,那么在地址总线中传输的物理内存地址的范围是 [0,2y−1][0,2y−1]。也就是说,地址总线的可寻址空间是 2y Bytes2y Bytes。地址总线中的地址,是与物理内存地址保持一致的。

因此,如果在寻址时,不加入其它信息,CPU 具体的寻址能力取决于 CPU 本身的位宽和它连接的地址总线的带宽:2min(x,y) Bytes2min(x,y) Bytes。

内存分页

分页就是人为地在逻辑上将连续的内存空间,按照固定大小切分成一段一段。对于线性内存来说,这样切分出来的固定大小叫做「页(Page)」;对于物理内存来说,这样切分出来的固定大小叫做「页帧(Page Frame)」。

分页机制将线性内存分为若干页,将物理内存分为若干帧,并建立从页到帧的映射关系。这个映射关系,是一个「多对一」的映射。

高速缓存

高速缓存将最近的访存页面对应的内容保存其中。当 CPU 访存时,首先在缓存中查询是否有目标页内容:若有,则直接存取内容;否则,再进行二级页表的查询,到内存中存取内容。如果缓存存满了,则根据一定的算法(退场机制),将缓存中的过期数据退场。

根据 Intel 自己的统计,大约 98% 的访存请求可以通过高速缓存处理。亦即,只有 2% 的访存请求,需要进行两次页表查询。可见,高速缓存的存在,大大降低了数据交换的量和频次。因此,高速缓存大大提升了寻址/访存速度。

Thanks!