관리 메뉴

일서방

커널 소스 본문

IT공부/리눅스커널이야기

커널 소스

0asis 2025. 9. 30. 09:45

 

리눅스 커널 버젼 2.6 이전까지는 /usr/src/ 하위 디렉토리에 리눅스 커널소스가 존재했었으나 최근에는 /usr/src/kernels 디렉토리에 존재한다.

 

Kernel 디렉토리

테스크의 생성과 소멸 , 프로그램의 실행 , 스케쥴링 , 시그널 처리 등의 기능이 이 디렉토리에 구현되어있다.

Context switch과 같은 하드웨어 종속적인 테스크 관리 부분은 arch/$(ARCH)/kernel 디렉토리에 구현되어있다.

 

arch 디렉토리

리눅스 커널 기능중 하드웨어 종속적인 부분들이 구현된 디렉토리이다. 이 디렉토리는 CPU타입에 따라 하위디렉토리로 다시 구분된다. 대표적으로 인텔의 i386, ARM(Advanced RISC Machine)의 ARM계열 , 모토로라의 68시리즈 , SUN의 Sparc 등이 있다.

/arch/x86/boot 디렉토리에는 시스템의 부팅 시 사용하는 부트스트랩 코드가 구현되어 있다. arch/x86/kernel 에는 태스크 관리자 중에서 문맥교환이나 쓰레드 관리같은 기능 ,  arch/x86/mm에는 메모리 관리자 중에서 페이지 부재 결함 처리 같은 기능등의 하드웨어 종속적인 부분이 구현되어 있다. arch/x86/lib에는 커널이 사용하는 라이브러리 함수가 구현되어 있으며, arch/x86/math-emu에는 FPU(Floating Poing Unit)에 대한 에뮬레이터가 구현되어있다.

 

fs디렉토리

리눅스에서 지원하는 다양한 파일시스템과 open() , read() , write()등의 시스템 호출이 구현된 디렉토리이다. 현재 리눅스에는 약 60가지 정도의 파일시스템이 구현되어 있으며 계속 새로운 파일시스템이 개발중이다. 각 파일시스템은 이 디렉토리의 하부 디렉토리에 들어있는데 , 대표적인 파일시스템으로는 ext2 , ext3 , ext4 , nfs , fat, proc , sysfs, devfs, isofs, ntfs, reiserfs , f2fs , xfs등이 있다. 이ㅓ럼 다양한 파일시스템을 사용자가 일괄된 인터페이스로 접근할 수 있도록 하기 위해 리군스가 도입한 가상 파일시스템도 이 디렉토리에 존재한다.

 

mm디렉토리

메모리 관리자가 구현된 디렉토리이다. 물리메모리관리 , 가상 메모리 관리 , 태스크마다 할당되는 메모리 객체 관리등의 기능이 구현되어있다.

 

driver디렉토리

리눅스에서 지원하는 디바이스 드라이버가 구현된 디렉토리이다. 디바이스 드라이버란 디스크 , 터미널 , 네트워크 카드 중 주변장치를 추상화시키고 관리하는 커널 구성요소이다. 리눅스를 처음 설계하던 당시에는 주변장치의 종류가 지금처럼 많지는 않았고, 따라서 디바이스 드라이버를 3가지 종류로 구분하였다. 파일시스템을 통해 접근되는 블록 디바이스 드라이버, 사용자 수준 응용프로그램이 장치파일을 통해 직접 접근하는 문자 디바이스 드라이버 , 그리고 TCP/IP를 통해 접근되는 네트워크 디바이스 드라이버이다.

 

net디렉토리

이 디렉토리는 리눅스가 지원하는 통신 프로토콜이 구현된 디렉토리이다. 리눅스는 대표적인 프로토콜인 TCP/IP뿐만 아니라 UNIX 도메인 통신프로토콜 , 802.11 , IPX , RPC , AppleTaklk , bluetooth 등 다양한 통신 프로토콜을 구현해놓았다.

한편 다양한 통신 프로토콜의 추상화 계층이며 사용자 인터페이스를 제공하는 소켓 역시 이 디렉토리에 구현되어있다.

 

ipc디렉토리

리눅스 커널이 지원하는 프로세스간 통신기능이 구현된 디렉토리이다. 대표적인 프로세스간 통신에는 파이프, 시그널,

SYS V IPC(Inter Process Communication) , 소켓 등이 있는데, 이 디렉토리에는 message passing , shared memory, sema-phore가 구현되어 있다.

 

init디렉토리

커널 초기화 부분,  즉 커널의 메인시작 함수가 구현된 디렉토리이다. 하드웨어 종속적인 초기화가 arch/$(ARCH)/kernel 디렉토리 하위에 있는 head.S 와 mics.c에서 이뤄지고 나면 , 이 디렉토리에 구현되어있는 start_kernel()이라는 C함수로 제어가 넘어온다. 이 함수가 커널 전역적인 초기화를 수행하게 된다.

 

include디렉토리

리눅스 커널이 사용하는 헤더파일들이 구현된 디렉토리이다. 헤더 파일 중에서 하드웨어 독립적인 부분은 include/linux 에 정의되어 있으며, 하드웨어 종속적인 부분은 include/asm-$(ARCH) 디렉토리에 정의되어 있다.

 

 

'IT공부 > 리눅스커널이야기' 카테고리의 다른 글

Node , ZONE , pageFrame  (0) 2025.12.19
테스크(TASK)  (0) 2025.09.30
혼잡제어 , Congestion window(cwnd)  (0) 2025.09.22
TCP 재전송과 타임아웃  (0) 2025.09.22
dirty Page  (0) 2025.08.25