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

38 memory-management tlb memory-address mmu

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

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

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

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

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

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

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

pax*_*blo 46

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

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

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

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

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

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

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

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

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

  • RAM很便宜,但不是那么便宜,你可以在你的机器4G上分别给出100个进程:-)还要注意,交换(整个进程被换出)和分页(小页面被换出)之间经常有区别.后者效率更高.这也意味着您甚至不需要将不需要的东西加载到物理内存中. (2认同)

小智 9

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