Computer Science/Operating System

[운영체제] 운영체제 구조 - 시스템콜, 사용자 모드, 커널 모드

HJChung 2021. 2. 6. 17:24

여기서 응용 프로그램, 운영체제, 컴퓨터 하드웨어(시스템 리소스)를 도서관에 비유해보면

  • 운영체제 - 도서관
  • 응용 프로그램 - 시민
  • 컴퓨터 하드웨어 - 책

- 그래서 응용 프로그램(시민)이 운영체제(도서관)에서 컴퓨터 하드웨어(자원; 책)을 요청하면

- 운영체제(도서관)은 적절한 컴퓨터 하드에어(책)을 찾아서 응용 프로그램(시민)에게 빌려줌(즉, 하드웨어를 자깐 쓸 수 있게 해준 뒤)

- 응용 프로그램(시민)이 사용할 기간이 다 되면, 운영체제(도서관)이 해당 컴퓨터 하드에어(책)을 회수한다.

 

이렇듯 응용 프로그램, 운영체제, 컴퓨터 하드웨어(시스템 리소스)의 관계를 다시 설명하면, 

- 운영체제는 응용 프로그램이 요쳥하는 메모리를 허가하고, 분배한다. 

- 운영체제는 응용 프로그램이 요청하는 CPU 시간을 제공한다. 

- 운영체제는 응용 프로그램이 요청하는 I/O Devices의 사용을 허가/제안한다. 

 

그리고 이를 도식화 하면

또한 OS는 사용자 인터페이스를 제공하기 때문에 사용자가 OS의 기능과 서비스를 조작  할 수도 있다. 

이렇게 사용자가 OS의 기능과 서비스를 조작 할 수 있도록 인터페이스를 제공하는 프로그램을 Shell(쉘)이라고 하며, 쉘은 터미널 환경과 GUI환경이 있다. 

 

그럼 사용자는 OS와 Shell을 통해 서로 요청을 주고 받는데(커뮤니케이션 하는데), 응용 프로그램은 OS와 어떤 방식으로 커뮤니케이션 하는 것일까? 응용 프로그램은 프로그래밍 코드를 통해 OS에 뭔가를 요청하는데, 이게 API(Applicattion Programming Interface)라는 형태로 응용 프로그램과 OS와 커뮤를 위한 인터페이스이다.

- 각 응용 프로그램마다 OS를 사용할 수 있는 함수들이 있는데 이 API가 함수의 형태로 제공된 것이다. 

ex. open(): 파일을 여는데 사용하는 open()이라는 함수는 API의 한 형태로 볼 수 있다.

- 그리고 이러한 함수들이 너무 많기 때문에 보통 라이브러리 형태로 제공된다. 

- 이 중 OS는 응용 프로그램이 OS의 각 기능을 사용할 수 있도록 시스템콜이라는 명령 또는 함수를 제공하는데, 그래서 API 내부에는 시스템콜을 호출하는 형태로 만들어지는 경우가 대부분이다. 

 

 

너무 헷갈리지만 다시 정리하면, 

API는 각 언어별 운영체제  기능 호출 인터페이스 함수

시스템콜은 운영체제 기능을 호출하는 함수 이고, 

보통 시스템콜을 직접 사용하기 보다 해당 시스템콜을 사용하여 만든 각 언어별 API를 사용하여 응용프로그램이 프로그래밍 되어 있다. 

 

사용자 모드와 커널 모드 

사용자 프로그램의 잘못된 수행으로 다른 프로그램 미치 운영체제에 피해가 가지 않도록 하기 위한 보호 장치가 필요하고, 이를 위해 CPU는 권한 모드라는게 있다. 

Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation을 지원한다. 

  • 1: 사용자 모드(user mode by applications): 사용자 프로그램의 일반적인 명령 수행 할 때 쓰이는 모드
  • 0: 커널(모니터) 모드(kernel mode by OS): OS 코드 수행

우리가 만든 프로그램(응용 프로그램)은 사용자 영역에 있고, OS가 제공하는 시스템콜에 해당되는 코드는 커널 모드로 실행된다. 

코드를 예시로 이렇게 사용자 모드와 커널 모드를  왔다갔다하며 수행되는 모습을 보면 아래와 같다.