Skip to content

끝내며 ​

축하합니다! 이 책을 끝까지 읽으셨습니다. 여러분은 간단한 OS 커널을 처음부터 구현하는 방법을 배웠고, 부팅 CPU, 컨텍스트 스위칭, 페이지 테이블, 사용자 모드, 시스템 호출, 디스크 I/O, 파일 시스템 등 운영체제의 기본 개념들에 대해 익혔습니다.

비록 코드가 1000줄이 채 되지 않지만, 정말 도전적인 여정이었을 것입니다. 왜냐하면 여러분은 커널의 핵심 중의 핵심, 바로 커널의 코어를 직접 구현했기 때문입니다.

아직 만족스럽지 않거나 더 도전해보고 싶은 분들을 위해 다음과 같은 추가 단계들을 제안합니다:

새로운 기능 추가하기 ​

이 책에서는 커널의 기본 기능들을 구현했습니다. 하지만 여전히 구현할 수 있는 기능들이 많이 있습니다. 예를 들어, 다음과 같은 기능들을 추가해보는 것도 흥미로울 것입니다:

  • 메모리 해제가 가능한 적절한 메모리 할당기
  • 인터럽트 처리: 디스크 I/O에 대해 바쁜 대기(busy-wait)를 하지 않도록 개선
  • 완전한 기능을 갖춘 파일 시스템: ext2와 같은 파일 시스템 구현이 좋은 출발점이 될 수 있음
  • 네트워크 통신(TCP/IP): UDP/IP 구현은 어렵지 않으며, TCP는 다소 복잡합니다. virtio-net은 virtio-blk와 매우 유사합니다!

다른 OS 구현체 읽어보기 ​

가장 추천하는 다음 단계는 다른 OS의 구현체들을 읽어보는 것입니다. 자신의 구현과 다른 구현체들을 비교하며, 다른 사람들이 어떻게 구현했는지 배우는 과정은 매우 교육적입니다.

제가 가장 좋아하는 구현체 중 하나는 RISC-V version of xv6입니다. 이 OS는 교육 목적으로 만들어진 UNIX-like 운영체제로, explanatory book (in English)도 함께 제공됩니다. UNIX의 fork(2)와 같은 기능을 배우고자 하는 분들에게 추천합니다.

또 다른 추천 프로젝트는 제 개인 프로젝트 Starina입니다. Rust로 작성된 마이크로커널 기반 OS로, 아직 실험적인 단계이지만 마이크로커널 아키텍처와 OS 개발에서 Rust가 어떻게 빛을 발하는지 배우고 싶은 분들에게 흥미로운 자료가 될 것입니다.

피드백은 언제나 환영합니다! ​

질문이나 피드백이 있다면, GitHub에 남겨주시거나, 원하신다면 이메일로 연락해 주세요. 여러분의 OS 프로그래밍 여정에 행운이 가득하길 바랍니다!