我在高尔文的操作系统书中读过。在内存管理的地址绑定中,它说了3种类型的地址绑定。编译时,加载时间,执行时间。关于执行时间地址绑定:“物理地址是在执行时计算的。”但我的问题是,这些物理地址的计算是针对内存的基地址将进程加载到内存中。要首先执行该过程,必须将其加载到内存中。为此,它需要一些物理内存地址。那么在执行时如何计算这些地址呢?我很困惑。
有些人可以为此提供解释。
由于
答案 0 :(得分:14)
你的想法是正确的。加载时和运行时绑定之间的区别在于,在每次运行时都有内存查找时,它会通过“重定位寄存器”,就像基址寄存器一样,然后添加一个偏移量。
在加载时绑定中它执行相同的操作但后续查找不需要评估此寄存器。首次将地址拉入内存时设置地址。因此,如果基址更改,则需要重新加载整个过程以修复所有可重定位的地址。
在运行时,您可以在物理内存中移动进程,而不必担心重新加载它以修复映射,因为每次访问内存时它都会映射它。 / p>
加载时绑定会导致匹配的逻辑/物理地址,但运行时会产生不同的逻辑/物理地址。
我希望这对你来说更清楚。我刚刚开始学习内存管理:)
答案 1 :(得分:0)
当它表示在执行时生成实际基址时,意味着使用MMU在执行时从虚拟地址确定RAM(物理地址)中的地址。整个地址转换是即时完成的。为了执行该过程,必须知道起始虚拟地址。当要运行该进程时,其虚拟页表被加载到MMU中,然后MMU快速计算物理地址(在RAM中),并且MMU从页表生成物理地址继续执行。考虑阅读Tanenbaum的现代操作系统。我发现它更好。
答案 2 :(得分:0)
执行时间地址绑定通常仅适用于程序中的变量,并且是脚本的最常见绑定形式,不会被编译。在这种情况下,程序在脚本中处理指令期间第一次遇到变量时,请求程序中变量的内存空间。在程序序列结束之前,内存将被分配给该变量,或者除非脚本中的特定指令释放绑定到变量的内存地址。