운영체제는 커널과 인터페이스를 분리하여, 같은 커널이어도 다른 인터페이스 형태로 제작이 가능합니다.
예를 들어 UNIX의 사용자 인터페이스는 쉘(Shell)이라고 하며, bash 쉘, C 쉘, T 쉘 등 여러 종류의 쉘이 있습니다.
이처럼 인터페이스에 따라 사용자가 사용하기에 불편함의 정도가 달라서 운영체제를 어렵게 느끼곤 합니다.
✔️ 커널
프로세스 관리, 메모리 관리, 저장장치관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것으로,
자동차가 운영체제라고 한다면 엔진은 커널에 해당합니다.
📌 커널의 역할
프로세스 관리 | 프로세스에 CPU를 분배하고 작업에 필요한 제반 환경을 제공합니다. |
메모리 관리 | 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공합니다. |
파일 시스템 관리 | 데이터 저장하고 접근할 수 있는 인터페이스를 제공합니다. |
입출력 관리 | 필요한 입출력 서비스를 제공합니다. |
프로세스 간 통신 관리 | 공동 작업을 위한 각 프로세스 간 통신 환경을 제공합니다. |
📌 커널의 종류
1. 단일형 구조 커널
초창기의 운영체제 구조로 커널의 핵심 기능 모듈들이 구분 없이 하나로 구성되어 있습니다.
대표적인 운영체제는 MS-DOS, VMS 등이 있습니다.
쉽게 프로그램에서 main() 함수에 모든 기능을 구현한 것과 같습니다.
- 장점
- 모듈이 거의 분리되지 않았기 때문에 모듈 간의 통신 비용이 줄어들어 효율적인 운영이 가능하다.
- 단점
- 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류 처리하기가 어렵다.
- 운영체제의 여러 기능이 서로 연결되어 있어 상호 의존성이 높기 때문에 기능상 작은 결함이 시스템 전체 성능 문제를 야기할 수 있다.
- 수정이 불가능하기 때문에 다양한 환경 시스템에 적용이 어렵다.
2. 계층형 구조 커널
비슷한 기능을 가진 모듈을 묶어 하나의 계층으로 만들어서 계층 간의 통신을 통해 운영체제를 구현하는 방식입니다.
윈도우 등 오늘 날의 운영체제가 대부분 이런 구조를 가지고 있습니다.
- 장점
- 비슷한 기능을 모두 모듈화했기 때문에 단일형 구조보다 버그나 오류를 쉽게 수정할 수 있다.
- 오류 발생 시 해당 계층만 고치면 되기 때문에 디버깅도 수월하다.
- 단점
- 계층이 존재하기 때문에 하나의 계층에 문제가 생기면 위, 아래 계층도 동작하지 못할 수 있다.
- 운영체제가 커지고 복잡해지면 많은 계층들이 발생하게 되어 커널의 크기도 커지고 하드웨어의 용량도 늘어난다.
3. 마이크로 구조 커널
계층형 구조의 문제로 인해 나타난 구조입니다.
프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공하고 나머지 부분은 사용자 영역에 구현되어 있습니다.
애플의 운영체제 OS X와 IOS가 이러한 구조를 가지고 있습니다.
- 장점
- 각 모듈은 독립적으로 작동하기 때문에 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 않는다.
- 많은 컴퓨터에 이식하기 쉽다.
- 커널이 가벼워 CPU 용량이 적은 시스템에 적용이 가능하다.
- 단점
- 모듈이 독립적으로 존재하여 모듈 간 통신이 빈번하게 이루어져 성능이 저하될 수 있다.
✔️ 인터페이스
커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할로 자동차의 핸들, 브레이크, 계기판 등이 인터페이스입니다.
✔️ 시스템 콜(System call)
운영체제 또한 컴퓨터의 전원이 켜지면 동시에 수행되어야 하기 때문에 운영체제 역시 메모리에 올라가게 됩니다.
용량이 큰 운영체제 전부를 메모리에 올리지 않고 운영체제의 가장 중요한 부분만 메모리에 올려두는데 그것이 커널입니다.
하지만 사용자나 응용 프로그램이 운영체제의 핵심 부분인 커널에 접근하는 것은 위험한 일입니다.
또한 사용자 공간에서 기계어 명령을 실행하는 것은 불가능합니다. 따라서 운영체제는 커널을 보호하기 위해 시스템 콜을 제공합니다.
📌 API(Application Programming Interface)
운영체제가 응용 프로그램에게 제공하는 인터페이스이고 함수 형태로 제공되며 주로 종류 별로 묶어서 라이브러리 형태로 제공됩니다.
각 언어별 운영체제 기능 호출 인터페이스 함수로 시스템 콜을 호출하는 형태로 만들어져 있습니다.
📌 쉘(Shell)
사용자가 운영체제의 기능과 서비스를 조작할 수 있도록 인터페이스를 제공하는 프로그램입니다.
하나의 응용 프로그램이라고 할 수 있고 쉘은 터미널 환경(CLI)과 사용자 인터페이스 환경(GUI)이 있습니다.
✔️ 드라이버
응용 프로그램과 커널의 인터페이스가 시스템 콜이라면 커널과 하드웨어의 인터페이스는 드라이버가 담당합니다.
하드웨어의 종류는 다양하고 직접 각 하드웨어에 맞는 인터페이스를 개발하기는 어렵기 때문에 커널은 입출력의 기본적인 부분만 제작하고 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행되도록 합니다.
이 때 하드웨어 제작자가 만든 소프트웨어를 디바이스 드라이버라고 부릅니다.
📄 참고
'🖥 CS > 운영체제' 카테고리의 다른 글
기본적인 컴퓨터 구조와 부팅 (0) | 2022.04.17 |
---|---|
What is OS? (0) | 2022.04.17 |