我不清楚我的虚拟内存是什么?同时,物理和逻辑地址似乎很混淆?它(虚拟内存)到底存在于现实中还是不存在?
您可以阅读
维基百科上关于虚拟内存的解释。我这里不会讨论全部内容。
是的,虚拟内存是存在于现实中的。它将程序使用的内存地址(称为虚拟地址)映射到计算机内存中的物理地址。进程或任务看到的主存储器似乎是一个连续的地址空间或连续的段集合。
虚拟内存的主要好处包括使应用程序无需管理共享内存空间、由于内存隔离而增加安全性以及能够在概念上使用比物理上可用的更多内存,使用页面技术。
感谢
David Schwartz帮助我改进内容。但是,在嵌入式设备中,虚拟内存仅用于页面映射,这是其定义的本来目的。但是,在现代操作系统中,它已经采取了完全不同的形式。人们正在利用虚拟内存在分页/分段中的使用,因此交换是最重要的。
额外的内存区域现在也被称为交换区或交换分区,通常由操作系统(Unix/Linux)保留用于将进程从主内存中调入和调出。Windows 有页面文件来实现相同的功能。
我有8GB RAM 和64位操作系统。因此,我的RAM可以容纳2^64-1个地址。这就是我所说的物理地址空间吗?
你应该在这里谈论处理器,而不是直接涉及操作系统或RAM。原则上,64位微处理器可以寻址16 EiBs(16 × 2^60字节)的内存。实际上,它比这少。这些内存是你可能可以用作RAM的内存。
另外,什么是逻辑地址空间?
逻辑地址空间 是指从执行应用程序的角度看,物品(内存单元、存储元素、网络主机)所在的地址空间。
逻辑地址可能会因地址映射或转换功能的操作而不同于物理地址。在计算机内存架构中,这种映射功能可以是位于CPU和内存总线之间的内存管理单元(MMU),也可以是位于硬件和计算机网络系统中互联网协议(Internet Protocol)的地址转换层,例如数据链路层。
在支持虚拟内存的系统中,直到尝试访问时,实际上可能没有任何物理内存映射到逻辑地址。访问将触发操作系统的特殊功能,重新编程MMU以将地址映射到一些物理内存,可能会将该内存的旧内容写入磁盘,并从磁盘读回内存应该包含的内容以获得新的逻辑地址。在这种情况下,逻辑地址可能被称为虚拟地址。
每个进程必须在主内存中执行,否则它位于硬盘上。我的代码指令所分配的地址是否是指在硬盘上驻留的逻辑地址?当它加载到RAM中时,由于位置不固定,因此代码可以加载到任何地方,因此在这里(在RAM中)分配的地址称为物理地址?我认为这种映射被称为逻辑物理地址映射。
现今,几乎所有系统都支持虚拟内存(有几个例外)。因此,当你的进程被交换出RAM以便其他进程能够执行时,它们会单独保存在被称为虚拟内存的硬盘保留部分中。而且,虚拟内存有一个寻址方案,也就是所谓的逻辑地址。
页面表用于将应用程序看到的虚拟地址转换为硬件用于处理指令的物理地址;处理这种特定翻译的硬件通常被称为内存管理单元。页面表中的每个条目都包含一个标志,指示相应的页面是否在真实内存中。如果它在真实内存中,页面表条目将包含页面存储的真实内存地址。
由于我的代码或进程的大小可能大于可用RAM的大小,因此就需要使用虚拟内存。据我理解,它是一种抽象,给程序员提供了在系统上有无限量的内存的视图。它基本上是从RAM中交换出来的一些进程(很少使用)的硬盘区域。同时,所需的页面被带入主内存。是这样吗?那么是什么确定了硬盘上这个区域的大小呢?
与上述描述完全相同。不同类型的操作系统建议保留硬盘空间(虚拟内存)的大小不同。但是,通常在Unix / Linux操作系统上将其定义为不同的分区(交换分区)。 Windows有页面文件与*nix的交换分区相比;尽管两者之间存在许多技术差异...这是特定于操作系统的,但概念几乎相同。在*nix系统中,我看到建议将交换分区的大小保持为系统中RAM大小的两倍。我无法更多地争论这一点,也许有人可以提出更详细的建议。
此外,RAM很便宜,那么为什么我们需要这样的机制?我们不能增加RAM的大小,而不包括交换的开销吗?
不,与内存的价格相比,硬盘的价格仍然更加经济实惠。此外,内存很昂贵,并非所有计算机都可以升级以增加内存。幸运的是,当您的内存不足时,增加虚拟内存是最好的选择。此外,Microsoft建议将虚拟内存设置为不少于计算机内存量的1.5倍,不多于3倍。( 最后一行的来源 )。