1

在 Silberchatz 的“操作系统概念”一书中,它说

“共享代码必须出现在所有进程的逻辑地址空间中的相同位置”,

为什么它必须出现在同一个位置?我认为对于每个进程我们都有一个单独的页表,这使得在不同的逻辑地址中共享代码地址成为可能!

4

2 回答 2

2

机器代码很少完全与位置无关。如果您有一些代码在位于地址 0x10000(逻辑/虚拟)时已编译为可以工作,并且您将其移动到地址 0x70000(逻辑/虚拟),则它将无法在新位置工作。

页表对此无能为力。什么可以是相对于instruction pointer(AKA program counter)的代码/数据寻址模式。有些 CPU 有它,有些没有,还有一些 CPU 半生不熟(例如,它们只能用于将控制(例如jump/ call)转移到代码中的其他位置的指令,而对于数据(例如move)则没有) .

于 2013-04-07T21:32:51.987 回答
0

库(共享代码)中使用的每个地址(如跳转地址)都固定指向特定的逻辑地址。因此,这些逻辑地址在已导入该库的所有进程中应相同。这意味着您只能将这个库放在完全相同的逻辑地址中,让库找到自己的代码

于 2020-01-01T08:38:47.830 回答