沙盒技术 vs. 虚拟化技术

8
也许我有所遗漏,但沙盒和虚拟化不是完全相同的概念吗?也就是说,将并行运行的应用程序的内存空间分离。因此,我想知道为什么它们有不同的名称,它们的使用方式可能有所不同吗?
非常感谢, 西蒙
4个回答

8
这些概念解决了不同的问题:虚拟化可以 隐藏机器的物理限制。而沙盒技术则是在机器上 设置人工限制,以控制访问。可以把内存作为代表性比喻。 内存虚拟化 是允许每个程序访问32位或64位空间中的每个地址,即使没有那么多物理内存。 内存沙箱 是为了防止一个程序看到另一个程序的数据,即使它们可能占用相邻的内存单元。
这两个概念在通常的虚拟内存实现中显然是相关的。但是,由于硬件页表只能被内核访问,这是一种方便的实现工具。
考虑如何在x86机器上分别实现它们:您可以使用页表隔离程序内存,而无需交换到磁盘(仅沙箱,无虚拟化)。或者,您可以实现完整的虚拟内存,但同时给应用程序级别的访问硬件页表,以便他们可以看到所有内容(虚拟化而无沙箱)。

我们如何将这两个概念与Web浏览器插件和特定于网站的浏览器进行比较?我认为浏览器插件在其内存和访问方面遵循不同的启发式方法,而不是VM和沙箱。 - RBT

4
实际上,这里有三个你混淆的概念。首要的是由操作系统提供的并将应用程序运行所需的内存空间分离的虚拟内存
虚拟内存系统中,操作系统将应用程序看到的内存地址映射到真正的物理内存上。因此,应用程序的内存空间可以被分离,从而避免冲突。
第二个概念是沙盒技术。它是您作为程序员使用的任何技术来运行不受信任的代码。如果您是编写操作系统的程序员,则从您的角度来看,您正在编写的虚拟内存系统就是一个沙盒机制。如果您是编写Web浏览器的程序员,则虚拟内存系统本身不是沙盒机制(您看到了不同的角度)。相反,它是一个您可以用来实现浏览器插件沙盒的潜在机制。谷歌Chrome就是一个利用操作系统的虚拟内存机制来实现其沙盒机制的例子。
但虚拟内存并不是实现沙盒的唯一方式。例如,Tcl编程语言允许您通过interp命令实例化从属解释器。从属解释器通常用于实现沙盒,因为它在单独的全局空间中运行。从操作系统的角度来看,两个解释器在同一内存空间中运行在一个进程中。但是,由于在C级别上,除非明确编程,否则两个解释器永远不会共享数据结构,因此它们有效地被分开。
现在,第三个概念是虚拟化。它与虚拟内存和沙箱机制都是分开的。而虚拟内存是一种机制,从操作系统的角度来看,它将进程隔离开来;虚拟化则是一种机制,将操作系统隔离开来。实现这一点的软件包括:VmwareParallels DesktopXenkernel virtual machine

1
沙箱化意味着隔离,而虚拟化通常意味着模拟某种硬件(虚拟机)。虚拟化可以有或没有沙箱化。

0

沙盒技术是限制特定程序访问的一种方法。虚拟化是可以用来帮助实现这一点的机制,但沙盒技术也可以通过其他机制实现,同样地,虚拟化除了用于沙盒技术外,还有其他用途。沙盒技术是一种“什么”,而虚拟化是一种“如何”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接