둘셋 개발!

[운영체제] 운영체제란? (정의, 역할, 커널 종류) 본문

운영체제

[운영체제] 운영체제란? (정의, 역할, 커널 종류)

23 2023. 7. 25. 13:11

운영체제란?

운영체제란 한마디로 정의하면 '컴퓨터 자원'을 효율적으로 관리하는 소프트웨어이다.

여기서 컴퓨터 자원이란 컴퓨터 하드웨어라고 생각하면 된다. CPU, 메모리, 모니터, 마우스 등이다.

이러한 컴퓨터 자원은 한정적이기 때문에 여러 프로그램들은 이를 사용하기 위해 경쟁을 할 수밖에 없다.

이때 운영체제는 기본적인 규칙과 절차를 규정해서 자원을 효율적으로 배분하면서 컴퓨터 전체를 관리하고 운영한다.

대표적인 예로 윈도우, Mac OS, 리눅스, IOS, 안드로이드가 있다.

 

그렇다면 컴퓨터에서 운영체제는 어디에 있는 것인가?

먼저 그림으로 살펴보자.

컴퓨터 구조

(이미지 출처: https://math-coding.tistory.com/80)

응용프로그램과 하드웨어 사이에서 동작하는 소프트웨어라고 생각하면 된다.

응용프로그램들은 컴퓨터 자원을 사용해야 하지만, 직접 접근하지 못한다. 꼭 커널을 통해서만 접근할 수 있다.(효율, 보안상의 이유로) 

커널이란, 운영체제의 핵심 기능을 모아놓은 것이다. 운영체제! 라고 생각해도 괜찮다.

 

이때 커널에 접근하는 방법은 인터페이스를 사용하는 것이다.

인터페이스를 이용해서 커널에게 명령을 내리고 인터페이스는 그 결과를 전달해 준다.

 

그림에 보이는 인터페이스(GUI)는 그래픽 사용자 인터페이스로, 마우스나 손가락으로 터치해서 컴퓨터 자원을 사용하는 것이다.

인터페이스는 이것 말고도 CUI, API 등이 있다.

CUI는 Command User Interface로 터미널 혹은 명령 프롬프트에서 텍스트로 명령을 내리는 방식이다.

API는 Application programming interface의 약자로 응용 프로그램이 자신과 연관된 프로그램을 개발할 수 있도록 제공하는 인터페이스이다. 즉, 운영체제가 제공하는 API를 사용하면 커널에 접근할 수 있다.

 

그림에서 인터페이스와 커널 사이에 시스템 호출이라는 게 있다. 이건 뭘까?

인터페이스를 사용하면, 인터페이스 내에서 시스템 호출을 통하여 커널에 접근하여 컴퓨터 자원을 사용해서 원하는 동작을 하는 것이다.

뭐 직접 시스템 호출을 사용할 수도 있다. 

 

다음은 c언어를 사용해서 리눅스 환경에서 직접 시스템 호출을 하는 예시이다.

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
    // 파일을 생성하기 위해 open 시스템 호출 사용
    int fd = open("example.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd == -1) {
        perror("파일 생성 오류");
        return 1;
    }

    // 파일에 텍스트 쓰기 위해 write 시스템 호출 사용
    const char *text = "Hello, System Calls!";
    int bytes_written = write(fd, text, strlen(text));
    if (bytes_written == -1) {
        perror("파일 쓰기 오류");
        return 1;
    }

    // 파일 디스크립터 닫기 위해 close 시스템 호출 사용
    if (close(fd) == -1) {
        perror("파일 닫기 오류");
        return 1;
    }

    printf("파일 생성 및 쓰기 완료.\n");
    return 0;
}

 


운영체제의 역할

1. 자원관리

     한정적인 컴퓨터 자원을 응용프로그램에게 적당한 순서로 자원을 배분하고 적절한 시점에 자원을 회수한다.  

     이렇게 효율적으로 자원을 관리함으로써 사용자가 원활하게 작업을 할 수 있도록 한다.

 

