3 คะแนน โดย GN⁺ 2024-12-28 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

Virtual Machine คืออะไร?

  • Virtual Machine (VM) คือโปรแกรมที่ทำงานเสมือนเป็นคอมพิวเตอร์ โดยจำลอง CPU และองค์ประกอบฮาร์ดแวร์บางส่วนเพื่อดำเนินการคำนวณทางคณิตศาสตร์ อ่านและเขียนหน่วยความจำ และโต้ตอบกับอุปกรณ์ I/O ได้
  • VM ถูกสร้างขึ้นเพื่อจำลองการทำงานของคอมพิวเตอร์เครื่องหนึ่งโดยเฉพาะ หรือเพื่อทำให้การพัฒนาซอฟต์แวร์สะดวกยิ่งขึ้น
  • Java Virtual Machine (JVM) เป็นตัวอย่างที่ประสบความสำเร็จ ซึ่งทำให้สามารถรันโปรแกรม Java, Kotlin และ Clojure บนอุปกรณ์หลากหลายประเภทได้

สถาปัตยกรรม LC-3

  • LC-3 เป็นสถาปัตยกรรมคอมพิวเตอร์เพื่อการศึกษา ที่แสดงให้เห็นแนวคิดหลักที่ใช้ใน CPU สมัยใหม่
  • LC-3 มีตำแหน่งหน่วยความจำ 65,536 ตำแหน่ง โดยแต่ละตำแหน่งเก็บค่า 16 บิต
  • มีรีจิสเตอร์ 10 ตัว ในจำนวนนี้ 8 ตัวเป็นรีจิสเตอร์อเนกประสงค์ 1 ตัวเป็น program counter (PC) และอีก 1 ตัวเป็นรีจิสเตอร์ condition flags (COND)

ชุดคำสั่ง

  • คำสั่งคือชุดคำสั่งที่บอกให้ CPU ทำงานพื้นฐานบางอย่าง
  • LC-3 มี opcode 16 แบบ และแต่ละคำสั่งมีความยาว 16 บิต
  • คำสั่งประกอบด้วย opcode และพารามิเตอร์ที่จำเป็นต่อการทำงาน

Condition Flags

  • รีจิสเตอร์ R_COND ใช้เก็บ condition flags ที่บ่งบอกเครื่องหมายของผลการคำนวณล่าสุด
  • LC-3 ใช้ condition flags 3 ตัวเพื่อแสดงเครื่องหมายของผลลัพธ์จากการคำนวณ

การรันโปรแกรม

  • โปรแกรมจะโหลดคำสั่งจากหน่วยความจำ เพิ่มค่ารีจิสเตอร์ PC และตรวจสอบ opcode เพื่อดำเนินคำสั่ง
  • คำสั่งสามารถควบคุมลำดับการทำงานได้โดยการเปลี่ยนค่า PC

การติดตั้งคำสั่ง

  • คำสั่ง ADD จะนำตัวเลขสองตัวมาบวกกันแล้วเก็บผลลัพธ์ไว้ในรีจิสเตอร์
  • คำสั่ง LDI จะโหลดค่าจากหน่วยความจำแล้วเก็บไว้ในรีจิสเตอร์
  • คำสั่งแต่ละตัวจะถูกติดตั้งตามข้อกำหนด และต้องอัปเดต flags ด้วย

Trap Routines

  • LC-3 มี trap routines สำหรับงานทั่วไป เช่น การรับข้อมูลจากคีย์บอร์ดและการแสดงผลสตริง
  • trap routine แต่ละตัวระบุด้วย trap code และทำงานผ่านคำสั่ง TRAP
  • trap routines เขียนด้วยภาษา C และช่วยเพิ่มประสิทธิภาพของ VM โดยอาศัย I/O routines ของ OS

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

 
GN⁺ 2024-12-28
ความคิดเห็นบน Hacker News
  • ผู้ใช้คนหนึ่งเคยเรียนวิชาเกริ่นนำวิทยาการคอมพิวเตอร์ที่วิทยาลัยชุมชน โดยได้ออกแบบชุดคำสั่ง CPU แบบง่าย ๆ และเขียน VM กับแอสเซมเบลอร์เพื่อรันโปรแกรมแอสเซมบลี ประสบการณ์นี้ช่วยให้เข้าใจเรื่องคอมพิวเตอร์ได้มาก

    • รู้สึกว่าสามารถเรียนรู้ทุกขั้นตอนของการคอมพิวต์ได้ด้วยวิธีนี้ ตั้งแต่การออกแบบ CPU จริงสำหรับ FPGA ไปจนถึงการเขียน OS และโปรแกรมอย่างง่าย
    • หากไม่ต้องการประสิทธิภาพและความปลอดภัยของการคอมพิวต์สมัยใหม่ กระบวนการแบบนี้เรียบง่ายอย่างน่าทึ่ง
  • มีความเห็นว่าหลังจากดูซีรีส์ Breadboard CPU ของ Ben Eater แล้ว ก็อยากออกแบบและจำลอง CPU ของตัวเอง

    • แสดงความหวังว่าอยากหาเวลาเพื่อมาลงมือออกแบบจริง
  • รายชื่อหนังสือที่มีคนแนะนำ:

    • "Virtual Machines: Versatile Platforms for Systems and Processes" by Smith and Nair - ดูเหมือนจะเป็นหนังสือภาพรวมเชิงครอบคลุมของหัวข้อนี้
    • "Virtual Machines" by Iain Craig - ดูเหมือนจะเป็นหนังสือภาคปฏิบัติว่าด้วยภาษาและ VM
    • "Virtual Machine Design and Implementation in C/C++" by Bill Blunden - ดูเหมือนจะเป็นหนังสือภาคปฏิบัติด้านการลงมือสร้าง
    • มีการบอกว่าถ้าใครเคยอ่านหนังสือเหล่านี้แล้วมาเพิ่มความเห็น ก็จะเป็นประโยชน์
  • มีความเห็นว่าสถาปัตยกรรมเพื่อการศึกษาอย่าง Brookshear Machine และ Little Computer แตกต่างจากของจริง และอาจทำให้นักศึกษาเข้าใจแบบบิดเบือนได้

    • เสนอว่าคนที่อยากเรียนรู้ว่าคอมพิวเตอร์ทำงานอย่างไร ควรไปเรียนวิชาระบบปฏิบัติการจะดีกว่า
    • หากต้องการบทสอนสั้น ๆ ก็แนะนำ "Writing my own bootloader"
    • ไม่ได้หมายความว่าบทสอน "Write your own VM" ไม่ดี แต่เห็นว่าหัวข้ออื่นอาจให้ประโยชน์มากกว่า
  • มีความเห็นว่าคำว่า "Virtual Machine" ในปัจจุบันมักใช้เรียกสภาพแวดล้อมที่ใช้ความสามารถด้าน virtualization ของฮาร์ดแวร์

    • อธิบายความแตกต่างระหว่าง emulator กับ VM พร้อมกล่าวว่าในอดีตคำนี้เคยกำกวม แต่ปัจจุบันความหมายชัดเจนแล้ว