[OS 정리] 시스템 콜

운영체제 시스템 콜

 

정의

시스템콜은 사용자 수준 응용들에게 커널이 자신의 서비를 제공하는 인터페이스를 말하며, 대표적인 예로 sys_fork(), sys_read(), sys_nice() 등이 있다.

 

 

동작방식

사용자 프로세서가 시스템콜을 요청하면 제어가 커널로 넘어간다(User Mode -> 커널 Mode)

커널은 내부적으로 각각의 시스템콜을 구분하기 위해서 기능별로 번호를 할당해놓는다.

해당번호는 커널 내부의 제어루틴을 정의한다.

커널은 요청받은 시스템 콜에 대응하는 번호를 확인한다.

커널은 그 번호에 맞는 서비스 루틴을 호출하게 되고, 서비스루틴을 모두 처리하고 나면 커널 mode에서 user모드로 다시 돌아온다.

 

예시 fork()

1. libc.a에서 fork() 시스템콜의 고유번호 인 ‘2’를 eax 레지스터에 저장하고, 0x80인터럽트를 발생한다.

2. 커널은 IDT에서 0x08주소에 있는 system.call() 함수를 찾는다.

3. system_call()함수에서는 호출된 시스템 콜 번호와 모든 레지스터를 스택에 저장하고 올바른 시스템 콜 번호인지 검사 후 sys_call_table에서 시스템 콜 번호에 해당하는 함수'sys_fork()'를 실행한다.