【发布时间】:2015-01-22 10:00:28
【问题描述】:
考虑以下 CPU 指令,它获取地址 16777386(十进制)的内存并将其存储在寄存器 1 中:
Move &0x010000AA, R1
传统上,程序在编译时被翻译成汇编(机器代码)。 (让我们忽略更复杂的现代系统,如 jitting)。
但是,如果这个地址分配是在编译时静态完成的,那么操作系统如何保证两个进程不使用相同的内存呢? (例如,如果您同时运行相同的编译程序两次)。
问题:
程序如何以及何时分配其内存地址?
虚拟内存:
我了解大多数(如果不是全部)现代系统在硬件中使用内存管理单元以允许使用虚拟内存。地址空间的前几个八位字节用于引用哪个页面。如果每个进程使用不同的页面,这将允许内存保护。但是,如果这是执行内存保护的方式,那么最初的问题仍然存在,只是这次是如何分配页码?
编辑:
CPU:
一种可能性是 CPU 可以通过在执行基于内存的指令之前强制由操作系统分配进程 ID 来处理内存保护。然而,这只是推测,需要 CPU 架构的硬件支持,我不确定 RISC ISA 是否会被设计成这样。
【问题讨论】:
标签: memory memory-management operating-system virtual-memory