커널 모드
운영체제 커널이 실행될 때 사용하는 CPU의 최상위 권한 모드로, 모든 하드웨어 자원과 명령어에 접근할 수 있습니다.
핵심 특징
| 항목 | 내용 |
| 모드 비트 | 0 |
| 실행 주체 | OS 커널, 디바이스 드라이버 |
| 권한 | 특권 명령 포함 모든 명령어 실행 가능 |
| 메모리 접근 | 전체 물리·가상 메모리 접근 가능 |
| 하드웨어 접근 | 직접 제어 가능 |
| 오류 발생 시 | 커널 패닉 → 시스템 전체 크래시 |
커널 모드에서만 가능한 작업 (특권 명령)
| 작업 | 설명 |
| I/O 장치 제어 | in, out 명령으로 디바이스 직접 접근 |
| 인터럽트 제어 | cli(비활성화), sti(활성화) |
| 메모리 관리 레지스터 수정 | 페이지 테이블 베이스 레지스터(CR3) 변경 |
| 모드 비트 변경 | 사용자 모드 ↔ 커널 모드 전환 |
| 프로세스 스케줄링 | 컨텍스트 스위칭, 타이머 설정 |
| 다른 프로세스 메모리 접근 | 물리 메모리 전체에 접근 가능 |
커널 모드 진입 경로
사용자 모드 (모드 비트: 1)
│
├── 시스템 콜 ──→ 프로세스가 명시적으로 커널 기능 요청 (read, fork 등)
│
├── 인터럽트 ───→ 하드웨어 이벤트 발생 (키보드, 타이머, 디스크 완료)
│
└── 예외 ──────→ 프로그램 오류 (0으로 나누기, 페이지 폴트)
│
▼
커널 모드 (모드 비트: 0)
│
▼ 처리 완료 후 iret 명령
│
사용자 모드 복귀
커널 모드에서 오류가 발생하면?
사용자 모드의 오류는 해당 프로세스만 종료되지만, 커널 모드의 오류는 시스템 전체에 영향을 줍니다.
| OS | 커널 모드 오류 현상 |
| Linux | Kernel Panic — 시스템 정지 |
| Windows | BSOD (Blue Screen of Death) |
| macOS | Kernel Panic — 재시작 요구 |
사용자 모드 vs 커널 모드 요약
┌──────────────────────────────────────┐
│ 사용자 모드 (제한된 권한) │
│ - 응용 프로그램, JVM │
│ - 자기 메모리만 접근 │
│ - 특권 명령 실행 불가 │
├──────────── 시스템 콜 ────────────────┤
│ 커널 모드 (최상위 권한) │
│ - OS 커널, 드라이버 │
│ - 전체 메모리·하드웨어 접근 │
│ - 모든 명령어 실행 가능 │
└──────────────────────────────────────┘
Java에서의 커널 모드 전환 예시
// 사용자 모드: 일반 연산
int result = 10 * 20; // 커널 모드 전환 없음
// 커널 모드 전환 발생 사례
System.out.println("hello"); // write() → 커널이 콘솔 장치에 출력
new FileInputStream("a.txt"); // open() → 커널이 파일 시스템 접근
new Socket("host", 80); // socket()+connect() → 커널이 NIC 제어
Runtime.getRuntime().exec("ls");// fork()+execve() → 커널이 프로세스 생성