운영체제는 시스템의 안정성과 보안성을 유지하기 위해 특권 수준(privilege level) 을 나눠둔다. CPU는 크게 두 가지 모드로 구분하여 명령 실행 권한을 조절한다:
이 두 모드를 나누는 이유는, 사용자 프로그램이 시스템 자원에 함부로 접근하지 못하게 막기 위함이다.
모든 명령을 사용자에게 허용하면, 잘못된 프로그램 하나가 시스템 전체를 다운시킬 수 있다. 그래서 CPU는 특권 명령을 구분해서, 커널에서만 실행 가능하게 만든다.
| 구분 | 특징 |
|---|---|
| User Mode | 일반 애플리케이션이 동작, 시스템 자원 접근 제한 |
| Kernel Mode | 운영체제가 동작, 모든 자원 및 명령 접근 가능 |
→ 일반 애플리케이션이 시스템 자원에 접근하고 싶다면 커널에 요청(System Call) 해야 한다.

예를 들어
printf()함수도 내부적으로는 시스템 콜을 통해 커널에 요청하여 stdout에 출력된다.
커널 모드에 진입하는 경우:
커널은 잘못된 동작을 하면 시스템 전체가 크래시 날 수 있으므로, 매우 안정적으로 작성되어야 한다.
사용자 프로그램
|
| 시스템 콜 호출 (e.g. write(), open())
V
커널 진입 (Kernel Mode)
|
| 자원 접근, 처리 완료
V
커널 종료 → 사용자 모드 복귀
CPU는 인터럽트 벡터나 시스템 콜 인터럽트를 통해 모드를 전환한다.
대표적인 명령어: int 0x80, syscall (x86 계열 기준)
System Call
read(), write(), open(), fork()Interrupt
Trap
| 항목 | User Mode | Kernel Mode |
|---|---|---|
| 실행 주체 | 사용자 프로그램 | 운영체제 커널 |
| 권한 | 제한적 | 전체 권한 보유 |
| 메모리 접근 | 제한된 영역 | 전체 주소 접근 가능 |
| 특권 명령 실행 | 불가 | 가능 |
| 시스템 콜 필요 여부 | 필요 | 불필요 (직접 실행) |