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

Nik*_*kov 67 javascript linux emulation

今天,当我在Javascript中看到Linux模拟器时,我有一个令人痛苦的下降时刻:http: //bellard.org/jslinux/

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

它是如何工作的?

Aar*_*lla 35

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

这是真的.

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

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

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

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

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


ale*_*lex 26

请参阅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 ...

  • 哦,Quora社区实际上产生了一个更好的答案. (40认同)