응용 프로그램에서 커널의 서비스를 사용하는 방법이 system call이다.

응용 프로그래머는 실제 system call을 부르는 것보다 API에 따라 프로그래밍 하는 것을 선호하는데 한가지 이유는 호환성과 관련이 있다.

API에 따라 프로그램을 설계하는 응용 프로그래머는 자신의 프로그램이 같은 API 를 지원하는 어느 시스템에서건 compile되고 실행된다는 것을 기대할 수 있다. 또한 실제 system call 은 종종 좀 더 자세한 명세가 필요하고 프로그램상에서 작업하기가 응용 프로그래머에게 가용한 API보다 더 어렵다.


위 그림과 같이 프로그램에서 API로 제공하는 system call을 호출시에 system call interface에서 해당 호출을 가로채서 호출한 system call에 해당하는 인덱스를 찾아서 해당 system call을 실행하고 해당 결과를 리턴한다.

system call의 인자로 주었던 ‘address X’는 register에 저장되었다가 해당 system call이 실행될 때 매개변수로서 넘겨준다.

이때 레지스터보다 더 많은 매개변수를 넘길시, 메모리 내의 블록이나 테이블에 저장되고, 블록의 주소가 레지스터 내의 매개변수로 전달된다. (5개 이하의 매개변수가 있다면 레지스터, 넘는다면 블록)

system call의 유형

C언어에서 사용되는 system call 명령 예시

  • Process Control
    • fork()
    • exit()
    • wait()
  • File management
    • open()
    • read()
    • write()
    • close()
  • Device management
    • ioctl()
    • read()
    • write()
  • Information maintenance
    • getpid()
    • alarm()
    • sleep()
  • Communications
    • pipe()
    • shm_open()
    • mmap()
  • Protection
    • chmod()
    • umask()
    • chown()