资源是可以被虚拟的么?

学过computer的人,肯定回答,内存可以被虚拟,而内存恰是资源的一种,所以资源的确是可以被虚拟的?

如果接触到虚拟技术,你会发现资源有很多种,包括cpu,网卡,内存等等,而这些均可以被虚拟。

其实,一切均可以被虚拟。

当然,这是需要条件的;首要条件是provider和consumer之间的完全隔绝。

那么,让我们简单来看看内存是如何被虚拟的?

physical memory是物理内存,用来记忆info,大小是有限的。

process是physical memory的使用者,从process的眼光看,它自己拥有4G(32-bit env) virtual memory,因为它可以操作4G大小的地址空间。但是问题是

  1. 如果物理层没有足够的4G memory,迟早会露馅。
  2. 如果process直接操作physical memory(也就是说process看见了physical memory),这个也不成立,因为这样当process访问超过实际memory size时,也是会路馅的。

通用的解决方法是:

  1. process看见了自己的address space,也就是virtual memory
  2. 加一个MMU组件(中间层),此MMU隔绝了physical memory和process的address space,所有process对virtual memory的访问,均由MMU加以映射,当然这些动作要由一个专门的program来控制,它就是OS中的Memory Manager
  3. 因为加了这么一层,超过memory size的内容可以映射到辅助storage中,比如硬盘等;当然,这项映射的工作是由Memory Manage和MMU共同完成的。

一个很粗略的图示是这样的:

                                               virtual_memory

Advertisements