운영체제란 프로그램에 필요한 메모리, 프로세서 등의 시스템 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램을 의미한다.

메모리는 커널 영역 kernel space와 사용자 영역 user space로 나뉘며, 운영체제는 컴퓨터 부팅시 자동으로 커널 영역에 적재되어 실행된다.

구체적으로, 운영체제는 다음의 작업을 수행한다.

  1. 프로세스를 메모리의 사용자 영역에 적재하거나 내린다.
  2. CPU 자원을 프로세스들에게 배분한다.
  3. 하드웨어 장치를 제어한다(ex. 입출력 기기)

운영체제의 핵심 서비스를 담당하는 부분을 커널 kernel이라고 한다.

사용자 프로그램이 무분별하게 시스템 자원을 사용한다면 심각한 장애를 초래할 수 있다. 따라서 운영체제는 응용 프로그램이 자원에 접근하려 할 때 오직 자신을 통해서만 접근하도록 하여 자원을 보호한다. 이러한 운영체제의 문지기 역할은 이중 모드로서 구현된다. 이중 모드 dual mode란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다.

사용자 모드 user mode는 운영체제 서비스를 제공받을 수 없는 실행 모드이다. 즉, 커널 영역의 코드를 실행할 수 없는 모드이다. 일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행된다. 사용자 모드로 실행 중인 CPU는 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행 수 없다.

반면 커널 모드 kernel mode는 운영체제 서비스를 제공받을 수 있는 실행 모드이다. 즉, 커널 영역의 코드를 실행할 수 있는 모드이다. CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있다. 운영체제는 커널 모드로 실행되기 때문에 자원에 접근할 수 있다.

따라서 사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다. 이때 운영체제 서비스를 제공받기 위한 요청을 시스템 호출 system call(시스템 콜)이라고 한다.

시스템 호출은 일종의 인터럽트이다. 정확히는 소프트웨어적인 인터럽트이다. 소프트웨어의 명령어에 의해 발생하는 인터럽트를 소프트웨어 인터럽트라고 한다.

시스템 콜이 실행되면 CPU는 작업을 백업하고, 커널 영역 내의 시스템 호출을 수행하는 코드(인터럽트 서비스 루틴)을 실행한 뒤 다시 기존에 실행하던 응용 프로그램으로 복귀하여 실행을 계속해나간다.