
만약 사용자와 커널 모드의 구분이 없다면 간단한 계산기 프로그램의 버그가 컴퓨터의 모든 메모리를 초기화하거나 하드디스크를 통째로 포맷할 수도 있다. 어떻게 해야 그러한 결과가 나올까?
위험한 명령어의 무방비 노출
CPU 명령어 중에는 시스템의 근간을 건드리는 아주 위험한 명령어들이 있다. 예를 들어 하드디스크에 데이터를 직접 쓰거나, 인터럽트를 끄거나 CPU를 멈추는 명령어들이 있다.
메모리의 경계선이 사라짐
운영체제는 커널 모드에서만 접근 가능한 커널 메모리 영역을 따로 관리한다. 여기에는 하드웨어 드라이버 정보, 파일 시스템 제어권 등이 있다.
$0x0000$ 부터 $0xFFFF$까지 0을 채우라는 코드가 실행된다면? 운영체제의 근간을 포함한 모든 데이터가 순식간에 0으로 초기화된다.하드웨어 직접 제어권(Direct I/O Access)
HDD, SSD, 키보드 입력, 마우스 클릭, 마이크 소리, 모니터 화면 출력, 프린터 인쇄, 스피커 소리, 랜카드를 통한 데이터 송수신 등등 하드웨어를 제어하는 역할들을 모두 커널이 관리한다. 만약 프로그램 10개가 동시에 프린터에 출력 명령어를 실행한다고 가정해보자. 커널이 없다면 이 종이 순서가 뒤죽박죽이 되겠지만, 커널은 중간에서 스케줄링을 사용하여 순서대로 안전하게 장치를 사용할 수 있게 관리한다.
사용자 모드는 제한된 권한만 부여된 구역이다. 이곳에서 프로그램이 제아무리 기괴한 짓을 하거나 무한 루프에 빠져 죽더라도, 그 피해는 해당 프로그램(프로세스)의 종료로 끝날 것이다. 시스템의 심장부인 커널과 물리적인 자원들은 커널 모드라는 방벽 뒤에 안전하게 숨겨져 있기 때문에, 사용자 모드의 사고가 시스템 전체의 붕괴로 이어지지 않는다.
만약 어거지로 경계를 무너뜨리려는 기행을 사용자가 벌이려고 해도 현대 CPU와 OS에서는 하드웨어 레벨에서 차단된다.
커널 모드에서 실행되는 코드는 CPU와 하드웨어에 대해 다음과 같은 제한없는 접근권은 가진다.