🧠 1. 왜 '배치전략'이 필요한가?
컴퓨터의 주기억장치(RAM)는 한정되어 있어요.
여러 개의 프로그램(또는 프로세스)이 동시에 실행되려면, 메모리 안에서 프로그램들이 서로 안 겹치게 들어가야 해요.
그런데, 프로그램의 크기는 다 다르고, 메모리 안에는 빈 공간도 제각각 있어요.
예를 들어:
이 상황에서 "150KB짜리 프로그램"을 어디에 넣을까? 를 고민하는 게 바로 배치전략이에요.
🎯 예제 상황
메모리의 빈 공간:
- A: 200KB
- B: 300KB
- C: 150KB
여기에 180KB 크기의 프로그램을 넣어야 한다면?
1. 🔹 최초적합 (First Fit)
- 처음부터 순서대로 찾음.
- A(200KB)가 처음으로 조건 만족 → A에 배치
2. 🔹 최적적합 (Best Fit)
- 조건 만족하는 것 중에 가장 작은 공간에 배치
- A(200KB), B(300KB) 모두 가능 → A가 더 작음 → A에 배치
3. 🔹 최악적합 (Worst Fit)
- 가장 큰 공간에 배치
- B(300KB)가 가장 큼 → B에 배치
-----------------------------------------------------------------------------------------------------------------------
📌 단편화란?
**단편화(Fragmentation)**란
👉 메모리에 사용하지 못하는 자투리 공간이 생기는 현상이에요.
메모리는 남아있는데 프로그램이 들어가지 못하는 상황이죠.
🎯 왜 생기는가?
- 프로그램의 크기는 제각각인데
- 메모리는 일정한 블록 또는 연속된 공간만 받아요.
- 프로그램을 넣고 빼고 하다 보면, 남은 공간이 쪼개지면서 애매한 공간들이 생겨요.
📚 단편화의 종류 2가지
| ✅ 내부 단편화 (Internal Fragmentation) | 할당받은 공간 안에서 일부만 사용하고 나머지는 낭비 | 100KB 할당받고 80KB만 씀 | 고정분할 방식, 페이지 방식 |
| ✅ 외부 단편화 (External Fragmentation) | 사용하지 않는 작은 빈 공간들이 여기저기 흩어져 있음 | 10KB, 20KB, 15KB 따로 있음 → 50KB 프로그램은 못 들어감 | 가변분할, 연속할당 방식 |
외부 단편화 해결방법:
통합(Compaction): 빈 공간들을 하나로 모음
---------------------------------------------------------------------------------------------------------------------------------------------
1. 🧠 가상기억장치(Virtual Memory)란?
실제 메모리(RAM)가 부족해도, 마치 큰 메모리를 가진 것처럼 프로그램을 실행하게 해주는 기술
🔧 현실 상황 예시
- 램이 4GB인데, 8GB짜리 프로그램을 실행하고 싶어!
- 그냥 실행하면? ❌ 실행 안 됨!
- 근데 OS가 **하드디스크의 일부(보조기억장치)**를 빌려서
RAM처럼 **"가짜 메모리"**로 사용하면?
➡ 이게 가상기억장치예요!
📌 실제론 없지만, 있는 것처럼 가상의 메모리 공간을 만들어서 사용하는 것.
2. 💡 어떻게 가능한가?
가상메모리는 페이지 단위로 관리돼요.
📦 페이지란?
- 가상 메모리와 실제 메모리를 **작은 단위(예: 4KB)**로 나눔
- 가상공간 = 페이지(page)
- 실제 메모리(RAM) = 페이지 프레임(page frame)
OS는 필요한 페이지만 메모리에 조금씩 불러와서 실행해요.
전부 올릴 필요가 없어요!
---------------------------------------------------------------------------------------------------------------------
페이지 교체 알고리즘 -
가상메모리 시스템에서는 페이지 단위로 데이터를 메모리에 올립니다.
그런데 RAM(주기억장치)은 크기가 한정되어 있으니까,
새로운 페이지를 올릴 공간이 없을 때는…
✅ “기존에 있던 페이지 하나를 내보내고, 새로 필요한 페이지를 넣는다.”
이 때,
"어떤 페이지를 내보낼까?"
를 결정하는 **규칙(= 알고리즘)**이 바로 페이지 교체 알고리즘이에요.
1. 🔹 FIFO (First-In First-Out)
들어온 순서대로 나간다
- 큐(Queue) 구조로 이해하면 됨
- 단순하지만 효율이 낮을 수 있음

2. 🔹 LRU (Least Recently Used)
가장 오랫동안 사용되지 않은 페이지 제거
- 실제로 많은 운영체제에서 LRU 또는 LRU 비슷한 변형을 사용해요
- 최근에 안 쓰던 놈부터 내보내니 성능이 좋음

