-
커널은 시스템의 기본적인 서비스를 제공하고, HW를 관리하며, 리소스를 분배하는 핵심 SW를 의미한다.
-
커널의 주 구성요소
- 인터럽트 핸들러 (ISR, Interrupt Service handler Routain)
- 프로세스 스케줄러 (Scheduler)
- 메모리 관리 시스템 (MM, Memory Management)
- 네트워크 및 IPC 서비스
-
일반적으로 사용자는 시스템의 ‘유저 공간’에서 사용자 애플리케이션을 수행하며, 커널 기능이 필요할 때 시스템콜 또는 인터럽트를 호출해 ‘커널 공간’에 있는 커널 애플리케이션을 요청한다.
UNIX와 다르게 LINUX는..
- 커널 모듈 동적 로드 기능을 제공한다. (Monolothic kernel이지만 동시에 micro kernel 성격도 가짐)
- SMP(symmetric multiprocessing)를 지원한다. (최신 상용 UNIX도 지원한다)
- 커널도 선점형 스케줄러로 동작한다.
- 프로세스와 스레드를 구분하지 않는다.
- 디바이스 파일시스템(sysfs) 등을 지원해 객체지향적 장치 모델을 지원한다.
커널 소스 트리는 여러 개의 디렉토리로 구성되는데, 최상단의 주요 디렉토리에 대한 설명은 다음과 같다.
arch
: 특정 아키텍처(i.e. ARM, PowerPC, x86 등)에 대한 소스코드block
: 블록 I/O 관련 기능에 대한 소스코드crypto
: 암호화 관련 기능에 대한 소스코드Documentation
: 커널 소스와 관련된 문서 모음drivers
: 장치 드라이버 관련 소스코드firmwares
: 특정 장치 드라이버를 사용할 때 필요한 펌웨어의 모음fs
: 파일시스템 관련 소스코드include
: 커널의 헤더 파일 모음init
: 커널 초기화 관련 소스코드ipc
: 프로세스 간 통신(IPC) 관련 소스코드kernel
: 스케줄러와 같은 핵심 커널 시스템 관련 소스코드lib
: 유틸리티 모음mm
: 메모리 관리 시스템 및 가상 메모리 관련 소스코드net
: 네트워크 관련 소스코드samples
: 예제 및 데모 코드 모음scripts
: 커널 빌드를 위한 스크립트 모음security
: 보안 기능 관련 소스코드sound
: 사운드 시스템 기능 관련 소스코드usr
: 초기 사용자 공간 소스코드tools
: 리눅스 커널 개발에 유용한 도구 모음virt
: 가상과 기반 구조 관련 소스코드
- 커널은 속도 및 크기를 이유로 표준 C 라이브러리(libc) 대신 GNU C(glibc)를 이용한다.
- 커널 공간에는 유저 공간과 같은 메모리 보호 기능이 없다.
- 커널은 부동소수점 연산을 쉽게 수행할 수 없다.
- 커널은 프로세스당 고정된 작은 크기의 스택을 사용한다.
- 커널은 비동기식 선점형 인터럽트를 지원하며, SMP를 지원하므로 동기화 및 동시성(concurrency) 문제가 매우 중요하다.
참고