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

问题描述 投票:0回答:3

今天,当我看到 JavaScript 中的 Linux 模拟器时,我惊呆了: http://bellard.org/jslinux/

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

它是如何工作的?

javascript linux emulation
3个回答
38
投票

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

所以这是真的。

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

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

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

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

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


33
投票

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

简单说明

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

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


0
投票

免费在线 Linux 服务器,供初学者练习指南,Linux 是最流行、最强大的操作系统之一,特别是对于开发人员和系统管理员而言。

© www.soinside.com 2019 - 2024. All rights reserved.