逻辑地址的目的是什么? CPU为什么要生成逻辑地址?它可以直接访问可重定位的寄存器基地址并限制执行进程。为什么MMU应该在逻辑和物理地址之间进行映射?
答案 0 :(得分:12)
为什么?
因为这为操作系统提供了一种安全管理内存的方法。
为什么需要安全的内存管理?
想象一下,如果没有逻辑寻址。所有进程都可以直接访问物理地址。多进程操作系统同时运行多个不同的程序。想象一下,您在最近发布的浏览器上在YouTube上听音乐时正在编辑MS Word中的重要字母。浏览器有问题,并将伪造的值写入一系列物理地址,Word程序正在使用这些地址来存储您的信件的编辑内容。所有这些信息都是腐败的!
非常不受欢迎的情况。
操作系统如何防止这种情况?
维护分配给每个进程的物理地址的映射,并确保一个进程无法访问分配给另一个进程的内存!
显然,将实际的物理地址暴露给程序并不是一个好主意。由于内存完全由操作系统处理,我们需要一个抽象,我们可以通过一个简单的API为进程提供一个简单的API,看起来该进程正在处理物理内存,但所有的分配实际上都是由操作系统处理的。 / p>
这是虚拟内存!
答案 1 :(得分:2)
在执行时绑定中,MMU进行从逻辑地址到物理地址的映射,因为在这种类型的绑定中:
逻辑地址具体称为虚拟地址
该地址实际上没有任何意义,因为它让用户觉得它的进程有大量内存。当映射发生时,该地址实际上具有意义,并且它们获得了物理存储器中存在的一些真实地址。
另外我想提一下,基本寄存器和限制寄存器是通过执行特权指令加载的,特权指令是在内核模式下执行的,只有操作系统才能访问内核模式,因此CPU不能直接访问寄存器。
首先,CPU将生成逻辑地址,然后操作系统的MMU将接管并进行映射。
答案 2 :(得分:1)
逻辑地址的需求是安全地管理我们的物理内存。 逻辑地址用于引用访问物理内存位置。 生成逻辑地址,以便用户程序从不直接访问物理内存,并且该进程不占用由另一个进程获取的内存,从而破坏了该进程。 逻辑地址使我们确信新进程不会占用任何其他进程占用的内存空间。
答案 3 :(得分:0)
将进程的指令和数据绑定到内存是在编译时,加载时或执行时完成的。只有当进程在执行时间期间从一个内存段移动到另一个内存段时,才会出现逻辑地址。逻辑地址是在任何重定位发生之前进程的地址(内存地址= 10)。一旦进程重定位(移动到内存地址= 100),只需将cpu重定向到正确的内存位置=>存储器管理单元(MMU),在重定位寄存器中保持重定位地址和原始地址(100-10 = 90)之间的差异(这里基址寄存器作为重定位寄存器)。一旦CPU必须访问存储器地址10中的数据,MMU将90(重定位寄存器中的值)添加到该地址,并从存储器地址100中获取数据。