【发布时间】:2019-07-04 02:17:20
【问题描述】:
我正在从一本名为《操作系统》的书中阅读有关内存管理的内容。 我之前研究过这个主题并且很清楚,因为只引入了两种类型的地址:物理和逻辑(物理和虚拟)。然而,这本书似乎介绍了三种类型,有时将其中两种视为相同,有时则视为不同。
这是一个引用(我自己翻译的,所以可能不是最好的):
在编写程序时,不知道在哪一点 程序的内存,这就是使用符号地址的原因 (变量名)。将符号地址转换为 物理地址称为地址绑定,它可以在 不同的时间点。如果在编译过程中已知 那么程序将在内存的哪一部分进行地址绑定可以 在那个时候完成。否则(最常见的情况)编译器 生成相对地址(相对于部分的开始 进程获得的内存)。执行程序时 loader 将相对地址映射到物理地址。
这一切似乎都很清楚。相对映射到物理。以下是之后的内容:
在进程执行过程中,与内存的交互是通过 读取和写入内存位置的序列。 CPU要么 从内存中读取指令或数据或将数据写入 记忆。在这两个任务中,CPU 不使用物理 地址,而是 CPU 自己生成的逻辑地址。所有逻辑的集合 地址称为虚拟地址空间。
这已经令人困惑了。逻辑地址和相对地址有什么区别?无论我在哪里查找,它们都不会分开。这是一个更令人困惑的句子:
如果地址绑定在编译时完成并且 加载然后虚拟地址空间匹配物理地址 空间。
前面说过,地址绑定是将符号地址转换为物理地址的过程。但后来才引入相对地址的概念。而加载据说是将相对转换为物理的过程。所以现在我完全迷失在这里了。
假设我们不知道该过程将占用内存的哪一部分:时间线是如何进行的?程序被编译,变量名(符号地址)被翻译成......我猜是相对的?然后CPU需要做一些读/写,它使用......逻辑的?
此外,在本书的以下部分中,相对和逻辑这两个术语似乎是随机使用的。好像它们是相同的,但仍然被定义为不同。
谁能帮我澄清一下?完美的答案可能是程序时间线的人为示例。什么时候引入了哪个地址,逻辑地址和相对地址有什么区别?
提前致谢。
【问题讨论】:
标签: memory-management operating-system