逻辑地址和物理地址之间的区别?

时间:2010-09-13 03:43:12

标签: memory-management memory-address tlb mmu

我正在阅读操作系统概念,我在第8章!但是,我可以使用一些澄清,或者保证我的理解是正确的。

逻辑地址:根据本书,CPU生成逻辑地址。这到底是什么意思? (在执行生成的地址系统中..)我假设在为程序编译代码时,程序有 no 的想法,代码将被加载到内存中。所有编译器都会设置程序布局的一般草图以及图像的布局方式,但不会为其分配任何实际地址。当程序执行时,CPU获取编译器生成的这个布局图像,并将一些地址(逻辑1)分发给从代码生成的地址。

物理地址:直到CPU生成一组逻辑地址(由基地址和偏移量组成)之后才生成物理地址。逻辑地址通过MMU或其他设备,沿着线路的某处,逻辑地址映射到物理RAM地址。

那么实际差异是什么?我可以看到一个好处。使用逻辑地址为应用程序提供了更多自由。如果物理地址是硬编码的,那么程序的成功将在很大程度上取决于物理计算机,可用的RAM地址等。

使用转换为物理地址的逻辑地址是不是强制执行两步而不是一对一,因此更多地超过了?

逻辑地址生成后会在哪里存在?它们可能存在于CPU上的寄存器中,而CPU正在为一个进程提供服务,但在它之前和之后,它们去哪里了?我理解这是依赖于实现的。我假设它们可能存储在CPU的某些特殊寄存器空间或缓冲区中,例如TLB,对吗?如果没有,那么表可能存在于实际的RAM本身中,并且CPU只保存一个指针/地址到RAM中表的基地址,对吗?

看起来保存RAM中的地址对逻辑内存地址的目的是有效的。我只能假设我的理解不正确。

9 个答案:

答案 0 :(得分:45)

这个答案绝不是详尽无遗的,但它可以解释它足以使点击。

在虚拟内存系统中,逻辑和物理地址之间存在脱节。

应用程序可以被赋予(例如)4G的虚拟地址空间。这是它可用的内存,它可以随意使用它。这是一个很好的连续内存块(从应用程序的角度来看)。

但是,不是应用程序正在运行,并且操作系统必须在它们之间进行调解。在那个漂亮的连续模型下面,有很多映射用于将逻辑地址转换为物理地址。

通过这种映射,操作系统和硬件(我只是从这里调用这些较低层)可以自由地将应用程序页面放在它想要的任何地方(无论是在物理内存中还是换成二级存储)。 / p>

当应用程序尝试访问逻辑地址50处的内存时,较低级别可以使用转换表将其转换为物理地址。并且,如果它尝试访问已被换出到磁盘的逻辑内存,则会引发页面错误,较低级别可以将相关数据带回内存,无论其所需的物理地址。

在糟糕的旧时代,当你拥有物理地址时,代码必须可以重新定位(或加载时修复),因为它可以加载到任何地方。对于虚拟内存,该代码(和数据)可以同时位于十几个不同进程中的逻辑内存位置50 - 但它的实际物理地址会有所不同。

甚至可以共享它,以便一次在多个进程的地址空间中存在一个物理副本。这是共享代码的关键(因此我们不使用比我们需要的更多的物理内存)和共享内存以便于进程间通信。)

当然,它比纯物理地址环境效率低,但CPU制造商试图尽可能地提高它的效率,因为它被大量使用。 的优点胜过缺点。

答案 1 :(得分:9)

逻辑地址是相对于程序的地址。它告诉特定进程将占用多少内存,而不是告诉我们通过使用某些映射生成的进程的确切位置和这个确切的位置,并且称为物理地址。

答案 2 :(得分:4)

逻辑地址: - CPU生成的逻辑地址。当我们将问题提交给计算机时,我们的计算机通过逻辑地址将问题传递给处理器,我们没有看到这个地址称为逻辑地址。

物理地址: - 当我们的处理器创建进程并解决我们的问题时,我们通过称为物理地址的地址将数据存储在辅助存储器中

