最近在理解计算机内存管理的时候,又看到了这三个名词,当初在学计算机组成原理的时候就有点绕,现在重新来理解,发现网上很多blog说法都不一致,于是重新翻阅《深入理解计算机系统》、《计算机系统基础》以及Intel IA-32手册,发现还是有说的不甚清晰的地方,于是和老师以及同好讨论,最终得出了一个比较合理的概念区分。
先说结论:虚拟地址(虚地址,Virtual Address)在不同的情境下代表不同的意思:
- 在段页式存储中,虚地址既可以指作线性地址(Linear Address),也可以指做逻辑地址
- 在页式存储和段式存储中,虚地址指作逻辑地址(Logical Address)
因此,为了不引起混淆,建议尽量不使用虚拟地址,其本身就是一个比较笼统模糊的概念,感觉就是相对物理地址而言的一个称呼。
在本文,规定三个意义明确的地址:逻辑地址、线性地址、物理地址,方便后续解释。
物理地址
CPU地址总线传来的地址,由硬件电路控制。
逻辑地址
由程序中或者指令中给出的访内地址。
线性地址
在段页式存储中,才有线性地址这个概念。是逻辑地址转化到物理地址的中间产物。
- 在段式存储中,逻辑地址经过段式管理部件,将其映射为一个线性地址,此时这个线性地址就是物理地址;
- 若是在段页式存储中,逻辑地址经过段式管理部件,先被映射为线性地址,然后线性地址通过页式管理部件,被映射成物理地址。
虚拟地址
在讨论虚拟地址到底是什么之前,我们先来看三种方式下的地址转换:
段式
页式
段页式
以上图片来源于《计算机系统基础》和《计算机系统结构》,由图我们可以看出,无论是什么模式下,逻辑地址都可以被称之为虚拟地址(VA),然后由于线性地址其实是一个逻辑地址到物理地址变化的中间产物,可以把线性地址理解为页式存储中的逻辑地址,因此很多说法中,线性地址也被叫做虚地址。
总结
总的来说,虚地址就是一个笼统的概念,以后遇到了就按情况理解,自己能够分清楚到底是在讲逻辑地址还是线性地址就好,个人倾向于不用虚拟地址这个概念(笑)。