线性,物理,逻辑和虚拟内存地址有什么区别?

What is the difference between linear ,physical ,logical and virtual memory address?

我正在尝试阅读英特尔软件开发人员手册以了解操作系统的工作原理,这四个称呼术语让我感到困惑。以上是我的理解,如有错误请指正

线性地址:对于一个孤立的程序来说,一长串从地址0开始的内存。该程序的所有段都将从其线性地址寻址。可能在内存中,也可能在磁盘中。

physical address : 出现在 ram 或 main memory pin 中的地址 .

逻辑地址:磁盘和内存中的交换内存的组合。所有程序的所有线性内存都将保留在逻辑地址 space.It 中,只能由内核模式使用。从逻辑地址到物理地址的转换由内部硬件完成。

虚拟地址:虚拟地址与线性地址相同。它将仅由操作系统中的用户模式使用。操作系统将从逻辑地址映射虚拟地址。

线性地址space表示系统上可以组成的所有地址。线性地址space中任何字节的地址称为线性地址。今天的系统有大约 46 位的内存总线宽度,对应于大约 64 TiB 的线性地址 space。英特尔仅在其平面内存模型中使用此术语。

处理器在其总线上寻址的内存称为物理内存。每个字节都分配了一个唯一的地址,称为物理地址。需要注意的是,除了内存之外,memory-mapped I/O 设备也连接到这条总线上,可以寻址。该内存区域也不必是连续的,这里的内存控制器将物理地址分配给各个内存条和设备。

Paging 现在添加虚拟地址 spaces:每个程序都分配有自己的线性地址 space。此地址 space 中的某些地址有效,其他地址无效。有效地址是指可能在物理内存中的数据,但也指硬盘上的外包数据(交换文件)。翻译由 MMU(内存管理单元)和 TLB(翻译查找缓冲区)一起在硬件中完成,或者由操作系统完成。也有可能这个数据根本不存在,只有在被访问时才会生成,但这就牵扯到这里了。让我们注意这些是虚拟地址

逻辑地址是英特尔在分段内存模型中使用的一个术语:内存被分成多个段。要寻址段中的字节,使用逻辑地址。这由一个段选择器和一个偏移量组成。使用段选择器将逻辑地址转换为虚拟地址:选择器包含段的开头及其大小。如果偏移量大于段的大小,则地址无效。将段的开头添加到偏移量可以得到虚拟地址。这种分段内存模型在 64 位模式下已基本废除。

总结

Logical Addresses -> Virtual Addresses -> Physikal Addresses

虚拟地址和物理地址是线性地址,反之则不然。


参考文献:

不是每个进程都由 OS 虚拟地址 space 4GB 或其他东西提供。然后这个地址被编译器翻译成逻辑地址,这是一个独立于任何 OS 实现的 CPU 术语。 所以我认为正确的顺序是:

Virtual -> Logical -> Linear -> Physical