Linux v 0.01 의 내부 살펴보기 ...

페이지 정보

작성자 커피열잔
작성일

본문



- 리눅스 커널은 3600만 라인짜리 거대한 오픈소스지만, 첫번째 버전은 10239 라인 이었음 ( 주석 / 빈줄 제외하면 8670 )  

- Linux v0.01은 그 간결함으로 인해 Unix 스타일 OS커널의 내부를 배우기 위한 좋은 출발점   




  • 리눅스 커널은 3600만 라인짜리 거대한 오픈소스지만, 첫번째 버전은 10239 라인 이었음(주석/빈줄 제외하면 8670)
  • Linux v0.01은 그 간결함으로 인해 Unix 스타일 OS커널의 내부를 배우기 위한 좋은 출발점
  • v0.01은 66개의 시스템 콜만 가지고 있음
  • 파일/디렉토리 생성,삭제,쓰기
  • chmod, chown, pipe, fork, execve
  • Socket 컨셉이 도입되지 않아서 네트워크 지원불가
  • mount는 아직 구현되지 않음
  • Intel 386 아키텍처에 대해서 하드코딩 되어 있음(MINIX 저자가 이를 비판함)
  • strcpy 가 i386 명령어를 사용한 어셈블리로 코딩
  • PC/AT 기기들만 지원
  • CMOS, PIT(Programmable Interval Timer), ATA(PIO), VGA(텍스트 모드), Intel 8042 PS2 키보드(어셈블리)
  • 아직 drivers 폴더도 없고, 서브시스템에 하드코딩 되어있음
  • Linus가 원래 붙였던 이름인 "FREAX" Kernel 이 적힌 주석이 Makefile에 있음
  • 파일시스템은 MINIX 만 지원(ext 는 MINIX에서 영감을 받았음)
  • 스케줄러 코드에 "이 부분은 모든 환경에서 동작하는 꽤 좋은 코드라 변경할 이유가 없을 것!" 이라고 주석이 달린게 있음
  • 물론 현재는 다양한 개선 및 알고리듬이 도입되면서 수정되었으므로 이 예언은 틀렸음
  • 커널 패닉 구현부는 단 5줄 : "커널 패닉: 원인" 을 출력하고 for(;;)로 시스템을 중단
  • 커널 공간에서 fork(2)를 호출하는 부분이 있음
  • 그렇게 보이지만 실제로는 그 앞에 move_to_user_mode() 가 트릭
  • Linus는 8Mb 이상의 램을 가진 기기가 없었음 (자신은 없어서 테스트 해보지 못했으니, 가진 사람이 잘 해보라고..)
  • 현대의 툴체인으로는 컴파일 하기 어려움
  • GCC가 하위호환이 되긴 하지만 충분하지 않음
  • Linus는 -mstring-insns 라는 옵션이 있는 자신만의 GCC가 있었음(아마도 x86 스트링 명령어를 지원하는 옵션인듯)



  • 현대 Linux의 복잡성에 대한 논의, Linux v0.01의 코드 줄 수의 4500배에 달하는 복잡성이 정말 필요한지에 대한 의문 제기.
  • 독자들이 Linux의 각 주요 소프트웨어 모듈에 사용된 코드 줄 수와 기능의 그래픽 분석을 보고 싶어함.
  • Linux, SQLite, vim과 같은 클래식 코드베이스를 읽는 것이 제안됨, 이들은 대부분 한 사람에 의해 작성되었으며 매우 성공적이거나 영향력이 있었음.
  • Linux의 'counter' 작동 방식에 대한 설명, 작업이 실행 가능하지 않은 경우 2 * 우선 순위까지 지수적으로 감소한다는 주장.
  • Redhat이 IPO 시 주주들에게 0.01 소스 코드가 담긴 포스터를 보냈다는 보고, 독자들이 가끔 읽는 것을 흥미롭게 생각함.
  • GCC (GNU Compiler Collection)의 후진 호환성에 대한 논의, GCC가 오랫동안 자신의 이전 버전을 컴파일하지 못했다는 댓글.
  • 독자들이 더 깊게 이해하고 읽기 위해 주석이 많이 달린 Linux Kernel Source Code로 안내됨.
  • Linux와 같은 큰 성공 프로젝트의 첫 작동 버전을 읽는 것이 이해하는 데 좋은 방법이라는 제안, 보통 많은 추상화/일반화 없이 가장 중요한 핵심 기능만 포함하고 있음.
  • 일부 독자들이 소스 코드에서 탭 대신 공백이 사용된 것을 발견, Torvalds가 나중에 탭 지지자가 되었을 수도 있다는 추측.
  • 코드에 있는 주석의 깊이와 빈도가 인정받아, 독자들에게 접근성을 제공하며, 누군가가 컴파일에 성공했는지에 대한 궁금증이 있음.






Exploring the internals of Linux v0.01

Linux kernel is often mentioned as a overwhelmingly large open source software. As of this writing, the latest version is v6.5-rc5, which consists of 36M lines of code. Needless to say, Linux is a fruit of hard work of many contributors over the decades.

However, the first version of Linux, v0.01 was pretty small. It consisted of only 10,239 lines of code. Excluding comments and blank lines, it was only 8,670 lines. It's small enough to understand and is a good starting point to learn about the internals of UNIX-like operating system kernels.


...  생략 ...  




Read Yourself!

I hope you enjoyed reading the source code of Linux v0.01 as much as I did. If you're interested in v0.01, download the tarball of v0.01 from kernel.org. Reading the code is not so hard especially if you've read xv6 before. Linux v0.01 is minimalistic but is very well written.


( 구 글  .. 번 역 ) 





참고 및 출처 : 

https://news.hada.io/topic?id=10320

https://seiya.me/blog/reading-linux-v0.01




관련자료

  • 등록된 댓글이 없습니다.