繁体   English   中英

线性、物理、逻辑和虚拟 memory 地址有什么区别?

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

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

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

物理地址:出现在 ram 或主 memory 引脚中的地址。

逻辑地址:磁盘和内存中交换 memory 的组合。 所有程序的所有线性 memory 都将停留在逻辑地址空间。它只能在 kernel 模式下使用。 从逻辑地址到物理地址的转换由内部硬件完成。

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

线性地址空间表示可以在系统上形成的所有地址。 线性地址空间中任何字节的地址称为线性地址 今天的系统有大约 46 位的 memory 总线宽度,对应于大约 64 TiB 的线性地址空间。 Intel 仅在其平面 memory model 中使用该术语。

处理器在其总线上寻址的 memory 称为物理 memory。 每个字节都分配有一个唯一的地址,称为物理地址 需要注意的是,除了 memory 之外,内存映射 I/O 设备也连接到该总线并且可以寻址。 This memory area also does not have to be contiguous, the memory controller here assigns the physical addresses to individual memory bars and devices.

分页现在增加了虚拟地址空间:每个程序都被分配了自己的线性地址空间。 此地址空间中的一些地址是有效的,而另一些则不是。 有效地址是指可能在物理 memory 中的数据,但也指硬盘上的外包数据(交换文件)。 翻译由 MMU(内存管理单元)和 TLB(翻译查找缓冲区)或操作系统在硬件中完成。 也有可能这些数据根本不存在,只有在访问时才生成,但这在这里太过分了。 让我们注意这些是虚拟地址

逻辑地址是 intel 在分段 memory model 中使用的术语:memory 被划分为分段。 为了寻址段中的字节,使用逻辑地址。 这由一个段选择器和一个偏移量组成。 使用段选择器将逻辑地址转换为虚拟地址:选择器包含段的开头及其大小。 如果偏移量大于段的大小,则地址无效。 将段的开头添加到偏移量会为您提供虚拟地址。 这个分段的 memory model 在 64 位模式下基本上被废除了。

概括

Logical Addresses -> Virtual Addresses -> Physikal Addresses

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


参考:

操作系统不是给每个进程一个虚拟地址空间 4GB 什么的。 然后,编译器将这些地址转换为逻辑地址,这是一个独立于任何操作系统实现的 CPU 术语。 所以我认为正确的顺序是:

Virtual -> Logical -> Linear -> Physical

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM