---
description: 운영체제의 역할과 구조
---

# 3.1.1 Roles and Structure of Operating Systems

## 1. 운영체제의 역할

운영체제의 역할은 크게 네 가지가 있습니다.

### **1.1 CPU 스케줄링과 프로세스 관리**

운영체제는 CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리합니다. CPU 스케줄링을 통해 여러 프로세스가 CPU를 효율적으로 사용할 수 있도록 하며, 각 프로세스는 자신에게 할당된 시간 동안 작업을 수행합니다. 주요 CPU 스케줄링 알고리즘으로는 라운드 로빈(Round Robin), 선점형 우선순위(Preemptive Priority), 멀티 레벨 큐(Multi-Level Queue) 등이 있습니다.

* **라운드 로빈**: 프로세스들에 순서대로 CPU 시간을 할당하는 방식으로, 각 프로세스는 할당된 시간 동안 작업을 수행하고, 시간이 끝나면 다음 프로세스로 넘어갑니다. 이는 공평성을 보장하고, 대기 시간을 최소화합니다.
* **선점형 우선순위**: 각 프로세스에 우선순위를 부여하여 높은 우선순위의 프로세스가 먼저 CPU를 사용하도록 하는 방식입니다. 낮은 우선순위의 프로세스는 높은 우선순위의 프로세스가 끝날 때까지 대기해야 합니다.
* **멀티 레벨 큐**: 프로세스들을 여러 개의 큐로 나누고, 각 큐에 우선순위를 부여하여 스케줄링하는 방식입니다. 예를 들어, 실시간 프로세스는 높은 우선순위 큐에, 백그라운드 작업은 낮은 우선순위 큐에 배치될 수 있습니다.

### **1.2 메모리 관리**

운영체제는 한정된 메모리를 어떤 프로세스에 얼마만큼 할당해야 하는지 관리합니다. 메모리 관리는 프로그램이 실행될 때 필요한 데이터를 효율적으로 저장하고, 사용이 끝난 메모리를 회수하여 다른 프로그램이 사용할 수 있도록 합니다. 주요 메모리 관리 기법으로는 페이징(Paging), 세그멘테이션(Segmentation), 가상 메모리(Virtual Memory) 등이 있습니다.

* **페이징**: 메모리를 고정된 크기의 블록으로 나누어 관리하는 기법입니다. 프로그램이 필요로 하는 메모리 공간을 페이지 단위로 나누어 물리적 메모리에 할당합니다. 이는 외부 단편화 문제를 해결할 수 있습니다.
* **세그멘테이션**: 메모리를 가변 크기의 블록으로 나누어 관리하는 기법입니다. 각 세그먼트는 논리적으로 관련된 데이터를 포함하며, 세그먼트 단위로 메모리에 할당됩니다. 이는 내부 단편화 문제를 해결할 수 있습니다.
* **가상 메모리**: 실제 물리적 메모리보다 큰 메모리 공간을 사용하는 것처럼 보이게 하는 기법입니다. 프로그램이 필요로 하는 메모리 페이지를 물리적 메모리와 디스크 사이에서 교환하며, 필요한 페이지만 메모리에 로드합니다. 이는 메모리 사용의 효율성을 높입니다.

### **1.3 디스크 파일 관리**

운영체제는 디스크 파일을 어떤 방법으로 보관할지 관리합니다. 이는 파일 시스템을 통해 데이터를 효율적으로 저장하고 검색할 수 있도록 합니다. 파일 시스템은 데이터의 구조와 접근 방식을 정의하며, 대표적인 파일 시스템으로는 FAT, NTFS, ext4 등이 있습니다. 파일 시스템 관리는 파일의 생성, 삭제, 읽기, 쓰기 등을 포함합니다.

* **FAT(File Allocation Table)**: 파일 할당 테이블을 사용하여 파일의 위치를 추적하는 간단한 파일 시스템입니다. FAT16, FAT32, exFAT 등의 변형이 있습니다.
* **NTFS(New Technology File System)**: 고급 파일 시스템으로, 파일 압축, 암호화, 접근 제어 목록(ACL) 등의 기능을 제공합니다. 이는 Windows 운영체제에서 주로 사용됩니다.
* **ext4(Extended File System)**: Linux 운영체제에서 주로 사용되는 파일 시스템으로, 저널링, 대용량 파일 지원, 빠른 파일 시스템 검사 등의 기능을 제공합니다.

### **1.4 I/O 디바이스 관리**

운영체제는 I/O 디바이스인 마우스, 키보드와 컴퓨터 간에 데이터를 주고받는 것을 관리합니다. 이를 통해 사용자가 입력한 데이터를 프로그램이 처리하고, 프로그램의 결과를 출력하는 과정이 원활하게 이루어집니다. I/O 관리에는 인터럽트(Interrupt) 처리, 장치 드라이버(Device Driver) 관리 등이 포함됩니다.

* **인터럽트 처리**: I/O 디바이스가 데이터 전송을 완료하거나 오류가 발생했을 때, CPU에 인터럽트를 발생시켜 처리를 요청합니다. 운영체제는 인터럽트를 받아 해당 디바이스의 요청을 처리합니다.
* **장치 드라이버**: 하드웨어 디바이스와 운영체제 간의 인터페이스를 제공하는 소프트웨어 모듈입니다. 각 디바이스에 맞는 드라이버가 필요하며, 드라이버는 디바이스의 특성에 맞춰 데이터를 송수신합니다.



