운영체제의 구조와 커널의 종류

JUN·2024년 11월 28일
0

CS

목록 보기
5/6

운영체제란 무엇인가?

운영체제는 사용자와 하드웨어 사이의 인터페이스 역할을 하는 소프트웨어의 집합이다.

여기서 인터페이스 라는 단어를 사용한 이유는 사용자가 하드웨어를 직접 조종하지 않고 운영체제를 통해 하드웨어 자원의 사용을 제어하고 조종하는 중개자 역할을 하기 때문

운영체제의 구조

운영체제는 크게 커널과 인터페이스로 이루어져 있다. 커널은 자원의 추상화와 관리가 이루어지는 공간이고 인터페이스는 각 커널과 상호작용하는 소프트웨어 계층 사이를 중개해주는 연결 장치를 말합니다.

커널

커널은 운영체제의 핵심으로 하드웨어의 자원을 자원을 추상화하여 필요한 프로세스들에게 나눠주는 운영체제의 핵심 자원 관리자이다.

여기서 추상화를 사용한다는 것은, 하나의 하드웨어 자원을 논리적인 단위로 변환하여 여러 프로세스나 태스크들이 하드웨어를 직접 제어하지 않고도 사용할 수 있도록 중재자 역할을 한다는 의미이다.

하드웨어 자원의 추상화

커널은 각 하드웨어 자원들을 특정 관리자를 통해 추상화한다.

관리자하드웨어추상화 결과
태스크 관리자CPU태스크(task)
메모리 관리자메모리페이지(page), 세그먼트(segment)
파일 시스템 관리자디스크파일(file)
네트워크 관리자네트워크소켓(socket)

이러한 관리자를 통해서 컴퓨터의 하드웨어에 대한 세부 사항들을 몰라도 사용자는 쉽고 일관된 방식으로 컴퓨터를 사용할 수 있게 된다.

커널의 종류

커널의 구조에 따라 하드웨어 자원을 관리하고 시스템 호출을 처리하는 방식이 달라진다.

커널의 종류는 구조에 따라 크게 모놀리식 커널, 계층형 커널, 마이크로 커널, 하이브리드 커널로 나눌 수 있다.

  1. 모놀리식 커널

    • 특징 :
      • 커널 내에 운영체제의 모든 주요 기능을 포함한다.
      • 단일 큰 블록으로 동작하고 커널 모드에서 모든 작업을 수행한다.
      • 시스템 콜 : 시스템 콜이 호출되면 커널 내부에서 직접 처리된다.
        • 예를 들어, read() 시스템 콜을 호출하면 파일 시스템 모듈이 커널 내부에서 동작하여 파일을 읽는 작업을 수행한다.
    • 장점:
      • 커널 내부에서 모든 작업이 이루어지므로 모듈간 통신 비용이 적어져 오버헤드가 적다.
    • 단점:
      • 하나의 오류가 커널 전체에 영향을 미칠 가능성이 높고 수정이 어려움.
    • 예시 : Linux 커널 (전형적인 모놀리식 커널이다. 단, 해당 구조의 단점을 보완하기 위해 모듈화를 도입하여 모듈형 모놀리식 커널로 발전했다.), Unix 커널
  2. 계층형 커널(Layered kernel)

    • 특징:
      • 커널이 가진 모듈을 묶어 계층으로 나누고 계층간 인터페이스를 통한 통신을 통해 운영체제를 구현하는 방식이다.
      • 일반적으로 하위 계층은 하드웨어와 가깝고 상위 계층은 사용자와 가까운 추상화 수준을 가진다.
      • 시스템 콜 : 시스템 콜이 호출되면 해당 요청은 계층적으로 전달되며 처리된다.
        • 예를 들어, read() 시스템 콜은 파일 시스템 계층을 통해 디스크 I/O 계층으로 전달되어 최종적으로 하드웨어에 접근한다.
    • 장점:
      • 모듈화: 각 계층별로 독립성이 보장되어 특정 계층을 수정하거나 교체해도 다른 계층에 영향을 주지 않는다.
      • 추상화: 하드웨어 세부사항을 상위 계층에서 숨길 수 있다.
    • 단점:
      • 계층간 호출이 많아질수록 오버헤드가 증가하여 성능이 저하될 수 있다.
    • 예시:
      • THE 운영체제: 1960년 다익스트라가 설계한 최초의 계층형 커널 운영체제
      • Windows NT(초기버전): HAL(Haredware Abstraction Layer)를 통해 하드웨어와 커널 간 계층화 구현
  3. 마이크로 커널

    • 특징 :
      • 커널은 최소한의 기능(프로세스 관리, 메모리 관리, IPC 등)만을 포함하여 kernel mode 에서 실행하고 나머지 기능(파일 시스템, 네트워크 등)은 User mode에서 실행한다.
      • 커널 모드와 유저 모드 사이의 통신에는 시스템콜을 사용하고 유저 모드 사이의 통신은 IPC를 사용함.
      • 시스템 콜 : 시스템 콜은 커널에서 최소한의 작업(예: IPC로 요청 전달)을 수행하고, 실제 작업은 유저 모드 서비스에서 처리된다.
        • 예를 들어 read() 시스템 콜을 호출하면 파일 시스템 서버(유저모드)로 요청을 전달하고 해당 서버가 작업을 처리한 후 결과를 반환한다.
    • 장점:
      • 각 기능이 독립적으로 실행되어 오류가 전체에 미치는 영향이 적다.
    • 단점:
      • 커널모드와 사용자 모드 간 빈번한 통신으로 성능이 떨어질 수 있다.
    • 예시: Minix, QNX
  4. 하이브리드 커널

    • 특징:
      • 모놀리식 커널과 마이크로커널의 장점을 결합한 구조
      • 일부 기능은 커널 모드에서 실행되지만, 독립적인 모듈로 관리되어 유연성을 제공
      • 시스템 콜 : 시스템 콜은 커널 내부에서 처리되거나, 필요한 경우 일부 작업이 사용자 모드 서비스로 전달된다.
        • 예를 들어, read() 시스템 콜은 하드웨어와 직접 관련된 작업은 커널 내부에서 처리하고, 복잡한 파일 시스템 작업은 사용자 모드 서비스로 위임될 수 있다.
    • 장점:
      • 성능과 안정성 사이의 균형 제공
    • 단점:
      • 설계가 복잡하고, 모듈 간 통합 문제가 발생할 수 있음
    • 예시: Windows NT, macOS

