如果虚拟内存只是将程序放回磁盘,那么将程序加载到 RAM 中有什么意义呢?

如果虚拟内存只是将程序放回磁盘,那么将程序加载到 RAM 中有什么意义呢?

看完之后这个问题关于虚拟内存,我突然想问:当程序运行时,它就像在绕圈行走,它会从磁盘加载到内存中,但内存中没有足够的空间,因此它会被重新加载到磁盘(作为页面文件)。计算机是否有必要最初将程序的 100% 加载到内存中?我记得学习过一种东西,它让每个进程都感觉自己在地址空间中单独运行,因此它可以从第一个地址开始,这是虚拟化内存的主要原因吗?还是与此无关?

答案1

原因就是速度。进程也可以在运行时增长,例如 k-meleon。或者在运行时产生新进程,例如 chrome.exe。缓存比 RAM 快,而 RAM 又比磁盘快。

因此,只要有缓存,数据就会被放入缓存中。理想的情况是 CPU 在缓存中执行数据。其次是它在 RAM 中执行数据。

CPU 从不处理磁盘上的内容,它不处理磁盘上的内容,它只处理 RAM 位置或毫无疑问是缓存位置。或者读取/写入设备的位置。

并不是所有东西,甚至是所有你想运行的东西都会被交换到磁盘然后再返回到 RAM。只有当前不使用且不太可能很快使用的东西才会被优先交换,以便释放 RAM 来供更多使用的东西使用。

Web 浏览器也有缓存,即磁盘缓存!它们将内容本地存储在磁盘上,而不是从网上获取。您可以本地运行 Web 代理,将网站存储在本地,如果网站在线发生变化,则将获取网站内容。这使您可以更快地浏览。(虽然我猜您可能会遇到网站未正确指定所做的更改的问题,并且您只能从本地磁盘缓存加载旧副本)但这个想法是更快。在这种情况下,较快的区域是本地硬盘,较慢的区域是远程/在线区域。

生活中,你会进行这种交换,把需要的东西放在身边,把不需要的东西放在仓库里。你不会把所有东西都放在仓库/车库里,并说仓库/车库里有很多空间。这样太慢了。

答案2

  1. 磁盘上的组织可以(几乎肯定会)有所不同,因此页面/交换文件分区经过优化以加载虚拟内存页面,而您的日常文件系统将针对其特定特性进行优化,例如“不要浪费磁盘空间”。
  2. 另外,您的可执行文件在磁盘上不能完全运行,相对指针在加载时会调整到虚拟地址空间,因此一旦在加载时完成此操作,它就可以进行分页了。
  3. 您的程序在磁盘上可能很小,然后它做的第一件事就是为某些东西分配一大块内存,这些内存可以被分页到交换区以供稍后程序执行时使用。

总而言之,按照其工作方式进行通常会更快。

相关内容