2026년 4월 23일
CS / Theory / OS[OS] 3. 운영체제의 구조
목차
[1] 계층 구조 개요
[2] 커널이란
[3] 사용자 인터페이스: GUI와 CLI
[4] 시스템콜이란
[5] 드라이버
[6] 사용자 모드와 커널 모드
[7] 커널의 구조: 모놀리식 vs 마이크로커널
[1] 계층 구조 개요
운영체제는 크게 세 계층으로 나뉜다.
[ 사용자 / 애플리케이션 ]
↕ 시스템콜
[ 커널 ]
↕ 드라이버
[ 하드웨어 ]
- 애플리케이션은 커널에 직접 접근할 수 없다.
- 반드시 시스템콜이라는 창구를 통해 커널에 요청해야 한다.
- 커널은 드라이버를 통해 하드웨어를 제어한다.
이 계층 구조가 있는 이유는 하나다. 안전 때문이다. 모든 프로그램이 하드웨어에 직접 접근할 수 있다면, 하나의 프로그램이 시스템 전체를 망가뜨릴 수 있다.
[2] 커널이란
커널(Kernel)은 운영체제의 핵심이다. 컴퓨터가 켜져 있는 동안 항상 메모리에 올라와 있으며, 하드웨어 자원을 관리하고 애플리케이션의 요청을 처리한다.
커널이 담당하는 주요 역할은 다음과 같다.
- 프로세스 관리 — 어떤 프로세스가 CPU를 쓸지 결정하고, 생성·종료를 처리한다.
- 메모리 관리 — 각 프로세스에 메모리 공간을 할당하고, 서로 침범하지 못하게 보호한다.
- 파일 시스템 관리 — 파일의 저장, 조회, 삭제를 처리한다.
- I/O 관리 — 키보드, 마우스, 디스크 등 입출력 장치를 제어한다.
커널은 OS 전체가 아니다. OS에는 커널 외에도 사용자 인터페이스, 라이브러리, 유틸리티 등이 포함된다. 하지만 핵심 중의 핵심은 커널이다.
[3] 사용자 인터페이스: GUI와 CLI
사용자는 커널에 직접 접근하지 않는다. 운영체제가 제공하는 인터페이스를 통해 컴퓨터를 조작한다. 인터페이스 방식은 크게 두 가지다.
GUI (Graphic User Interface)
- 아이콘, 창, 버튼 등 그래픽 요소로 조작하는 방식
- 직관적이고 배우기 쉽다
- 예: Windows 탐색기, macOS Finder
CLI (Command Line Interface)
- 텍스트 명령어를 직접 입력하는 방식
- 익숙해지면 GUI보다 빠르고 자동화가 쉽다
- 예: Linux 터미널, Windows PowerShell
개발자라면 CLI를 자주 쓰게 된다. ls, cd, grep 같은 명령어들이 모두 CLI 기반이다.
[4] 시스템콜이란
애플리케이션이 커널의 기능을 사용하려면 시스템콜(System Call) 을 호출해야 한다. 시스템콜은 애플리케이션과 커널 사이의 공식 창구다.
예를 들어, 파일을 저장하는 프로그램을 만든다고 하자. 프로그램이 직접 디스크에 접근하는 게 아니라, write() 라는 시스템콜을 호출하면 커널이 대신 빈 공간을 찾아 안전하게 저장해준다.
[애플리케이션]
│
│ write("data.txt", ...) 호출
▼
[시스템콜 인터페이스]
│
▼
[커널] → 디스크에 실제로 저장
대표적인 시스템콜
| 분류 | 예시 |
|---|---|
| 파일 관련 | open(), read(), write(), close() |
| 프로세스 관련 | fork(), exec(), exit() |
| 메모리 관련 | mmap(), brk() |
| 네트워크 관련 | socket(), connect(), send() |
| 평소에 Python이나 Java로 파일을 읽고 쓸 때, 내부적으로는 이 시스템콜들이 호출되고 있다. |
[5] 드라이버
커널이 하드웨어를 직접 제어하기는 어렵다. 하드웨어의 종류가 너무 다양하기 때문이다. 이 문제를 해결하는 것이 드라이버(Driver) 다.
드라이버는 특정 하드웨어를 커널이 제어할 수 있도록 중간에서 번역 역할을 한다.
[커널]
│
│ 드라이버
▼
[하드웨어: GPU, 프린터, 사운드카드 등]
- 키보드, 마우스처럼 표준화된 장치는 OS에 기본 드라이버가 포함되어 있다.
- 그래픽카드, 특수 장치처럼 제조사마다 다른 장치는 별도 드라이버 설치가 필요하다.
Windows에서 새 하드웨어를 꽂았을 때 드라이버를 설치하라는 메시지가 뜨는 이유가 바로 이것이다.
[6] 사용자 모드와 커널 모드
CPU는 두 가지 실행 모드를 가진다.
| 모드 | 설명 | 접근 범위 |
|---|---|---|
| 사용자 모드 | 일반 애플리케이션이 실행되는 모드 | 제한된 자원만 접근 가능 |
| 커널 모드 | 커널이 실행되는 모드 | 모든 하드웨어 자원에 접근 가능 |
애플리케이션이 시스템콜을 호출하면, CPU는 사용자 모드에서 커널 모드로 전환된다. 커널이 작업을 마치면 다시 사용자 모드로 돌아온다.
이 전환 과정이 존재하는 이유는 보안이다. 애플리케이션이 커널 모드로 직접 진입한다면 메모리나 하드웨어를 마음대로 조작할 수 있어 시스템이 위험해진다.
[사용자 모드] → 시스템콜 호출 → [커널 모드]
│
작업 처리
│
[사용자 모드] ← 결과 반환 ← [커널 모드]
[7] 커널의 구조: 모놀리식 vs 마이크로커널
커널 자체도 어떻게 설계하느냐에 따라 구조가 달라진다. 대표적인 두 가지 방식이 있다.
모놀리식 커널 (Monolithic Kernel)
- 커널의 모든 기능(프로세스, 메모리, 파일 시스템, 드라이버 등)이 하나의 큰 덩어리로 구성된다.
- 기능들이 같은 공간에 있어 서로 직접 호출할 수 있어 성능이 빠르다.
- 단점은 하나가 오류를 일으키면 커널 전체가 영향을 받을 수 있다는 점이다.
- 예: Linux, Unix
마이크로커널 (Microkernel)
- 커널에는 최소한의 기능(프로세스 관리, 메모리 관리, 통신)만 남기고, 나머지는 사용자 공간에서 실행한다.
- 커널이 작아져 안정성과 보안이 높아진다.
- 단점은 기능들이 분리되어 있어 통신 비용이 들어 성능이 상대적으로 느리다.
- 예: Mach, QNX
현재 대부분의 범용 OS(Linux, Windows)는 성능상 이점 때문에 모놀리식 커널을 기반으로 한다.
댓글
댓글을 불러오는 중...