3 điểm bởi GN⁺ 2024-12-28 | 1 bình luận | Chia sẻ qua WhatsApp

Máy ảo là gì?

  • Máy ảo (VM) là một chương trình hoạt động như một máy tính. Nó mô phỏng CPU và một số thành phần phần cứng để có thể thực hiện phép toán số học, đọc và ghi vào bộ nhớ, cũng như tương tác với các thiết bị I/O.
  • VM được tạo ra để tái hiện hoạt động của một máy tính cụ thể hoặc để giúp việc phát triển phần mềm trở nên dễ dàng hơn.
  • Java Virtual Machine (JVM) là một ví dụ thành công, cho phép chạy các chương trình Java, Kotlin, Clojure trên nhiều thiết bị khác nhau.

Kiến trúc LC-3

  • LC-3 là một kiến trúc máy tính phục vụ mục đích giáo dục, minh họa các khái niệm chính được sử dụng trong CPU hiện đại.
  • LC-3 có 65.536 vị trí bộ nhớ, và mỗi vị trí lưu trữ một giá trị 16 bit.
  • Có 10 thanh ghi, trong đó 8 thanh ghi là thanh ghi đa dụng, 1 thanh ghi là bộ đếm chương trình (PC), và 1 thanh ghi là thanh ghi cờ điều kiện (COND).

Tập lệnh

  • Lệnh là chỉ thị cho CPU thực hiện các thao tác cơ bản.
  • LC-3 có 16 opcode, và mỗi lệnh có độ dài 16 bit.
  • Lệnh được cấu thành từ opcode và các tham số cần thiết cho thao tác.

Cờ điều kiện

  • Thanh ghi R_COND lưu các cờ điều kiện biểu thị dấu của phép tính gần nhất.
  • LC-3 sử dụng 3 cờ điều kiện để biểu thị dấu của kết quả tính toán.

Thực thi chương trình

  • Chương trình nạp lệnh từ bộ nhớ, tăng thanh ghi PC, kiểm tra opcode và thực thi lệnh.
  • Lệnh có thể thay đổi PC để điều khiển luồng thực thi.

Triển khai lệnh

  • Lệnh ADD cộng hai số và lưu kết quả vào thanh ghi.
  • Lệnh LDI nạp một giá trị từ bộ nhớ vào thanh ghi.
  • Mỗi lệnh được triển khai theo đặc tả và cần cập nhật các cờ.

Trap routine

  • LC-3 cung cấp các trap routine để thực hiện những tác vụ phổ biến như nhập từ bàn phím, xuất chuỗi, v.v.
  • Mỗi trap routine được nhận diện bằng một trap code và được thực thi bằng lệnh TRAP.
  • Các trap routine được viết bằng C, giúp cải thiện hiệu năng của VM bằng cách tận dụng các routine I/O của hệ điều hành.

1 bình luận

 
GN⁺ 2024-12-28
Ý kiến trên Hacker News
  • Một người dùng cho biết khi học lớp nhập môn khoa học máy tính ở community college, họ đã thiết kế một tập lệnh CPU đơn giản, viết VM và assembler để chạy các chương trình assembly. Quá trình này đã giúp họ hiểu được rất nhiều điều về máy tính

    • Họ cảm thấy có thể học toàn bộ các tầng của điện toán theo cách này, từ thiết kế CPU thực tế cho FPGA đến viết một OS đơn giản và các chương trình
    • Nếu không cần hiệu năng và bảo mật của điện toán hiện đại, quá trình này đơn giản đến đáng ngạc nhiên
  • Có ý kiến nói rằng sau khi xem series CPU trên breadboard của Ben Eater, họ muốn tự thiết kế và mô phỏng CPU của mình

    • Họ bày tỏ mong muốn sẽ dành thời gian để thực hiện việc này
  • Danh sách sách được đề xuất:

    • "Virtual Machines: Versatile Platforms for Systems and Processes" của Smith và Nair - có vẻ là một cuốn tổng quan toàn diện về chủ đề
    • "Virtual Machines" của Iain Craig - có vẻ là sách thực hành về ngôn ngữ và VM
    • "Virtual Machine Design and Implementation in C/C++" của Bill Blunden - có vẻ là sách thực hành triển khai
    • Có nhắc rằng sẽ rất hữu ích nếu ai đã đọc các sách này bổ sung thêm ý kiến
  • Có ý kiến cho rằng các kiến trúc dùng cho giáo dục như Brookshear Machine và Little Computer khác xa thực tế và có thể khiến sinh viên hiểu sai vấn đề

    • Họ đề xuất rằng những ai muốn học cách máy tính hoạt động thì nên học một khóa về hệ điều hành sẽ tốt hơn
    • Nếu muốn một hướng dẫn ngắn, họ khuyên đọc "Writing my own bootloader"
    • Ý ở đây không phải là tutorial "Write your own VM" dở, mà là những chủ đề khác có thể hữu ích hơn
  • Có ý kiến cho rằng ngày nay thuật ngữ "Virtual Machine" thường được dùng để chỉ môi trường sử dụng các tính năng ảo hóa phần cứng

    • Họ giải thích sự khác nhau giữa emulator và VM, đồng thời nhắc rằng trước đây thuật ngữ này từng mơ hồ nhưng hiện nay đã rõ ràng hơn