在浏览关于内存管理的演讲的幻灯片时,我偶然发现了这个:
重定位寄存器值在程序执行期间是静态的。因此,所有操作系统必须存在(可能会使用)。否则,我们必须“动态”重新定位用户代码/数据!换句话说,我们不能拥有瞬态操作系统代码
我无法理解上述内容的含义。如果有人能解释一下,我将不胜感激。
答案 0 :(得分:0)
重定位注册方案提供了一种有效的方法来允许 操作系统的大小以动态更改。这种灵活性在 很多情况。例如,操作系统包含代码和缓冲区 设备驱动程序的空间。
如果不常用设备驱动程序(或其他操作系统服务),则我们不想保留代码和数据的内存,因为 我们也许可以将该空间用于其他目的。这样的代码有时是 称为暂态操作系统代码;它根据需要来来去去。从而, 使用此代码可在编程期间更改操作系统的大小 执行。
答案 1 :(得分:0)
用户代码中的所有逻辑内存引用都使用重定位寄存器值映射到物理地址空间。(Phy.add = Rel.reg_val + log.add)。
Relocation-Register 的值由操作系统设置。所以不会受到用户进程的影响。
操作系统中的临时代码意味着它只在很短的时间内处于活动状态(像检查处理器是否死锁的代码那样长时间没用)。因此,Relocation-Register Scheme 尝试将这段临时代码占用的内存分配给主内存作业队列中的某个其他进程。缩小或扩大与附近进程的 OS 进程边界(因为单分区分配)。
通过了解以上几点,如果 OS 中存在临时代码,由于 OS 进程的进程边界发生变化,我们应该能够频繁地重新定位用户代码/数据。