执行时地址绑定方案中的逻辑和物理地址空间

logical and physical address spaces in in the execution-time address-binding scheme

我在看一本操作系统的书,发现以下信息我看不懂:

Logical and physical addresses are the same in compile-time and load-time address-binding schemes; logical (virtual) and physical addresses differ in execution-time address-binding scheme".

这是否意味着在将符号地址转换为物理地址或可重定位地址的编译时地址绑定以及将可重定位地址转换为物理地址的加载时地址绑定中,程序处理物理地址和 CPU 直接生成物理地址 ?!

并且在执行时地址绑定方案中,程序在主内存中的位置可能会发生变化,因此会有单独的地址空间?!

是这个主意还是我错过了什么?

您正在阅读哪个操作系统的文本; IE。什么日期?

传统的 UNIX 工具包括一个编译器 (ccN),它将源代码转换为 asm;汇编程序 (as),它将 asm 转换为可重定位目标代码或可执行文件;和一个加载程序 (ld),它将目标代码文件组合成一个已解析的可执行文件。

请注意,如果所有符号都已解析,则汇编器可以创建可执行文件:约定 a.out 是其产物。

其他系统,特别是 IBM 大型机和后来的 MSDOS,将 loading 称为 link editting,没有区别。

ld 解析(分配)地址给可执行文件时,这些地址是虚拟;尽管在实践中可能是 物理。 Ld 不在乎,它的工作是将 N 个目标文件组合成一个完全解析的可执行文件,可能遵循如下规则:.text = 0x0, .data = .text + size(.text), ...。如果我有一个只有物理地址的嵌入式系统,我可以用其他规则来引导 ld

结果 a.out 对所有的地址都有一个概念,在现代设备上(这里的现代意味着自 1978 年以来任何重要的计算机)这些是虚拟地址,maps 进入内存的可执行文件解析为其他物理内存地址。

在更现代的系统中(自大约 2003 年起),a.out 不包含确切地址,而是包含 相对地址 和内部映射表。这使操作系统能够在每次 运行 阻止一些简单的恶意软件攻击时更改程序地址。