운영체제: 컴퓨터에 "대관리인" 고용하기
서론
완벽한 CPU와 무한한 메모리가 있으면 컴퓨터를 바로 사용할 수 있을까요? 이전 장에서 트랜지스터가 어떻게 강력한 CPU로 조합되는지 보았습니다. 하지만 최고급 하드웨어를 가지고 있어도, 직접 작동시키려면 화면에 글자 하나 표시하는 데도 수백 줄의 난해한 기계 명령어를 작성해야 합니다. 번거로울 뿐 아니라 매우 위험합니다 — 실수 하나로 다른 사람의 데이터를 덮어쓸 수도 있습니다.
이러한 악몽을 해결하기 위해 운영체제(Operating System, 줄여서 OS)가 탄생했습니다. 여러분과 차가운 하드웨어 사이에 위치한 가장 위대한 "소프트웨어"입니다. 이 장에서는 어려운 코드는 배제하고, 쉬운 비유로 이 "슈퍼 관리인"이 어떻게 무질서한 하드웨어를 질서 있게 다루는지 알아보겠습니다.
이 글에서 무엇을 배우게 되나요?
이 장을 마치면 다음을 얻게 됩니다:
- 문제 해결 능력: "프로그램이 멈춤", "메모리 부족" 문제를 운영체제 관점에서 원인 분석
- 용어 이해도: "멀티프로세스", "가상 메모리", "파일 권한"이 어떤 문제를 해결하는지 이해
- 시스템 관점 사고: 프로그램이 독립적으로 실행되는 것이 아니라 운영체제, 다른 프로세스, 하드웨어 자원과 긴밀히 상호작용한다는 것을 이해
- 후속 학습 기초: 동시성 프로그래밍, 시스템 튜닝, 컨테이너 기술을 위한 기반
| 장 | 내용 | 핵심 개념 |
|---|---|---|
| 제1장 | 프로세스 관리 | CPU 시분할, 타임 슬라이스 라운드 로빈 |
| 제2장 | 메모리 관리 | 가상 메모리, 페이징 기법 |
| 제3장 | 파일 시스템 | 파일 조직, 디렉터리 구조 |
0. 전경도: 운영체제가 없다면 어떻게 될까?
여러분이 잠재력이 넘치는 "컴퓨팅 공장"(컴퓨터)을 열었다고 상상해 보세요. 공장에는 능력 있고 지치지 않는 최고의 작업자(CPU)가 있고, 거대한 창고(메모리)와 수많은 컨테이너(하드디스크)가 있습니다.
공장장(운영체제)을 고용하지 않으면:
- CPU 독점 위기: CPU는 한 번에 한 가지 일만 할 수 있습니다. 누군가 음악을 듣는 데 사용 중이면, 다른 사람이 웹페이지를 보려면? 죄송합니다, 음악을 듣는 사람이 CPU를 자발적으로 반납할 때까지 모두가 기다려야 합니다.
- 메모리 유린 사고: 위챗과 게임이 모두 창고(메모리)를 사용합니다. 경비원이 구역을 나누어 관리하지 않으면, 게임이 실수로 장비 데이터를 위챗의 상자에 넣어 위챗이 즉시 충돌합니다.
- 하드디스크 미로: 하드디스크 하드웨어는 0과 1이 새겨진 거대한 원반일 뿐입니다. 어제 저장한 사진을 찾으려면 "제1면, 제56트랙, 제8섹터"라는 반인간적인 좌표를 정확히 기억해야 합니다.
위 세 가지 악몽을 해결하기 위해 운영체제는 3가지 핵심 무기를 꺼냅니다: 프로세스 관리, 메모리 관리, 파일 시스템.
1. 프로세스 관리: CPU의 시분할
평소 컴퓨터를 사용할 때 위챗을 켜두고, 음악을 들으며, 타이핑도 합니다. 하지만 컴퓨터에 CPU 코어가 하나뿐이라면 어떻게 세 가지를 동시에 할 수 있을까요?
정답은: 실제로 동시에 하는 것이 아닙니다. 운영체제가 미친 듯이 "시간 관리"를 하고 있는 것입니다.
1.1 "프로세스"란 무엇인가?
실행 중인 프로그램 각각이 하나의 프로세스입니다. 자신만의 코드(작업 목록), 자신만의 메모리 데이터(프로젝트 자금)를 가진 "프로젝트 팀"으로 이해할 수 있으며, CPU의 접견을 기다리며 줄을 섭니다.
1.2 타임 슬라이스 라운드 로빈
어떤 악성 소프트웨어가 CPU를 계속 독점하지 못하도록, 운영체제는 CPU의 시간을 극히 작은 조각(약 10밀리초)으로 나누어 각 프로세스에 돌아가며 할당합니다. 전환 속도가 너무 빨라 "동시에 실행"되는 것처럼 느껴집니다.
2. 메모리 관리: 가상 주소 공간
CPU를 돌아가며 사용하는 문제가 해결되었으니, 다음은 메모리 공간입니다. 관리하지 않으면 모든 소프트웨어가 물리적 메모리에 직접 데이터를 쓰게 되어, 필연적으로 서로 덮어쓰는 유린 사고가 발생합니다.
2.1 가상 메모리(Virtual Memory)
운영체제는 각 프로세스에게 큰 거짓말을 합니다: "너는 이 컴퓨터의 모든 가용 메모리를 독점하고 있어. 마음대로 써!"
프로세스의 눈에는 자신의 메모리가 항상 연속적이고 깨끗합니다. 안심하고 데이터를 씁니다.
2.2 페이지 테이블 매핑(Page Table)
실제로는 어떨까요? 운영체제는 몰래 데이터를 실제 물리 메모리의 여기저기 흩어진 틈새에 끼워 넣습니다. 이렇게 하면 두 가지 천재적인 이점이 있습니다:
- 절대 안전: 위챗은 자신의 공간만 볼 수 있고, 다른 사람의 데이터를 변조할 수 없습니다
- 단편화 활용: 물리 메모리가 아무리 지저분해도 프로세스에 매핑된 가상 공간은 깔끔합니다
3. 파일 시스템: 영구 저장의 조직화
새 하드디스크를 샀다면, 안에는 황량한 저장 셀들뿐입니다. 사진 한 장을 저장하려고 해도 하드디스크는 묻습니다: "몇 번째 바이트에 저장할까요?"
3.1 파일 시스템이 하는 일
- 하드디스크 분할: 하드디스크를 고정 크기의 수많은 블록(보통 4KB)으로 자릅니다
- 장부 작성: 어떤 블록이 차 있는지, 어떤 것이 비어 있는지 기록합니다
- 경로 번역:
D드라이브/사진/반려동물.jpg를 "제3, 7, 11블록"으로 번역합니다
이것이 파일 이름 바꾸기가 즉시 완료되는 이유(장부의 이름만 변경)이고, 파일 복사는 오래 걸리는 이유(실제로 하드디스크 데이터 블록을 읽고 써야 함)입니다.
4. 세 가지의 협력: 프로그램 시작의 완전한 과정
운영체제의 세 가지 모듈을 각각 살펴보았으니, 이제 프로그램을 더블클릭하여 열 때 이들이 어떻게 협력하는지 살펴보겠습니다:
바탕화면 아이콘을 클릭하든, 코드의 한 줄 print("Hello World")든, 이 복잡한 백스테이지 작업 없이는 불가능합니다. 우리가 디지털 세계에서 그토록 쉽게 서핑할 수 있는 것은 모두 백그라운드에서 운영체제가 우리를 위해 무거운 짐을 져주고 있기 때문입니다.
추가 읽기
운영체제의 다양한 "관리 기법과 속임수"가 흥미롭게 느껴진다면, 다음 심화 주제를 살펴보세요:
- 프로세스와 스레드: 프로세스가 프로젝트 팀이라면, "스레드"는 팀에서 일하는 직원입니다
- 동시성과 락: 두 프로세스가 같은 자원을 동시에 경쟁할 때, 교착 상태를 방지하는 방법
- 시스템 호출: 운영체제가 상위 애플리케이션에 제공하는 "서비스 창구"