시스템 콜이란 무엇인가요?

백엔드와 관련된 질문이에요.

운영체제는 사용자가 실행하는 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지해 자원을 보호합니다. 왜냐하면, 프로그램이 CPU, 메모리, 하드 디스크에 마음대로 접근하고 조작할 수 있다면, 자원이 무질서하게 관리 될 수 있으며 한 프로그램의 실수가 전체 컴퓨터에 영향을 주기 때문입니다. 운영체제는 프로그램들이 자원에 접근하려 할 때 오직 자신을 통해서만 접근하도록 하여 자원을 보호합니다.

따라서, 프로그램은 자원에 접근하기 위해서 운영체제에게 도움을 요청해야 합니다. 그리고, 프로그램의 요청을 받은 운영체제는 응용 프로그램 대신 자원에 접근해 요청한 작업을 수행합니다. 이러한 과정은 이중 모드로 구현되는데요. 이중 모드(Dual Mode) 는 CPU가 명령을 실행하는 모드를 사용자 모드와 커널 모드로 구분하는 방식입니다.

  • 사용자 모드(User Mode) 는 운영체제 서비스를 제공받을 수 없는 실행 모드입니다. CPU가 해당 모드인 경우, 입출력 명령어와 같은 하드웨어 자원 접근 명령을 실행할 수 없습니다. 일반 프로그램은 기본적으로 사용자 모드로 실행됩니다.

  • 커널 모드(Kernel Mode) 는 운영체제 서비스를 제공받을 수 있는 실행 모드로 커널 영역의 코드를 실행할 수 있습니다. CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있으며, 운영체제는 커널 모드로 실행됩니다.

사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 하는데요. 말씀 주신 시스템 콜(System Call) 은 이때 운영체제 서비스를 제공받기 위한 요청을 의미합니다. 시스템 콜은 일종의 소프트웨어 인터럽트입니다. 시스템 콜을 발생시키는 명령어가 실행된다면, CPU는 현재까지의 작업을 백업한 뒤에 커널 영역 내에 시스템 콜을 수행하는 인터럽트 서비스 루틴을 실행한 이후, 다시 기존 실행하고 있었던 프로그램으로 복귀하여 실행을 계속합니다.

추가 학습 자료를 공유합니다.