운영체제는 컴퓨터 시스템의 자원을 관리하고 프로그램 실행을 제어하는 핵심 소프트웨어다. 이 글에서는 운영체제의 주요 역할과 동작 원리를 살펴본다.
1️⃣ 운영체제란?
운영체제는 컴퓨터 하드웨어와 응용 프로그램 사이에서 자원을 관리하고 프로그램 실행을 제어하는 특별한 프로그램이다. Windows, macOS, Linux와 같은 데스크탑 운영체제와 Android, iOS와 같은 모바일 운영체제가 대표적이다.
커널(Kernel)
운영체제의 핵심 기능을 담당하는 부분을 커널이라고 한다. 커널은 자동차의 엔진이나 사람의 심장처럼 운영체제의 핵심부를 구성한다.
메모리 구조
커널 영역(Kernel Space): 운영체제가 적재되어 실행되는 공간사용자 영역(User Space): 응용 프로그램이 적재되어 실행되는 공간
2️⃣ 운영체제의 핵심 역할
운영체제는 두 가지 핵심 기능을 수행한다.
자원 할당 및 관리
자원(Resource)은 프로그램 실행에 필요한 요소를 의미한다. 하드웨어 자원(CPU, 메모리, 보조기억장치)과 소프트웨어 자원(데이터, 파일)이 있다.
운영체제는 다음과 같이 자원을 관리한다:
| 관리 대상 | 관리 방법 | 설명 |
|---|---|---|
| CPU | CPU 스케줄링 | 프로그램들이 공정하게 CPU를 할당받도록 순서와 시간을 결정 |
| 메모리 | 가상 메모리 | 물리적 메모리보다 큰 메모리를 사용할 수 있도록 관리 |
| 보조기억장치 | 파일 시스템 | 파일과 디렉터리 단위로 정보를 체계적으로 관리 |
프로세스 및 스레드 관리
- 프로세스(Process): 실행 중인 프로그램
- 스레드(Thread): 프로세스를 이루는 실행 단위
운영체제는 동시다발적으로 실행되는 프로세스와 스레드를 제어하고, 필요한 자원을 적절하게 배분한다.
3️⃣ CPU 스케줄링
메모리에는 여러 프로그램이 동시에 적재될 수 있지만, CPU는 한 번에 하나의 작업만 처리한다. 따라서 운영체제는 CPU 스케줄링을 통해 프로그램들이 공정하게 CPU를 사용할 수 있도록 관리한다.
3-1 CPU 스케줄링의 구성 요소
스케줄링 큐(Scheduling Queue): CPU를 할당받기 위해 대기하는 프로세스들의 대기열이다.우선순위(Priority): 각 프로세스에 부여된 중요도로, 우선순위가 높은 프로세스가 먼저 CPU를 할당받는다.
선점형과 비선점형
- 선점형(Preemptive): 실행 중인 프로세스로부터 CPU를 강제로 빼앗을 수 있음
- 비선점형(Non-preemptive): 프로세스가 자발적으로 CPU를 반납할 때까지 대기
4️⃣ 메모리 관리: 가상 메모리
운영체제는 가상 메모리 기술을 활용하여 메모리를 효율적으로 관리한다. 가상 메모리는 물리적 메모리 크기보다 더 큰 메모리를 사용할 수 있도록 하는 기술이다.
4-1 주소 체계
- 물리 주소(Physical Address): 실제 메모리의 주소
- 논리 주소(Logical Address): 프로세스가 사용하는 가상의 주소
4-2 메모리 할당 기법
📄 페이징(Paging)
메모리를 고정 크기의 페이지 단위로 나누어 관리하는 기법이다.
🔄 페이지 교체 알고리즘
메모리가 부족할 때 어떤 페이지를 제거할지 결정하는 알고리즘이다. 대표적으로 LRU(Least Recently Used), FIFO(First In First Out) 등이 있다.
💡 페이징과 세그멘테이션
- 페이징: 고정 크기로 메모리를 분할 (내부 단편화 발생 가능)
- 세그멘테이션: 논리적 단위로 메모리를 분할 (외부 단편화 발생 가능)
5️⃣ 파일/디렉터리 관리: 파일 시스템
보조기억장치는 방대한 용량을 가지므로 체계적인 관리가 필요하다. 파일 시스템은 보조기억장치의 정보를 파일과 디렉터리 단위로 관리하는 운영체제의 핵심 기능이다.
5-1 파일과 디렉터리
- 파일(File): 보조기억장치에 저장된 데이터의 기본 단위
- 디렉터리(Directory): 파일들을 그룹화하여 관리하는 폴더
5-2 파일 시스템의 종류
| 파일 시스템 | 운영체제 | 특징 |
|---|---|---|
| NTFS | Windows | 대용량 파일 지원, 보안 기능 강화 |
| ext4 | Linux | 저널링 지원, 안정성 우수 |
| APFS | macOS | SSD 최적화, 암호화 지원 |
6️⃣ 프로세스와 스레드
6-1 프로세스(Process)
실행 중인 프로그램을 의미한다. 같은 프로그램이라도 여러 번 실행하면 각각 별도의 프로세스가 생성된다.
프로세스 계층 구조
프로세스는 시스템 콜을 통해 새로운 프로세스를 생성할 수 있다:
부모 프로세스(Parent Process): 새 프로세스를 생성한 프로세스자식 프로세스(Child Process): 부모 프로세스에 의해 생성된 프로세스
6-2 스레드(Thread)
프로세스를 이루는 실행의 단위다. 하나의 프로세스는 여러 스레드를 가질 수 있으며, 이를 통해 동일한 작업을 동시에 실행할 수 있다.
6-3 동기화와 교착 상태
동기화: 여러 프로세스나 스레드가 공유 자원에 접근할 때 데이터 일관성을 유지하는 기법이다.교착 상태(Deadlock): 두 개 이상의 프로세스가 서로 상대방이 점유한 자원을 기다리며 무한정 대기하는 상태다.
7️⃣ 시스템 콜과 이중 모드
응용 프로그램은 직접 하드웨어 자원에 접근할 수 없다. 대신 시스템 콜(System Call)을 통해 운영체제에게 자원 접근을 요청한다.
7-1 시스템 콜의 동작 과정
- 응용 프로그램이 시스템 콜 호출
소프트웨어 인터럽트발생- CPU가
커널 모드로 전환 - 운영체제 코드 실행
- 작업 완료 후
사용자 모드로 복귀
7-2 이중 모드(Dual Mode)
CPU는 두 가지 실행 모드를 구분하여 동작한다:
| 모드 | 설명 | 권한 |
|---|---|---|
| 사용자 모드(User Mode) | 응용 프로그램 실행 | 자원 접근 불가 |
| 커널 모드(Kernel Mode) | 운영체제 실행 | 모든 자원 접근 가능 |
💡 슈퍼바이저 플래그
CPU의 플래그 레지스터에는
슈퍼바이저 플래그가 있어, 현재 CPU가 어떤 모드로 실행 중인지 나타낸다.
7-3 주요 시스템 콜의 종류
프로세스 관리
fork(): 새 자식 프로세스 생성execve(): 프로세스 실행exit(): 프로세스 종료waitpid(): 자식 프로세스 대기
파일 관리
open(): 파일 열기close(): 파일 닫기read(): 파일 읽기write(): 파일 쓰기
디렉터리 관리
chdir(): 작업 디렉터리 변경mkdir(): 디렉터리 생성rmdir(): 디렉터리 삭제
파일 시스템 관리
mount(): 파일 시스템 마운트umount(): 파일 시스템 마운트 해제
7-4 시스템 콜 호출 빈도
응용 프로그램은 실행 과정에서 시스템 콜을 매우 빈번하게 호출한다. 단순히 "hello world"를 출력하는 프로그램도 600회 이상의 시스템 콜을 호출한다.
$ strace -c python3 test.py
hello world!
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
20.19 0.000213 2 103 24 stat
18.39 0.000194 13 14 getdents64
10.14 0.000107 0 111 72 openat
9.19 0.000097 1 54 read
5.97 0.000063 1 63 fstat
------ ----------- ----------- --------- --------- ----------------
100.00 0.001055 605 125 total프로그램은 시스템 콜을 통해 사용자 모드와 커널 모드를 빈번히 전환하며 운영체제의 서비스를 제공받는다.
8️⃣ 정리
운영체제는 다음과 같은 핵심 역할을 수행한다:
- 자원 관리: CPU 스케줄링, 가상 메모리, 파일 시스템을 통한 효율적인 자원 관리
- 프로세스 관리: 프로세스와 스레드의 생성, 실행, 종료를 제어
- 시스템 콜 제공: 응용 프로그램이 안전하게 하드웨어 자원에 접근할 수 있도록 인터페이스 제공
- 이중 모드 운영: 사용자 모드와 커널 모드를 구분하여 시스템 보안 유지
이러한 기능들이 유기적으로 동작하여 안정적이고 효율적인 컴퓨팅 환경을 제공한다.