Skip to content

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!