虚拟内存和物理内存

Virtual Memory and Physical Memory

我正在研究 "Operating System Concepts" 一书中的内存管理单元 (MMU) 的概念 - 作者是 Abraham Silberschatz 和 Galvin。虽然在第 8 章之前一切都很好。当我开始第 9 章时,事情开始变得一团糟。

我不清楚我的虚拟内存是多少?另外,物理地址和逻辑地址现在似乎混淆了?它(虚拟内存)是否真实存在? 根据我现在的理解,我系统的 RAM 就是我所说的物理(或主)内存。我有 8GB RAM 和 64 位 OS。因此,我的 RAM 可以容纳 2^64-1 个地址。这就是我所说的物理地址 space 吗?另外,逻辑地址 space 到底是什么?

每个进程都必须在主内存中才能执行,否则它会驻留在硬盘上。驻留在硬盘上的代码指令的地址是否就是我所说的逻辑地址?当它加载到RAM中时,因为位置不固定,因此代码可以加载到任何地方,这里分配的地址(RAM)称为物理地址?我想这种映射称为逻辑-物理地址映射。

现在,由于我的代码或进程的大小可能大于可用 RAM 的大小,因此需要使用虚拟内存。据我了解,这是一种抽象,让程序员认为他在系统上拥有无限量的可用内存。它基本上是硬盘的一个区域,RAM 中的一些进程(很少使用)被换出。同时将所需的页面带入主存储器。是这样吗?那么是什么决定了硬盘上这个区域的大小呢?还有,RAM很便宜,那为什么要有这样的机制呢?我们不能增加 RAM 大小而不是包括这种交换开销吗?

我在网上搜索了很多,但没有找到这些术语的确切定义和区别。请帮忙!

谢谢

I am not clear about what my virtual memory is? Also, physical and logical addresses seems to be confusing now? Does it(virtual memory) exists in real or not?

你可以读一个decent explanantion on Wikipedia about Virtual Memory。我不打算在这里讨论整个事情。

是的,虚拟内存是真实存在的。它将程序使用的内存地址(称为虚拟地址)映射到计算机内存中的物理地址。进程或任务看到的主存储显示为连续地址 space 或连续段的集合。

虚拟内存的主要好处包括使应用程序不必管理共享内存space、由于内存隔离提高了安全性,以及能够在概念上使用比物理上可用的内存更多的内存,使用分页技术。

感谢 David Schwartz 帮助我改进内容。仍然在嵌入式设备中,虚拟内存仅用于页面映射,这是定义它的本机目的。但是,现在在现代 OS' 中,它采取了完全不同的形式。人们正在 paging/segmentation 中利用虚拟内存的使用,因此交换是最重要的。

额外的内存区域现在​​也称为交换区或交换分区,通常保留供 OS(Unix/Linux) 使用,用于交换进出主进程记忆。 Windows 有实现相同目的的页面文件。

I have 8GB RAM and 64- bit OS. Thus, my RAM can accommodate 2^64-1 addresses. Is this what I call physical address space?

你应该在这里谈论处理器,而不是直接 OS 或 RAM。原则上,一个 64 位微处理器可以寻址 16 个 EiB(16 × 2^60 字节)的内存。实际上,它比这要少。此内存是您可能 用作 RAM 的内存。

Also, what exactly is logical address space?

Logical address space 是地址 space,从正在执行的应用程序的角度来看,这些项目(内存单元、存储元件、网络主机)似乎驻留在该地址。

由于地址转换器或映射函数的操作,逻辑地址可能与物理地址不同。在计算机内存架构的情况下,此类映射函数可以是 CPU 和内存总线之间的内存管理单元 (MMU),或者地址转换层,例如数据 Link 层, 在计算机网络系统中的硬件和网络协议 (Internet Protocol) 之间。

在支持虚拟内存的系统中,在尝试访问之前,实际上可能没有任何物理内存映射到逻辑地址。访问触发操作系统的特殊功能,重新编程 MMU 以将地址映射到某个物理内存,可能将该内存的旧内容写入磁盘并从磁盘读回内存应包含在新逻辑地址的内容。在这种情况下,逻辑地址可以称为虚拟地址。

Every process has to be in main memory for execution otherwise it resides on hard disk. Are the addresses given to instructions of my code residing on hard disk is what I call logical address? And when it's loaded in RAM, because location is not fixed and hence the code can be loaded anywhere, the addresses assigned here(i RAM) called Physical Addresses? This mapping I suppose is referred to as Logical-Physical address mapping.

现在几乎所有的系统都支持虚拟内存(也有少数例外)。所以,是的,当您的进程从 RAM 换出以便其他进程可以执行时,它们被单独保存在硬盘的那个称为虚拟内存的保留部分中。并且,有一种虚拟内存寻址方案,也就是您所说的逻辑地址。

页table用于将应用程序看到的虚拟地址翻译成硬件使用的物理地址来处理指令;这种处理这种特定翻译的硬件通常被称为内存管理单元。页中的每个条目 table 都有一个标志,指示相应页是否在实际内存中。如果在实内存中,页面table条目将包含存储页面的实内存地址。

Now, because size of my code or process can be large than the size of RAM available, here comes the use of virtual memory. As I understood, it's an abstraction to give the programmer a view that he has an infinite amount of memory available on the system. It's basically an area of hard disk some processes(which are seldom used) from RAM are swapped out. Simultaneously desired pages are brought in the main memory. Is it so? Then what determines the size of this area on hard disk?

