38

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

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

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

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

使用转换为物理地址的逻辑地址不是强加了两个步骤而不是一对一,因此不是更多的开销吗?

那么逻辑地址在生成后驻留在哪里?当 CPU 为进程提供服务时,它们可能存在于 CPU 上的寄存器中,但在此之前和之后,它们会去哪里?我知道这取决于实现。我假设它们可能存储在 CPU 上的某些特殊寄存器空间或缓冲区中,例如 TLB,对吗?如果不是,那么该表可能存在于实际的 RAM 本身中,并且 CPU 仅保存指向 RAM 中表的基地址的指针/地址,对吗?

将地址保存在 RAM 中似乎与逻辑内存地址的目的相反。我只能假设我的理解是不正确的。

4

9 回答 9

49

这个答案绝不是详尽无遗的,但它可以解释它足以让事情发生。

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

可以为应用程序分配(比方说)4G 的虚拟地址空间。这是它的可用内存,它可以随意使用。这是一个很好的连续内存块(从应用程序的角度来看)。

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

通过这种映射,操作系统和硬件(我从这里开始将它们称为较低层)可以自由地将应用程序页面放置在它想要的任何位置(在物理内存中或交换到辅助存储中)。

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

在过去只有物理地址的糟糕日子里,代码必须可重定位(或在加载时固定),因为它可以在任何地方加载。使用虚拟内存,该代码(和数据)可以同时位于十几个不同进程中的逻辑内存位置 50 - 但是它的实际物理地址会有所不同。

它甚至可以共享,以便一个物理副本同时存在于多个进程的地址空间中。这是共享代码的症结所在(所以我们不会使用比我们需要的更多的物理内存)和共享内存以允许轻松的进程间通信)。

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

于 2010-09-13T03:50:46.750 回答
9

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

于 2010-11-20T16:14:13.513 回答
4

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

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

于 2012-05-15T07:45:11.200 回答
4
  1. CPU 生成的地址通常称为逻辑地址。程序生成的所有逻辑地址的集合称为逻辑地址空间。然而,内存单元看到的地址——即加载到内存的内存地址寄存器中的地址——通常称为物理地址。与逻辑地址对应的所有物理地址的集合称为物理地址空间。
  2. 编译时和加载时地址绑定方法生成相同的逻辑地址和物理地址。但是,在执行时地址绑定方案中,逻辑地址空间和物理地址空间不同。
  3. 用户程序永远不会看到物理地址。该程序创建一个指向逻辑地址的指针,例如 346,将其存储在内存中,对其进行操作,将其与其他逻辑地址进行比较 - 全部为数字 346。只有当逻辑地址用作内存地址时,它才会相对于重新定位基址/重定位寄存器。称为内存管理单元 (MMU) 的内存映射硬件设备将逻辑地址转换为物理地址。
  4. 逻辑地址范围从 0 到最大值。生成逻辑地址的用户程序认为该进程运行在位置 0 到最大值。逻辑地址在使用前必须映射到物理地址。对于基址/重定位寄存器值 R,物理地址范围从 (R+0) 到 (R + max)。
  5. 示例: 在此处输入图像描述 使用内存管理单元 (MMU) 和重定位/基址寄存器从逻辑地址映射到物理地址 在用户进程生成的每个逻辑地址被发送到内存时,重定位/基址寄存器中的值相加,以生成对应的物理地址。在上图中,base/relocation 值为 14000,则用户访问位置 346 的尝试映射到 14346。
于 2016-01-09T12:38:20.873 回答
1

逻辑与物理地址空间

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

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

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

于 2012-08-23T01:48:10.763 回答
1

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

它在 Stallings 的第 7.2 章中。

于 2015-06-15T03:57:45.443 回答
0

就我的记忆而言,物理地址是显式的、固定在内存中的地址,而逻辑地址由基指针和偏移量组成。

原因正如您已基本指定的那样。它不仅允许将程序和进程分割成线程和数据,还允许动态加载此类程序,并允许至少伪并行,而无需在内存中进行任何实际的交错指令。

于 2010-09-13T03:47:07.800 回答
0

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

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

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

逻辑和物理地址比较

资料来源:www.geeksforgeeks.org

于 2019-03-20T03:32:39.530 回答
-1

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

于 2013-03-22T13:46:50.557 回答