시스템 콜?
- OS의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
- 보통 C,C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기에 고급 API를 통해 시스템 호출에 접근하게 하는 방법
연관지어 나오는 내용
Q. 함수 호출과 시스템 호출은 뭐가 달라요?
-> 함수 호출은 사용자가 작성한 함수 및 라이브러리의 메서드 등을 호출하는 것. 시스템 호출은 OS내에 미리 정의되어 있는 함수를 호출하는 것.
시스템 콜의 필요 이유
- 우리가 일반적으로 사용하는 프로그램은 '응용 프로그램'이다.
- 유저레벨의 프로그램은 유저레벨의 함수들 만으로 많은 기능을 구현하기 힘들기에 커널의 도움을 받아야 한다.
- 이러한 작업은 응용 프로그램으로 대표되는 유저 프로세스에서 유저모드에서는 수행할 수 없다.
- 반드시 커널에 관련된 것은 커널 모드로 전환한 후에야, 해당 작업을 수행할 권한이 생긴다.
- 커널 모드를 통한 이러한 작업은 반드시 시스템 콜을 통해 수행하도록 설계되어 있다.
Q. 권한이 왜 필요할까?
- 해커가 악의적으로 시스템 콜을 사용하는 경우, 초보가 의도치 않게 아무 함수를 호출해서 시스템이 망가진 경우를 막기 위해!!
- 그래서 유저 모드에서 시스템 콜을 호출할 경우 OS에서 불법적인 접근으로 인지하고 trap을 발생시킨다..
시스템 호출의 유형
- 프로세서 제어
- 파일 조작
- 장치 관리
- 정보 유지
- 통신
시스템 호출 종류
- 프로세스와 관련된 시스템 호출
- 프로세스 제어용
- exec : 자신을 수행 가능한 다른 프로세스로 대치 수행
- fork : 현재의 프로세스 이미지를 복사하고 child 프로세스를 만듬
- wait
- pipe: 파이프
- signal : SW 인터럽트 또는 시그널
- exit : 프로세스 종료
- getuid, setuid : 사용자 및 그룹 id 접근
- 표준 파일에 대한 입출력 시스템 호출
- open(), create(), close(), read(), write(), lseek()..
- 소켓 기반 입출력 시스템 호출
- socket(), bind(), listen(), accept(), connect()