【问题标题】:Purpose of logical address?逻辑地址的目的?
【发布时间】:2015-04-21 12:16:56
【问题描述】:

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

【问题讨论】:

    标签: memory memory-address


    【解决方案1】:

    为什么?

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

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

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

    非常不受欢迎的情况。

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

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

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

    虚拟内存来了!

    【讨论】:

    • 那么逻辑地址的目的是什么?防止进程使用其他进程的内存?为什么不能通过使用物理地址来防止呢?
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2017-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-10
          • 2013-07-05
          • 1970-01-01
          • 2020-07-10
          相关资源
          最近更新 更多