和上面描述的完全一样。而且,这种大小的预留硬盘space(虚拟内存)被不同类型的OS推荐不同。但是,通常它被定义在 Unix/Linux OS(交换分区)上的不同分区上。 Windows 与 *nix 的交换分区相比有页面文件;虽然两者之间有很多技术差异.. 这是 OS-specific 但概念几乎相同。在 *nix 系统中,我看到建议将交换分区的大小保持为系统 RAM 大小的两倍。我不能对此争论更多,也许有人可以建议更多细节。

Also, RAM is cheap, then why do we need to have such a mechanism? Can't we increase our RAM size instead of including this overhead of swapping?

不,相对于内存的成本,硬盘的价格还是划算的多。此外,RAM 很昂贵,并非所有 PC 都可以升级以增加 RAM。幸运的是,当内存不足时,增加虚拟内存是最好的选择。此外,Microsoft 建议您将虚拟内存设置为不低于计算机 RAM 容量的 1.5 倍且不超过 3 倍。 (Source of the last line).

As I understood, it's an abstraction to give the programmer a view that he has an infinite amount of memory available on the system.

基本正确。

It's basically an area of hard disk some processes(which are seldom used) from RAM are swapped out.

不是,那是paging或者swap,跟虚拟内存几乎没有关系。您可以在没有虚拟内存的情况下进行交换和分页(事实上,交换在历史上是最先出现的)。您可以拥有虚拟内存而无需分页或交换(就像许多嵌入式设备一样)。

虽然许多现代操作系统使用虚拟内存来实现paging/swapping,但虚拟内存是什么与分页或交换无关。

Also, RAM is cheap, then why do we need to have such a mechanism? Can't we increase our RAM size instead of including this overhead of swapping?

RAM 并不便宜,我们不想浪费它来保存可能永远不会被访问的数据。例如,考虑一下 OS 启动时计算机上启动的所有服务。每个服务都将一些代码加载到内存中,并占用一些 RAM 来保存其结构。如果有的话,其中许多服务将 运行 几天都不会。你真的想要所有这些东西永远把 RAM 弄得乱七八糟吗?

I am studying the concept of Memory Management Unit(MMU) from the book titled "Operating System Concepts" - by Abraham Silberschatz and Galvin. Though things were fine till chapter 8.

如果你在感到困惑之前读完了那本书的第 8 章,我向你致敬!

物理:系统上的实际硬件内存。

逻辑:是线性内存地址到物理内存的映射,与物理内存地址无关。

逻辑内存为系统提供了基本的安全保障。每个进程都有自己的逻辑地址space。这通常分为用户space和系统space。在用户space中,同一个逻辑地址通常映射到不同的物理地址。在系统space中,相同的逻辑地址映射到相同的物理地址。

Thus, my RAM can accommodate 2^64-1 addresses. Is this what I call physical address space? Also, what exactly is logical address space?

也就是逻辑地址space。虚拟地址可以与逻辑地址相同space,但通常被操作系统通过系统参数或进程配额限制得较小

虚拟内存:逻辑到物理内存映射在软件中模拟。每页逻辑内存映射到磁盘块 space。逻辑地址可能引用也可能不引用实际的物理内存地址。

Every process has to be in main memory for execution otherwise it resides on hard disk. Are the addresses given to instructions of my code residing on hard disk is what I call logical address?

有点像。当您访问逻辑内存地址并且它尚未映射到内存时,它会触发页面错误(restartable 指令)。操作系统的故障处理程序被调用(通常使用相同的方法来处理被零除或中断)。该处理程序尝试从磁盘加载内存。

当程序启动时,它会疯狂地出现页面错误,然后通常会趋于平稳。

And when it's loaded in RAM, because location is not fixed and hence the code can be loaded anywhere, the addresses assigned here(RAM) called Physical Addresses?

当页面加载到物理地址时。操作系统设置进程页面 table 以便将逻辑地址映射到正确的物理地址。

Does it(virtual memory) exists in real or not?

是的。尝试使用 8GB 内存和 4GB 专用于 Windoze 模拟器的 运行ning Mac。您很快就会 运行 耗尽物理内存。

Also, RAM is cheap, then why do we need to have such a mechanism? Can't we increase our RAM size instead of including this overhead of swapping?

在 32 虚拟内存和 8MB 物理内存的旧时代,虚拟内存是至关重要的。在 1980 年代初期,8MB 的内存需要冰箱大小的机柜。将来虚拟内存可能会完全消失,因为正如您所说,内存很便宜(或将会很便宜)。

我预计,当我们开始看到基于 TB 磁盘的操作系统(例如,eunuchs 和 Windoze)中的内存时,就会走上渡渡鸟的道路。

As I understood, it's an abstraction to give the programmer a view that he has an infinite amount of memory available on the system.

这真是合乎逻辑的记忆。虚拟内存是对逻辑地址space的某部分的模拟。在 32 位系统上,用户 space 可能有 2^31 个逻辑地址。但是,系统可能会将您限制为 2^20(选择一个数字)个虚拟地址。

It's basically an area of hard disk where some processes(which are seldom used) from RAM are swapped out.

没有。所有进程都必须有一个磁盘支持它们的所有内存。磁盘大小 space(页面文件、交换分区)对可用虚拟内存量施加了限制。

Then what determines the size of this area on hard disk?

通常有多少磁盘 space 就有多少虚拟内存。