OS Concepts 10th

[OS] 2-3. 시스템 콜

patrick-star 2023. 8. 21. 20:40
728x90

시스템 콜(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