System Call   시스템 호출, 시스템 콜

(2024-01-11)

1. 시스템 호출

  ㅇ 사용자 프로세스운영체제 커널에게, 어떤 동작의 처리를 요청하는 것

  ㅇ 시스템 호출 API
     - 커널은, 시스템 호출 API를 통해, 사용자 프로세스에게 광범위한 실시간 서비스를 제공하게 됨
        . (API : 실시간으로 제공 가능한 규격화된 응용 서비스들의 모음)


2. 시스템 호출에 따른 제어권의 전달  :  (사용자모드커널모드)

  ㅇ (호출 방식)  
     - 프로그램을 작성할 때, 단순히 서브루틴을 호출하는 것처럼, 시스템 호출을 함

  ㅇ (제어권 전달)  
     - 시스템 호출을 수행하면, 제어권은 사용자 모드로부터 커널 모드로 옮겨지고,
     - 시스템 호출을 마치면, 제어권은 커널 모드로부터 다시 사용자 모드의 사용자 프로세스로 복귀함


3. 시스템 호출의 유형프로세스 관리  :  프로세스의 생성,삭제 등과 관련된 시스템 호출
     - 프로세스 제어용 
        . exec() : 자신을 수행 가능한 다른 프로세스로 대치 수행 (사용자 프로그램의 실행)
        . fork() : 현재의 프로세스 이미지를 복사하고 child 프로세스를 만듬
        . wait
        . kill()
     - pipe : 파이프
     - signal : 소프트웨어 인터럽트 또는 시그널
     - exit : 프로세스 종료
     - getuid, setuid ... : 사용자 및 그룹 id 접근

  ㅇ 메모리 확보,해제

  ㅇ 통신 처리  :  소켓 기반의 시스템 호출
     - socket(), bind(), listen(), accept(), connect(), ...

  ㅇ 파일 I/O  :  표준 화일(장치)에 대한 입출력 시스템 호출 
     - open( ), close( ), read( ), write( ), lseek( ), create( ), ...
     * 디스크,파이프,터미널,소켓 등 모든 종류의 파일에 대해, 이같은 시스템 호출을 동일 적용 가능
     * 모든 파일I/O 시스템호출은, 파일기술자 번호를 통해, 열려있는 파일을 참조함

  ㅇ 기타, 장치 관리, 정보 유지 등


4. Unix/Linux에서, 시스템 호출의 사용 방법커널 차원에서, 
     - 사용자 프로세스를 위해 서비스하기 위한 여러 함수들을 마련하고 있는데,
     - 이 함수(function)들을 일컬어 시스템 호출 이라고 하며,

  ㅇ 시스템 호출 형식
     - 이들 형식은, 시스템 헤더파일인 syscall.h, unistd.h 에 정의되어 있음     ☞ 헤더파일 참조

  ㅇ 사용 방법 둘
     - ① libc (표준 C 라이브러리)를 통한, 포장 함수(Wrapper Function)에 의해 호출하는 방법
        . 표준으로써 어느 운영체제라도 모두 동일
     - ② syscall() 함수를 이용해서 직접 실행시키는 방법
        . 운영체제 종류 마다 다름

  ㅇ 시스템 콜의 특징
     - 바이트 단위로 만 읽기,쓰기 처리 가능
     - 커널 공간에서 실행됨
     - 트랩 또는 인터럽트를 일으키며 커널로 진입함
        . 한편, 인텔 프로세서(i386)에서는, 소프트웨어 인터럽트 명령인 int 0x80을 통해,
        . 시스템 콜 번호, 매개변수 등을 CPU 레지스터에 전달하고,
        . 보호된 커널 영역으로 들어가, 인터럽트 핸들러를 실행하게 됨    

  ㅇ 시스템 호출 例)  :  (약 90개 정도가 있음)
     -  exit() : 현재 프로세스의 종료     (소스 위치 : kernel/exit.c)
     -  fork() : 자식 프로세스의 생성     (소스 위치 : arch/i385/kernel/process.c)

     -  open() : 파일이나 장치열기	  (소스 위치 : fs/open)
     -  read() : 파일 지정자(fd)로 부터 읽기  (소스 위치 : fs/read_write.c)
        . n = read(fd, buf, sizeof buf);
     -  write(): 파일 지정자(fd)로 쓰기	  (소스 위치 : fs/read_write.c)
        . n = write(fd, buf, count); 
     -  close(): 파일 지정자 닫기         (소스 위치 : fs/open.c)

  ㅇ 용도
     - 프로세스 제어, 파일 조작, 디바이스 관리, 시스템 정보 관리, 통신 관리 등

Unix/Linux 프로세스
   1. 프로세스   2. PID, PPID   3. 시스템 호출   4. init,exec,fork   5. 시그널   6. 좀비  


Copyrightⓒ written by 차재복 (Cha Jae Bok)               기술용어해설 후원
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"