GN⁺: 1,000줄로 운영체제 구현하기
(operating-system-in-1000-lines.vercel.app)- 이 책은 작은 운영체제를 처음부터 단계별로 구축하는 방법을 설명함
- 운영체제(OS)나 커널 개발이라는 말에 겁먹을 수 있지만, OS의 기본 기능(특히 커널)은 놀랍도록 간단함
- Linux도 처음에는 8,413줄의 코드로 시작했으며, 오늘날의 Linux 커널은 매우 크지만, 취미 프로젝트처럼 작은 코드베이스로 시작했음
시작하기
- 기본적인 컨텍스트 전환, 페이징, 사용자 모드, 명령줄 셸, 디스크 장치 드라이버, 파일 읽기/쓰기 작업을 C 언어로 구현할 것임
- 이 모든 것이 1,000줄의 코드로 가능함
- OS를 직접 만드는 데 있어 가장 어려운 부분은 디버깅임
- printf 디버깅을 구현하기 전까지는 사용할 수 없으며, 애플리케이션 개발에서는 필요 없었던 다양한 디버깅 기술과 스킬을 배워야 함
- 특히 "처음부터" 시작할 때 부팅 과정과 페이징 같은 어려운 부분을 만나게 됨
- 하지만 걱정하지 말 것! OS 디버깅 방법도 배울 것임
- 디버깅이 어려울수록 성공했을 때의 만족감이 큼
- OS 개발의 흥미로운 세계로 뛰어들어 보자!
기타 정보
- 구현 예제는 GitHub에서 다운로드 가능함.
- 이 책은 CC BY 4.0 라이선스 하에 제공되며, 구현 예제와 소스 코드는 MIT 라이선스 하에 있음
- C 언어와 UNIX 유사 환경에 익숙해야 하며,
gcc hello.c && ./a.out
를 실행할 수 있다면 준비 완료임 - 이 책은 원래 일본어로 작성된 "마이크로커널의 설계 및 구현" 책의 부록으로 작성되었음
- 즐거운 OS 해킹을 기원함!
책의 목차
- Intro
- Getting Started
- RISC-V 101
- Overview
- Boot
- Hello World!
- C Standard Library
- Kernel Panic
- Exception
- Memory Allocation
- Process
- Page Table
- Application
- User Mode
- System Call
- Disk I/O
- File System
- Outro
2000년대 초반까지는 이렇게 개개인이 작은 커널을 만들어보는게 유행이기도해서 저도 해봤었고 덕분에 리눅스 커널 개발을 몇년 할 수 있었지요. 국내에도 운영체제 만드는 책들이 많이 나왔었으니까 잘 찾아보시면 더 자세하게 설명하는 책들을 구하실 수 있습니다.
관련 분야 이직할게 아니라 그냥 재미로만 한다면 나쁘지 않겠지만, 저라면 요즘에는 AI나 k8s관련 스터디를 추천하겠습니다. 아직도 가끔 KLDP같은데 커널 개발자가 되고싶다는 글이 올라오는데 댓글을 보면 전부 외국나가라는 말뿐이에요.
- 이 책은 원래 일본어로 작성된 "마이크로커널의 설계 및 구현" 책의 부록으로 작성되었음
이 말이 너무 부럽네요. 일본은 전문서적들이 참 많이 잘 나오는 것 같아요. 인구 수의 문제겠죠?
번역되는 책들을 보면 기술적으로 아주 깊은데까지 이야기하는 책은 없는것 같습니다만 단지 다양한 분야의 책이 나오는것 같긴 합니다. 아무래도 시장이 더 크니까 그런거같아요.
너무 흥미롭네요. 언젠가 한번 시스템프로그래밍 공부를 해보고싶었는데 처음 접근으로 OS 동작에 대해 프로그래밍 적으로 이해할 수 있겠다는 기대가 되는군요!
Hacker News 의견
-
저자는 주말에 운영체제를 직접 만들어볼 수 있도록 책을 썼으며, C가 아닌 Rust나 Zig 같은 좋아하는 프로그래밍 언어를 사용할 수 있음
- UNIX와 비슷하지 않게 필수적인 부분만 남겼으며, Linux나 Windows와의 차이를 생각하는 것도 재미있음
- 운영체제를 설계하는 것은 자신만의 세계를 만드는 것과 같음
- 일부 문단은 기계 번역된 느낌이 있을 수 있으며, 시간이 있다면 PR을 보내달라고 요청함
- 콘텐츠는 Markdown으로 작성됨
-
"hobby" 운영체제 프로그래밍 경험을 바탕으로 GDB 디버깅 설정을 가능한 빨리 추가하는 것이 좋음
- QEMU에는 내장된 GDB 서버가 있으며, 대상 아키텍처(riscv)의 GDB 클라이언트를 네트워크를 통해 QEMU GDB 서버에 연결해야 함
-
RISC-V를 위한 작은 운영체제를 만드는 것이 멋지다고 생각함
- 개인적으로 Nim으로 x86-64용 커널을 작성했으며, JetBrains 플러그인을 개발 중임
-
Rust 애호가들에게 phil-opp의 가이드는 재미있는 연습이 될 수 있음
- 처음 시도했을 때는 5% 정도만 이해했지만, 2-3년 후 다시 시도하여 주제를 하나씩 검토함
-
RISC-V에 대해 공부를 시작했으며, 읽고 있는 책에서 제공하는 에뮬레이터가 QEMU보다 간단하고 이상한 라이선스를 가지고 있음
- 학술 프로젝트처럼 보이며, 실제로 사용되는지 궁금함
-
xv6-riscv와 비교하는 것이 흥미로울 것 같음
- xv6 책의 HTML 버전을 제공함
-
저수준의 논의가 항상 흥미로움
- "RISC-V 101 페이지"에서 작은 오타를 발견했으며, "ISA" 대신 "CPU"로 잘못 표기됨
-
운영체제를 만드는 데 있어 가장 까다로운 부분은 디버깅임
- 나이가 들수록 복잡한 전문 지식이 필요하지 않은 문제는 반복적인 시도를 통해 해결할 수 있다고 생각함
-
두 프로젝트가 언급됨
- nuta/microkernel-book
- mit-pdos/xv6-riscv
-
좋은 자료이며, 주말에 읽기 위해 저장해 둠