逻辑地址的目的是什么?

18

逻辑地址的目的是什么?为什么CPU需要生成逻辑地址?它可以直接访问可重定位寄存器基地址和限制以执行进程。为什么MMU需要在逻辑地址和物理地址之间进行映射?

4个回答

25

为什么需要虚拟内存?

因为它让操作系统有一种安全地管理内存的方式。

为什么需要安全的内存管理?

想象一下,如果没有逻辑地址,所有进程都可以直接访问物理地址。一个多进程操作系统同时运行几个不同的程序。假设你正在使用 MS Word 编辑重要的信件,同时在最近发布的浏览器上听音乐。但这个浏览器有 bug,并向用于存储信件编辑的单词程序的物理地址范围中写入伪值。所有信息都被破坏了!这是非常不可取的情况。

操作系统如何防止这种情况发生?

维护物理地址分配给每个进程的映射,并确保一个进程无法访问另一个进程分配的内存!

显然,将实际物理地址暴露给程序并不是一个好主意。由于内存完全由操作系统处理,我们需要一个抽象,可以提供给进程一个简单的 API,使得进程似乎正在处理物理内存,但所有分配实际上都由操作系统处理。

这就是虚拟内存的作用!


9
逻辑地址的目的是什么?是防止进程使用其他进程的内存吗?为什么不能通过使用物理地址来预防这种情况? - Aditya

5
逻辑地址的需求是为了安全地管理我们的物理内存。逻辑地址用于引用访问物理内存位置。生成逻辑地址是为了使用户程序永远不直接访问物理内存,并且该进程不会占用另一个进程获取的内存,从而破坏该进程。逻辑地址确保新进程不会占用任何其他进程占用的内存空间。

4
在执行时间绑定中,MMU将逻辑地址映射到物理地址,因为在这种类型的绑定中:
逻辑地址特指虚拟地址。
该地址实际上没有意义,因为它是为了让用户误以为它有大量内存来处理其进程。当进行映射时,该地址才具有意义,并且它们会得到一些在物理内存中存在的真实地址。
此外,我想提到基址寄存器和限制寄存器是通过执行特权指令加载的,特权指令是在内核模式下执行的,只有操作系统可以访问内核模式,因此CPU不能直接访问这些寄存器。
因此,首先CPU将生成逻辑地址,然后操作系统的MMU将接管并进行映射。

2
编译时、加载时或执行时,进程指令和数据与内存的绑定是完成的。只有在进程在其执行期间从一个内存段移动到另一个内存段时,才会出现逻辑地址。逻辑地址是进程的地址,在任何重定位发生之前(memory address = 10)。一旦进程重定位(moved to memory address = 100),为了将CPU重定向到正确的内存位置,内存管理单元(MMU)会在重定位寄存器(base register充当重定位寄存器)中维护重定位地址和原始地址之间的差异(100-10 = 90)。一旦CPU必须访问内存地址10中的数据,MMU就会将重定位寄存器中的值90添加到地址,并从内存地址100中获取数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接