可以运行在浏览器的Windows 2000
Windows 2000 可以在浏览器里跑了,缺点就是速度慢。
JSLinux
JSLinux
在浏览器中运行 Linux 或其他操作系统!
可以使用以下仿真系统:
中央处理器 | 操作系统 | 用户 界面 | VF同步 访问 | 启动 链接 | TEMU 配置 | 评论 |
---|---|---|---|---|---|---|
x86 | 阿尔派Linux 3.12.0 | 安慰 | 是的 | 点击这里 | 网址 | |
x86 | 阿尔派Linux 3.12.0 | X窗口 | 是的 | 点击这里 | 网址 | 鼠标右键为菜单。 |
x86 | 视窗2000 | 图形化 | 不 | 点击这里 | 网址 | 免责声明。 |
x86 | 自由DOS | VGA 文本 | 不 | 点击这里 | 网址 | |
RISCV64 | 构建根目录(Linux) | 安慰 | 是的 | 点击这里 | 网址 | |
RISCV64 | 构建根目录(Linux) | X窗口 | 是的 | 点击这里 | 网址 | 鼠标右键为菜单。 |
RISCV64 | Fedora 33(Linux) | 安慰 | 是的 | 点击这里 | 网址 | 警告:启动时间较长。 |
RISCV64 | Fedora 33(Linux) | X窗口 | 是的 | 点击这里 | 网址 | 警告:启动时间较长。鼠标右键为菜单。 |
-----------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
JSLinux - 技术说明
历史
这个模拟器已经有很长的历史了。当前版本基于TinyEMU并使用emscripten编译为 Javascript 或 WASM 。
2011 年,我编写了 JSLinux 的初始版本,这是第一个运行 Linux 的 Javascript PC/x86 模拟器。我为 x86 助手和设备 重复使用了另一个模拟器 ( QEMU )的部分内容。
一段时间后(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 文件系统
- VirIO网络
- VirtIO块设备
- VirIO输入
- 简单的帧缓冲区
- 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 的buildroot-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 模拟器。
相关文章:

可以运行在浏览器的Windows 2000
Windows 2000 可以在浏览器里跑了,缺点就是速度慢。 JSLinux JSLinux 在浏览器中运行 Linux 或其他操作系统! 可以使用以下仿真系统: 中央处理器操作系统用户 界面VF同步 访问启动 链接TEMU 配置评论x86阿尔派Linux 3.12.0安慰是的点击这…...
CUDA笔记
CUDA笔记 nvidia-smi 命令使用 nvidiasmi -q:查询GPU详细信息; nvidia-smi -q -l 0:查询特定GPU详细信息; nvidia-smi -q -l 0 -d MEMORY:显示GPU特定信息; nvidia-smi -h:英伟达的帮助命令。…...
Open CASCADE学习| 提取曲面的PCurve
PCurve这个概念,字面上来理解就是参数曲线(Parametric Curve)。参数空间曲线是在参数曲面的双参数空间中的二维样条曲线。 二维曲线定义的目的只有一个:pCurve,参数曲线。OCC采用参数法构建几何结构,所有的…...

GMS测试BTSfail-CVE-2022-20451
描述: 项目需要过GMS兼容性测试,BTS这块我们环境没有,送检之后出现了一个BTS的Alert,这个是必须要解决的。下面的warning可以不考虑。 这个是patch问题,根据代理提供的pdf文件找到一个id:为A-235098883的补丁…...
Vue学习笔记12--Vue3之setup/ref函数/reactive函数/Vue3响应式原理/reactive对比ref
一、拉开序幕的setup 理解:Vue3中一个新的配置项,值为一个函数。setup是所有Composition API(组合API)表演的舞台。组件中所用到的:数据、方法等,均要配置在setup中。setup函数的两种返回值: 若返回一个对…...

座位预约|座位预约小程序|基于微信小程序的图书馆自习室座位预约管理系统设计与实现(源码+数据库+文档)
座位预约小程序目录 目录 基于微信小程序的图书馆自习室座位预约管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员服务端功能模块 2、学生微信端功能模块 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …...

03 Redis之命令(基本命令+Key命令+String型Value命令与应用场景)
Redis 根据命令所操作对象的不同,可以分为三大类:对 Redis 进行基础性操作的命令,对 Key 的操作命令,对 Value 的操作命令。 3.1 Redis 基本命令 一些可选项对大小写敏感, 所以应尽量将redis的所有命令大写输入 首先通过 redis-…...

go语言函数进阶
1.变量作用域 全局变量 全局变量是定义在函数外部的变量,它在程序整个运行周期内都有效。 在函数中可以访问到全局变量。 package mainimport "fmt"//定义全局变量num var num int64 10func testGlobalVar() {fmt.Printf("num%d\n", num) /…...
Python编程技巧 – 函数参数
Python编程技巧 – 函数参数 Python Programming Skills - Functional Parameters 1. 函数的定义 函数有简明扼要的定义。 函数是一个代码块,仅在调用时运行。可以将数据(称为参数)传递到函数中。函数可以返回数据作为结果。 2. 函数的结…...

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子管理实现
锋哥原创的SpringbootLayui python222网站实战: python222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火…...

LabVIEW扫频阻抗测试系统
实现扫频阻抗法用于检测变压器绕组变形,结合了短路阻抗法和频响法的优点,但受限于硬件精度,尤其是50 Hz短路阻抗测试存在稳定性和准确性的问题。通过LabVIEW编程,控制宽频带信号发生器和高速采集卡,提高测试结果的稳定…...

C语言——指针进阶(四)
目录 一.前言 二.指针和数组笔试题解析 2.1 二维数组 2.2 指针笔试题 三.全部代码 四.结语 一.前言 本文我们将迎来指针的结尾,包含了二维数组与指针的试题解析。码字不易,希望大家多多支持我呀!(三连+关注&…...

Django介绍
一、介绍 Django是Python语言中的一个Web框架,Python语言中主流的web框架有Django、Tornado、Flask 等多种 优势:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等功能,是一个全能型框架,拥有自己的A…...

【idea】几个不错的idea插件让我码速又快了
目录 前言 Gradianto插件 jclasslib Bytecode viewer插件 Grep Console 插件 GenerateAllSetter 插件 GsonFormat 插件 JRebel and XRebel 插件 leetcode editor 插件 maven helper 插件 SequenceDiagram 插件 Statistic 插件 Translation 插件 前言 idea可以说是j…...

LabVIEW直流电机转速检测与控制
研究了使用LabVIEW软件和ELVIS实验平台来检测和控制直流电机的转速。通过集成光电传感器和霍尔传感器,实现了对电机转速的精确测量和调节。 系统组成:系统由NI ELVIS实验平台、光电传感器、霍尔传感器和直流电机组成。通过这些硬件元件,系统…...

༺༽༾ཊ—Unity之-05-抽象工厂模式—ཏ༿༼༻
首先创建一个项目, 在这个初始界面我们需要做一些准备工作, 建基础通用文件夹, 创建一个Plane 重置后 缩放100倍 加一个颜色, 任务:使用 抽象工厂模式 创建 人物与宠物 模型, 首先资源商店下载 人物与宠物…...
力扣面试题02.07-链表相交
链表相交 题目链接 解题思路: 题目可以确定如果相交,那么相交的部分一定是在链表的结尾部分第一步求得两条链表的长度第二步长度做差,将长的那条链表与短的那条链表后部分对其第三步遍历后面的部分,如果当前节点相等,…...
Java集合-ArrayList
集合就是一个保存数据的容器。在计算机中引入集合,是为了便于处理一组类似的数据。Java标准库自带的java.util包提供了集合相关的接口和实现类:Collection接口,它是除了Map接口外所有其他集合类的根接口。 Java的Java.uitl包主要提供以下三种…...

数据结构·单链表经典例题
1. 移除链表元素 OJ链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 本题是说给出一个链表的头节点head和一个整数val,如果发现节点中存的数据有val就删掉它,最后返回修改后的链表头节点地址 如果题目中没有明确…...
Linux常用指令的整合
之前面试被问到了Linux相关的指令,所以我整理的一份常用的Linux指令列表,适用于大多数Linux发行版,现分享给大家: 文件操作 ls:列出目录内容。cd [目录]:更改当前目录。pwd:显示当前目录路径。m…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...