虚拟存储的大小受计算机系统的寻址方案和可用辅助存储器的数量限制,而不是受主存储位置的实际数量限制。
这本书似乎(错误地)假设您不会分配您不打算使用的虚拟内存。因此,它警告用于交换的物理内存和硬盘限制了可用的虚拟内存(当然,从您的进程的角度来看,对该资源池的其他需求 - 操作系统和其他进程也是如此)。
在实践中,分配比实际使用更多的虚拟内存通常很有用,因为您可能想要,例如:
- 将虚拟内存用于稀疏数组,您可以在其中直接索引到一些分散的地址,
- 当系统资源实际耗尽时,让页面错误失败,而不是通过尝试跟踪可用内存(请记住,这与其他进程等动态)或悲观限制来使您的代码复杂化,这意味着您无法积极利用您的系统功能
- 让每个程序都能享受到相信它已被加载到编译它的地址的好处,因此它可以使用绝对地址来进行跳转指令等,而不是相对地址
将其与您的具体问题联系起来:
1.【虚拟内存也受二级内存大小限制】怎么办?
同样,它在某种意义上是有限的,即当内存(物理和交换)耗尽时尝试使用更多将失败。
2.交换(在主内存和辅助内存之间)是虚拟内存的必要条件吗?
这有点模糊......虚拟内存只能通过交换物理内存内容为新的内存需求腾出空间来增加内存进程可以透明地使用的内存总量,并从辅助内存重新加载换出的内容。但是,即使没有交换磁盘空间(因此没有交换),或者您还没有足够的内存需求来进行任何交换,进程仍然可以根据稀疏数组、巨大的堆栈/堆区域从虚拟寻址中受益有按需增长的空间等。
我的意思是,如果不允许交换,那么我们仍然可以将其称为虚拟内存,尽管好处会受到限制吗?
也许。您仍然可以从虚拟寻址中受益,但这取决于您采用的术语是否将其归类为虚拟内存:有一个合理的论点认为“虚拟内存”意味着您假装拥有更多的物理 RAM,因此如果没有交换,您将不会即使您可能正在使用支持虚拟内存的虚拟寻址组件,也不符合条件。