今天,当我看到用Javascript编写的Linux模拟器时,我感到非常震惊:http : //bellard.org/jslinux/
它编译C程序,具有vi和emacs,支持所有shell命令,等等。
它是如何工作的?
今天,当我看到用Javascript编写的Linux模拟器时,我感到非常震惊:http : //bellard.org/jslinux/
它编译C程序,具有vi和emacs,支持所有shell命令,等等。
它是如何工作的?
Answers:
起初,我还认为这只是将您连接到VM的终端仿真器,但事实并非如此。如果您看到网络连接,则可以看到启动后不再传输任何数据。
这是真实的。
CPU并不是魔术。实际上,它所做的只是从内存中读取字节并根据命令的含义修改RAM。
在这种情况下,CPU仿真器基于qemu代码。他要做的是创建一个函数数组,其中索引是PC(程序计数器)的下一个字节。
现在,您只需要一个简单的linux发行版,就不需要任何特殊的CPU命令,例如浮点算术或MMX代码和voila。
有趣的是野兽的速度。整个过程有点迟钝,但是然后是浏览器中的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代码(使用浏览器DOM模拟一个串行端口和一个终端)将数据(例如系统日志或shell命令提示符)写入“终端”。您的按键也会通过此模拟串行端口发送回Linux。