커널
운영체제의 핵심 구성 요소로, 하드웨어와 소프트웨어 사이에서 자원 관리와 추상화를 담당하는 프로그램입니다.
커널의 역할
| 역할 | 설명 |
| 프로세스 관리 | 프로세스 생성·종료·스케줄링, 문맥 교환 |
| 메모리 관리 | 가상 메모리, 페이징, 메모리 할당·해제 |
| 파일 시스템 관리 | 파일 읽기·쓰기, 디렉토리 구조, 권한 관리 |
| 장치 관리 | 디바이스 드라이버를 통한 하드웨어 제어 |
| 시스템 콜 처리 | 사용자 프로세스의 커널 기능 요청 처리 |
| 보안·보호 | 프로세스 간 메모리 격리, 접근 권한 제어 |
커널의 위치
┌──────────────────────────┐
│ 응용 프로그램 │ ← 사용자 모드
│ (브라우저, IDE, 게임) │
├──────── 시스템 콜 ─────────┤
│ 커널 │ ← 커널 모드
│ (프로세스·메모리·파일·장치) │
├───────────────────────────┤
│ 하드웨어 │
│ (CPU, RAM, Disk, NIC) │
└──────────────────────────┘
커널 구조 유형
| 유형 | 특징 | 장점 | 단점 | 예시 |
| 모놀리식 커널 | 모든 서비스가 하나의 커널 공간에서 실행 | 빠른 성능 (함수 호출) | 하나의 버그가 전체 시스템에 영향 | Linux, Unix |
| 마이크로 커널 | 최소 기능만 커널에, 나머지는 사용자 공간 서버로 분리 | 안정성·모듈성 높음 | 잦은 IPC로 성능 저하 | Minix, QNX |
| 하이브리드 커널 | 모놀리식 + 마이크로 커널 절충 | 성능과 안정성 균형 | 구조가 복잡 | Windows NT, macOS(XNU) |
[모놀리식 커널] [마이크로 커널]
┌──────────────┐ ┌──────────────────────┐
│ 사용자 공간 │ │ 파일서버 디바이스서버 │ ← 사용자 공간
├──────────────┤ ├──────────────────────┤
│ 파일 시스템 │ │ IPC, 스케줄링 │ ← 커널 공간
│ 디바이스 드라이버│ │ 메모리 관리 │
│ 메모리 관리 │ └──────────────────────┘
│ 스케줄링 │
└──────────────┘
커널은 커널 모드에서 동작하며, 일반 프로그램은 사용자 모드에서 실행됩니다. 사용자 프로그램이 커널 기능을 쓰려면 시스템 콜을 통해 커널 모드로 전환해야 합니다.
// Java에서 파일을 열면 JVM 내부적으로 커널에 시스템 콜 요청
FileInputStream fis = new FileInputStream("/tmp/data.txt");
// Java 코드(사용자 모드) → JVM → 시스템 콜 → 커널(커널 모드)이 디스크에서 데이터 읽기
int data = fis.read();
대표적인 커널 비교
| 항목 | Linux | Windows NT | macOS (XNU) |
| 구조 | 모놀리식 (모듈 지원) | 하이브리드 | 하이브리드 (Mach + BSD) |
| 오픈소스 | O | X | 부분 공개 |
| 모듈 적재 | 런타임 모듈 로딩 가능 | 드라이버 로딩 | kext / DriverKit |