"운영체제는 사용자와 PC H/W 사이에서 중개자의 역할" 을 한다.
운영체제는 PC H/W를 관리하는 SW이다. OS의 근본적인 책임은 CPU, 메모리, 입출력 장치, 저장 장치를 프로그램에 할당하는 것이다.
PC System의 4개 구성요소는 다음과 같다.
| 구성요소 | 설명 |
|---|---|
| HW | CPU, I/O로 구성. 기본 계산용 자원을 제공 |
| OS | 다양한 응용 프로그램 간의 H/W 사용을 제어, 조정 |
| 응용프로그램 | 워드프로세서, 스프레드시트, 컴파일러 등 |
| 사용자 | 컴퓨터를 사용하는 주체 |
운영체제에서의 프로그램 종류
컴퓨터가 프로그램을 실행하는 도중, 예기치 않은 상황이나 급하게 처리해야 할 요청이 발생했을 때 현재 하던 작업을 잠시 중단하고 해당 요청을 먼저 처리한 뒤, 다시 원래 작업으로 복귀하는 기능이다.
인터럽트 처리 흐름
인터럽트 발생
→ CPU 실행 중단
→ 현재 상태 저장 (스택)
→ ISR(인터럽트 서비스 루틴) 실행
→ 정상 상태 복귀
세부 처리 단계는 다음과 같다.
Maskable vs NonMaskable 인터럽트
| 종류 | 설명 |
|---|---|
| Maskable 인터럽트 | CPU가 필요시 무시할 수 있음 |
| NonMaskable 인터럽트 | CPU가 무시할 수 없음 (치명적 오류 등) |
핵심 개념 정리
- 인터럽트 벡터 : 인터럽트 서비스 루틴의 주소를 제공하기 위한 배열
- 인터럽트 서비스 루틴(ISR) : 특정 인터럽트 발생 시 CPU가 실행하는 특별한 프로그램 코드
- 벡터 방식 인터럽트의 목적 : 모든 인터럽트 소스를 하나의 핸들러가 검색해야 하는 부담을 줄이기 위함
주기억장치(Main Memory)
CPU는 주기억장치에만 직접 접근할 수 있기 때문에, 실행할 프로그램은 반드시 주기억장치에 적재되어야 한다. (ex. DRAM, SRAM)
폰노이만 구조의 실행 흐름은 아래와 같다.
메모리에서 명령 인출 → 명령 레지스터에 저장
→ 주기억장치에서 데이터 읽기
→ 명령어 연산 실행
→ 결과를 주기억장치에 저장
주기억장치의 한계는 세 가지다.
1. 용량이 적음
2. 휘발성이라 재부팅 시 데이터 초기화
3. 보조 저장장치에 비해 고가
보조 저장장치
캐싱

