시스템 콜이 무엇인가?
시스템 콜은 응용 프로그램이 직접적으로접근하지 못하는 하드웨어 자원에 접근하기 위해 사용되는 인터페이스이다. 즉, 시스템 콜을 호출함으로서 해당 자원에 간접적으로 접근하게 된다.
우리가 사용하는 시스템 콜 예시와 동작 과정
python의 import sys, time도 시스템 콜이고, 대표적으로 file I/O의 open, read, write 등이 있다. 한 파일에서 다른 파일로 데이터를 복사하는 프로그램을 예로 들어서 시스템 콜이 동작하는 과정을 살펴 본다.
시스템 콜 예시
1. 아래 명령어와 같이, 복사할 input 파일과 output 파일의 이름을 작성한다.
$ cp input.txt output.txt
2. 프로그램은 input 파일을 open(system call)하고, output 파일을 create(system call), open(system call)한다. 이때, 읽을 파일이 존재하지 않거나, 이미 output 파일이 존재한다면 에러를 반환하고 종료한다.
3. 프로그램은 input 파일에서 데이터를 read(system call)하고, output 파일에 write(system call)한다.
4. 프로그램은 input 파일과 output 파일을 close(system call)한다.
시스템 콜 동작 과정
1. 사용자 프로그램 실행: 먼저, 사용자가 작성한 프로그램이 사용자 모드에서 실행된다.
2. 시스템 콜 호출
3. 사용자 모드에서 커널 모드 전환: 아래 그림과 같이, 시스템 콜이 호출되면 프로그램은 현재 실행 중인 사용자 모드에서 커널 모드로 전환된다.
4. 요청 처리 및 수행, 결과 반환: 내부적으로 요청 분석 및 처리 작업을 수행하고, 결과를 메모리에 저장하거나 레지스터에 반환한다. (예를 들어, 파일을 읽는 작업의 경우 파일 내용을 메모리에 읽어온다.)
5. 커널 모드에서 사용자 모드로 전환: 요청된 작업이 완료되면, 운영체제는 다시 사용자 모드로 전환된다.
운영체제의 Dual Mode와 구분하는 이유
운영체제는 사용자 모드와 커널 모드로 나뉘게 된다. 사용자 모드에서는 커널 모드에 직접적으로 접근하지 못하고, 시스템 콜을 통해 사용자 모드에서 요청하면, 커널 모드에서 요청된 작업을 처리 후 결과를 반환하게 된다. 핵심적인 기능은 커널모드에서 모두 제어하며, 사용자 모드에서 발생한 문제는 커널 모드에 영향을 끼치지 않게 되면서 시스템 자원을 안전하게 관리할 수 있다.
서로 다른 시스템 콜을 구분할 수 있을까?
각 시스템 콜에는 번호가 할당되어 있어서 서로 다른 시스템 콜을 구별할 수 있다. 시스템 콜 인터페이스는 이러한 번호에 따라 인덱스 테이블을 관리하고 서로 다른 시스템 콜을 구분한다.
참고 자료