4 điểm bởi GN⁺ 2025-04-15 | 1 bình luận | Chia sẻ qua WhatsApp
  • Trình giả lập PC dựa trên JavaScript/WASM có thể chạy Linux và Windows NT ngay trong trình duyệt; đây là dự án do Fabrice Bellard khởi đầu từ năm 2011 với tư cách trình giả lập x86 JS đầu tiên và tiếp tục phát triển cho tới nay
  • Biên dịch mã C dựa trên TinyEMU bằng emscripten, đồng thời sử dụng thiết bị VirtIO để hỗ trợ hệ thống tệp, mạng và thiết bị khối
  • Giả lập CPU x86 64-bit có độ hoàn thiện cao, bao gồm cả các tập lệnh mở rộng mới nhất như AVX-512, APX
  • Cũng hỗ trợ giả lập CPU RISC-V 32/64-bit, có thể chạy nhiều bản phân phối như Alpine Linux, Buildroot
  • Có các trường hợp sử dụng thực tiễn như benchmark hiệu năng JavaScript engine, học Unix trong trình duyệt và chạy phần mềm PC cũ

Lịch sử

  • Phiên bản đầu tiên năm 2011 là trình giả lập PC/x86 đầu tiên được viết bằng JavaScript, tái sử dụng mã helper x86 và mã thiết bị của QEMU
  • Năm 2015, áp dụng tập con asm.js để cải thiện tốc độ trên các trình duyệt hỗ trợ
  • Năm 2016, sau khi viết TinyEMU là trình giả lập RISC-V, tác giả chuyển mã C sang JavaScript bằng emscripten
    • Bổ sung hệ thống tệp VirtIO 9P lấy cảm hứng từ jor1k (Sebastian Macke), giúp truy cập hệ thống tệp từ xa và import/export tệp dễ dàng
  • Để tái sử dụng thiết bị VirtIO cho cả trình giả lập x86 JS, dự án đã trải qua quá trình chuyển mã asm.js của JSLinux sang C rồi lại chuyển ngược sang JavaScript bằng emscripten
    • Nhờ tinh chỉnh chi tiết, đạt hiệu năng còn nhanh hơn bản asm.js viết thủ công
  • Để chạy Windows NT, ban đầu dùng cách chạy lồng QEMU bên trong Linux được giả lập
    • Vì trình giả lập x86 hỗ trợ mở rộng ảo hóa AMD SVM, nên ngay cả khi chạy lồng vẫn đạt mức có thể sử dụng được
  • Phiên bản hiện tại tự giả lập các thiết bị PC còn thiếu như bàn phím/chuột PS/2, đĩa IDE, VGA giả để chạy Windows NT theo cách native

Giả lập CPU x86

  • Giả lập CPU x86 với các tính năng sau:
    • CPU lớp Pentium
    • x87 dấu phẩy động 80-bit (bit exact)
    • PAE
    • Các lệnh CMOV
    • Hỗ trợ MMX, SSE2
    • Mở rộng máy ảo AMD SVM (hỗ trợ Nested Page Table)
    • Đọc số lượng lệnh thông qua RDPMC
  • Các hạn chế đã biết:
    • Khi truy cập bộ nhớ, không thực hiện kiểm tra giới hạn phân đoạn và quyền truy cập
    • Không hỗ trợ debug (thanh ghi DRx)

Thiết bị được giả lập

  • 8259 PIC (Programmable Interrupt Controller)
  • 8254 PIT (Programmable Interrupt Timer)
  • 16450 UART (chỉ dùng cho debug)
  • Đồng hồ thời gian thực
  • PCI bus
  • VirtIO console, hệ thống tệp 9P, mạng, thiết bị khối, input
  • Simple framebuffer
  • Bộ điều khiển IDE, bàn phím/chuột PS/2, màn hình VGA giả (mỗi thành phần đều là tùy chọn)

Giả lập CPU RISC-V

  • Giả lập CPU RISC-V 32-bit hoặc 64-bit, hỗ trợ FPU 64-bit và compressed instructions
  • Hiện cung cấp các bản phân phối Buildroot và Fedora cho RISC-V 64-bit
  • Ảnh RISC-V 32-bit vẫn còn dùng được nhưng không còn được bảo trì tích cực
    • Cung cấp bản console buildroot-riscv32 và bản X Window

Hiệu năng

  • Tính đến năm 2017, trên PC desktop phổ thông khi dùng Firefox, trình giả lập x86 chạy ở khoảng 100 MIPS
  • Có thể thực hiện benchmark chi tiết bằng tiện ích vmtime tích hợp

Terminal JavaScript

  • Là phiên bản cải tiến của terminal JSLinux gốc, hỗ trợ thanh cuộnhighlight URL

Bản phân phối Linux

  • Sử dụng các bản phân phối Alpine LinuxBuildroot
  • Bổ sung các gói tùy biến như vfsync, qemacs, tcc
  • Hỗ trợ X Window tùy chọn thông qua window manager Fluxbox

Mạng

  • Có thể truy cập Internet từ bên trong trình giả lập
  • Sử dụng websocket VPN do Benjamin Burns cung cấp
  • Giới hạn băng thông 40 kB/s, cho phép tối đa 2 kết nối cho mỗi IP công cộng

Mục đích sử dụng

  • Benchmark JavaScript engine (ví dụ: đo thời gian khởi động Linux) và tận dụng các công nghệ trình duyệt mới như asm.js, WASM
  • Học các công cụ Unix dòng lệnh mà không cần rời khỏi trình duyệt
  • Truy cập tệp an toàn trong trình duyệt (vfsync)
  • Chạy phần mềm PC legacy

Mã nguồn và các dự án tương tự

  • Mã nguồn phiên bản RISC-V được cung cấp trong dự án TinyEMU, đồng thời cũng có demo dựng sẵn dễ cài đặt
  • Các dự án tương tự:
    • jor1k: trình giả lập CPU OpenRISC OR1K
    • v86: trình giả lập PC
    • angel: trình giả lập CPU RISC-V

1 bình luận

 
ndrgrd 2025-04-16

Có vẻ như cấu hình CORS bị sai, nên phải vào https://bellard.org/jslinux/ thay vì https://www.bellard.org/jslinux/ trong liên kết thì mới hoạt động bình thường.