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

问题描述 投票:0回答:2

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

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

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

memory-management operating-system
2个回答
1
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.