比尔盖子 博客

用虚拟机来解读《盗梦空间》

很多人奇怪为什么我会突然写这么一篇文章,“《盗梦空间》热”不是早过去了吗?那是因为我发现这个创意并不只是我一个人有,如果我不写的话,别人就要帮我写了。

《盗梦空间》算是2011年的神奇电影了,很多人看完都说这是给程序员看的,一层层的梦境就像函数的调用。不过我倒不同意梦境就相当于函数的调用,因为当函数嵌套在一起时,里面的会比外面的先运行,而梦境则是同时运行的。比尔盖子认为梦境更像是虚拟机,下面比尔盖子就和大家一起分析一下,并用虚拟机的思想来解决《盗梦空间》中的一些问题。

问题1:为什么人被造梦时难以发现自己在做梦?

这其实就是一个关于虚拟机的基本知识题。虚拟机,可以虚拟出一切电脑硬件(虽然有些是和真实电脑共享的):显卡、声卡、内存、硬盘、网卡、主板、USB控制器……所以说在虚拟机里的程序会像在真实电脑里的程序一样正常运行。

问题2:为什么有些人发现了自己是在做梦?“图腾”是怎么回事?

当人发现梦中有些情况与现实不符时,就会醒来。而在虚拟机里,这也是成立的,如果有程序不想再虚拟机里运行,它会检查CPU主频,如果发现虽然主频是2Ghz(假设),但是实际效率远远离这个数差远了,就会认为自己身处虚拟机。

另外,在《盗梦空间》中,造梦师都会有一个自己的“图腾”,因为梦中空间的有限性,“图腾”在梦中就会失去某种随机性,这样造梦师就可以知道自己在梦中了。在虚拟机中也是一样,VMtools(虚拟机使用辅助工具)就是“图腾”,它也是虚拟机的唯一标识。

问题3:多层梦境是怎么回事?

在《盗梦空间》中,有一些高级的造梦师可以制造多层梦境,这在虚拟机中也是完全可以的。既然虚拟机和电脑别无两样,在理论上我们完全可以在虚拟机里运行一台虚拟机,也可以在虚拟机的虚拟机里运行一台虚拟机,只要硬件性能合格。但是,在虚拟机中,虚拟机软件会检测到它身处虚拟机,于是就会禁止你安装和运行虚拟机软件(虚拟机用的方法是“问题2”的第一种方法)。但这是人为故意导致的结果,其实完全可以这么做。而且有人已经做到了:在VMware虚拟机中运行虚拟机

问题4:为什么在梦中的时间很慢?

这可以用虚拟机的性能下降来解释,当你运行一个虚拟机时,它的性能会比物理主机的性能出现一定程度的下降,这样虚拟机的运算能力也会下降。往往需要花比物理主机数倍的时间来完成一件事,也就是运行速度变慢了。让我们回到梦中也是一样,梦中的运行速度越慢,里面的时间就会越慢。

问题5:用音乐来同步各个梦境时间可行吗?

因为虚拟机是共用一个声卡的,所以这个是可行的(当然,你说你在一个虚拟机里听歌,其它虚拟机里不会有音量显示,这说明你把输入输出弄混了。在《盗梦空间》里,现实世界的人会给梦境里的人输入音乐,而不是让梦境里的人输出音乐)。我们可以来验证这个事实,让我们用麦克风说话,这时无论是物理主机、虚拟机、虚拟机中的虚拟机将都会有输入音量的指示,使用声卡的“输入”插口也能达到一样的效果。

这么一说,看来我们的虚拟机理论相当完美啊!

Categories: 完全解读

为科学而志愿计算:使用BOINC让你的电脑为科学做出贡献 » « 博客已升级到WordPress 3.1

1 Comment

  1. 分析得有理有据,写得深入浅出!支持一下!

发表评论

Your email address will not be published.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

Copyright © 2017 比尔盖子 博客

匿名浏览:http://x4wttqqrkud5pttgqlpxgevtr4rbqpa6lkwdiw3o3m6q4deeldgq.b32.i2p
警告:残留有明网混合资源,访问前请自行屏蔽明网流量

Theme by Anders NorenUp ↑