逻辑和虚拟内存之间有什么区别和关系?


1

我想知道逻辑和虚拟内存之间有什么区别和关系?他们的目的有何不同?

逻辑和虚拟地址的关系和差异是否相同?


首先告诉我们您的参考框架。对此没有一个单一的命名法。例如,在x86世界中,存在(在英特尔的命名法中)逻辑线性物理地址。你使用哪种命名法,以及什么样的处理器架构?没有这种背景,你的问题毫无意义。
JdeBP 2011年

@JdeBP:我正在考虑在一个独立于特定操作系统和架构的层面上理解。上下文就像学生学习操作系统和体系结构课程,使用特定的操作系统和体系结构作为示例,而不是专注于他们。
蒂姆

那么你的问题毫无意义,因为这些东西并不是独立于建筑。
JdeBP 2011年

Answers:


4

让我们首先回顾虚拟和逻辑寻址之间的区别。我认为区别在于“逻辑地址”意味着程序看到的地址与存储在RAM中的数据的物理地址不同。

如果您有虚拟内存,则可能根本没有物理地址,因为存储的数据可能会被换出到磁盘。但是,可以使系统没有虚拟存储器,其中逻辑地址与物理地址不同,但每个逻辑地址都映射到物理地址。这样可以更轻松地运行多个程序而不会相互踩踏,但不会让程序使用的内存比系统可用的物理内存多。

因此,计算机中没有单独的“逻辑内存”,但我想您可以说具有逻辑地址但没有虚拟内存系统的计算机具有逻辑内存系统。我只想说逻辑内存是通过一些间接方法寻址的内存。您是否有一些特定的计算机系统?

-

考虑您的意见:

相同物理内存的逻辑地址可以相同或不同。通常两个进程无法访问相同的内存,因为那时可以破坏另一个进程。但是,如果他们已经安排使用某种形式的共享内存,他们通常会将该共享内存映射到不同的地址。虚拟地址或多或少是一种逻辑地址,因此如果您有一个支持VM的操作系统,并且两个进程映射共享内存,它们通常会将该内存视为处于不同的地址,就像没有虚拟地址一样记忆。

至于您对逻辑与虚拟目的的理解,虚拟内存用于使用HD扩展您可用于程序的内存。逻辑寻址不仅可用于过程分离,还可以是一个主要用途。


不是特定的架构,虽然我可以使用X86和X86-64。谢谢!(1)我想知道逻辑地址是否来自一个过程?从不同的进程,它们的逻辑地址是相同或不同的相同物理地址?相反,相同物理地址的虚拟地址是相同的,无论哪个进程查看它?(2)逻辑内存/地址是否用于分离不同进程使用的内存,即内存保护,而虚拟内存用于使用硬盘,就好像它们是主内存一样?
蒂姆

逻辑寻址来自流程角度。因此,共享相同物理地址的两个进程可能具有也可能不具有相同的逻辑地址。虚拟地址==逻辑地址。所以他们可能是也可能不一样。注意我们没有提到内存页表。(2)出于所有目的,虚拟内存==逻辑内存。您所指的硬盘上的虚拟内存称为页面文件。在物理内存信息的页面时不使用它们,以腾出空间,信息的页面写入到页面文件使用。
surfasb 2011年

所以每个x86进程都有4GB的虚拟/逻辑内存可用,即使只有2GB的物理内存可供使用。
surfasb 2011年

3

进程使用“逻辑”存储器地址来引用其代码和数据。从逻辑地址到物理地址的转换取决于存储器模型。

当直接映射存储器(即实模式)时,逻辑存储器地址与物理存储器地址相同。

如果物理内存大于处理器的地址空间(例如在16位处理器上),则通常使用内存库硬件来扩展可用的物理内存量。英特尔8086/8088处理器使用灵活的寄存器而不是固定的存储区方案。将(16位)逻辑地址转换为(20位)物理地址将使用存储体映射表。对于x86,逻辑地址可能包括段寄存器的规范。

如果物理地址范围大于典型的物理存储器(例如十年前的32位处理器),则使用虚拟存储器硬件来提供完整地址范围的使用。逻辑地址由物理内存按需支持。为了容纳完整的虚拟/逻辑地址空间和/或为每个进程提供其自己的地址空间,需要一个后备存储来保存虚拟内存的交换副本。交换的内存可以按段或页面或分段页面进行组织。

BTW在我多年的Unix内核黑客攻击中,我很少听到或使用过“逻辑(内存)地址”这个短语。如果您没有提到物理内存地址,那么它就是虚拟地址。也就是说,“逻辑地址”==“虚拟地址”(当在MMU中激活虚拟存储器时)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.