2. 자원 보호

     고의적으로든 아니든 사용자에게서 자원을 보호하는 역할을 한다. 한 응용프로그램이 다른 비정상적이 작업을 하는 것을 막음으로써 안정성을 제공한다.

     

3. 하드웨어 인터페이스 제공

     다양한 하드웨어를 복잡한 과정 없이 사용할 수 있도록 하드웨어 인터페이스를 제공한다. (확장성 제공)

     하드웨어 인터페이스의 지원을 받으려면 드라이버를 컴퓨터에 설치해야 한다. 대부분의 드라이버는 운영체제를 설치할 때 자동으로 설치가 되어 있지만, 일부 하드웨어는 따로 설치해야한다.

 

4. 사용자 인터페이스 제공

     사용자가 운영체제를 편리하게 사용할 수 있게끔 사용자 인터페이스를 제공한다. 대표적으로 GUI를 제공하면서 마우스를 대부분의 작업을 할 수 있다. 스마트폰은 터치스크린이 사용자 인터페이스이다.

 


커널의 종류

앞에서도 말했다 시피 운영체제의 핵심기능을 모아놓은 것이 커널이라고 했다.

핵심 기능은 프로세스 관리, 메모리 관리, 파일 시스템 관리 ,입출력 관리, 프로세스 간 통신 관리이다.

이 기능들을 커널에서 하는 것이다.

 

이 기능들은 유기적으로 복합하게 얽혀 있다. 어떻게 구현하는지에 따라 단일형 구조 커널, 계층형 구조 커널, 마이크로 구조 커널로 구분된다.

 

1. 단일형 구조 커널

  커널의 핵심 기능들이 구분 없이 하나로 구성되어 있는 형태이다. 분리되어 있지 않는다.

이 구조는 초창기 운영체제의 구조이다.

 

단일형 구조 커널

   (이미지 출처: https://bnzn2426.tistory.com/41)

 

👍  장점

           - 모듈간의 통신 비용이 줄어들어 속도가 빠르다.

👎 단점 

           - 버그나 오류 찾기가 힘들다.

           - 모듈간의 상호의존도가 높기 때문에 기능상 작은 결함이 전체로 확산될 수 있다.

           - 수정하기가 어렵기 때문에 이식성이 낮다.

 

 

2. 계층형 구조 커널

비슷한 기능을 가진 모듈을 묶어서 하나의 계층을 만들고, 계층 간의 통신을 통해 운영체제를 구성한다.

계층형 구조 커널

(이미지 출처: https://math-coding.tistory.com/80)

 

👍  장점

           - 오류가 발생한 계층만 수정하면 되기 때문에 디버깅이 쉽다.

👎 단점 

           (계층을 만들고 그에따른 기능도 추가되었기 때문에 커널의 크기가 커쳐 소스양이 많아서)

               -  디버깅이 어려움

               - 필요한 하드웨어 용량이 증가함

 

 

3.  마이크로 구조 커널

계층형 구조 커널의 문제를 해결하기 위해 나온 구조로, 기본적인 기능만 제공하고 다른 기능들은 사용자 영역에 구현되어 있다.

핵심기능들만 커널에 남겨둔 가볍게 만든 최소한의 커널이다. 그렇기 때문에 임베디드 기기의 운영체제로 주로 사용된다.

 

마이크로 구조 커널

👍  장점

           - 10,000줄 이하의 코드로 구현되기 때문에 소스 유지관리가 쉽고 커널의 보안과 안전성이 높일 수 있다.

👎 단점 

           - 프로세스간 통신을 통해 대부분의 서비스가 수행되기 때문에 컨테스트 스위칭이 많이 발생해서 시스템 복잡도가 높아질 수록 오버헤드가 급격히 증가할 수 있고 성능이 저하될 수 있다.


ref

https://m.blog.naver.com/techref/222238471338

https://bnzn2426.tistory.com/41

https://analysis-flood.tistory.com/129