Fabrice Bellard 的 Javascript 中的 Linux 模拟器是如何工作的



今天,当我看到Javascript中的Linux模拟器时,我有一个令人瞠目结舌的时刻:http://bellard.org/jslinux/

它编译C程序,它有vi和emacs,它支持所有的shell命令等。

它是如何工作的?

起初,我也认为这只是一个将您连接到 VM 的终端模拟器,但事实并非如此。如果您观察网络连接,您可以看到,启动后,不再传输任何数据。

所以这是真的。

CPU不是神奇的东西;事实上,它所做的只是从内存中读取字节并根据命令的含义修改RAM。

在这种情况下,CPU 仿真器基于 qemu 代码。他所做的是创建一个函数数组,其中索引是PC(程序计数器)的下一个字节。

现在您所需要的只是一个简单的 linux 发行版,不需要任何奇特的 CPU 命令,如浮点运算或 MMX 代码,瞧。

有趣的是野兽的速度。整个事情有点迟钝,但是,它是浏览器中的JavaScript。

结论:令人印象深刻。迫不及待地想看到C64模拟器:-)

请参阅 http://www.quora.com/CPU-Emulation/How-does-bellard-org-jslinux-work

简化解释

jslinux本质上是用软件实现的完整计算机,特别是JavaScript。这当然被称为模拟器。这个特定版本被设置为运行Linux,但理论上它可以运行其他操作系统。

模拟器(JavaScript,~90KB 缩小,~7000 行格式化)加载到浏览器中。Linux的一个版本以前被编译成x86处理器的机器代码,被加载并复制到一个大的整数数组中,该数组充当模拟计算机的RAM。然后模拟器CPU指向机器代码的第一条指令,并被告知开始解释指令(例如读取/写入RAM,执行算术和逻辑运算,跳转到不同的指令等)。有时它会通过另一段 JavaScript 代码将数据(如系统日志或 shell 命令提示符)写入"终端",该代码使用浏览器 DOM 模拟串行端口和终端。您的按键也会通过这个模拟的串行端口发送回 Linux...

最新更新