사용자 모드와 커널 모드의 차이점 정리

CPU에는 애플리케이션이 동작하는 사용자 모드와 OS 커널이 동작하는 커널 모드(특권 모드)가 있습니다. 사용자 모드에서는 페이지 테이블 설정, 입출력 조작, 인터럽트 금지 같은 특권 명령어를 실행할 수 없고, 자신의 프로세스 메모리에만 접근할 수 있습니다. 파일 읽기·쓰기 등이 필요할 때는 시스템 콜로 커널에 요청합니다. 이렇게 해서 하나의 애플리케이션의 오류나 악의가 다른 프로세스, OS, 하드웨어에 미치지 않도록 합니다.

비교 항목사용자 모드커널 모드
동작하는 프로그램애플리케이션OS 커널, 많은 디바이스 드라이버
실행할 수 있는 명령어일반 명령어만. 특권 명령어를 실행하면 예외가 됩니다모든 명령어. 페이지 테이블 전환, 인터럽트 허용과 금지, 제어 레지스터 설정 등
접근할 수 있는 메모리자신의 프로세스 가상 주소 공간 중 사용자에게 허용된 페이지만커널 영역을 포함한 전부. 물리 메모리와 장치 레지스터도 다룰 수 있습니다
장치 조작직접은 불가. 시스템 콜로 커널에 요청합니다직접 레지스터를 읽고 쓰며 인터럽트를 처리합니다
아키텍처에서의 명칭(예)x86의 링 3, Arm의 EL0, RISC-V의 U 모드x86의 링 0, Arm의 EL1, RISC-V의 S 모드
모드가 전환되는 계기시스템 콜 명령어(syscall, svc, ecall 등), 장치나 타이머의 인터럽트, 예외(페이지 폴트, 0으로 나누기, 잘못된 명령어 등)로 커널 모드에 들어갑니다전용 복귀 명령어(sret, eret 등)로 복귀 위치와 모드를 동시에 되돌려 사용자 모드로 돌아갑니다
전환 비용(기준값)시스템 콜 왕복에 대략 100 ns~1 µs 정도. 취약점 대책으로 늘어나기도 합니다커널 내부 처리끼리는 함수 호출이며 모드 전환은 없습니다. 프로세스 전환(컨텍스트 스위치)은 더 무겁습니다
오류의 영향해당 프로세스만 강제 종료됩니다시스템 전체가 멈출 수 있습니다(커널 패닉 등)

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

사용자 모드
애플리케이션과 라이브러리의 일반적인 처리. 계산과 메모리 읽기·쓰기는 커널을 거치지 않고 사용자 모드 그대로 빠르게 수행합니다.
커널 모드
파일이나 네트워크 입출력, 메모리 할당, 프로세스 전환, 인터럽트 처리 등 자원의 관리와 보호가 필요한 처리.
성능을 위한 기법
시스템 콜 횟수를 줄이기 위해 사용자 공간 버퍼에 모아 한꺼번에 기록하거나, 일부 처리를 공유 메모리나 전용 메커니즘으로 사용자 모드 그대로 수행합니다.

자주 묻는 질문

사용자 모드와 커널 모드를 왜 나누나요?

애플리케이션이 페이지 테이블이나 장치를 마음대로 조작하지 못하게 하기 위해서입니다. 나눠 두면 어떤 프로그램에 오류가 있어도 다른 프로세스나 OS의 메모리를 망가뜨리거나 장치를 탈취할 수 없으므로, 그 프로그램을 종료시키는 것만으로 끝납니다.

사용자 모드에서 커널 모드로 전환되는 것은 어떤 때인가요?

세 가지 계기가 있습니다. 프로그램이 스스로 요청하는 시스템 콜, 장치나 타이머로부터의 인터럽트, 그리고 페이지 폴트나 0으로 나누기 등 명령어 실행에 의한 예외입니다. 어느 경우든 CPU가 모드를 전환하고 커널의 정해진 진입점에서 처리를 시작합니다.

시스템 콜은 왜 느린가요?

모드 전환에 더해 레지스터의 저장과 복원, 인수 확인, 커널 진입과 탈출 시의 처리가 필요하기 때문입니다. 취약점 대책으로 페이지 테이블을 전환하는 경우에는 더 무거워집니다. 한 번은 짧더라도 작은 읽기·쓰기마다 호출하면 큰 부담이 됩니다.

모드 전환과 컨텍스트 스위치는 같은 것인가요?

다릅니다. 시스템 콜에서의 모드 전환은 같은 프로세스 그대로 커널 처리에 들어가는 것일 뿐입니다. 컨텍스트 스위치는 실행할 프로세스나 스레드 자체를 교체하는 것으로, 주소 공간 전환 등도 수반하므로 더 무거운 처리입니다.

이해도 확인

CPU에 특권 모드(커널 모드)와 사용자 모드를 두는 주된 목적은?

  1. A애플리케이션의 명령을 커널의 명령보다 빠르게 우선하여 실행할 수 있게 하기 위해
  2. B애플리케이션이 페이지 테이블이나 장치를 마음대로 조작하지 못하도록 보호하기 위해
  3. C하나의 CPU에서 동시에 두 개의 명령을 실행할 수 있게 하기 위해
