Memory management 绝对代码是如何生成的

Memory management 绝对代码是如何生成的,memory-management,operating-system,memory-address,Memory Management,Operating System,Memory Address,我已经讨论过内存管理概念和操作系统概念,Galvin的概念,我读过一篇声明: 如果在编译时知道进程将驻留在内存中的位置,则可以生成绝对代码。 在编译时,处理器如何知道主内存进程中的哪个内存位置将被存储 有人能解释一下,这到底意味着什么,如果我们在编译时知道进程将驻留在内存中的位置, 当程序从就绪状态移动到运行状态时,内存将被分配。我不知道“绝对代码”的确切含义,这取决于您使用的操作系统,带有代码和数据的程序将加载到虚拟地址并从那里执行 除此之外,不是编译器,而是链接器设置程序将加载到的地址 像L

我已经讨论过内存管理概念和操作系统概念,Galvin的概念,我读过一篇声明:

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

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

有人能解释一下,这到底意味着什么,如果我们在编译时知道进程将驻留在内存中的位置,
当程序从就绪状态移动到运行状态时,内存将被分配。

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

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

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


如果您正在编写自己的操作系统,那么wiki可能是一个很好的资源。如果你能读/说德语,我建议你也读/说德语。

一般来说,机器代码不是位置独立的。为了能够在任意起始地址加载它并在那里运行,需要一些关于机器代码的额外信息(例如,它自身各个部分的地址),以便可以将其调整到任意位置

OTOH,如果代码总是在相同的固定地址加载,那么您不需要任何额外的信息和处理

通过
绝对
他指的是
固定
+
最终
,已经调整到适当的地址

处理器什么都不“知道”。你“告诉”它