我最近买了一个 Raspberry Pi,读了很多关于它的项目的博客文章,想尝试一下其中的一些。但我也读到,如果我们多次(重)写 SD 卡,它的使用寿命不会很长。所以我想在虚拟操作系统上尝试 Pi 项目的图像(最好使用 Virtualbox)。
所以我想知道我是否可以在自己的笔记本电脑 CPU 上虚拟化 ARM CPU。据记录,我正在运行 Ubuntu 14.04 并uname -a
响应:
Linux Laptop 3.13.0-49-generic #83-Ubuntu SMP Fri Apr 10 20:11:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux`
但我很好奇,我想知道是否有可能在任何其他 CPU 上虚拟化任何 CPU。这与硬件有关,还是与软件有关?
多谢。
答案1
对于 RPi 问题,请查看此主题 (基本上你可以使用类似量子计算单元运行图像)。
回答主要问题:
是否可以在任何其他 CPU 上虚拟化任何 CPU?
是的(在一定程度上),但是,它可能没有您想象的那么高效。并且应该注意的是,VirtualBox/VMWare 类型的虚拟化与您要求的有所不同,这实际上是Is it possible to EMULATE any CPU on any other CPU?
。
CPU 是硬件组件,其中硬连线了一组特定的指令(也称为操作码);这些操作码是特定的数值,可以在电气层面上进行转换,以便 CPU 真正地“做某事”。
当编写软件来告诉 CPU“做某事”(例如计算器)时,该软件必须针对特定的 CPU 构建(定位)。也就是说,我的软件必须经过编译(翻译)和汇编,以便运行软件的机器能够理解机器指令,否则,如果它运行了,我可能无法获得我期望的准确结果。ARM 上 2+2 之类的汇编指令(操作码)可能与 PIC 或 FPGA 上的汇编指令不完全匹配,我得到的将是垃圾(同样,如果它运行了)。
每个 CPU 的“执行方式”都略有不同,就像我可以用英语写作来向您传达我的想法一样,我也可以用西班牙语或日语传达同样的想法,尽管我必须以完全不同的方式传达它们,这不仅是因为英语/西班牙语/日语的句法差异,还因为这些语言在上下文解析方式上的差异。如果您和我正在交谈(而不是书面交流),而您只会说日语而我会说西班牙语,那么我们需要一个精通这两种语言的翻译才能正常交流,尽管这会比直接交流慢,因为我们需要正确解析我们的语言,这样就不会“翻译丢失”。
这与 CPU“虚拟化/仿真”的概念相同。如果您想要运行不是为您正在运行的 CPU 构建的应用程序(即我想在我的 x86 PC 上运行 ARM 软件),那么程序需要采用 ARM 程序集并转换为 x86 程序集,这样对 的调用draw word on screen
就不会变成对 的调用erase RAM location X
。
这就是为什么在任何其他 CPU 上正确模拟任何 CPU 不一定可行(如果可以的话,因为在 PIC 上无法真正模拟 x86)。CPU 所做的远不止“处理数字”,而且它们非常快速地完成所有这些“更多”工作,并且很多工作都需要精确计时。当您模拟 CPU 时,您实际上是在软件和硬件之间添加了一个转换层。添加此层可能会增加指令执行时间,因为可能需要执行许多额外的指令。增加的时间可能时间太长以致软件变得无响应或通常无法使用(例如以每秒 1 帧的速度玩视频游戏,当然你可以做到,但仅在屏幕上写下“按开始”文本就需要 2 分钟)。
值得注意的是,如果硬件(CPU)内置了相同的指令集,它就必须“做同样的事情”来适应其他指令集;也就是说(专利/许可问题除外)英特尔可以决定将 ARM 处理器的指令集添加到其 x86_64 CPU 的一系列产品中,这样你就可以直接在该 CPU 上运行 ARM 二进制文件,但它们仍然必须具有与 ARM 架构“一样”的架构,否则输出可能不准确。
因此,可能可以在另一种类型的 CPU 上模拟一种类型的 CPU,但是根据模拟方式/内容的不同,模拟速度可能会非常慢而无法运行,或者从人的角度来看可能无法区分(即,主观上它“和在本机硬件上运行一样快”,但从技术上讲并非如此)。
我希望这可以帮助澄清一些问题。
答案2
您可以使用量子计算单元模仿任何CPU 作为 Ubuntu 机器上的虚拟机。
从他们的主页 -
QEMU 是一个通用的开源机器模拟器和虚拟器。
当作为机器模拟器使用时,QEMU 可以将为一台机器(例如 ARM 板)编写的操作系统和程序运行在另一台机器(例如您自己的 PC)上。通过使用动态翻译,它实现了非常好的性能。
有一篇专门的文章介绍如何设置这里但是如果你搜索“ubuntu qemu raspberry”,它会产生大量的响应,以帮助你走上正确的道路。
你的问题的最后一部分,完全是另一回事!这是艾伦·图灵花了很多心思考虑的事情。这不是答案——因为我还不够聪明,无法总结这一切——但你应该从通用图灵机这就是他对这个问题的解答方法。