1.1. 리눅스 일반

리눅스의 배경이나 리눅스가 왜 좋은지 그리고 리눅스 소스 디렉토리의 구조는 어떻게 생겼는지 등을 기술한다.

1.1.1. 왜 리눅스인가?

리눅스가 왜 많이 사용되고 각광 받는가? 이에 대한 대답은 수 많이 존재할 것이지만 조금 간추려보면 대충 아래와 같은 몇몇 답으로 축약할 수 있을 것이다.

공짜

아마 이말 이상의 좋은 매력은 없을 것이다. 리눅스가 갖는 가장 좋은 매력 중 하나가 바로 공짜가 아닐까 생각해본다. 만약 리눅스가 유료였다면 현재 만큼 성장할 수 있었을까? 절대로 그렇지 않다고 생각한다. 게다가 리눅스는 GNU의 정신을 따르기 때문에 Copyleft란 말을 쓴다(copyright의 반대). 누구든 어떤 식으로든 사용 가능한 셈이다.

공짜로 성공하거나 유명해 진 것은 많지만 컴퓨터 분야에서 가장 유명한 것이 바로 리눅스 일 것이다. 이런 리눅의 배경은 다음과 같은 몇줄로 압축할 수 있다.

  • 리누스 토발즈가 개발, Copyleft

  • 1991년 0.01이 첫 발표됨

  • 레드햇, 데비안, 슬랙왜어 등의 배포본이 있음.

  • 많은 회사 들에 의해 지원됨

특징

  • 멀티태스킹

  • 멀티유저

  • 멀티프로세서

  • 많은 아키텍쳐 지원

  • 페이징

  • 하드 디스크 용 다이나믹 캐시

  • 공유 라이브러리

  • POSIX 1003.1 지원

  • 여러 형태의 실행 파일 지원

  • 진짜 386 프로텍티드 모드

  • 수치프로세서 에뮬레이션

  • 여러 나라 별 키보드, 언어 지원

  • 여러 파일 시스템 지원

  • TCP/IP, SLIP, PPP

  • BSD 소켓

  • System V IPC

  • 버추얼 콘솔

단점

  • 모놀리딕 커널-마이크로 커널에 비해 많은 부분이 커널레벨에서 구현된다.

  • 초보에겐 어렵다-시스템 프로그래머를 위한 것이다

  • 잘 짜여진 구조가 아니다(성능에 초점이 맞춰져 있다)

매력

  • 많은 시스템에 의해 성능이 검증되어 있다

  • 우리 스스로가 커널을 조정하거나 수정할 수 있다

1.1.2. 리눅스 소스 디렉토리 구조

리눅스 커널 소스는 압축된 것이 약 20MB 이상이다. 그러므로 수 많은 디렉토리와 수 많은 파일을 포함하고 있다. 필자가 완료한 몇몇 아주 큰 프로젝트에서도 전체 소스 코드를 압축해봤자 10MB를 넘기기는 힘들었다. 그러나 양으로도 리눅스 커널은 이미 함부로 대하기 힘든 상대임을 나타내는데, 여기서는 리눅스 커널 소스의 압축을 풀면 생기는 디렉토리에 대해 알아보자.

한 가지 주의 해야할 점은 리눅스 커널이 지금 이 순간에도 계속 변하고 있으므로 아래의 내용이 언제 바뀌어 틀리게될지 모른다. 그러므로 항상 최신 버전을 소스 코드를 참조하기 바란다. 아래의 내용은 2.4.16 ~ 2.4.18의 것을 참조해 설명한 것이다.

모든 코드는 /usr/src/linux에서 시작한다고 가정한다. 이 글에선 이 위치를 $(TOPDIR)이라 표현한다.

Documents

커널에 관계된 문서들이 들어 있다. 커널을 분석하거나 할 때 필요한 정보는 여기를 먼저 보고나서 다른 곳을 찾는 것이 빠른 정보를 얻는 길이다.

kernel

커널의 핵심 코드,스스템콜,스케쥴러,시그널 핸들링

ipc

전통적 프로세스간의 통신,세마포어,공유메모리,메세지큐

lib

커널 라이브러리 함수(printk와 같은 것 들)

mm

버추얼 메모리 관리,페이징, 커널 메모리 관리

scripts

코드 사이의 의존성을 만들어주는 등의 스크립트나 실행 파일이 모여있다.

arch

아키텍쳐에 관계된 코드가 들어있다.

  • alpha

  • arm

  • m68k

  • mips

  • ppc

  • sparc

  • i386

    • boot

      부트스프랩코드,메모리/디바이스 설정

    • kernel

      커널 시작점,컨텍스트 스위칭

    • lib

    • math-emu

    • mm

      각 아키텍쳐에 관계된 메모리 코드

  • ...

fs

버추얼 파일 시스템 인터페이스,여러 파일시스템 지원

  • coda

  • ext2

  • hpfs

  • msdos

  • nfs

  • ntfs

  • ufs

  • ...

init

커널이 실행되기 위한 모든 코드,프로세스 0,프로세스 생성...

include

커널에 관계된 헤더 파일,asm-*은 아키텍쳐 관련,linux는 리눅스 커널 관련

  • asm-alpha

  • ...

  • asm-i386

  • linux

  • net

  • scsi

  • video

  • ...

net

많은 종류의 네트웍 프로토콜 지원,소켓 지원

  • 802

  • appletalk

  • decnet

  • ethernet

  • ipv6

  • unix

  • sunrpc

  • x25

  • ...

driver

하드웨어에 대한 드라이버

  • block

    하드디스크 같은 블럭 디바이스

  • cdrom

  • char

    시리얼 포트,모뎀,tty 같은 문자 디바이스

  • net

    네트웍 카드

  • pci

    PCI 버스 컨드롤

  • pnp

  • sbus

  • scsi

    SCSI 카드

  • sound

    사운드 카드

  • viceo

  • ...