Memory 逻辑地址的用途?

Memory 逻辑地址的用途?,memory,memory-address,Memory,Memory Address,逻辑地址的用途是什么?为什么CPU要生成逻辑地址?它可以直接访问可重定位寄存器的基址,并限制执行一个进程。为什么MMU要在逻辑地址和物理地址之间进行映射?在执行时绑定中,MMU会从逻辑地址映射到物理地址,因为在这种类型的绑定中: 逻辑地址具体称为虚拟地址 这个地址实际上没有任何意义,因为它让用户误以为它有一个很大的内存来存储进程。当映射发生时,地址实际上具有意义,并且它们得到物理内存中存在的一些真实地址 我还想提到,基址寄存器和限制寄存器是通过执行特权指令加载的,特权指令是在内核模式下执行的,只

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

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

逻辑地址具体称为虚拟地址

这个地址实际上没有任何意义,因为它让用户误以为它有一个很大的内存来存储进程。当映射发生时,地址实际上具有意义,并且它们得到物理内存中存在的一些真实地址

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

因此,首先CPU将生成逻辑地址,然后操作系统的MMU将接管并进行映射。

为什么

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

为什么需要安全内存管理

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

极不理想的情况

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

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

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


虚拟内存来了

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

逻辑地址的需要是安全地管理物理内存。 逻辑地址用于引用以访问物理内存位置。 生成一个逻辑地址,这样用户程序就不会直接访问物理内存,进程也不会占用另一进程获取的内存,从而损坏该进程。
逻辑地址可以确保新进程不会占用任何其他进程占用的内存空间。

那么,逻辑地址的用途是什么?防止进程使用其他进程内存?为什么不能通过使用物理地址来防止这种情况?