在8086的
实模式下,把某一
段寄存器左移4位,然后与地址ADDR相加后被直接送到内存总线上,这个相加后的地址就是
内存单元的物理地址,而程序中的这个地址就叫
逻辑地址(或叫虚地址)。在80386的保护模式下,这个逻辑地址不是被直接送到内存总线,而是被送到
内存管理单元(MMU)。MMU由一个或一组芯片组成,其功能是把逻辑地址映射为物理地址,即进行地址转换。
逻辑地址:
机器语言指令仍用这种地址指定一个
操作数的地址或一条指令的地址。这种
寻址方式在Intel的分段结构中表现得尤为具体,它使得MS-DOS或Windows程序员把程序分为若干段。每个逻辑地址都由一个段和
偏移量组成。
线性地址:针对32位CPU,线性地址是一个32位的
无符号整数,可以表达高达232(4GB)的地址。通常用16进制表示线性地址,其取值范围为0x00000000~0xffffffff。对64位CPU,线性地址是一个64位的无符号整数,可以表达高达264。
电脑的内存(尤其是指
主存)是由许多“内存地址”所组成的,每个内存地址都有一个“
物理地址”,能供CPU(或其他设备)访问。一般,只有如
BIOS、
操作系统及部分特定之公用软件(如
内存测试软件)等
系统软件,能使用机器码的运算对象或
寄存器对物理地址定址,指示CPU要求
内存控制器之类的硬件设备,使用内存总线或
系统总线,亦或分别之
控制总线、
地址总线及
数据总线,运行该程序之命令。内存控制器的
总线是由数条并行的线路所组成的,每条线路表示一个
比特。总线的宽度因此依电脑不同,决定了可定址之存储单位数量,以及每一单位内的比特数量。
计算机程序使用内存地址来运行
机器码、存储及截取数据。大多数的
应用程序无法得知实际的物理地址,而是使用电脑的内存管理单元及
操作系统的内存映射,为“
逻辑地址”或
虚拟地址定址。
MMU是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件,在本书中,我们把它们分别叫做分段机制和分页机制,以利于从逻辑的角度来理解硬件的实现机制。分段机制把一个逻辑地址转换为
线性地址;接着,分页机制把一个线性地址转换为
物理地址。