2011-06-01 62 views
4

我在读高尔文的操作系统书。在内存管理的地址绑定中,它讲述了3种类型的地址绑定。编译时间,加载时间,执行时间。关于执行时地址绑定:“物理地址是在执行时计算的。”但我的问题是,这些物理地址的计算是为了将内存的基地址加载到内存中。要首先执行该过程,必须将其加载到内存中。为此,它需要一些物理内存地址。那么在执行时如何计算这些地址呢?我很困惑。在执行时如何在OS中完成地址绑定?

有些人可以提供解释。

由于

回答

13

你的想法是正确的。加载时间与运行时绑定的区别在于,在运行时,每次有内存查找时,它都会经过一个“基本寄存器”的“重定位寄存器”,然后添加一个偏移量。

在加载时绑定它做同样的事情,但随后的查找不需要评估此寄存器。地址在第一次被拉入内存时被设置。因此,如果基地址发生变化,您需要重新加载整个过程以修复所有可重定位地址。

在运行时,您可以在物理内存中移动进程,无需担心重新加载它以修复映射,因为每次访问内存时都会映射它。

加载时绑定导致匹配逻辑/物理地址,但运行时导致不同的逻辑/物理地址。

我希望这对你更清楚。我刚刚开始学习内存管理:)

0

当它说,实际的基地址在执行时产生这意味着,在RAM(物理地址)的地址在执行时从使用MMU虚拟地址确定。这整个地址转换是即时完成的。为了执行该过程,必须知道起始虚拟地址。当进程运行时,其虚拟页表被加载到MMU中,然后MMU快速计算物理地址(在RAM中)并且执行继续,MMU从页表中生成物理地址。考虑阅读Tanenbaum的现代操作系统。我发现它更好。

0

执行时间地址绑定通常只适用于程序中的变量,并且是脚本的最常见的绑定形式,它不会被编译。在这种情况下,程序会在处理脚本中的指令期间第一次遇到变量时,为程序中的变量请求内存空间。内存将被分配给该变量,直到程序序列结束,或者除非脚本中的特定指令释放绑定到变量的内存地址。