본문 바로가기
OS

System Call 시스템 호출, 그리고 API

by tovantablack 2020. 7. 30.
728x90
728x90

시스템 호출은 운영체제가 제공하는 서비스에 대한 인터페이스를 제공함

각 동작을 할 때마다(인터페이스를 필요로 할 때마다) 시스템 호출이 필요하다고 보면 됨.

 

ex) 한 파일로부터 데이터를 읽어 다른 파일로 복사하는 프로그램일 때,

1. 입력 파일 이름 획득을 위한 인터페이스(키보드)

2. 화면에 프롬프트를 출력하기 위한 인터페이스(윈도우)

3. 입력을 받아들이기 위한 인터페이스

4~6. 1~3이랑 똑같은 건데 출력용

7. 입력 파일 열기 인터페이스(마우스)

8. 파일이 존재하지 않을 경우, 비정상적으로 종료하는 인터페이스(콘솔, 메세지 출력)

9~10. 7~8이랑 똑같은 건데 출력용

...

이렇게 많은 인터페이스를 제공해야 할 때마다 각기 다른 시스템 호출이 일어나는 것!

=> 보통 간단한 프로그램이라도 초당 수천 개의 시스템 호출을 실행하게 된다.

 

근데 이렇게 일일이 세부사항 코딩하기 힘드니까 각 함수에 전달되어야 할 매개변수들과 반환 값을 포함하여 사용 가능한 함수의 집합을 명시해놓은 API를 사용한다. (글고 시스템 호출은 사용되는 컴터에 따라 다른 방법으로 발생하는 반면, API는 프로그램 호환성도 있어서 코딩결과값을 유추하기 더 쉬움)

각 운영체제는 고유의 시스템 호출 이름을 가지고, API를 구성하는 함수들은 응용프로그래머를 대신하여 실제 시스템 호출을 호출한다.

 

시스템 호출의 또 다른 기능) 

시스템 호출은 프로그램 디버깅할 때도 유용하다. 많은 시스템들이 메모리를 덤프하기 위해 시스템 호출을 제공하기 때문인데, 프로그램 추적은 각 명령어가 실행될 때 이들을 하나씩 나열하며, 이러한 시스템 호출은 소수의 시스템에서만 제공된다는 아쉬운 점이 있다.. 근데 마이크로프로세서들도 '단일 단계'라고 불리는 CPU 모드를 제공하는데 여기서 매번 명령어 실행 후 CPU에 의해 트랩이 실행되고, 트랩은 보통 디버거에 의해 포착되니 너무 아쉬워 하진 말자.

 

다음 편에는 시스템 호출의 유형에 대해 다루겠다(위에 내용이 정보의 유지 유형에 속한다).

포스팅의 모든 내용은 구글과 operating system concepts 8th edition에서 나옴요

728x90
728x90

댓글