본문 바로가기

CS/운영체제

[OS] 시스템 콜, 이중 모드

728x90

운영체제도 일종의 프로그램이기 때문에 실행을 하기 위해서는 반드시 메모리에 적재되어야 합니다.

 


다만 사용자 프로그램과는 달리 운영체제는 매우 특별한 프로그램이므로 메모리 내의 커널 영역(kernel space)에 적재되어 실행됩니다.

운영체제가 적재되는 커널 영역 이외에 사용자 응용 프로그램이 적재되는 공간을 사용자 영역(user space)라고 합니다.

 

 

여기서 주목해야 할 점은 응용 프로그램이 운영체제의 기능을 제공받기 위해서는 커널 영역에 적재된 운영체제 코드를 실행해야 한다는 것입니다.

 

 

일반적으로 웹 브라우저, 워드, 디스코드와 같은 응용 프로그램은 운영체제와는 달리 CPU, 메모리와 같은 자원을 직접적으로 조작할 수 없습니다.

특정 자원에 접근하거나 조작하기 위해서는 운영체제 코드를 실행해야 합니다.
운영체제가 자신의 코드를 실행한 응용 프로그램의 자원 접근 및 조작을 대행하는 것입니다.

 

 

응용 프로그램은 어떻게 운영체제 코드를 실행할 수 있을까요?
바로 시스템 콜(system call)을 호출하여 운영체제 코드를 실행할 수 있습니다.

시스템 콜은 운영체제 서비스를 제공받기 위한 수단(인터페이스)으로 호출 가능한 함수 형태를 가지고 있습니다.
응용 프로그램이 운영체제로부터 어떤 기능을 제공받고자 한다면 그 기능에 해당하는 시스템 콜을 호출하면 됩니다.


시스템 콜 과정

  1. 소프트웨어 인터럽트 발생
  2. CPU의 커널 모드 전환
  3. 운영체제 코드 실행
  4. 사용자 모드 전환

명령어에 의해 발생하는 인터럽트를 소프트웨어 인터럽트라고 합니다.
시스템 콜이 바로 소프트웨어 인터럽트의 종류 중 하나입니다.

 

 

사용자 영역을 실행하는 과정에서 시스템 콜이 호출되면 현재의 작업 상태를 저장(context switch)하고 커널 영역 내의 인터럽트를 처리하기 위한 코드를 실행한 뒤 다시 사용자 영역의 코드 실행을 재개합니다.

 

CPU 명령어를 실행하는 과정에서 사용자 영역을 실행할 때의 모드와 커널 영역을 실행할 때의 모드를 구분하여 실행합니다.

 

사용자 영역에 적재된 코드를 실행할 때의 실행 모드를 사용자 모드라고 하고, 커널 영역에 적재된 코드를 실행할 때의 모드를 커널 모드라고 합니다.
이렇게 두 개의 모드로 구분하여 실행하는 것을 이중 모드라고 합니다.


운영 프로그램은 실행 과정에서 파일 시스템 접근, 네트워크 통신, 메모리 할당과 같은 작업을 수행하기 위해 시스템 콜을 매우 빈번하게 호출합니다.

728x90