운영체제 코드의 상당 부분은 시스템의 안정성과 성능, 그리고 장치의 다양한 특성으로 인해 입출력 장치 관리에 할애된다.
1. 단일 처리기 시스템(Single-Processor System)
2. 다중 처리기 시스템(Multi-Processor System)
다중 처리기 시스템은 여러 처리기를 어떻게 다루느냐에 따라 SMP와 AMP로 나뉜다.
SMP (Symmetric Multiprocessing, 대칭형 다중 처리)
여러 CPU/코어가 동등한 지위를 가지며, 하나의 OS가 전체 CPU를 관리하는 방식이다.
CPU0 CPU1 CPU2 CPU3
\ | | /
하나의 OS
|
공유 메모리
AMP (Asymmetric Multiprocessing, 비대칭형 다중 처리)
여러 CPU가 있지만 각자 역할이 다른 방식이다. 보통 하나의 주 CPU가 전체 시스템을 제어하고, 나머지 CPU는 특정 작업을 담당한다.
Master CPU: OS 제어, 스케줄링
Worker CPU: 특정 작업 수행
Worker CPU: 특정 장치 처리
SMP vs AMP 비교
구분 SMP AMP 다중 처리기 시스템인가? O O CPU 지위 모두 동등 역할이 다름 OS 관리 하나의 OS가 전체 CPU 관리 주 CPU가 다른 CPU 제어 일반 PC에서 흔한가? 흔함 상대적으로 드묾
3. 클러스터형 시스템(Clustered Systems)
MultiCore vs MultiProcessor
먼저 용어부터 정리하고 넘어가야 한다. 이 세 단어가 가장 자주 혼동된다.
| 용어 | 의미 |
|---|---|
| Core | 명령어를 실제로 실행하는 계산 단위 |
| Processor | 메인보드 소켓에 꽂히는 물리적 CPU 칩 |
| CPU | 문맥에 따라 Core처럼 쓰이기도, Processor처럼 쓰이기도 함 — 가장 모호한 용어 |
공룡책 기준 계층 구조: Core < Processor < Computer System
[ MultiCore ] — Processor 1개 안에 Core가 여러 개
┌──────────────────┐
│ Processor / CPU칩│
│ ┌────┐ ┌────┐ │
│ │Core│ │Core│ │
│ └────┘ └────┘ │
│ ┌────┐ ┌────┐ │
│ │Core│ │Core│ │
│ └────┘ └────┘ │
└──────────────────┘
[ MultiProcessor ] — Processor 칩이 여러 개, 각 Processor 안에 Core가 존재
┌──────────────┐ ┌──────────────┐
│ Processor 1 │ │ Processor 2 │
│ ┌────┐┌────┐ │ │ ┌────┐┌────┐ │
│ │Core││Core│ │ │ │Core││Core│ │
│ └────┘└────┘ │ │ └────┘└────┘ │
└──────┬───────┘ └──────┬───────┘
└────────┬──────────┘
메모리
MultiCore와 MultiProcessor는 배타적인 개념이 아니다.
현대 서버 대부분은 두 번째 형태, 즉 여러 Processor에 각각 여러 Core가 존재하는 구조다.
핵심 개념 정리
용어 설명 Core 명령어를 실제로 실행하는 계산 단위 Processor 메인보드 소켓에 꽂히는 물리적 CPU 칩 CPU 문맥에 따라 Core 또는 Processor를 가리키는 모호한 용어 MultiCore 하나의 Processor 안에 Core가 여러 개 MultiProcessor Processor 칩 자체가 여러 개 (둘은 배타적이지 않음)
운영체제는 컴퓨터가 켜지는 순간부터 실행 준비를 시작한다. 처음부터 OS 전체가 메모리에 올라와 있는 것은 아니고, 부트스트랩 프로그램이 먼저 실행된다.
컴퓨터 전원을 켰을 때 가장 먼저 실행되는 프로그램이다.
전원 ON
→ 부트스트랩 프로그램 실행
→ CPU, 메모리, 장치 초기화
→ 디스크에서 커널을 RAM으로 적재
→ 커널 실행
→ 운영체제 시작
즉, 커널은 평소에는 보조 저장장치에 저장되어 있다가 부팅 과정에서 RAM으로 올라온다.
OS가 시작되고 나면 여러 프로그램을 동시에 실행해야 한다. 이때 핵심 문제는 CPU 낭비를 줄이는 것이다.
프로그램이 하나뿐이라면, 그 프로그램이 I/O를 기다리는 동안 CPU는 아무 일도 하지 않는다. 다중프로그래밍은 이 유휴 시간을 없애기 위해 여러 프로그램을 메모리에 동시에 올려두는 방식이다.
[ 다중프로그래밍 없을 때 ]
프로그램 A: ████░░░░░░████░░░░░░
실행 I/O대기 실행 I/O대기
CPU: ████ ████
← 낭비 → ← 낭비 →
[ 다중프로그래밍 적용 시 ]
프로그램 A: ████░░░░░░████
프로그램 B: ████░░░░░░████
CPU: ████████████████ ← 계속 실행
다중 태스킹은 다중프로그래밍의 논리적 확장으로, 사용자 응답성에 초점을 맞춘다.
CPU가 아주 짧은 시간 단위(수십 ms)로 프로세스 사이를 빠르게 전환하기 때문에, 사용자 입장에서는 여러 프로그램이 동시에 실행되는 것처럼 느껴진다.
시간 → |──A──|──B──|──C──|──A──|──B──|──C──|
CPU: A B C A B C
| 구분 | 다중프로그래밍 | 다중 태스킹 |
|---|---|---|
| 목적 | CPU 이용률 극대화 | 사용자 응답성 향상 |
| 전환 기준 | I/O 대기 발생 시 | 일정 시간(타임 슬라이스)마다 |
| 사용자 체감 | 상관 없음 | 동시에 실행되는 것처럼 느낌 |
다중프로그래밍이 "CPU를 쉬게 하지 말자"라면,
다중 태스킹은 "각 사용자에게 CPU를 독점하는 것처럼 느끼게 하자"이다.
운영체제는 시스템 보호를 위해 실행 모드를 나눈다.
| 모드 | 설명 |
|---|---|
| 사용자 모드 (User Mode) | 일반 응용 프로그램이 실행되는 모드. 하드웨어에 직접 접근 불가 |
| 커널 모드 (Kernel Mode)(= 시스템 모드) | OS 커널이 실행되는 모드. CPU, 메모리, I/O 장치 등 중요 자원에 접근 가능하며 특권 명령어 실행 가능 |
CPU 내부에는 현재 실행 모드를 나타내는 모드 비트(mode bit) 가 존재한다.
mode bit = 0 → 커널 모드mode bit = 1 → 사용자 모드사용자 프로그램이 파일 읽기, 입출력, 메모리 요청 등 OS의 도움이 필요한 작업을 수행하려면 직접 하드웨어를 건드리는 것이 아니라 시스템 콜을 사용한다.
응용 프로그램
→ 시스템 콜 요청
→ 사용자 모드에서 커널 모드로 전환
→ 커널이 요청 처리
→ 다시 사용자 모드로 복귀
시스템 콜 예시:
운영체제는 CPU를 특정 프로그램이 독점하지 못하도록 타이머(timer) 를 사용한다.
이 덕분에 무한 루프에 빠진 프로그램이 있더라도 시스템 전체가 멈추지 않도록 제어할 수 있다.
운영체제는 컴퓨터의 다양한 자원을 관리한다.
프로그램은 디스크에 저장된 수동적인 존재이고, 프로세스는 메모리에 올라와 실행 중인 능동적인 존재이다.
| 구분 | 설명 |
|---|---|
| 프로그램 | 디스크에 저장된 실행 파일 |
| 프로세스 | 메모리에 올라와 실행 중인 프로그램 |
운영체제는 다음 작업을 수행한다.
메인 메모리는 CPU가 직접 접근할 수 있는 중요한 자원이다. 여러 프로그램이 동시에 실행되기 위해서는 각 프로그램이 서로의 메모리 영역을 침범하지 못하도록 OS가 보호해야 한다.
주요 역할:
사용자는 저장장치의 물리적 구조를 직접 다루지 않고 파일이라는 추상화된 단위로 데이터를 사용한다.
OS는 복잡한 디스크 구조를 사용자가 이해하기 쉬운 파일과 폴더 형태로 제공하며, 다음을 관리한다.
보조 저장장치는 비휘발성이며 대량의 데이터를 저장한다. 운영체제는 저장장치의 빈 공간을 관리하고 데이터를 효율적으로 배치한다.
주요 역할:
보호는 컴퓨터 시스템 내부 자원에 대한 접근을 제어하는 것이다.
예시:
보안은 외부 또는 내부의 악의적인 공격으로부터 시스템을 지키는 것이다.
예시:
보호 vs 보안
보호가 시스템 내부의 올바른 자원 사용을 다룬다면, 보안은 외부 공격이나 침입으로부터 시스템을 지키는 개념에 가깝다.
가상화는 하나의 물리적 컴퓨터 위에서 여러 개의 실행 환경을 제공하는 기술이다.
대표적인 예시:
가상화를 사용하면 서버 자원을 효율적으로 활용할 수 있고, 개발 및 테스트 환경을 쉽게 분리할 수 있다.
운영체제 내부에서도 다양한 자료구조가 사용된다.
| 자료구조 | 활용 예시 |
|---|---|
| 리스트 (List) | 프로세스 목록, 장치 목록 관리 |
| 스택 (Stack) | 함수 호출, 인터럽트 처리, 문맥 저장 |
| 큐 (Queue) | CPU를 기다리는 프로세스, 입출력 대기 요청 관리 |
| 트리 (Tree) | 파일 시스템 디렉터리 구조 표현 |
| 해시 테이블 (Hash Table) | 빠른 검색이 필요한 경우 |
| 비트맵 (Bitmap) | 메모리 블록이나 디스크 블록의 사용 여부 표시 |
운영체제는 단순히 하드웨어를 제어하는 프로그램이 아니라, 내부적으로 복잡한 자료구조와 알고리즘을 사용하여 자원을 효율적으로 관리하는 시스템이다.
| 절 | 핵심 내용 |
|---|---|
| 1.1 | OS의 역할: HW와 사용자 사이의 중개자, 자원 관리자 |
| 1.2 | 사용자 관점(편의성) vs 시스템 관점(자원 관리) |
| 1.3 | 인터럽트, 저장 장치 계층, DMA |
| 1.4 | 단일·다중(SMP/AMP)·클러스터 처리기 시스템 |
| 1.5 | 부트스트랩, 다중프로그래밍, 다중태스킹, 사용자/커널 모드, 시스템 콜, 타이머 |
| 1.6 | 프로세스·메모리·파일·저장장치 관리 |
| 1.7 | 보호(내부 제어) vs 보안(외부 공격 방어) |
| 1.8 | 가상화: 하이퍼바이저, VM |
| 1.9 | 커널 내부의 자료구조 (리스트, 스택, 큐, 트리, 해시, 비트맵) |