4 คะแนน โดย GN⁺ 2025-04-15 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • โปรแกรมจำลองพีซีบนพื้นฐาน JavaScript/WASM ที่สามารถรัน Linux และ Windows NT ได้ในเบราว์เซอร์ เป็นโปรเจ็กต์ที่ Fabrice Bellard เริ่มต้นขึ้นในปี 2011 ในฐานะโปรแกรมจำลอง x86 แบบ JS ตัวแรก และพัฒนาต่อเนื่องมาจนถึงปัจจุบัน
  • คอมไพล์โค้ด C ที่อิง TinyEMU ด้วย emscripten และรองรับระบบไฟล์, เครือข่าย และบล็อกดีไวซ์ผ่านอุปกรณ์ VirtIO
  • การจำลอง CPU x86 แบบ 64 บิตมีความสมบูรณ์สูง โดยรองรับชุดคำสั่งขยายสมัยใหม่อย่าง AVX-512, APX ด้วย
  • รองรับการจำลอง CPU RISC-V แบบ 32/64 บิต และสามารถรันดิสโทรหลากหลายแบบ เช่น Alpine Linux, Buildroot
  • มี กรณีการใช้งานจริง เช่น การทำเบนช์มาร์กประสิทธิภาพของ JavaScript engine, การเรียนรู้ Unix ในเบราว์เซอร์, และการรันซอฟต์แวร์พีซีรุ่นเก่า

ประวัติ

  • เวอร์ชันแรกในปี 2011 เป็น โปรแกรมจำลอง PC/x86 ตัวแรก ที่เขียนด้วย JavaScript โดยนำ x86 helper และโค้ดอุปกรณ์ของ QEMU กลับมาใช้
  • ในปี 2015 มีการใช้ซับเซ็ต asm.js เพื่อเพิ่มความเร็วในเบราว์เซอร์ที่รองรับ
  • ในปี 2016 หลังจากสร้าง TinyEMU ซึ่งเป็นโปรแกรมจำลอง RISC-V แล้ว จึงแปลงโค้ด C เป็น JavaScript ด้วย emscripten
    • เพิ่ม ระบบไฟล์ VirtIO 9P ที่ได้แรงบันดาลใจจาก jor1k(Sebastian Macke) เพื่อให้เข้าถึงระบบไฟล์ระยะไกลและ import/export ไฟล์ได้ง่าย
  • เพื่อให้นำอุปกรณ์ VirtIO กลับมาใช้กับโปรแกรมจำลอง x86 แบบ JS ได้อีกครั้ง จึงผ่านกระบวนการ แปลงโค้ด JSLinux asm.js เป็น C แล้วแปลงกลับเป็น JavaScript ด้วย emscripten
    • ด้วยการปรับแต่งอย่างละเอียด ทำให้ได้ ประสิทธิภาพที่เร็วกว่ารุ่น asm.js ที่เขียนด้วยมือ
  • ในช่วงแรก การรัน Windows NT ใช้วิธี รัน QEMU ซ้อน อยู่ภายใน Linux ที่ถูกจำลอง
    • เนื่องจากโปรแกรมจำลอง x86 รองรับส่วนขยาย virtualization AMD SVM จึงยังใช้งานได้ในระดับที่ดีแม้จะเป็นการรันซ้อน
  • เวอร์ชันปัจจุบันสามารถรัน Windows NT ได้แบบเนทีฟ โดย จำลองอุปกรณ์พีซีที่ขาดหายไปด้วยตนเอง เช่น PS/2 keyboard/mouse, IDE disk และ dummy VGA

การจำลอง CPU x86

  • การจำลอง x86 CPU รองรับความสามารถต่อไปนี้:
    • CPU ระดับ Pentium
    • x87 เลขทศนิยมลอยตัว 80 บิตแบบ bit exact
    • PAE
    • คำสั่ง CMOV
    • รองรับ MMX, SSE2
    • ส่วนขยาย virtual machine ของ AMD SVM (รองรับ Nested Page Table)
    • อ่านจำนวนคำสั่งผ่าน RDPMC
  • ข้อจำกัดที่ทราบ:
    • ไม่มี การตรวจสอบ segment limit และสิทธิ์การเข้าถึง ระหว่างการเข้าถึงหน่วยความจำ
    • ไม่รองรับการดีบัก (รีจิสเตอร์ DRx)

