地址绑定的困惑
Confusions about address binding
编译时间。如果您在编译时知道进程将驻留在何处
在内存中,则可以生成绝对代码。例如,如果你知道
用户进程将从位置 R 开始驻留,然后生成
编译器代码将从该位置开始并从那里向上扩展。如果,在
稍后,起始位置发生变化,那么这将是必要的
重新编译这段代码。 MS-DOS .COM 格式的程序绑定在
编译时间。
- 起始位置改变的原因是什么?是真的吗
因为上下文 switching/swapping ?
- 绝对码是二进制码吗?
加载时间。如果在编译时不知道进程将驻留在何处
在内存中,则编译器必须生成可重定位代码。在这种情况下,
最终绑定延迟到加载时间。如果起始地址改变,我们
只需重新加载 用户代码即可合并此更改后的值。
- 可重定位代码与绝对代码有何不同?它是否包含有关基址、限制和重定位寄存器的信息?
- 如何重新加载比他们提到的重新编译更有效仅重新加载意味着不重新编译仅重新加载?
执行时间。如果进程可以在执行期间从
一个内存段到另一个内存段,然后绑定必须延迟到 运行
时间。 .
为什么可能需要在执行过程中移动进程?
编译时和加载时地址绑定方法生成
相同的逻辑和物理地址。但是,执行时地址绑定方案会导致不同的逻辑地址和物理地址。
编译和加载时方法如何生成相同的逻辑和物理地址?
动态库(.dll .so)是可重定位的,因为它们可能在不同的应用程序中出现在不同的地址,但是为了节省内存,操作系统在物理内存中只有一份(虚拟内存很棒) ,并且每个应用程序都具有只读访问权限。
可重定位的应用程序也是如此。为了安全起见,地址是随机的也是明智的——一些远程攻击稍微难一些
首先,我会为您找到一个更好的信息来源。你有的很穷
What can be the reason of the starting location to change? Can it be because of context switching/swapping ?
您更改代码或需要将代码加载到内存中的不同位置。
Does absolute code means binary code?
没有。它们是独立的概念。
How is relocatable code different from absolute code? Does it contain info about base,limit and relocation register?
可重定位代码使用相对地址,通常相对于程序计数器。
(基本限制和重定位寄存器将是系统特定的概念)。
How is reloading more efficient then recompiling as they mentioned only reload means no recompiling only reload?
假设两个不同的程序使用同一个动态库。他们需要在内存中的不同位置加载。这不是效率问题。
Why it may be needed to move a process during it's execution?
这是在虚拟内存出现之前所做的事情。据我所知,没有人再这样做了。
How compile and load-time methods generate identical logical and physical addresses?
我不知道他们在说什么&^54。这种说法毫无意义。
编译时间。如果您在编译时知道进程将驻留在何处 在内存中,则可以生成绝对代码。例如,如果你知道 用户进程将从位置 R 开始驻留,然后生成 编译器代码将从该位置开始并从那里向上扩展。如果,在 稍后,起始位置发生变化,那么这将是必要的 重新编译这段代码。 MS-DOS .COM 格式的程序绑定在 编译时间。
- 起始位置改变的原因是什么?是真的吗 因为上下文 switching/swapping ?
- 绝对码是二进制码吗?
加载时间。如果在编译时不知道进程将驻留在何处 在内存中,则编译器必须生成可重定位代码。在这种情况下, 最终绑定延迟到加载时间。如果起始地址改变,我们 只需重新加载 用户代码即可合并此更改后的值。
- 可重定位代码与绝对代码有何不同?它是否包含有关基址、限制和重定位寄存器的信息?
- 如何重新加载比他们提到的重新编译更有效仅重新加载意味着不重新编译仅重新加载?
执行时间。如果进程可以在执行期间从 一个内存段到另一个内存段,然后绑定必须延迟到 运行 时间。 .
为什么可能需要在执行过程中移动进程?
编译时和加载时地址绑定方法生成 相同的逻辑和物理地址。但是,执行时地址绑定方案会导致不同的逻辑地址和物理地址。
编译和加载时方法如何生成相同的逻辑和物理地址?
动态库(.dll .so)是可重定位的,因为它们可能在不同的应用程序中出现在不同的地址,但是为了节省内存,操作系统在物理内存中只有一份(虚拟内存很棒) ,并且每个应用程序都具有只读访问权限。
可重定位的应用程序也是如此。为了安全起见,地址是随机的也是明智的——一些远程攻击稍微难一些
首先,我会为您找到一个更好的信息来源。你有的很穷
What can be the reason of the starting location to change? Can it be because of context switching/swapping ?
您更改代码或需要将代码加载到内存中的不同位置。
Does absolute code means binary code?
没有。它们是独立的概念。
How is relocatable code different from absolute code? Does it contain info about base,limit and relocation register?
可重定位代码使用相对地址,通常相对于程序计数器。
(基本限制和重定位寄存器将是系统特定的概念)。
How is reloading more efficient then recompiling as they mentioned only reload means no recompiling only reload?
假设两个不同的程序使用同一个动态库。他们需要在内存中的不同位置加载。这不是效率问题。
Why it may be needed to move a process during it's execution?
这是在虚拟内存出现之前所做的事情。据我所知,没有人再这样做了。
How compile and load-time methods generate identical logical and physical addresses?
我不知道他们在说什么&^54。这种说法毫无意义。