Dual Mode

운영체제는 시스템의 안전성과 보안을 위해 CPU 실행 모드를 사용자 모드(User Mode)와 커널 모드(Kernel Mode)로 구분하여 관리한다. 이를 Dual Mode라고 한다.

왜 이렇게 구분할까?

만약 이러한 듀얼 모드를 지원하지 않을 경우 (여러 응용 프로그램들이 CPU, 메모리 등의 자원에 직접적으로 접근하고 조작할 경우) 자원의 공유가 무질서하게 관리될 것이고 응용 프로그램들이 조금만 실수해도 컴퓨터 전체에 악영향을 끼칠 수 있을 것이다.
그렇기에 모드를 논리적으로 나누고 이 사이에 시스템 콜 인터페이스를 둠으로써 이를 막을 수 있다.

사용자 모드 (User Mode)

  • 일반적인 응용 프로그램이 실행되는 모드
  • 하드웨어 자원에 직접 접근 불가능
  • 커널 영역의 코드를 실행할 수 없음

커널 모드 (Kernel Mode)

  • 운영체제가 실행되는 모드
  • 모든 종류의 명령어 실행 가능
  • 하드웨어 자원에 직접 접근 가능

모드 전환

  • 슈퍼바이저 플래그로 현재 모드 구분
    • 0: 사용자 모드
    • 1: 커널 모드
  • 사용자 모드에서 실행 중인 프로그램이 시스템 자원을 필요로 할 때, 반드시 커널 모드로 전환되어야 한다.
  • 이때 시스템 콜을 통해 모드의 전환이 이루어진다.

시스템 콜

시스템 콜은 커널이 사용자나 프로그램이 커널에 직접 접근하는 것을 막기위해 만들어진 인터페이스이다.

시스템 콜 인터페이스는 User Space와 Kernel Space의 경계에서 동작하며, 커널 내부의 적절한 모듈로 요청을 전달하는 역할을 한다.

앞서 User 모드 와 Kernal Space의 사이에 시스템 콜을 통해 모드의 전환이 이루어진다고 했다.

즉, User Interface의 작업들이 커널이 관리하는 자원에 접근해야 할 때, System Call Interface를 통해 Kernel Space의 자원 관리자에게 요청이 전달되어 처리되는 것이다.

시스템 콜의 처리 위치

시스템 콜은 모든 커널에서 기본적으로 커널 모드에서 실행되지만, 커널의 구조에 따라 시스템 콜의 처리 위치와 방식이 약간씩 달라진다.

  • 모놀리식 커널: 시스템 콜은 커널 내부에서 직접 처리됨 (가장 빠름).
  • 마이크로커널: 커널은 시스템 콜을 유저 모드 서비스로 전달함 (더 안전하지만 느림).
  • 계층형 커널: 계층적으로 시스템 콜이 처리됨.
  • 하이브리드 커널: 필요에 따라 커널 또는 유저 모드 서비스에서 처리됨.

우리가 사용하는 대부분의 상용 운영체제(예: Linux, Windows, macOS)는 모놀리식 커널 또는 하이브리드 커널 기반으로 시스템 콜을 처리한다.

