逻辑地址的用途?

Purpose of logical address?

逻辑地址的作用是什么?为什么要CPU生成逻辑地址?它可以直接访问可重定位寄存器基地址并限制为exe进程。 MMU为什么要做逻辑地址和物理地址的映射?

在执行时绑定中,MMU 进行从逻辑地址到物理地址的映射,因为在这种类型的绑定中:

逻辑地址特指虚拟地址

该地址实际上没有任何意义,因为它会让用户误以为它为其进程提供了很大的内存。当映射发生时,地址实际上具有意义,并且他们得到一些存在于物理内存中的真实地址。

另外我想提一下,基址寄存器和限制寄存器是通过执行特权指令加载的,特权指令是在内核模式下执行的,只有操作系统才能访问内核模式,因此CPU不能直接访问寄存器。

所以首先CPU会生成逻辑地址,然后操作系统的MMU会接管并做映射。

为什么?

因为这为操作系统提供了一种安全管理内存的方法。

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

想象一下,如果没有逻辑寻址。所有进程都可以直接访问物理地址。多进程 OS 同时运行多个不同的程序。想象一下,您正在 MS Word 中编辑一封重要的信件,同时使用最近发布的浏览器在 YouTube 上听音乐。浏览器有问题,会将虚假值写入 Word 程序用来存储您的信件编辑的一系列物理地址。所有这些信息都已损坏!

非常不希望出现的情况。

OS 如何防止这种情况发生?

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

显然,将实际的物理地址暴露给程序并不是一个好主意。由于内存随后完全由 OS 处理,我们需要一个抽象,我们可以通过简单的 API 为进程提供抽象,使进程看起来像是在处理物理内存,但所有分配都会实际上由 OS.

处理

虚拟内存来了!

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

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