시스템콜(System call)과 작업 영역

|

대부분의 시스템은 작업 범위와 안정성을 위해 크게 두 가지의 작업 영역으로 나눕니다.

  • 커널 영역 (Kernel Space)
  • 사용자 영역 (User Space)


커널 영역 (Kernel Space)

커널 영역은 커널이 작업하는 영역으로 CPU 작업 스케줄이나 하드웨어를 제어하는 디바이스 드라이버와 메모리를 관리하는 기능 등을 수행합니다.

이러한 작업을 위해 CPU에서 제공하는 명령얻이 존재합니다. 그 중에는 `특수 명령어(Privileged Instruction)’도 존재합니다. 특수 명령어의 경우 오로지 커널에서만 사용 가능하며 일반 라이브러리에서는 호출할 수 없습니다.

커널은 가장 신뢰할 수 있는 프로그램들로만 구성되어져야 하며, 만약 커널에서 오류가 발생하면 그대로 시스템 종료로 이어집니다.


사용자 영역 (User Space)

사용자 영역은 일반 프로그램이 실행되는 영역으로 해당 프로그램만의 공간입니다. ‘샌드박스(Sand Box)’라고도 부릅니다. 사용자 영역에서는 직접 하드웨어 디바이스 또는 메모리를 제어할 수는 없습니다. 작업을 위해서는 ‘시스템콜(System call)’을 이용해 커널에 작업을 요청하고 커널의 도움을 받아 작업을 수행할 수 있습니다.


예제

예를 들어 ‘a = b + c’라는 문장을 수행하는 작업은 사용자 영역에서 수행되는 작업이지만, ‘char* buffer = (char*)malloc(100)’과 같은 메모리를 할당하거나 파일을 건드리는 작업 등은 커널의 도움을 받아야만 가능한 작업들입니다.


Operating System Trap

작업 영역의 변환은 일종의 소프트웨어 인터럽트라고 불리우는 Operation System Trap을 통해 이루어집니다. 어플리케이션의 요청과 작업에 필요한 데이터는 커널에 작업을 요청할 때, 사용자 영역에서 커널 영역으로 복사하여 전달합니다. (물론 반대의 경우도 마찬가지입니다.)

시스템 트랩이 발생할 경우, 어플리케이션에서 수행하던 모든 작업들이 중단되고 작업 권한이 커널로 넘어갑니다.

즉, 빈번한 시스템콜 호출은 전반적인 성능 하락을 가져옵니다.