如何生成绝对代码

时间:2012-09-07 08:33:53

标签: memory-management operating-system memory-address

我已经完成了关于高尔文操作系统概念的记忆管理概念,我已经阅读了一个声明:

如果您在编译时知道进程将驻留在内存中,则可以生成绝对代码。

如何在编译时处理器知道主存储器进程中的哪个存储器位置将存储。

有人可以解释一下,如果我们在编译时知道进程将驻留在内存中,具体意味着什么呢? 当程序从准备状态转换到运行状态时分配内存。

2 个答案:

答案 0 :(得分:1)

通常,机器代码与位置无关。为了能够在任意起始地址加载它并在那里运行,需要一些关于机器代码的额外信息(例如,它有自己的各个部分的地址),因此它可以调整到任意位置。 / p>

OTOH,如果代码总是在同一个固定地址加载,则不需要任何额外的信息和处理。

absolute他的意思是fixed + final,已经调整到适当的地址。

处理器不“知道”任何东西。 “告诉”它。

答案 1 :(得分:0)

我不确切地知道他对“绝对代码”意味着什么,取决于您使用的操作系统,带有代码和数据的程序将被加载到虚拟地址并从那里执行。

除此之外,不是编译器,而是链接器设置程序将加载到的地址。

像Linux这样的现代操作系统正在使用地址空间布局随机化来避免在每个程序加载时都有一个静态地址,以避免利用软件漏洞。

如果您正在编写自己的操作系统,那么osdev.org wiki可能是您的好资源。如果您可以阅读/说德语,我建议lowlevel.eu