본문 바로가기

not기초/시스템프로그래밍

[시스템프로그래밍]시스템 호출 #개요

시스템 호출

커널에 서비스 요청을 하기 위한 프로그래밍 인터페이스



시스템 호출 과정

  • 응용 프로그램은 파일에 직접 접근할 수 없기 때문에 시스템 호출을 통해서 커널에 서비스를 요청한다
  • 사용자 모드에서 실행중인 프로세스를 사용자 프로세스, 커널 모드에서 실행중인 프로세스를 커널 프로세스라고 한다
  • C 프로그램의 경우 시스템 호출 대신 라이브러리 함수를 호출할 수도 있으나 실은 라이브러리 함수도 함수 내에서 관련된 시스템 호출을 한다

시스템 호출 과정

- 예시 : open() 시스템 호출

시스템 호출 과정 예시

  1. 사용자 프로세스에서 시스템 호출을 한다
  2. C runtime library에서 커널로 점프하기 위해 레지스터를 통해 매개변수를 전달하는 등의 작업을 한다
  3. trap 명령어를 이용하여 커널로 점프한다
  4. 동시에, 각 시스템 호출의 시작 주소를 저장하고 있는 벡터 테이블을 통해 해당 시스템 호출의 커널 코드로 점프한다
  5. 해당 커널 코드를 실행한다
  6. 호출의 역순으로 리턴한다

시스템 호출 요약

주요 자원시스템 호출
파일open(), close(), read(), write(), dup(), lseek() 등
프로세스fork(), exec(), exit(), getpid(), getppid()
메모리malloc(), calloc(), free() 등
시그널signal(), alarm(), kill(), sleep() 등
프로세스 간 통신pipe(), socket() 등

출처 : 리눅스 프로그래밍, 창병모 저