우리가 배운 운영체제 개념들을
눈으로 보고 손으로 체험할 수 있다면 얼마나 좋을까?
바로 그런 목적에서 만들어진 것이 PintOS다.
PintOS는 교육용 운영체제이다.
실제로 우리가 C 언어로 운영체제의 핵심 기능을 직접 구현하면서,
이론으로 배운 개념들을 실제로 체험해볼 수 있는 프로젝트이다.
“이론으로만 듣던 CPU 스케줄링, 스레드, 시스템 콜, 가상 메모리…
이제 우리가 직접 만들어보자!”
PintOS는 복잡한 드라이버나 GUI가 없는,
가장 핵심적인 운영체제 기능만 남긴 심플한 구조를 가지고 있다.
그래서 더더욱 운영체제의 본질에 집중할 수 있다.
이러한 추상적으로만 느껴지던 개념들을 직접 구현하고 디버깅하면서 구체화 시켜나가는 게
PintOS의 가장 큰 목적이다.
내 컴퓨터에는 이미 macOS
나 Windows
같은 운영체제가 깔려 있다.
하지만 우리는 새로 만든 운영체제인 PintOS를 실행해보고 싶다.
어떻게 실행해야 할까?
PintOS는 실제 컴퓨터에 직접 설치되는 OS가 아니다.
대신 우리는 가상 머신 위에서 PintOS를 실행한다.
가상머신이란? 💻
가짜 컴퓨터라고 생각하면 쉽다.
내 컴퓨터에 있는 OS를 날려버리고 PintOS로 바꾸는 건 위험하니,
독립적인 가상의 공간을 하나 만들어 그 안에서 PintOS를 실행하는 것이다.
이때 등장하는 도구가
Docker, 리눅스, QEMU이다.
단계별로 살펴보자.
우리가 PintOS를 만들기 위해선
C코드를 컴파일하고 디버깅할 작업 환경이 필요하다.
그런데 PintOS는 리눅스 환경을 기준으로 만들어졌다.
(리눅스도 OS이다. ※ "왜 하필 리눅스인가?"에 대한 이야기는 별도 글로 다룰 예정이다.
우선은 넘어가자.)
💡 그래서 우리는 리눅스 환경을 먼저 갖추는 것부터 시작해야 한다.
하지만 컴퓨터는 대부분 macOS
나 Windows
를 사용하고 있다.
그래서 필요한 게 Docker 이다.
🐳 Docker
“내 컴퓨터 위에 또 하나의 ‘가볍고 작고 안전한 미니 컴퓨터’를 띄워주는 도구”
Docker는 컨테이너(container)라는 가상 환경을 만들어준다.
이 컨테이너에는 리눅스도 깔려있고, 이 외의 프로그램이 모두 설치되어 있다.
쉽게 말해서 바로 개발할 수 있게 완성된 개발실을 제공하는 역할을 한다.
PintOS 프로젝트를 진행할 수 있게 리눅스 환경 뿐만 아니라 그외의 모든 환경을 미리 갖춰서 제공해준다.
이 덕에 누구나 같은 환경에서, 같은 방식으로 작업할 수 있다.
docker로 리눅스 환경에서 PintOS를 만들었다고 가정해보자.
이걸 어떻게 실행해볼까?
여기서 QEMU가 등장한다.
QEMU는 가짜 컴퓨터, 즉 가상 머신이다.
마치 시제품을 테스트하는 기계처럼 PintOS가 잘 돌아가는지 확인해주는 가상의 공간, 컴퓨터 이다.
🐭 🫶