시스템 콜 인터럽트에 관하여 알아보자.
시스템 콜이 무엇인가? 시스템 콜은 운영 체제의 커널이 제공하는 서비스를 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스를 말한다.
시스템 콜 실행을 위해서 강제로 코드에 인터럽트 명령어를 넣어 CPU에게 실행하도록 해야 한다.
실제 코드에서 시스템 콜의 실행 과정에 대해서 알아보자.
mov eax, 1 // 시스템 콜 번호
mov ebx, 0 // 인자
// CPU op code / 인터럽트 번호
int 0x80 // 소프트웨어 인터럽트 명령
시스템콜 인터럽트 명령을 호출하면 이와 같이 0x80값을 CPU로 넘기면 CPU는 운영체제를 사용자 모드에서 커널 모드로 변경해준다.
그리고 IDT(Interrupt Descriptor Table)라는 인터럽트의 번호가 매핑이 되어 있는 테이블에서 0x80에 해당하는 주소(함수)를 찾아서 실행하게 된다.
이후에 system_call() 함수에서 eax(시스템콜 번호) 인자를 통해서 시스템 콜 번호를 찾아서 해당 번호에 맞는 시스템콜 함수를 실행하고 다시 커널 모드에서 사용자 모드로 변경하고 응용 프로그램의 다음 코드를 실행하게 된다.
첫번째 파란 화살표에서
두 번째 파란 화살표에서
세 번째 파란 화살표에서
네 번째 파란 화살표에서
선점형 스케쥴러에서는 수시로 타이머 인터럽트가 발생하기 때문에 운영체제가 타이머 인터럽트 발생 횟수를 기억해서 5번 타이머 인터럽트를 발생하면 현재 실행 중인 프로세스를 다른 프로세스로 변경해 실행한다.