虚拟内存受限的因素有哪些?

时间:2011-04-12 05:14:56

标签: operating-system virtual-memory

我所知道的是,虚拟内存的大小仅受地址线数量的限制。但是在Operating System internals and design principals by William Stallings我读到虚拟内存也受到辅助内存大小的限制 1.How?
2.交换(在主存储器和辅助存储器之间)虚拟存储器的必要条件?我的意思是,如果不允许交换,那么我们仍然可以称之为虚拟内存,虽然好处有限吗? 然后我很少根据答案跟进问题。

编辑:


我想我必须引用这本书的确切词语:

  

存储分配方案   辅助存储器可以作为   虽然它是主要记忆的一部分。   程序可能使用的地址   参考记忆是有区别的   来自内存系统的地址   用于识别物理存储   站点和程序生成的地址   被自动翻译成   相应的机器地址。的的   虚拟存储的大小受到限制   的解决方案   计算机系统和数量   二级内存可用而不是   实际的主存储数量   地点。

“虚拟内存”和“虚拟存储空间大小”中是否有某种文字播放?

2 个答案:

答案 0 :(得分:3)

  

虚拟存储的大小受到计算机系统的寻址方案和可用的辅助内存量的限制,而不受实际主存储位置数量的限制。

这本书似乎(错误地)假设您不会分配您不打算使用的虚拟内存。因此,它警告用于交换的物理内存和硬盘限制可用的虚拟内存(当然,从您的进程的角度来看,对该资源池的其他要求 - 操作系统和其他过程)。

实际上,分配比实际使用的虚拟内存更多的虚拟内存通常很有用,因为您可能想要,例如:

  • 将虚拟内存用于稀疏数组,您可以直接索引到一些分散的地址
  • 当系统资源实际耗尽时,让页面错误失败,而不是使用一些尝试跟踪可用内存使您的代码复杂化(请记住这对于其他进程等是动态的)或悲观限制意味着您未能积极利用您的系统功能
  • 让每个程序都享受相信它已经被编译的地址加载的好处,所以它可以使用绝对地址来获取跳转指令等而不是相对

将其与您的具体问题联系起来:

  

1. [虚拟内存也受辅助内存大小限制]如何?

同样,在内存(物理和交换)耗尽时,尝试使用更多的尝试将会失败。

  

2.是否(在主存储器和辅助存储器之间)交换虚拟存储器的必要条件?

这有点模糊......虚拟内存只能通过交换物理内存内容来增加内存进程的总量,以便为新的内存需求腾出空间,并从二级内存重新加载换出的内容。但是,即使没有交换磁盘空间(因此没有交换),或者您还没有足够的内存需求进行任何交换,过程仍然可以从稀疏阵列,大堆栈/堆区域的虚拟寻址中受益有空间按需增长等。

  

我的意思是,如果不允许交换,那么我们仍称它为虚拟内存,虽然好处有限吗?

也许。您仍然可以从虚拟寻址中受益,但这取决于您采用的术语是否归类为虚拟内存:有一个合理的论据,即“虚拟内存”意味着您假装拥有更多的物理内存,因此如果没有交换,您就不会即使您可能正在使用支持虚拟内存的虚拟寻址组件,也符合条件。

答案 1 :(得分:2)

关于这本书的摘录,我可以看到你混淆的根源。我不得不通读几次,看看他在说什么。更明确的解释可能是:虚拟内存是一种抽象,允许程序分配内存而不会受到运行它的系统的物理约束的困扰。程序天真地访问虚拟内存;抽象(虚拟内存)区分直接映射到物理位置的虚拟内存位置,以及映射到辅助内存位置的虚拟内存位置。或者,它可以映射到绝对无处,并且您手上有段错误。

2号肯定不是真的。虚拟内存是“可用的”,供程序使用,无论它是否具有物理支持。当他说受限于......可用的辅助内存量时,我并不完全遵循这一部分。人们当然可以设计一个具有100千兆字节地址空间的虚拟内存层,这样就可以了。

如果我为了清晰起见交易正确,那么道歉。我的解释不是很学术,听起来像是在学校,但你去了。无论如何,希望有所帮助。

-tjw