3. 🔹 OPT (Optimal)
앞으로 가장 오랫동안 안 쓸 페이지 제거
- 프로세스가 앞으로 사용할 페이지를 미리 알아야 함 -> 불가능
- 비교 연구 목적을 위해 사용됨
4. 🔹 LFU (Least Frequently Used)
사용 횟수가 가장 적은 페이지 제거
- 자주 안 쓰는 페이지는 나가고, 자주 쓰는 놈은 남김
- 근데 사용 횟수를 저장해야 해서 비용이 큼

5. 🔹NUR (Not Used Recently)
최근에 사용하지 않은 페이지 교체 (LRU를 근사한 알고리즘)

----------------------------------------------------------------------------------------------------------------------
📏 페이지 크기의 영향
페이지 크기가 작을수록, 클수록 어떤 일이 생길까요?
| 🔹 작을 때 | 메모리 낭비(내부 단편화) 줄어듦 | 페이지 수 많아져 → 관리 오버헤드 증가 |
| 🔹 클 때 | 디스크 I/O 효율 ↑ (한 번에 많이 가져옴) | 내부 단편화 증가, 필요 없는 데이터까지 불러옴 |
예시로 쉽게!
- 페이지 크기 = 1MB인데, 300KB짜리 코드만 필요하면?
👉 나머지 700KB는 필요 없어도 불러와야 함 → 낭비! - 페이지 크기 = 4KB면?
👉 300KB는 75개 페이지로 쪼개짐 → 관리 부담 커짐
✅ 즉, 페이지 크기는 단편화 ↔ 관리 오버헤드 사이의 트레이드오프(균형)
📍 3. 지역성(Locality)
지역성 = **"프로그램은 일정 시간 동안 특정 부분만 집중적으로 사용한다"**는 성질
| 🔸 시간 지역성 | 최근 사용한 데이터를 또 사용할 가능성 ↑ | 반복문 안의 변수 |
| 🔸 공간 지역성 | 가까운 주소의 데이터를 함께 사용할 가능성 ↑ | 배열 탐색, 함수 실행 순서 |
✅ OS는 이걸 이용해서:
- 자주 쓰는 데이터는 계속 메모리에 유지
- 가까운 데이터는 한 번에 같이 로딩
이 덕분에 페이징 방식이 효과적으로 작동함
🔄 4. 워킹셋(Working Set)
워킹셋 = 현재 시간에 “자주 참조되는 페이지들의 집합”
이게 뭔 말이냐면…
✅ 프로그램이 실행될 때, 한 시점에 실제로 필요한 페이지만 모은 집합이에요.
- 너무 적은 페이지만 메모리에 있으면? → 페이지 부재 자주 발생 (버벅임)
- 너무 많은 페이지만 메모리에 있으면? → 낭비
➡ 그래서 OS는 프로그램별 워킹셋 크기를 예측해서,
"필요한 만큼만 메모리에 넣자"
→ 페이지 부재 최소화 + 메모리 효율 최대화!
🧠 스래싱(Thrashing)이란?
너무 자주 페이지 교체가 일어나서, CPU가 실제 일은 못 하고 페이지 갈아끼우기만 하는 현상
즉,
✅ **계속 페이지 부재(Page Fault)**가 발생해서
✅ 계속 디스크와 메모리를 왔다 갔다 하느라
실제 프로그램 실행은 거의 안 되는 상황
💬 “메모리는 바쁘게 움직이는데, 프로그램은 멈춘 것처럼 느려짐” → 이게 스래싱!
🪛 스래싱 왜 생기는가?
📉 워킹셋보다 적은 프레임을 할당했을 때
- 각 프로세스는 실행에 필요한 **워킹셋(자주 쓰는 페이지들)**이 있어요.
- 근데 메모리에 그걸 다 담을 만큼 **프레임(페이지 공간)**을 안 주면?
→ 필요한 페이지가 없어서 계속 디스크에서 불러옴 →
페이지 부재 발생 →
기존 페이지는 또 버림 →
→ 다시 그 페이지 필요해짐… → 또 불러옴 → 무한 반복 😱
이게 바로 스래싱의 악순환
'정보처리기사 > 이론설명' 카테고리의 다른 글
| [이론설명 이기적] 통신망 기술 (7) | 2025.07.31 |
|---|---|
| [이론설명 이기적] 네트워크 구축관리 (0) | 2025.07.28 |
| [이론설명 이기적] 프로세스 (3) | 2025.07.25 |
| [이론설명 이기적] 운영체제 (3) | 2025.07.24 |
| [이론설명 이기적] DB 물리 데이터베이스 모델링 (2) | 2025.07.24 |