시스템 콜, System Call
시스템 호출(System Call)은 OS의 커널이 제공하는 서비스를 사용하기 위해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스 이다.
사용자 프로그램이 특권 명령의 수행을 위해 OS에게 특권 명령을 요청하는 것
- 시스템 콜은 여러 종류의 기능으로 나뉨
- 각 시스템 콜에는 번호 할당됨
- 시스템 콜 인터페이스는 '시스템 콜 번호' 와 '시스템 콜 핸들러 함수 주소'로 구성되는 시스템 콜 테이블을 유지
- OS는 자신의 커널 영역에서 해당 인덱스가 가리키는 주소에 저장된 루틴 수행
- 작업 완료 시 CPU에게 인터럽트 발생 -> 수행 완료 알림
아래는 open() 호출 시 처리 과정

시스템 콜이 발생했을 때, 추가적인 정보 필요할 수 있다.
-> 이런 정보가 담긴 매개변수들을 OS에 전달을 어떻게 할까?

- 매개변수를 CPU 레지스터에 전달
-> 레지스터 수가 매개변수 보다 적을 수 있음
- 매개변수를 메모리에 저장, 해당 메모리 주소를 레지스터에 전달 -> 매개변수의 갯수나 길이의 제한 X
- 매개변수는 프로그램에 의해 스택에 전달될 수 있음 -> 매개변수의 갯수나 길이의 제한 X
시스템 콜이 필요한 이유

우리가 사용하는 프로그램은 일반적으로 '응용 프로그램'이다.
유저 레벨의 프로그램은 유저 레벨의 함수들 만으로 많은 기능을 구현하기 힘들기에 커널의 도움을 받아야 한다.
이러한 작업은 유저 모드에서 수행할 수 없으며 반드시 커널 모드로 전환한 후에야, 해당 작업을 수행할 권한이 생긴다.
권한이 필요한 이유?
- 해커에 의한 피해를 막기 위함
- 초보 사용자가 아무렇게 함수를 호출하여 시스템 전체를 망가뜨릴 수 있기 때문
- 만약 유저 모드에서 시스템 콜 호출할 경우, OS에서 trap 발생시킴
시스템 콜의 유형
프로세스 컨트롤
- 프로세스 생성 및 종료
- 메모리에 로드, 실행
- 프로세스 속성 값 확인, 지정
- wait 이벤트, signal 이벤트
- 메모리 할당
예) fork, wait, exec 등
파일 매니지먼트
- 파일 생성, 파일 삭제
- 열기, 닫기, 읽기, 쓰기, Reposition
- 파일 속성 값 확인, 지정
예) open, read, write, close 등
디바이스 매니지먼트
- 디바이스 요청 및 해제
- 읽기, 쓰기, Reposition
- 디바이스 속성 확인, 지정
- 비 물리적인 디바이스 해제 및 장착
정보 관리
- 시간 확인, 지정
- 시스템 데이터 확인, 지정
- (프로세스, 파일, 디바이스) 속성 가져오기, 설정하기
통신
- 커뮤니케이션 연결 생성, 삭제
- 메시지 송신, 수신
- 상태 정보 전달
- remote 디바이스 해제, 장착
보안
유저 모드와 커널 모드
유저 모드
PC register가 사용자 프로그램이 있는 메모리 위치 가리키고 있을 때, CPU가 유저모드에서 수행중이라 함
커널 모드
PC register가 OS가 존재하는 부분 가리키고 있을 때, CPU가 커널모드에서 수행중이라고 함
일반 명령과 특권 명령
CPU 내에 모드 비트를 통해 구분
0 - 커널 / 1 - 유저
일반 명령 (유저 모드)
메모리에서 자료 읽어오고, CPU에서 계산, 결과를 메모리에 쓰는 명령들
-> 모든 프로그램이 수행 가능
특권 명령 (커널 모드)
보안이 필요한 명령, 입출력 장치, 타이머 등 각종 장치에 접근하는 명령들
Reference
[OS] 시스템 콜, System Call
[운영체제] 시스템 콜 (System Call)