อุปกรณ์ที่จำลอง

  • 8259 PIC(Programmable Interrupt Controller)
  • 8254 PIT(Programmable Interrupt Timer)
  • 16450 UART(สำหรับดีบักเท่านั้น)
  • Real Time Clock
  • PCI bus
  • VirtIO console, ระบบไฟล์ 9P, เครือข่าย, บล็อกดีไวซ์, อินพุต
  • Simple framebuffer
  • IDE controller, PS/2 keyboard/mouse, dummy VGA display (ทั้งหมดเป็นตัวเลือก)

การจำลอง CPU RISC-V

  • การจำลอง RISC-V CPU แบบ 32 บิตหรือ 64 บิต รองรับ FPU 64 บิต และ compressed instructions
  • ปัจจุบันมีดิสโทร RISC-V 64 บิตแบบ Buildroot และ Fedora ให้ใช้งาน
  • อิมเมจ RISC-V 32 บิตยังคงใช้งานได้ แต่ ไม่ได้รับการดูแลเชิงรุกอีกต่อไป
    • มีทั้งเวอร์ชันคอนโซลและเวอร์ชัน X Window ของ buildroot-riscv32

ประสิทธิภาพ

  • ณ ปี 2017 เมื่อใช้เบราว์เซอร์ Firefox บนเดสก์ท็อปพีซีทั่วไป โปรแกรมจำลอง x86 ทำงานได้ราว 100 MIPS
  • สามารถทำ เบนช์มาร์กแบบละเอียด ได้ผ่านยูทิลิตี vmtime ที่มีมาให้

JavaScript terminal

  • เป็นเวอร์ชันปรับปรุงของเทอร์มินัล JSLinux ดั้งเดิม โดยรองรับ scrollbar และ URL highlighting

Linux ดิสโทร

  • ใช้ดิสโทร Alpine Linux และ Buildroot
  • เพิ่ม แพ็กเกจแบบกำหนดเอง เช่น vfsync, qemacs, tcc
  • รองรับ X Window แบบเลือกใช้ผ่าน window manager Fluxbox

เครือข่าย

  • เข้าถึงอินเทอร์เน็ตได้ จากภายในโปรแกรมจำลอง
  • ใช้ websocket VPN ที่ให้บริการโดย Benjamin Burns
  • จำกัดแบนด์วิดท์ที่ 40 kB/s และอนุญาตสูงสุด 2 การเชื่อมต่อ ต่อ public IP

การใช้งาน

  • ใช้ทำ เบนช์มาร์ก JavaScript engine (เช่น วัดเวลาที่ใช้ในการบูต Linux) และใช้ประโยชน์จากเทคโนโลยีเบราว์เซอร์ใหม่อย่าง asm.js, WASM
  • เรียนรู้ เครื่องมือ Unix แบบ command line ได้โดยไม่ต้องออกจากเบราว์เซอร์
  • เข้าถึงไฟล์อย่างปลอดภัย ภายในเบราว์เซอร์ (vfsync)
  • รัน ซอฟต์แวร์พีซีแบบเลกาซี

ซอร์สโค้ดและโปรเจ็กต์ที่คล้ายกัน

  • ซอร์สโค้ดของเวอร์ชัน RISC-V มีให้ในโปรเจ็กต์ TinyEMU พร้อมเดโมแบบคอมไพล์ล่วงหน้าที่ติดตั้งใช้งานได้ง่าย
  • โปรเจ็กต์ที่คล้ายกัน:
    • jor1k: โปรแกรมจำลอง CPU OpenRISC OR1K
    • v86: โปรแกรมจำลองพีซี
    • angel: โปรแกรมจำลอง CPU RISC-V

1 ความคิดเห็น

 
ndrgrd 2025-04-16

ตั้งค่า CORS ผิด เลยต้องเข้า https://bellard.org/jslinux/ แทน https://www.bellard.org/jslinux/ ในลิงก์ ถึงจะใช้งานได้ตามปกติครับ