커널 모드

운영체제 커널이 실행될 때 사용하는 CPU의 최상위 권한 모드로, 모든 하드웨어 자원과 명령어에 접근할 수 있습니다.

핵심 특징

항목내용
모드 비트0
실행 주체OS 커널, 디바이스 드라이버
권한특권 명령 포함 모든 명령어 실행 가능
메모리 접근전체 물리·가상 메모리 접근 가능
하드웨어 접근직접 제어 가능
오류 발생 시커널 패닉 → 시스템 전체 크래시

커널 모드에서만 가능한 작업 (특권 명령)

작업설명
I/O 장치 제어in, out 명령으로 디바이스 직접 접근
인터럽트 제어cli(비활성화), sti(활성화)
메모리 관리 레지스터 수정페이지 테이블 베이스 레지스터(CR3) 변경
모드 비트 변경사용자 모드 ↔ 커널 모드 전환
프로세스 스케줄링컨텍스트 스위칭, 타이머 설정
다른 프로세스 메모리 접근물리 메모리 전체에 접근 가능

커널 모드 진입 경로

사용자 모드 (모드 비트: 1)
    │
    ├── 시스템 콜 ──→ 프로세스가 명시적으로 커널 기능 요청 (read, fork 등)
    │
    ├── 인터럽트 ───→ 하드웨어 이벤트 발생 (키보드, 타이머, 디스크 완료)
    │
    └── 예외 ──────→ 프로그램 오류 (0으로 나누기, 페이지 폴트)
    │
    ▼
커널 모드 (모드 비트: 0)
    │
    ▼  처리 완료 후 iret 명령
    │
사용자 모드 복귀

커널 모드에서 오류가 발생하면?

사용자 모드의 오류는 해당 프로세스만 종료되지만, 커널 모드의 오류는 시스템 전체에 영향을 줍니다.

OS커널 모드 오류 현상
LinuxKernel Panic — 시스템 정지
WindowsBSOD (Blue Screen of Death)
macOSKernel 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() → 커널이 프로세스 생성

CSLOG에서 보기