2

我刚刚阅读了一本操作系统书籍,它在将逻辑地址转换为物理地址时引用了重定位寄存器。

我了解他们是如何转换的。本质上,逻辑地址被添加到重定位寄存器以获得物理内存地址。(非常简单的版本)。

但是要使这个工作,如果有多个进程,重定位寄存器就必须不断变化。

例如,如果重定位寄存器是常数 2000,则进程将不断被赋予相同的物理内存地址。

那么如果重定位寄存器的值找到了怎么办呢?它是如何改变的?

感谢所有的帮助!这本书有点害羞。

4

2 回答 2

5

分配给进程的内存的逻辑地址是基址寄存器和限制寄存器的组合。当这个逻辑地址被添加到重定位寄存器时,它给出了物理地址。 逻辑内存 -> 物理内存转换

因此,即使重定位寄存器不变,进程也会被赋予不同的物理地址,因为进程的逻辑地址会发生变化。

重定位寄存器的值究竟是如何找到的?

重定位寄存器的值将由操作系统设置,任何用户进程都不能访问该值。只有内存管理单元知道这个值。

它是如何改变的?

该值可以由操作系统更改。


旁注:拥有重定位寄存器的全部目的是避免用户进程访问物理地址。操作系统驻留在物理内存中,地址范围为 0-Relocation Register。

于 2015-01-28T14:47:11.747 回答
3

该寄存器在执行每个程序之前由操作系统设置为所需的值(所谓的基地址)。

在多任务环境中,操作系统不仅会启动程序,还会定期在所有程序之间切换上下文,以产生同时执行的错觉。因此,从进程 A 到进程 B 的上下文切换现在包括以下操作:

  • 停止进程A的执行,
  • 将 CPU 的内容保存到 A 的 PCB(过程控制块)中,
  • 将重定位寄存器的内容保存到 A 的 PCB 中(即将 A 的基地址保存到 PCB 中),
  • 用 B 的基地址(在 B 的 PCB 中找到)更新重定位寄存器,
  • 从 B 的 BCP 加载 CPU 的内容。因为这包括 PC 寄存器,所以 CPU 立即恢复执行 B。
于 2013-10-15T11:44:49.690 回答