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

问题描述 投票:37回答:9

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

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

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

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

转换为物理地址的逻辑地址的使用是否会产生两个步骤而不是一对一,因此更多地超过头部?

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

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

memory-management memory-address tlb mmu
9个回答
46
投票

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

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

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

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

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

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

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

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

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


9
投票

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


4
投票

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

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


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。

1
投票

逻辑Vs物理地址空间

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

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

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


1
投票

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

这是Stallings的第7.2章。


0
投票

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

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


0
投票

我在操作系统中找到了关于逻辑与物理地址的article,它清楚地解释了这一点。

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

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

Logical and Physical Address comparision

资料来源:www.geeksforgeeks.org


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.