进程地址空间中的共享代码逻辑地址

时间:2013-04-07 19:35:24

标签: memory-management operating-system

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

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

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

2 个答案:

答案 0 :(得分:1)

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

页面表无法解决这个问题。什么是相对于instruction pointer(AKA program counter)的代码/数据寻址模式。有些CPU拥有它,有些没有它,但有些CPU已经半生不熟(例如,它们只能用于将控制权转移到其他地方的指令(例如jump / call)。代码,但没有数据(例如move))。

答案 1 :(得分:0)

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