【发布时间】:2018-11-26 04:59:51
【问题描述】:
在浏览关于内存管理的讲座幻灯片时,我发现了这个:
重定位寄存器值在程序执行期间是静态的。因此,所有操作系统都必须存在(可能会被使用)。否则,我们必须“即时”重新定位用户代码/数据!换句话说,我们不能有临时的操作系统代码
我不明白上面几行是什么意思。如果有人能解释一下,我将不胜感激。
【问题讨论】:
标签: memory-management operating-system
在浏览关于内存管理的讲座幻灯片时,我发现了这个:
重定位寄存器值在程序执行期间是静态的。因此,所有操作系统都必须存在(可能会被使用)。否则,我们必须“即时”重新定位用户代码/数据!换句话说,我们不能有临时的操作系统代码
我不明白上面几行是什么意思。如果有人能解释一下,我将不胜感激。
【问题讨论】:
标签: memory-management operating-system
重定位寄存器方案提供了一种有效的方法来允许 操作系统的大小动态变化。这种灵活性是可取的 很多情况。例如,操作系统包含代码和缓冲区 设备驱动程序的空间。
如果设备驱动程序(或其他操作系统服务)不常用,我们不希望将代码和数据保留在内存中,因为 我们也许可以将该空间用于其他目的。这样的代码有时是 称为瞬态操作系统代码;它根据需要来来去去。因此, 使用此代码在程序期间更改操作系统的大小 执行。
【讨论】:
用户代码中的所有逻辑内存引用都使用重定位寄存器值映射到物理地址空间。(Phy.add = Rel.reg_val + log.add)。
Relocation-Register 的值由操作系统设置。所以它不会受到用户进程的影响。
操作系统中的临时代码意味着它仅在短时间内处于活动状态(长时间无用,例如检查处理器是否死锁的代码)。因此,Relocation-Register Scheme 会尝试将此临时代码占用的内存分配给 Main Memory 的作业队列中的某个其他进程。缩小或扩展 OS 进程与附近进程的边界(因为单个分区分配)。
通过了解以上几点,如果操作系统中存在临时代码,由于进程与操作系统进程的边界发生变化,我们应该能够频繁地重新定位用户代码/数据。
【讨论】: