1,000줄 짜리 OS를 만들어보자
처음부터 시작해서 작은 OS 하나를 차근차근 만들어봅시다.
OS라고 하면 왠지 겁이 날 수도 있지만, OS(특히 커널)의 기본 기능 자체는 의외로 간단합니다. 예를 들어, 대표적인 대형 오픈소스인 리눅스조차도 0.01 버전에서는 8,413줄밖에 되지 않았습니다.
우리는 C언어로 기본적인 컨텍스트 스위칭, 페이징, 사용자 모드, 명령어 쉘, 디스크 장치 드라이버, 파일 읽기/쓰기 작업을 구현할 겁니다. 많아 보이지만, 전체 코드는 단 1,000줄 정도밖에 되지 않습니다.
“1,000줄이라면 금방 만들겠지?”라고 생각하실 수도 있지만, 초심자라면 적어도 3일은 걸릴 것입니다. 자체 OS 개발이 어려운 이유 중 하나는 바로 ‘디버깅’입니다. 최초에 printf조차 구현되지 않은 상황에서는, 애플리케이션 개발과는 전혀 다른 디버깅 기법과 능력이 필요하기 때문입니다. 특히 “제로부터” 시작하면, 부트 과정이나 페이징처럼 복잡하고 쉽게 좌절할 수 있는 요소들이 초반부터 등장합니다. 그래서 이 책에서는 “자체 OS를 어떻게 디버깅하면 좋을까?”라는 주제도 함께 다뤄보려 합니다.
물론, 디버깅이 힘든 만큼, 제대로 동작했을 더 큰 만족감을 느낄겁니다. 흥미진진한 OS 개발의 세계로 뛰어들어봅시다!
- 구현 예제는 GitHub 에서 다운로드할 수 있습니다.
- 이 책은 CC BY 4.0 라이센스 하에 사용할 수 있습니다. 구현 예제와 본문 소스 코드는 MIT 라이센스 하에 사용할 수 있습니다.
- C언어와 UNIX 계열 환경에 익숙하고
gcc hello.c && ./a.out
을 실행할 수 있다면 충분합니다! - 이 책은 원래 제가 쓴 책 Design and Implementation of Microkernels (일본어로 쓴 책)의 부록 자료로 작성되었습니다.
Happy OS hacking!