## 2. 운영체제의 구조

운영체제의 구조는 다음과 같습니다.

### **2.1 커널(Kernel)**

커널은 운영체제의 핵심 부분으로, 하드웨어 자원을 직접 관리합니다. 커널은 CPU, 메모리, 디스크, 네트워크 등의 자원을 관리하고, 프로세스 간의 통신을 조정합니다. 커널은 시스템 호출 인터페이스(System Call Interface)를 통해 유저 프로그램과 상호작용합니다.

* **모노리틱 커널(Monolithic Kernel)**: 모든 운영체제 서비스를 커널 내에서 실행하는 구조입니다. 커널은 큰 단일 블록으로 구성되며, 높은 성능을 제공하지만, 안정성과 유지보수가 어려울 수 있습니다.
* **마이크로커널(Microkernel)**: 최소한의 기능만을 커널에 포함시키고, 나머지 서비스는 사용자 모드에서 실행하는 구조입니다. 커널의 크기를 줄여 안정성과 보안성을 높일 수 있지만, 성능 저하가 발생할 수 있습니다.

### **2.2 시스템 호출 인터페이스(System Call Interface)**

시스템 호출 인터페이스는 사용자 프로그램이 운영체제의 서비스를 요청할 수 있는 메커니즘을 제공합니다. 이를 통해 프로그램은 파일 조작, 프로세스 관리, 메모리 할당 등의 작업을 수행할 수 있습니다. 시스템 호출은 운영체제와 사용자 프로그램 간의 인터페이스로, 사용자가 직접 하드웨어를 조작하지 않고도 다양한 기능을 사용할 수 있게 합니다.

* **파일 조작 시스템 호출**: 파일을 열기 위한 `open`, 파일을 읽기 위한 `read`, 파일을 쓰기 위한 `write` 등의 시스템 호출이 있습니다.
* **프로세스 관리 시스템 호출**: 프로세스를 생성하기 위한 `fork`, 프로세스를 종료하기 위한 `exit`, 프로세스 간 통신을 위한 `pipe` 등의 시스템 호출이 있습니다.
* **메모리 관리 시스템 호출**: 메모리 할당을 위한 `malloc`, 메모리 해제를 위한 `free`, 가상 메모리 페이지를 관리하기 위한 `mmap` 등의 시스템 호출이 있습니다.

### **2.3 사용자 인터페이스(User Interface)**

운영체제는 사용자와 컴퓨터 간의 상호작용을 위한 인터페이스를 제공합니다. 사용자 인터페이스는 GUI(Graphical User Interface)와 CUI(Command Line Interface)로 나뉩니다.

* **GUI**: 사용자가 시각적 장치와 상호 작용할 수 있도록 하는 사용자 인터페이스의 한 형태로, 단순 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 컴퓨터와 상호 작용할 수 있도록 해줍니다. Windows, macOS, GNOME 등이 있습니다.
* **CUI**: 그래픽이 아닌 명령어로 처리하는 인터페이스로, 사용자가 텍스트 명령어를 입력하여 시스템을 제어합니다. Unix, Linux, Windows의 PowerShell 등이 있습니다.



## 시스템콜

시스템콜이란 운영체제가 커널에 접근하기 위한 인터페이스이며, 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 씁니다. 시스템 호출을 통해 프로그램은 파일 조작, 프로세스 제어, 통신 등의 작업을 수행할 수 있습니다. 예를 들어, 파일을 열기 위한 `open` 시스템 호출, 파일을 읽기 위한 `read` 시스템 호출, 프로세스를 생성하기 위한 `fork` 시스템 호출 등이 있습니다.



## 모드비트

시스템이 작동할 때 모드비트는 유저 모드와 커널 모드를 구분합니다. 모드비트는 1 또는 0의 값을 가지는 플래그 변수입니다. 커널 모드에서는 모든 컴퓨터 자원에 접근할 수 있지만, 유저 모드에서는 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못합니다.

### **유저 모드와 커널 모드**

* **유저 모드(User Mode)**: 사용자가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드입니다. 유저 프로그램이 커널 함수를 호출할 때는 유저 모드에서 커널 모드로 전환됩니다.
* **커널 모드(Kernel Mode)**: 모든 컴퓨터 자원에 접근할 수 있는 모드로, 운영체제의 핵심 부분이 이 모드에서 동작합니다. 커널 모드는 하드웨어 자원 관리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, I/O 디바이스 관리 등의 주요 작업을 수행합니다.

## 결론

운영체제는 컴퓨터 시스템의 핵심 소프트웨어로서, 자원 관리, 사용자 인터페이스 제공, 파일 시스템 관리, 시스템 보안 및 안정성 유지 등 다양한 역할을 수행합니다. 이러한 역할을 통해 컴퓨터 시스템의 효율성과 사용자 경험을 극대화합니다. 또한, 운영체제의 구조는 커널, 시스템 호출 인터페이스, 사용자 인터페이스 등으로 나뉘며, 각 구성 요소가 협력하여 운영체제가 원활하게 동작할 수 있도록 합니다. 운영체제의 역할과 구조를 이해하면 컴퓨터 시스템을 더 효율적이고 안정적으로 사용할 수 있습니다.
