사용자 모드와 커널 모드는 CPU가 허용하는 실행 권한 수준이 다릅니다. 사용자 모드는 애플리케이션의 직접적인 시스템 접근을 제한하고, 커널 모드는 운영체제가 자원과 하드웨어를 관리할 수 있는 권한을 제공합니다.
- 사용자 모드: 일반 애플리케이션이 실행되며, 특권 명령 실행이나 보호된 커널 메모리에 대한 직접 접근이 제한됩니다.
- 커널 모드: 스케줄링, 메모리 관리, 장치 제어 등 운영체제 작업을 수행하며 특권 명령을 실행할 수 있습니다.
애플리케이션은 파일 읽기 같은 작업을 시스템 콜로 요청합니다. CPU가 정해진 진입점을 통해 커널 모드로 전환하면 커널이 권한과 인자를 검사해 처리하고 사용자 모드로 돌아갑니다. 이 경계는 애플리케이션의 오류가 시스템 전체를 손상시키는 것을 막기 위해 필요합니다.
일반 함수 호출과 시스템 콜은 무엇이 다른가요?
일반 함수 호출은 보통 같은 권한 수준에서 코드 실행 위치만 바꿉니다. 시스템 콜은 커널 서비스를 요청하기 위해 권한 경계를 넘으며, 검증과 모드 전환 등의 비용이 발생합니다.
커널 모드로 들어가는 계기는 시스템 콜뿐인가요?
아닙니다. 타이머·장치 인터럽트나 Page Fault 같은 예외도 커널 핸들러로 제어를 넘길 수 있습니다. 이미 커널 모드에서 발생했다면 사용자 모드에서 커널 모드로의 전환은 추가로 일어나지 않습니다.
root나 관리자 권한으로 실행하면 커널 모드에서 동작하나요?
아닙니다. 계정의 권한과 CPU 실행 모드는 다른 개념입니다. 관리자 프로세스도 일반 코드는 사용자 모드에서 실행하며, 커널 서비스를 이용할 때 시스템 콜 경로를 거칩니다.
사용자 모드와 커널 모드의 경계가 없다면 어떤 문제가 발생하나요?
모든 프로그램이 특권 명령과 커널·장치 메모리에 직접 접근할 수 있어, 한 애플리케이션의 버그나 악성 코드가 다른 프로세스와 운영체제의 데이터를 손상시키거나 시스템 전체를 중단시킬 수 있습니다. 운영체제도 시스템 콜의 진입점에서 권한과 인자를 검사하며 자원 사용을 중재할 수 없으므로 보호, 격리, 접근 제어를 신뢰할 수 없게 됩니다.
System Call과 Interrupt의 차이는 무엇인가요?
System Call은 실행 중인 프로그램이 커널 서비스를 요청하기 위해 의도적으로 발생시키는 동기적인 제어 전환입니다. Interrupt는 타이머나 I/O 장치 같은 외부 하드웨어 이벤트가 현재 실행 흐름과 독립적으로 발생시키는 비동기적인 제어 전환입니다. 둘 다 커널 핸들러를 실행할 수 있지만 발생 주체와 현재 명령과의 시간적 관계가 다릅니다.
Exception과 Interrupt는 같은 것인가요?
둘 다 CPU가 현재 흐름을 멈추고 핸들러로 제어를 넘기는 사건이지만 같지는 않습니다. Exception은 0으로 나누기, 잘못된 명령, Page Fault처럼 현재 실행 중인 명령 때문에 동기적으로 발생하고, Interrupt는 장치 완료나 타이머처럼 외부 사건으로 비동기적으로 발생합니다. 문헌이나 CPU 아키텍처에 따라 Trap을 Exception의 한 종류로 부르는 등 세부 용어는 다를 수 있습니다.