리눅스 커널 1도 모르는 학생이 쓴 거라 도움이 안 될 수도 있습니다
어렸을 때부터 리눅스 커널을 공부하는 데에 로망이 있었는데, 당시에 중딩이던 나는 엄청난 진입 장벽에 좌절하고 이론 책만 조금 공부했던 기억이 있다. (그리고 이것도 제대로 이해 못했다 ㅋㅋㅋ) 그래도 한 5년 동안 머리가 자랐으니, 다시 도전해보고 싶어서 며칠 전부터 구글링을 엄청나게 했다. 아, 물론 리눅스 커널의 대략적인 작동 방식, 자료구조를 정리한 책은 많다. 그런데 그것도 중요하지만 직접 소스코드를 분석해보고 싶었다.
물론 5년 전이나 지금이나 진입 장벽은 높은 것 같다
아무튼 간에, 내가 느낀 리눅스 커널 입문의 어려운 점은 :
1. 우선 어디서부터 시작해야 할지 모른다. 내가 "프로세스 관리"에 관심이 있어서 소스를 찾아봤는데, 어디에 코드가 있는지도 잘 모르겠고 어찌어찌 찾아도 뭔 소린지 하나도 이해하지 못했다.
2. 운영체제 이론에 대한 이해가 부족하다 물론 아예 모르는 건 아닌데, 리눅스 커널 소스를 보면 뭘 공부해야 할지도 모른다.
이제 잡다한 이야기를 생략하기로 하고 내가 찾은 방법은 다음과 같다. (나도 아직 해보지는 않았다.)
- 리눅스의 초기 버전 (0.0.1) 소스코드를 분석한다. (1만 줄 정도라 어찌어찌 분석할 수 있다, 이해할 수 있다면)
- Lions Book (unix v6의 소스코드를 분석한 책)을 읽는다. (단, v6은 ㄹㅇ로 데니스 리치가 막 개발한 초기 버전이라 현재와 차이가 있다. (16비트 프로세서, 옛날 C언어 표준 등)
- MIT에서 xv6을 가르치는 책 (xv6은 v6을 모던한 형태(x86 프로세서에서 개발되고, ANSI C 표준을 지킴 - 위키백과)로 다시 개발한 것)
- 리눅스의 부팅 프로세스 분석하기 (코드로 알아보는 arm 리눅스 커널 2판)
일단 제일 만만한 게 3번, 2번이라 3번으로 공부하면서 2번을 참고하는 게 베스트인 것 같다. 초기 버전부터 공부하려는 이유는 간단한 운영체제 코드도 볼 줄 모르는데 지금의 리눅스는 커녕 십수년 전 리눅스도 이해하기가 어려움을 느꼈기 때문이다. 그리고 소스코드도 1만 줄 정도라서 완전 못 볼 정도도 아니다.
아, 그리고 알아두면 좋은 자료들 :
http://jake.dothome.co.kr/ - 리눅스 커널을 공부하면서 문서화한 한국 블로그
https://makelinux.github.io/kernel/map/ - 리눅스 소스 호출 과정 시각화(?)
https://elixir.bootlin.com/- 온라인으로 버전별 리눅스 소스 보기
-- 책들 --
글 쓰는 데에 참고한 자료들
https://kernelnewbies.org/CompleteNewbiesClickHere (종종 503 Bad Gate가 뜰 때가 있는데, 새로고침 하면 나아짐)
https://en.wikipedia.org/wiki/Lions%27_Commentary_on_UNIX_6th_Edition,_with_Source_Code
https://en.wikipedia.org/wiki/Xv6
'Kernel' 카테고리의 다른 글
[Linux Kernel] proc 파일시스템과 seq_file 인터페이스 (1) | 2021.04.18 |
---|---|
[LInux Kernel] 문자 디바이스 드라이버 작성 (5) | 2021.04.17 |
[Linux Kernel] 가상 파일시스템이란 (VFS, Virtual Filesystem Switch) (0) | 2021.04.13 |
[Linux Kernel] 리눅스 커널 모듈 작성 (0) | 2021.04.13 |
리눅스 커널에 커밋 해보자 (0) | 2021.03.14 |
댓글