答案 3 :(得分:4)

  1. CPU生成的地址通常称为逻辑地址。程序生成的所有逻辑地址集称为逻辑地址空间。然而,存储器单元所看到的地址 - 即加载到存储器的存储器地址寄存器中的地址 - 通常被称为物理地址。与逻辑地址对应的所有物理地址的集合称为物理地址空间。
  2. 编译时和加载时地址绑定方法生成相同的逻辑和物理地址。但是,在执行时地址绑定方案中,逻辑和物理地址空间不同。
  3. 用户程序永远不会看到物理地址。程序创建一个指向逻辑地址的指针,例如346,将其存储在内存中,对其进行操作,将其与其他逻辑地址进行比较 - 全部为数字346。 仅当逻辑地址用作存储器地址时,它才相对于基址/重定位寄存器重新定位。称为内存管理单元(MMU)的内存映射硬件设备将逻辑地址转换为物理地址。
  4. 逻辑地址范围从0到最大。生成逻辑地址的用户程序认为该进程在0到max的位置运行。 逻辑地址必须在使用之前映射到物理地址。对于基址/重定位寄存器值R,物理地址的范围从(R + 0)到(R + max)。
  5. 实施例: enter image description here 使用内存管理单元(MMU)和重定位/基址寄存器从逻辑地址映射到物理地址 重定位/基址寄存器中的值被添加到用户进程生成的每个逻辑地址,在发送到内存时生成相应的物理地址。 在上图中,基本/重定位值为14000,然后用户访问位置346的尝试被映射到14346.

答案 4 :(得分:1)

逻辑Vs物理地址空间

CPU生成的地址通常被称为逻辑地址,而存储器单元所看到的地址,即加载到存储器的存储器地址寄存器中的地址,通常被称为物理地址。编译时间和负载时间地址绑定生成相同的逻辑和物理地址。但是,执行时地址绑定方案会产生不同的逻辑和物理地址。

程序生成的所有逻辑地址集称为逻辑地址空间,而与这些逻辑地址对应的所有物理地址集都是物理地址空间。现在,从虚拟地址到物理地址的运行时映射是由称为内存管理单元的硬件设备完成。在映射基址寄存器的情况下称为重定位寄存器。重定位寄存器中的值被添加到用户进程发送到内存时生成的地址中。 。让我们在示例的帮助下理解这种情况:如果基址寄存器包含值1000,则用户尝试将地址0的地址动态重新定位到位置1000,对位置346的访问被映射到位置1346。

用户程序永远不会看到真实的物理地址空间,它总是处理逻辑地址。因为我们有两种不同类型的地址逻辑地址在范围内(0到最大)和物理地址在范围内(R到R) + max)其中R是重定位寄存器的值。用户只生成逻辑地址,并认为进程在0到max的位置运行。从上面的文本可以清楚地看出,用户程序只提供逻辑地址,这些逻辑地址必须在使用之前映射到物理地址。

答案 5 :(得分:1)

逻辑地址是对内存位置的引用,与当前分配给内存的数据无关。 物理地址或绝对地址是主存储器中的实际位置。

在Stallings的第7.2章中。

答案 6 :(得分:0)

在我的记忆中,物理地址是显式的,在内存中设置为石头地址,而逻辑地址由基指针和偏移量组成。

原因是你基本上已经指定了。它不仅允许将程序和进程分段为线程和数据,而且还允许动态加载这些程序,并允许至少伪并行,而不需要在内存中进行任何实际的指令交织。 / p>

答案 7 :(得分:0)

我在操作系统中找到了关于逻辑地址和物理地址的article,对此做了清楚的解释。

逻辑地址是由CPU在程序运行时生成的。逻辑地址是虚拟地址,因为它实际上并不存在,因此也称为虚拟地址。该地址用作CPU访问物理内存位置的参考。术语逻辑地址空间用于程序透视图生成的所有逻辑地址的集合。 称为内存管理单元的硬件设备用于将逻辑地址映射到其相应的物理地址。

物理地址标识内存中所需数据的物理位置。用户从不直接处理物理地址,而是可以通过其相应的逻辑地址进行访问。用户程序生成逻辑地址,并认为该程序正在该逻辑地址中运行,但是该程序需要物理内存才能执行,因此,在使用逻辑地址之前,必须将其映射到物理地址bu MMU。术语“物理地址空间”用于与逻辑地址空间中的逻辑地址相对应的所有物理地址。

Logical and Physical Address comparision

来源:www.geeksforgeeks.org

答案 8 :(得分:-1)

逻辑地址是项目(存储器单元,存储元件,网络主机)从执行的应用程序的角度看起来驻留的地址。