也许我错过了一些东西,但沙盒和虚拟化并不完全相同 概念,即分离并行运行的应用程序的内存空间。所以我想知道为什么他们有不同的名字,可能会有不同的方式 他们受雇了?
非常感谢, 西蒙
答案 0 :(得分:7)
这些概念解决了不同的问题:当我们虚拟化时,我们隐藏了机器的物理限制。另一方面,沙盒在计算机上访问时设置设置人为限制。将记忆视为代表性的类比。
内存虚拟化是允许每个程序访问32位或64位空间中的每个地址,即使没有那么多物理RAM也是如此。
内存的沙盒是为了防止一个程序看到另一个程序的数据,即使它们可能占用内存中的neigboring单元格。
这两个概念肯定与虚拟内存的通用实现有关。但是,这是实现的方便工件,因为硬件页表只能由内核访问。
考虑如何在x86机器上单独实现它们:您可以使用页表隔离程序的内存,而无需交换到磁盘(没有虚拟化的沙盒)。或者,您可以实现完整的虚拟内存,但也可以对硬件页面表进行应用程序级访问,以便他们可以看到他们想要的任何内容(没有沙盒的虚拟化)。
答案 1 :(得分:3)
实际上,你有三个概念在混乱。首先是操作系统提供的内容,它的作用是为并行运行的应用程序分隔内存空间。它被称为virtual memory。
在Virtual memory系统中,操作系统将应用程序看到的内存地址映射到实际物理内存。因此,应用程序的内存空间可以分开,以便它们永远不会发生冲突。
第二个是沙盒。这是程序员用来运行不受信任的代码的任何技术。如果您,程序员,正在编写操作系统,那么从您的角度来看,您正在编写的虚拟内存系统是一个沙盒机制。如果您(程序员)正在编写Web浏览器,那么虚拟内存系统本身并不是沙盒机制(您可以看到不同的视角)。相反,它是一种用于为浏览器插件实现沙箱的实用机制。谷歌浏览器是一个程序示例,它使用操作系统的虚拟内存机制来实现其沙盒机制。
但虚拟内存不是实现沙盒的唯一方法。例如,tcl编程语言允许您通过interp命令实例化从解释器。从属解释器通常用于实现沙箱,因为它在单独的全局空间中运行。从操作系统的角度来看,两个解释器在一个进程中运行在相同的内存空间中。但是因为在C级别,两个解释器从不共享数据结构(除非明确编程),它们才能有效地分离。
现在,第三个概念是虚拟化。这又与虚拟内存和沙盒分开。而虚拟内存是一种机制,从操作系统的角度来看,沙箱彼此进行处理,而虚拟化是一种将操作系统相互沙化的机制。执行此操作的软件示例包括:Vmware,Parallels Desktop,Xen和kernel virtual machine。
答案 2 :(得分:1)
沙盒化仅指隔离,而虚拟化通常意味着模拟某种硬件(虚拟机)。虚拟化可以在没有沙盒的情况下发生。
答案 3 :(得分:0)
沙盒限制了特定程序的访问。虚拟化是一种可用于帮助实现此目的的机制,但沙盒也可以通过其他机制实现,同样虚拟化除了沙盒之外还具有其他功能。沙盒是一个“什么”,虚拟化是一个“如何”。