본문 바로가기
CS

[운영체제] 커널과 시스템 콜, API의 관계

by 벨롭 2023. 10. 12.

운영체제를 공부하다보면, 운영체제의 구조와 각각의 역할은 알겠는데 그래서 어떻게 유기적으로 작동하는지 헷갈리기가 쉽다. 최대한 쉽게 설명하기 위해 핵심적인 관계만 설명하고자 한다. 

 

 

 

 

커널

 

운영체제는 사용자나 응용프로그램이 하드웨어를 편리하게 사용할 수 있도록 하는 일종의 소프트웨어다. 특히나 하드웨어의 자원에 접근하고 조정하는 기능이 핵심이라고 할 수 있는데, 운영체제에서 이 핵심 서비스를 담당하는 부분을 커널(kernel)이라고 한다. 

 

사용자나 응용프로그램이 직접 하드웨어의 자원에 접근하고 조작하지 않고, 왜 커널이라는 한 다리를 거쳐야할까? 

 

 

 

 

 

 

미술관에 전시된 작품을 아무나 만질 수 있다고 생각해보자. 큐레이터처럼 조심조심 작품을 만지는 사람들도 있겠지만, 누군가는 작품을 훼손시킬 수도 있다. 마찬가지로 응용프로그램이 직접 하드웨어의 자원에 접근한다면 만약 사용자가 실수로 하드웨어의 핵심적인 데이터를 지우게 될 지도 모른다. 그래서 응용프로그램이 커널을 통해서만 하드웨어에 접근할 수 있도록 해서 하드웨어 자원을 보호해야한다.

 

 

 

 

 

 

 

 

 

 

시스템 콜

 

 

특별한 필요성이 생겨 미술 작품을 꼭 만져야 하는 일이 생겼다고 해보자. 미술 작품을 만지기 위해서는 미술관에다가 이 작품을 만져도 될까요? 하고 허락을 구해야한다. 응용프로그램도 하드웨어의 자원에 접근하기 위해서는 마음대로 커널의 기능을 쓰지 말고 먼저 운영체제에게 요청을 해야한다. 운영체제는 요청을 받으면 커널 영역 내의 코드를 실행해 응용 프로그램의 작업을 대신 수행해준다. 이 요청이 바로 시스템 콜이다. 

 

 

 

 

 

 

 

 

 

 

 

 

API

 

미술관의 큐레이터가 한국인이라고 생각해보자. 만약 프랑스인이 와서 불어로 작품을 만지게 해달라고 해봤자, 큐레이터는 그 요청을 이해할 수 없다. 이와 같이, 운영체제는 주로 C나 C++등의 언어를 사용해서 만들어진다. 그런데 JAVA로 쾅쾅쾅 문두드리며 시스템 콜을 해봤자 운영체제가 알아들을 수가 없다. 그래서 사용하는 것이 바로 API (Application Programming Interface)다. 

 

 

 

 

 

 

 

 

API는 쉽게 말하면 사전이다. 이 사전에는 프로그래머가 사용할 수 있는 함수가 실려있고, 각 함수들마다 함수의 뜻이 적혀 있다. 사용자가 open이라고 코드를 작성하면 API를 통해 운영체제가 알아들을 수 있는 말로 번역되는 것이다. 이때 필요하다면 운영체제의 시스템 콜을 호출한다. 사용자가 python을 사용한다면 python에 맞는 API가 필요할 것이고, 또 다른 언어를 사용한다면 또 그 언어에 맞는 API가 필요할 것이다. 또, 자바를 배운 사람이라면, 자바는 프로그램이 실행될 때 자바 가상 머신(JVM)을 통해 실행된다는 말을 들어보았을 것이다. 바로 이 JVM이 자바 API를 제공해주는 것이다.