1、物理寻址
计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每字节都有一个唯一的物理地址(Physical Address,PA)。第一个字节的地址为0, 接下来的字节地址为1, 再下一个为2,依此类推。
如上图所示,当CPU执行这条加载指令时,会生成一个有效物理地址, 通过内存总线, 把它传递给主存。主存取出从物理地址4处
开始的4字节字, 并将它返回给CPU, CPU会将它存放在一个寄存器里。
2、虚拟寻址
使用虚拟寻址, CPU通过生成一个虚拟地址(Virtual Address, VA)来访问主存,这个虚拟地址在被送到内存之前先转换成适当的物理地址。
地址翻译
将一个虚拟地址转换为物理地址的任务叫做地址翻译(address translation)。CPU芯片上叫做内存管理单元(Memory Management Unit,
MMU)的专用硬件, 利用存放在主存中的查询表来动态翻译虚拟地址, 该表的内容由操作系统管理。
3、地址空间
1. 什么是地址空间
地址空间(address space)是一个非负整数地址的有序集合:{0, 1,2,…}.如果地址空间中的整数是连续的,那么我们说它是一个线性地址空间(linear address space)。
2. 虚拟地址空间和物理地址空间
在一个带虚拟内存的系统中,CPU从一个有
2
n
2^n
2n个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间(virtual address space) .
一个系统还有一个物理地址空间(physical address space), 对应于系统中物理内存的 M个字节,其中M不一定是2的幂,但是为了简化讨论假设为2的m次幂。
3. 地址空间的大小
一个地址空间的大小是由表示最大地址所需要的位数来描述的。 例如,一个包含 2 n 2^n 2n个地址的虚拟地址空间就叫做一个n位地址空间。 现代系统通常支持32 位或者64位虚拟地址空间。
4. 地址空间在虚拟内存中的作用
地址空间的概念是很重要的,因为它清楚地区分了数据对象(字节)和它们的属性(地址)。 一旦认识到了这种区别,那么我们就可以将其推广,允许每个数据对象有多个独立的地址,其中每个地址都选自一个不同的地址空间。 这就是虚拟内存的基本思想。 主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。