GN⁺: 가상 머신 작성 방법 (2022)
(jmeiners.com)가상 머신이란?
- 가상 머신(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개는 프로그램 카운터(PC), 1개는 조건 플래그(COND) 레지스터임.
명령어 집합
- 명령어는 CPU가 수행할 기본 작업을 지시하는 명령임.
- LC-3에는 16개의 오퍼코드가 있으며, 각 명령어는 16비트 길이로 구성됨.
- 명령어는 오퍼코드와 작업에 필요한 매개변수로 구성됨.
조건 플래그
- R_COND 레지스터는 최근 계산의 부호를 나타내는 조건 플래그를 저장함.
- LC-3는 3개의 조건 플래그를 사용하여 계산 결과의 부호를 나타냄.
프로그램 실행
- 프로그램은 메모리에서 명령어를 로드하고, PC 레지스터를 증가시키며, 오퍼코드를 확인하여 명령어를 수행함.
- 명령어는 PC를 변경하여 실행 흐름을 제어할 수 있음.
명령어 구현
- ADD 명령어는 두 숫자를 더하고 결과를 레지스터에 저장함.
- LDI 명령어는 메모리에서 값을 로드하여 레지스터에 저장함.
- 각 명령어는 사양에 따라 구현되며, 플래그를 업데이트해야 함.
트랩 루틴
- LC-3는 키보드 입력, 문자열 출력 등 일반적인 작업을 수행하기 위한 트랩 루틴을 제공함.
- 각 트랩 루틴은 트랩 코드로 식별되며, TRAP 명령어로 실행됨.
- 트랩 루틴은 C로 작성되어, OS의 I/O 루틴을 활용함으로써 VM의 성능을 향상시킴.
Hacker News 의견
-
한 사용자는 커뮤니티 칼리지에서 컴퓨터 과학 입문 수업을 들으며 간단한 CPU 명령어 세트를 설계하고, VM과 어셈블러를 작성하여 어셈블리 프로그램을 실행하는 경험을 했음. 이 과정이 컴퓨터에 대한 많은 것을 이해하게 해주었음
- FPGA를 위한 실제 CPU 설계부터 간단한 OS와 프로그램 작성까지 모든 컴퓨팅 단계를 이렇게 배울 수 있다고 느꼈음
- 현대 컴퓨팅의 성능과 보안이 필요하지 않다면 이러한 과정이 놀랍도록 간단함
-
Ben Eater의 브레드보드 CPU 시리즈를 본 후 자신의 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"이라는 용어가 현대에서는 하드웨어 가상화 기능을 사용하는 환경을 지칭하는 것이 일반적이라는 의견이 있었음
- 에뮬레이터와 VM의 차이를 설명하며, 과거에는 용어의 모호함이 있었지만 현재는 명확해졌음을 언급함