시스템 콜의 유형

시스템 콜은 커널에서 지원하는 서비스에 따라 유형이 나뉜다. 크게 프로세스 제어, 파일 조작, 장치 관리, 정보 유지, 통신 등으로 조작할 수 있다.

카테고리주요 작업예시
프로세스 제어프로세스 생성, 종료, 대기fork(), exec(), wait()
파일 관리파일 열기, 읽기, 쓰기, 닫기open(), read(), write()
디바이스 관리디바이스와 데이터 입출력ioctl(), read(), write()
정보 유지시스템 정보 조회 및 설정getpid(), gettimeofday()
통신프로세스 간 데이터 교환pipe(), socket(), send()
메모리 관리메모리 할당, 해제mmap(), brk(), munmap()
보안인증 및 권한 관리setuid(), getuid(), chmod()

서로 다른 시스템 콜의 구분.

  • 시스템 콜 번호로 구분
    운영체제는 각 시스템 콜에 고유한 번호를 부여한다. 시스템 콜 인터페이스는 이 번호를 통해 어떤 호출인지 식별할 수 있다. (ex. read() 는 시스템 콜 번호 3 으로 식별 가능)
  • 시스템 콜 이름 으로 구분
    시스템 콜 인터페이스가 호출된 함수 이름으로 해당 작업을 구분 가능하다.
  • 인자(파라미터) 로 구분
    전달된 인자(파일 디스크립터, 크기 등)를 통해 작업의 세부 사항을 파악한다.

Shell 은 무엇인가?

  • 정의: 사용자가 운영체제와 상호작용할 수 있도록 명령 해석기(CI)를 포함한 인터페이스

    명령 해석기 ( Command Interpreter )

    사용자가 입력한 명령어를 해석하고 그에 따라 작업을 수행하는 프로그램

    역할: 명령어를 파싱(parse)하고, 해당 명령어에 맞는 작업을 시스템에 요청하거나 프로세스를 실행.

    명령 인터프리터의 구현 방식 두가지

    1. 명령 인터프리터 자체가 명령을 실행하는 방식:
      • 명령 인터프리터 자체가 각 명령어를 처리하는 로직을 가지고 있음.
      • 이 경우 명령어와 처리 로직이 인터프리터에 포함되어있어 새로운 명령어를 추가하려면 인터프리터 자체의 변경이 필요
      • 예) echo
    2. 시스템 프로그램이 명령을 실행하는 방식:
      • 명령 인터프리터가 명령을 실행할 코드 자체를 가지고 있는 대신 명령을 입력받으면 해당 명령어가 가리키는 쉘 스크립트 파일이나 바이너리 파일을 통해 실행됨.
      • 예) rm {파일이름} : /bin/rm 경로의 바이너리 파일이 {파일이름} 같은 파일을 삭제하는 수행.
  • 기본적으로 커널은 쉘로 감싸져있음
  • 운영체제의 필수 구성 요소 중 하나이며, 다양한 종류의 쉘이 존재.
  • 또한 쉘 커맨드 라인들의 묶음인 쉘 스크립트를 통해 반복적인 작업을 자동화하고, 복잡한 시스템 작업을 간단히 수행할 수 있음.
  • 종류:
    • Bash (Bourne Again Shell): 리눅스에서 기본적으로 많이 사용되며, 강력한 스크립트 기능명령어 자동 완성을 제공한다.
    • Zsh (Z Shell): 사용자 맞춤형 설정강력한 자동 완성 기능을 제공하며, 플러그인 시스템으로 확장 가능하다.

결론.

CS 스터디를 하면서 조사했던 운영체제 부분을 정리해보았다.
아티클과 책들을 읽으며 정리하는 과정에서, 각 저자마다 커널과 시스템 콜의 역할을 다르게 설명하는 부분이 많아 교차검증에 시간이 많이 소요되었다.
알고 보니 실제로 커널마다 시스템 콜의 동작 방식과 구조가 달랐기 때문이었다.

이를 통해 개념적인 이해와 실제 구현의 차이를 이해하는 것이 얼마나 중요한지 다시 한번 깨달았다.

참고

https://www.quora.com/What-is-the-difference-between-an-interpreter-and-a-shell
https://imbf.github.io/computer-science(cs)/2020/09/03/Operating-System-Structures.html
https://wikidocs.net/230921
https://hongong.hanbit.co.kr/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EB%9E%80-%EC%BB%A4%EB%84%90%EC%9D%98-%EA%B0%9C%EB%85%90-%EC%9D%91%EC%9A%A9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%8B%A4%ED%96%89%EC%9D%84-%EC%9C%84%ED%95%9C/

profile
순간은 기록하고 반복은 단순화하자 🚀

0개의 댓글