《深入理解Linux内核》-2.1. 内存地址

时间:2023-01-11 22:39:12

80x86体系上有三种地址:

逻辑地址(Logical address)

  • 机器语言指令中用来指定操作数的地址。逻辑地址包含段和偏移,偏移定义了段到实际地址的举例。

线性地址(Linear address,也叫虚拟地址)

  • 32位的无符号整数,最大可以表示4GB的内存空间。

物理地址

  • 用来定位内存芯片中的内存单元。对应于从微处理器针脚发送给存储器总线的电信号。

内存管理单元(MMU)通过一个叫分段单元的硬件装置把逻辑地址转化为线性地址;然后,另一个叫分页单元的硬件装置把线性地址转换为物理地址(看图2-1)。

图 2-1. 逻辑地址转换

《深入理解Linux内核》-2.1. 内存地址

多处理器系统上,所有CPU可能共享一块内存,这意味着RAM芯片被不同的CPU并发访问。由于RAM上的读写操作必须顺序执行,因此在总线和RAM芯片之间添加了一个叫内存仲裁器的硬件装置。它的作用是保证在内存空闲的时候cpu可以访问,忙的时候,延迟访问。即使在但处理器系统上,也会有内存仲裁器,因为DMA控制器可以和CPU并发访问内存。在多处理器系统上,内存仲裁器更加复杂,因为它包含多个输入端口。 举例来说,双核奔腾处理器,在每个芯片入口维护一个双端口仲裁器,并且要求这两个CPU在尝试使用通用总线的时候必须交换同步信息。从编程的角度看,仲裁器不可见,因为它由硬件装置管理。