【问题标题】:Is the Relocation register changed in terms of memory mapping and allocation?重定位寄存器在内存映射和分配方面是否发生了变化?
【发布时间】:2013-05-27 23:05:10
【问题描述】:

我只是在阅读一本操作系统的书,它在逻辑地址到物理地址的转换中提到了重定位寄存器。

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

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

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

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

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

【问题讨论】:

  • 一般来说,当你在进程之间切换时,你必须恢复每个寄存器的值。我不希望我的寄存器 R7 突然保持一个全新的值,因为操作系统交换到另一个使用 R7 的程序。现在 Windows 3.x 确实有一些微妙不同的规则,但那是因为它仅在进行系统调用时在进程之间交换,并且那些改变了寄存器。

标签: memory operating-system theory


【解决方案1】:

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

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

重定位寄存器的值到底是怎么找到的?

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

它是如何变化的?

操作系统可以更改该值。


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

【讨论】:

  • @user1005284,所以cpu为每个进程生成不同的逻辑地址?
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多