시스템 콜이란 운영체제의 커널이 제공하는 서비스를 사용자의 프로그램(프로세스)의 요청에 따라 커널에 접근하기 위한 인터페이스 입니다. 커널과 응용 프로그램은 CPU, 메모리, 드라이버 등의 하드웨어 접근 능력이 다릅니다. 또한 응용 프로그램은 CPU의 권한수준이 사용자 공간에서만 동작하며 여러 상황에서 커널에 의존해야 합니다. 따라서 사용자가 응용 프로그램에서 커널의 서비스를 사용하는 방법이 시스템 콜입니다.
프로그램이 소프트웨어 인터럽트를 통해 운영체제에게 시스템 콜을하여 커널 모드를 사용합니다.
CPU가 프로그램을 실행하고 있을 때, I/O하드웨어 등의 장치에 예외상황(외부 인터럽트)이 발생하여 처리가 필요할 경우 CPU에게 알려 처리할 수 있도록 하는 것입니다. 폴링(Polling)과 다른점으로 폴링은 대상(하나의 장치 혹은 프로그램)을 주기적으로 감시하여 상황이 발생하면 해당처리 루틴을 실행하는 반면 인터럽트는 CPU에게 일을 철해달라고 집적 요청하는 수단입니다.
인터럽트가 발생한다고 해서 바로 해당 요청을 처리하지 않습니다. 명령어 사이클은 인출과 실행 두 단계를 반복해서 수행하는데, 명령어의 실행 단계를 마치고 나서 CPU는 반복적으로 인터럽트 요청이 있는지 확인합니다. 인터럽트 요청을 확인했다면 인터럽트 단계에 돌입하여 실행하고 있단 프로그램으로 복귀할 때 필요한 정보인 프로세스의 상태(Context)를 PCB에 저장한 후 인터럽트 요청을 처리하고 Context-switching을 통해 보관했던 프로세스의 상태(Context)를 PCB에서 읽어와 복구합니다.
Context-swithcing이 일어나는 동안 CPU는 작업을 하지 못하기 때문에 빈번한 발생은 오버헤드를 발생시킬 수 있습니다.
PCB란 운영체제의 프로세스 스케줄링을 위해 프로세스의 상태 정보(Context)를 저장하는 구조체입니다. 각 프로세스가 생성될 때 마다 프로세스에 대한 정보(Process Metadat)를 PCB에 저장함으로써 프로세스들을 구분하고, 프로세스의 작업상태를 저장하는 과정을 통해 작업을 이어서 수행합니다. 해당 프로세스의 작업이 완료되면 PCB에서 해당 프로세스의 정보를 제거합니다.
[참고문헌]
https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8
https://whatisthenext.tistory.com/147
https://velog.io/@whwkd11010/%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%BD%9C-PCB-Context-Switching