시스템 콜(System Call)
시스템 콜을 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
사용자 프로그램이 디스크 파일을 접근하거나 화면에 결과를 출력하는 등의 작업이 필요할 때, 운영체제에게 특권 명령의 대행을 요청하는 것
- 각 시스템 콜에 번호 할당, 시스템 콜 인터페이스는 시스템 콜 번호와 시스템 콜 핸들러 함수 주소로 구성되는 시스템 콜 테이블 유지
- 운영체제는 자신의 커널 영역에서 해당 인덱스가 가리키는 주소에 저장되어 있는 루틴을 수행
- 작업이 완료되면 CPU에게 인터럽트를 발생시켜 수행이 완료 되었음 알림
open()의 호출

시스템 콜 예시
cp in.txt out.txt
- in.txt에 있는 파일내용과 같은 내용을 복사하여 out.txt 파일을 만드는 것
순차적으로 호출되는 시스템 콜

- 사용자로부터 입력을 받아 I/O 시스템 콜 호출이 필요함
- 이후 'cp'프로그램을 실행시키면 'in.txt' 파일이 현재 디렉토리에서 접근 가능한지 확인하기 위해 시스템 콜 호출
->접근이 불가하면 에러를 발생시킨 후 프로그램이 종료(이때 시스템 콜 호출)
- 'in.txt' 파일이 존재해 접근 가능하면 복사한 파일을 저장하기 위해 'output.txt' 파일이 있는지 검사하기 위한 시스템 콜 호출
- 파일 저장할때 시스템 콜 호출
시스템 콜이 필요한 이유

우리는 일반적으로 '응용 프로그램' 사용
유저레벨의 프로그램은 유저레벨의 함수들 만으로는 많은 기능을 구현하기 힘들기 때문에 커널(kernel)의 도움을 반드시 받아야 한다. 이는 유저프로세스에서 유저모드로는 수행할 수 없으므로 반드시 kernel에 관련된 것은 커널모드로 전환한 후 해당 작업을 수행할 권한이 생긴다.
유저 모드와 커널 모드
유저모드
PC register가 사용자 프로그램이 올라가 있는 메모리 위치를 가리키고 있을 때 현재 사용자 프로그램을 수행중이라 하며 CPU가 유저모드에서 수행 중이라고 한다.
커널 모드
PC register가 운영체제가 존재하는 부분을 가리키고 있다면 현재 운영체제의 코드를 수행중이라고 하고, CPU가 커널모드에서 수행중이라고 한다.
일반 명령과 특권 명령
- CPU 내에 모드 비트를 두어서 구분
- 0 : 커널모드 / 1 : 유저모드
일반 명령(유저 모드)
메모리에서 자료를 읽어와서 CPU에서 계산하고 결과를 메모리에 쓰는 일련의 명령들
특권 명렬(커널 모드)
보안이 필요한 명령, 입출력 장치, 타이머 등 각종 장치에 접근하는 명령