1. 시스템 호출
ㅇ 프로세스가 운영체제 커널에게, 어떤 동작의 수행을 요청하는 것
ㅇ 시스템 호출 API
- 커널은, 시스템 호출 API를 통해, 광범위한 서비스를 제공하게 됨
2. 시스템 호출에 따른 프로세스 제어권 전달
ㅇ 프로그램을 작성할 때 단순히 서브루틴을 호출하는 것처럼 시스템 호출을 함
ㅇ 시스템 호출을 수행하면 제어권은 사용자 모드에서부터 커널 모드로 옮겨지고,
ㅇ 시스템 호출을 모두 마치면 제어권은 다시 사용자 프로세스로 복귀하게 됨
3. 시스템 호출의 종류
ㅇ 프로세스 관리 : 프로세스와 관련된 시스템 호출
- 프로세스 제어용
. exec : 자신을 수행 가능한 다른 프로세스로 대치 수행
. fork : 현재의 프로세스 이미지를 복사하고 child 프로세스를 만듬
. wait
- 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() 함수를 이용해서 직접 실행시키는 방법
ㅇ 시스템 콜 例)
- exit() : 현재 프로세스의 종료 (소스 위치 : kernel/exit.c)
- fork() : 자식 프로세스의 생성 (소스 위치 : arch/i385/kernel/process.c)
- read() : 파일 지정자로 부터 읽기 (소스 위치 : fs/read_write.c)
- write(): 파일 지정자로 쓰기 (소스 위치 : fs/read_write.c)
- open() : 파일이나 장치열기 (소스 위치 : fs/open)
- close(): 파일 지정자 닫기 (소스 위치 : fs/open.c)