안정성과 보안을 확보하기 위해 CPU가 실행중인 코드의 권한 수준을 구분하는 것
CPU에서의 실행 모드를 의미
CPU가 현재 어떤 명령어르 어떤 권한 레벨로 실행하고 있는가를 나타냄
CPU 내부에는 현재 실행 모드를 나타내는 플래그 / 레지스터가 있는데 이를 ‘모드 비트’라 부름
모드 비트는 CPU가 명령어를 실행할 때마다 해당 명령어가 특권 명령어 (Privileged Instruction)인지 아닌지 확인하는 기준이 됨
특권 명령어(예: I/O 장치 직접 접근, 메모리 보호 기능 변경 등)는 오직 모드 비트가 '0'인 커널 모드에서만 실행이 허용됨
CPU의 실행 권한을 두 가지 레벨로 나누어 관리하는 것
| 이유 | 설명 |
|---|---|
| 보안 | 사용자 프로그램이 시스템 전체를 망가뜨리는 것을 방지 |
| 안정성 | 잘못된 명령어 실행으로 시스템 크래시 방지 |
| 자원 보호 | 메모리, 디스크, I/O 자원에 대한 무분별한 접근 차단 |
| 운영체제 보호 | 커널 영역에 있는 데이터와 코드 보호 |
| 항목 | 사용자 모드 | 커널 모드 |
|---|---|---|
| 실행 대상 | 사용자 애플리케이션 | 운영체제 커널, 드라이버 |
| 권한 | 제한됨 | 전체 자원 접근 가능 |
| 자원 접근 | 간접적 (시스템 콜 통해서) | 직접 접근 가능 |
| 모드 전환 | 시스템 콜, 인터럽트, 예외 | 작업 완료 후 복귀 |
| 목적 | 보호 및 안정성 확보 | 시스템 자원 관리 |
| 비유 | 놀이공원 공개 구역 | 놀이공원 직원용 제한 구역 |
[실행 대상]
일반 응용 프로그램
e.g. 웹 브라우저, 게임, 텍스트 편집기…
[제한 대상]
[목적]
사용자 프로그램의 오작동이나 악성 행위로부터 시스템을 보호하기 위함
e.g. 텍스트 에디터가 컴퓨터 전원을 끌 수 없도록 설계됨
[실행대상]
운영체제 커널, 디바이스 드라이버, 시스템 콜 처리 코드 등
[권한]
: 사용자 모드 ↔ 커널 모드
운영체제는 CPU 모드를 활용하여 시스템을 관리하고 보호함
운영체제는 소프트웨어, CPU는 하드웨어로 모드 비트를 직접 조작하는 것은 하드웨어의 기능
| 상황 | 명령을 내리는 주체 (소프트웨어) | 모드 비트를 실제로 변경하는 주체 (하드웨어) | 설명 |
|---|---|---|---|
| 커널 모드로 전환 (User → Kernel) | 사용자 프로그램 (시스템 콜 호출, 예외 발생 등) | CPU 하드웨어 | 시스템의 안정성을 위해, CPU가 trap이나 예외 발생 시 자동으로 커널 모드 진입 |
| 사용자 모드로 복귀 (Kernel → User) | 운영체제 커널 (특권 명령어 실행) | CPU 하드웨어 | 커널이 사용자 모드 복귀를 명령하면, CPU가 특권 명령어에 의해 모드 비트를 변경 |
사용자 프로그램이 시스템 콜을 호출하거나, 하드웨어 인터럽트가 발생하면, CPU에게 이벤트 발생함
이 이벤트에 반응하여, CPU는 자신의 내부 하드웨어 로직에 따라 모드 비트를 0으로 설정하고 OS 커널의 특정 주소(인터럽트 벡터)로 실행흐름을 넘김
OS의 통제권을 보장하기 위한 CPU 자체의 설계로 볼 수 있음
시스템 콜 (System Call) 호출
사용자 프로그램이 OS 서비스(I/O, 메모리 등)를 요청
- 전환 흐름: 사용자 모드 → 시스템 콜 트랩 → 커널 모드 (서비스 실행) → 사용자 모드 복귀
인터럽트 (Interrupt) 발생
하드웨어 장치의 이벤트(키보드 입력, 타이머 만료 등) 발생
예외 (Exception)에 의한 전환
프로그램 실행 중 오류 (0으로 나누기, 잘못된 메모리 접근 등) 발생
[전환 과정]
OS 커널은 최고 권한을 가지므로, 사용자 프로그램으로 돌아갈 준비가 되면 ;모드 비트를 1로 설정하라’는 특권 명령어를 CPU에 전달함
이 명령을 CPU가 실행하면서 모드 비트를 변경하고 사용자 프로그램의 다음 명령어를 인출함
모드를 바꾸는 행위 자체는 CPU 하드웨어의 기능이지만, 모드를 바꾸라고 지시하고 통제하는 주체는 OS 소프트웨어임
[전환 조건]
커널이 요청한 작업을 완료하고 사용자 프로그램으로 복귀할 때
[전환 과정]