정답과 해설 보기

정답: B. 애플리케이션이 페이지 테이블이나 장치를 마음대로 조작하지 못하도록 보호하기 위해

페이지 테이블 재작성, 입출력 장치 조작, 인터럽트 금지 등을 애플리케이션이 마음대로 할 수 있다면 다른 프로그램의 메모리를 망가뜨리거나 시스템 전체를 멈출 수 있습니다. 그래서 CPU는 이러한 명령을 특권 모드에서만 실행할 수 있게 하여 OS 커널만 사용할 수 있도록 합니다. 사용자 모드에서 실행하려 하면 예외가 발생합니다. 속도나 동시 실행을 위한 구조가 아닙니다.

애플리케이션이 파일 읽기·쓰기 등을 OS에 요청하는 구조를 무엇이라고 합니까?

  1. A시스템 콜
  2. B컨텍스트 스위치
  3. C디맨드 페이징
정답과 해설 보기

정답: A. 시스템 콜

애플리케이션은 사용자 모드에서 동작하므로 디스크나 장치를 직접 조작할 수 없습니다. 그래서 시스템 콜을 사용하여 전용 명령으로 특권 모드로 전환하고 커널의 처리를 호출해 파일 읽기·쓰기, 메모리 할당, 프로세스 생성 등을 요청합니다. 처리가 끝나면 사용자 모드로 돌아갑니다. 컨텍스트 스위치는 실행할 프로세스를 전환하는 것, 디맨드 페이징은 페이지를 필요할 때 읽어 들이는 방식입니다.

인터럽트와 예외의 차이에 대한 일반적인 설명은?

  1. A인터럽트는 소프트웨어만 일으키는 것이고 예외는 하드웨어 회로만 일으키는 것이다
  2. B인터럽트는 장치 등 외부 요인으로 발생하고 예외는 명령 실행의 결과로 발생한다
  3. C인터럽트는 처리 후 원래대로 돌아갈 수 없고 예외는 반드시 원래 처리로 돌아갈 수 있다
정답과 해설 보기

정답: B. 인터럽트는 장치 등 외부 요인으로 발생하고 예외는 명령 실행의 결과로 발생한다

인터럽트는 입출력 장치의 완료 통지나 타이머 등, 실행 중인 명령과 무관한 외부 요인으로 발생하며 언제 일어날지 정해져 있지 않은(비동기) 것입니다. 예외는 0으로 나누기, 잘못된 명령, 페이지 폴트, 시스템 콜 명령 등 특정 명령을 실행한 결과로 발생하는(동기) 것입니다. 둘 다 인터럽트 핸들러로 처리한 후 원래 처리로 돌아가는 경우가 많으며, 돌아갈 수 있는지 여부로 구분하는 것은 아닙니다.

  1. 위 RISC-V 코드의 마지막 ecall 명령이 실행되었을 때 일어나는 일로 올바른 것은?
  2. 인터럽트나 예외 처리를 마치고 원래 프로그램으로 돌아갈 때, 일반 함수의 리턴 명령이 아니라 전용 복귀 명령(RISC-V의 sret, mret 등)을 사용하는 이유는?
  3. 작은 데이터를 1바이트씩 쓸 때, 매번 시스템 콜을 호출하는 것보다 사용자 공간의 버퍼에 모았다가 한꺼번에 쓰는 편이 빠른 주된 이유는?

OS와 하드웨어 문제 풀기

주요 용어 설명

특권 모드(Privileged Mode)
OS 커널만 사용할 수 있는 CPU 동작 모드. 페이지 테이블 설정이나 입출력 조작 등 위험한 명령을 실행할 수 있으며, 애플리케이션이 동작하는 사용자 모드와 구별된다.
시스템 콜(system call)
애플리케이션이 파일 읽기·쓰기나 메모리 할당 등을 OS에 요청하는 구조. 전용 명령으로 예외를 일으켜 특권 모드로 전환하고 커널 처리를 호출한다.
인터럽트 핸들러
인터럽트나 예외가 발생했을 때 CPU가 실행하는 처리. 중단된 처리의 상태를 저장하고 원인에 맞는 처리를 한 뒤 원래 처리로 돌아간다. 처리는 가능한 한 짧게 하는 것이 원칙.
페이지 테이블(Page Table)
가상 주소의 페이지 번호에서 물리 주소의 페이지 번호로의 대응을 기록한 표. OS가 프로세스마다 만들고 CPU의 MMU가 참조하여 주소를 변환한다. 각 항목에는 보호를 위한 비트도 포함된다.
컨텍스트 스위치(context switch)
CPU에서 실행할 프로세스나 스레드를 전환하는 것. 레지스터와 프로그램 카운터 등의 상태를 저장·복원하며 프로세스 전환에서는 주소 공간도 바뀐다.

관련 비교