시스템 콜(System Call)
은 OS에 의해 사용가능한 서비스에 대한 인터페이스를 제공한다.
1. 예제(Example)
OS가 어떻게 시스템 콜을 사용할 수 있게 하는지 살펴보기 전에 시스템 콜이 어떻게 사용되는지
를 설명하는 예시를 보자.
ex) 하나의 파일에서 데이터를 읽어와서 다른 파일로 복사하는 간단한 프로그램을 작성한다.
그러면 크게 아래의 과정을 생각해 볼 수 있다.
1) 파일 이름을 얻어내는 작업
2) 입력 파일을 열고 출력 파일을 생성 후 여는 작업
3) 입력 파일에서 내용을 읽어서(read) 출력 파일에 쓰는(write) 작업
4) 전체 파일이 복사된 이후 파일을 닫고 기록 후 정상 종료
여기에 각 단계에서 발생할 수 있는 오류 처리
도 시스템 콜을 이용한다.
이러한 순서를 아래 그림으로 표현하면 다음과 같다.

2. API (Application Programming Interface)
1과 같이 간단한 프로그램이라도 OS의 기능을 아주 많이 사용해야 한다.
하지만, 개발자들이 프로그램을 만들 때 마다 시스템 콜을 직접 이용하지는 않고 API
를 통해서 시스템 콜을 이용한다.
Unix와 LInux 시스템에서는 C 언어로 작성된 프로그램을 위해 제공되는 libc
라는 라이브러리를 제공한다.
- 실제 시스템 콜이 아닌 API를 통해 시스템 콜을 사용하는 이유
1) 프로그램과의 호환성
2) API의 사용 편의성 : 실제 시스템 콜을 사용하기 위해서는 복잡한 명세(specification)가 필요함
시스템 콜을 처리하는데 있어 중요한 요소는 실행시간 환경(RunTime Environment, RTE)
이다.RTE
란 컴파일러 또는 인터프리터, 라이브러리 또는 로더와 같은 SW까지 포함한 특정 프로그래밍 언어로 작성된 응용 프로그램을 실행하는데 필요한 전체 SW 제품 모음
을 말한다.
RTE
는 OS가 제공하는 시스템 콜에 대한 연결고리 역할을 하는 시스템 콜 인터페이스
를 제공한다. 시스템 콜 인터페이스
를 통해 API 함수의 호출을 가로채서 필요한 OS의 시스템 콜을 호출한다.
일반적으로 시스템 콜은 번호가 할당
되고 시스템 콜 인터페이스
는 이 번호에 따라 인덱싱되어있는 테이블을 갖고 있다.시스템 콜 인터페이스
는 시스템 콜을 호출하고 해당 시스템 콜의 상태와 반환 값을 출력한다.
호출자는 시스템 콜의 구현 내용을 몰라도 API의 사용 방법
을 파악해서 OS가 이를 통해 무슨 동작을 하는지만 파악하면 된다.
즉, 자세한 내용들은 API에 의해서 숨겨지고 RTE에 의해서 관리된다.
- open() 이라는 시스템 콜을 호출했을 떄 OS가 어떻게 처리하는지 설명하는 그림

OS에 매개변수를 전달하기 위해서 일반적으로 3가지 방법을 사용한다.
1) 매개변수를 register 내에서 전달 : 가장 간단한 방법.
2) 매개변수를 메모리 내의 블록이나 테이블에 저장해서 블록의 주소를 register를 통해서 전달하는 방법
3) 매개변수를 스택에 넣는 방법
3. 시스템 콜의 유형

'OS Concepts 10th' 카테고리의 다른 글
[OS] 2-8. OS 구조 (0) | 2023.09.02 |
---|---|
[OS] 2-5. 링커와 로더(Linker and Loader) (0) | 2023.09.02 |
[OS] 2-2. User and OS Interface (0) | 2023.08.16 |
[OS] 2-1. Operating-System Services (0) | 2023.08.16 |
[OS] Chapter 2. Operating-System Structure (0) | 2023.08.16 |