您现在的位置是:网站首页>技术百科技术百科

web网页运行Linux

小大寒2024-01-01[技术百科]博学多闻

web网页运行LinuxJSLinux是一款历史悠久的Javascript PC/x86模拟器,基于TinyEMU并使用emscripten编译。它始于2011年,最初重用QEMU内容,后转为asm.js,再经TinyEMU和emscripten转为Javascript。现支持x86和RISC-V CPU模拟,以及多种设备和Linux发行版。它可用于基准测试、学习Unix工具、安全文件访问等。源代码可在TinyEMU项目获取。《原网页

web网页运行Linux

JSLinux - 技术说明 - 历史

这款模拟器历史悠久,目前版本基于 TinyEMU,使用 emscripten 编译为 Javascript 或 WASM。

2011 年,我编写了 JSLinux 的初始版本,这是第一个运行 Linux 的 Javascript PC/x86 模拟器。我重用了另一个模拟器 ( QEMU ) 的部分内容作为 x86 辅助程序和设备。

过了一段时间(2015 年),我对其进行了修改,以使用 asm.js Javascript 子集,以便它在支持它的浏览器上运行得更快。

2016 年,在编写了 TinyEMU(最初是一个 RISC-V 模拟器)之后,我决定使用 emscripten 从其 C 代码制作一个 Javascript 版本。我添加了一个 VirtIO 9P 文件系统,该文件系统的灵感来自 Sebastian Macke 在 jor1k 中的文件系统,这样就可以更轻松地使用远程文件系统以及导入或导出文件。

然后我发现将 VirtIO 设备重新用于 x86 JS 模拟器很有趣,所以我将 JSLinux asm.js 代码转换为 C 并使用 emscripten 将其转换回 Javascript!经过仔细调整,新版本现在比手工编码的 asm.js 版本更快。

下一步是运行 Linux 以外的其他操作系统,例如 Windows NT。此模拟器的第一个版本在模拟的 Linux 系统内使用 QEMU 运行 Windows NT。它仍然可用,因为 x86 模拟器支持 QEMU 使用的 x86 虚拟化扩展 (AMD SVM)。

JSLinux 的当前版本通过模拟一些缺失的 PC 设备(PS/2 键盘和鼠标、IDE 磁盘、虚拟 VGA)来运行 Windows NT。

x86 CPU 模拟

模拟具有以下特征的 x86 CPU:

  • 奔腾级 CPU
  • x87 具有精确的 80 位浮点数
  • PAE 支持
  • CMOV 指令
  • MMX 和 SSE2 支持
  • 具有嵌套页表支持的 AMD 虚拟机扩展 (SVM)
  • RDPMC 支持读取指令计数

已知限制:

  • 访问内存时无段限制和权限检查
  • 不支持调试(DRx 寄存器)

模拟设备

  • 8259 可编程中断控制器
  • 8254 可编程中断定时器
  • 16450 UART(仅用于调试)
  • 实时时钟
  • PCI 总线
  • VirtIO 控制台
  • VirtIO 9P 文件系统
  • VirtIO 网络
  • VirtIO 块设备
  • VirtIO 输入
  • 简单的帧缓冲区
  • IDE 控制器(可选)
  • PS/2 键盘和鼠标(可选)
  • 虚拟 VGA 显示器(可选)

RISC-V CPU 仿真

使用 64 位 FPU 和压缩指令模拟 32 位或 64 位 RISC-V CPU。

目前仅提供 RISC-V 64 位 Buildroot 和 Fedora 发行版。RISC-V 32 位映像仍然可用,但不再主动维护:

  • 带有控制台的 buildroot-riscv32。
  • 使用 X Window 构建 root-riscv32。

表现

在装有 Firefox 浏览器的典型台式电脑(2017 年)上,x86 模拟器的运行速度约为 100 MIPS。使用集成实用程序可以进行详细的基准测试 vmtime

Javascript 终端

它是原始 JSLinux 的改进版本。它具有滚动条并支持 URL 突出显示。

Linux 发行版

它使用 Alpine Linux 和 Buildroot 发行版。为 vfsync、qemacs、tcc 添加了自定义包。Fluxbox 窗口管理器提供可选的 X Window 支持。

联网

模拟器内可以访问互联网。它使用 Benjamin Burns 提供的 websocket VPN(请参阅他的博客)。带宽上限为 40 kB/s,每个公共 IP 地址最多允许两个连接。请不要滥用该服务。

有啥用处?

我这样做只是为了好玩,因为 Javascript 引擎足够快,可以做复杂的事情。实际用途可能是:

  • Javascript 引擎的基准测试(你的 Javascript 引擎启动 Linux 需要多长时间?)以及新浏览器技术(asm.js、WASM)的使用。
  • 学习无需离开浏览器即可使用命令行 Unix 工具。
  • 浏览器内的安全文件访问(vfsync)。
  • 运行旧的 PC 软件。

源代码

RISC-V 版本的源代码可在 TinyEMU 项目中获取。还提供了一个预编译的易于安装的演示。

类似项目

还有几种其他 PC 或 Linux 模拟器可用。特别是:

  • jor1k:OpenRISC OR1K CPU 模拟器。
  • v86:PC 模拟器。
  • angel:RISC-V CPU 模拟器。

阅读完毕,很棒哦!

上一篇:Vim教程

下一篇:什么是人工智能 (AI)?

文章评论

站点信息

  • 网站地址:www.xiaodahan.com
  • 我的QQ: 3306916637