시스템 콜(System Call)
시스템 콜은 운영 체제의 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
시스템 콜도 인터럽트의 일종으로 소프트웨어 인터럽트로 사용되기 때문에 이전 포스팅인 인터럽트를 참고해 보자.
이전에 포스팅한 인터럽트에서 살펴본 것처럼 운영 체제는 이중 동작 모드를 통해서 커널 모드와 사용자 모드로 구분하여 동작하게 되는데 특정 부분(하드웨어 접근과 같은 작업)에서 커널 모드를 사용해야 되는 상황이 발생하게 된다.
하지만 보안을 위해서 사용자 모드와 커널 모드로 구분되어 있기 때문에 사용자가 마음대로 작업을 할 수 없고, 필요한 부분만 호출을 하여 작업하게 되는데 이때 사용되는 것이 시스템 콜이다.
시스템 콜은 커널 영역의 기능을 사용자 모드가 가용 가능하게 즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 할 수 있게 해 준다. 따라서 응용 프로그램은 시스템 콜을 사용해서 원하는 기능을 수행할 수 있다.
보통 시스템 콜을 사용할 때는 직접 사용하기보다는 API를 통해 사용하게 된다.
시스템 콜의 종류
시스템 콜은 여러 종류의 기능으로 나뉘어 있다. 각 시스템 콜에는 번호가 할당되고 시스템 콜 인터페이스는 이러한 번호에 따라 인덱스 되는 테이블이 유지된다.
위에서 설명했던 것처럼 시스템 콜은 여러 종류의 기능이 나눠져 있는데 어떤 것들이 있는지 살펴보자.
- 프로세스 제어
- 프로세스 끝내기 / 중지 (exit / abort)
- 프로세스 적재 / 실행 (load / execute)
- 프로세스 생성 (create process) - fork
- 프로세스 속성 획득과 속성 설정
- 시간 대기 (wait time)
- 이벤트 대기 (wait event)
- 이벤트 알림 (signal event)
- 메모리 할당 및 해제
- 파일 조작
- 파일 생성 / 삭제 (create / delete)
- 파일 열기 / 닫기 / 읽기 / 쓰기 (open / close / read / write)
- 위치 변경 (reposition)
- 파일 속성 획득 / 설정 (get file attribute / set file attribute)
- 장치 관리
- 하드웨어의 제어와 상태 정보를 얻음 (ioctl)
- 장치요구 / 방출 (request device / relese device)
- 읽기 / 쓰기 / 위치 변경 (read / write / reposition)
- 장치 속성 획득 및 설정
- 장치의 논리적 부착 및 분리
- 정보 유지
- getpid(), alarm(), sleep()
- 시간과 날짜의 설정과 획득 (time)
- 시스템 데이터의 설정과 획득 (date)
- 프로세스 파일, 장치 속성의 획득 및 설정
- 통신
- pipe(), shm_open(), mmap()
- 통신 연결의 생성, 제거
- 메시지의 송신, 수신
- 상태 정보 전달
- 원격 장치의 부착 및 분리
- 보호
- chmod()
- umask()
- chown()
시스템 콜의 동작 방식
시스템 콜은 인터럽트의 일종으로 인터럽트와 유사한 방식으로 처리된다.
시스템 콜의 동작 방식을 알아보기 위해 응용 프로그램 실행 도중 하드 디스크의 데이터를 열어야 하는 상황이 발생했다고 가정해 보자.
먼저 파일을 열기 위해 Open() 이라는 시스템 콜을 호출한다.
응용 프로그램이 시스템 콜을 호출하면 해당 시스템 콜의 고유번호를 포함한 정보를 갖고 0x80 인터럽트를 발생시킨 다음 CPU 모드가 사용자 모드에서 커널 모드로 전환된다.
시스템 콜 처리 이후에 복귀할 때 사용하기 위해 현재 실행 중인 프로세스 상태, 레지스터 값, 메모리 주소 등을 해당 프로세스의 PCB에 저장한다.
인터럽트 벡터에서 요청받은 시스템 콜의 함수와 주소를 통해 인터럽트 서비스 루틴(ISR)의 주소를 찾아 파일을 읽기 위한 Open() 작업을 수행한다.
시스템 콜이 성공적으로 처리되면 커널에서 IRET(Interrupt Return) 명령어를 실행하여 커널 모드에서 사용자 모드로 전환되고 응용 프로그램이 시스템 콜을 호출한 위치로 돌아간다.
'CS > OS' 카테고리의 다른 글
운영체제 - 주소 공간과 가상 메모리 (0) | 2024.06.30 |
---|---|
운영체제 - PCB와 Context Switching (0) | 2024.06.27 |
운영체제 - 인터럽트(Interrupt) (0) | 2024.06.25 |
운영체제 - CPU 스케줄링 알고리즘 (0) | 2023.10.26 |
운영체제 - 프로세스와 스레드 (0) | 2023.10.24 |