학습 목표
세그멘테이션이 논리 단위(코드·데이터·스택)로 주소 공간을 나누는 방식임을 설명할 수 있다.
페이징과 세그멘테이션의 장단점·조합(세그먼트+페이지) 을 비교할 수 있다.
working set 모델과 지역성이 페이지 교체·스래싱과 어떤 관계인지 설명할 수 있다.
스래싱 원인과 working set 정책·프레임 할당 완화 방법을 설명할 수 있다.
문제 상황
- 스택이 한 페이지 경계를 넘을 때마다 guard page·폴트 — 세그먼트 관점과 페이징 관점이 다르게 느껴진다
- 멀티태스킹 프로세스 수를 늘리면 처음엔 처리량이 오르다가 갑자기 전체가 느려진다
- 스래싱
vmstat에서 si/so(스왑 인·아웃)만 높고 CPU는 바쁘지 않다- 디스크 페이징에 시간을 씀
- 컨테이너·JVM 힙을 크게 잡았는데 실제 touch는 일부 — working set은 그보다 작을 수 있다
가상 메모리·교체 알고리즘까지 봤다. 이번엔 논리 단위 할당과 프로세스가 실제로 쓰는 페이지 집합이다.
1. 세그멘테이션 (Segmentation)
주소 공간을 의미 있는 단위(세그먼트) 로 나눈다. 각 세그먼트는 가변 길이다.

| 개념 | 설명 |
|---|---|
| 세그먼트 | code, data, stack, heap 등 — 프로그래머·컴파일러가 아는 단위 |
| 세그먼트 테이블 | base + limit (또는 길이) — 논리 주소 = (세그먼트#, 오프셋) |
| 보호 | 세그먼트 단위 R/W/X — 스택에 실행 금지 등 |
| 공유 | code 세그먼트를 여러 프로세스가 공유 |
- 외부 단편화: 세그먼트마다 크기가 달라 물리 메모리에 구멍 발생
- 성장: 스택·힙 세그먼트를 한쪽으로 확장하기 쉬움 (limit 조정)
- x86 GDT/LDT·과거 8086 세그먼트는 역사적 예 — 현대는 페이징 위에 세그먼트 개념이 남은 경우 많음
2. 세그먼트 vs 페이징
| 항목 | 세그멘테이션 | 페이징 |
|---|---|---|
| 단위 | 가변 길이 세그먼트 | 고정 크기 페이지 |
| 단편화 | 외부 | 내부(페이지 단위) |
| 논리 뷰 | 코드/데이터/스택 구분 명확 | 균일 페이지 나열 |
| 테이블 | 세그먼트 테이블 | 페이지 테이블 |
| 실무 | 단독은 드묾 | 주류 (Linux, Windows) |
세그먼트 + 페이징: 논리 주소를 먼저 세그먼트로 나눈 뒤, 각 세그먼트를 페이지로 페이징 — Intel 64비트는 사실상 페이징 중심, 세그먼트는 평탄(flat) 모델이 일반적.
mmap영역·스택·힙이 VMA(Virtual Memory Area)로 구분되는 것은 OS 내부에서 세그먼트 유사 구조- 사용자에게는 여전히 연속 가상 주소 — MMU는 페이지로 변환
3. 지역성과 working set
프로세스는 어느 순간에 일부 페이지만 집중적으로 참조한다 — 지역성(locality).

Working set WS(t, Δ): 시각 t 기준 최근 Δ 시간(또는 최근 N번 참조) 동안 접근한 서로 다른 페이지 집합.
| 용어 | 설명 |
|---|---|
| Δ | 윈도 크기 — 참조 이력 길이 |
| WSS | working set 크기 (페이지 수) |
| 목적 | 교체 시 working set 밖 페이지를 victim으로 — 스래싱 완화 |
- 시간 지역성: 방금 쓴 페이지를 곧 다시 씀 (루프, 스택)
- 공간 지역성: 인접 주소를 연속 참조 (배열 순회)
- WSS가 크면 필요 프레임 많음 — 동시 실행 프로세스 수와 트레이드오프
4. 스래싱 (Thrashing)
물리 프레임이 부족해 페이지 폴트·스왑만 반복하고 유용한 CPU 작업이 거의 없는 상태.

| 현상 | 설명 |
|---|---|
| 원인 | Σ WSS > 물리 프레임 (또는 과도한 멀티프로그래밍) |
| 증상 | CPU 이용률 하락, 디스크 I/O·majflt 폭증 |
| Belady식 직관 | 프로세스를 더 올려도 처리량이 오히려 감소 |
완화:
| 방법 | 설명 |
|---|---|
| Working set 정책 | WSS만큼 프레임 보장, 부족하면 일부 프로세스 스왑 아웃 |
| WSClock | Clock + working set — 오래 참조 안 한 페이지 우선 교체 |
| 로컬 vs 글로벌 교체 | 프로세스별 프레임 풀(로컬)이 한 프로세스가 전체 프레임을 잡아먹는 것 방지 |
| 프레임 할당 | 균등·비례·우선순위 — 프로세스당 최소·최대 프레임 |
- Linux memory cgroup·컨테이너 limit은 프로세스(그룹)별 프레임 상한에 가깝게 동작
- DB·배치는 동시성 줄이기·메모리 맞추기로 스래싱 회피
5. 실무 관점
| 관측 | 해석 |
|---|---|
vmstat 1 si/so 높음 |
스왑 활발 — 스래싱 직전·진행 |
pidstat -r minflt vs majflt |
major 많으면 디스크 페이징 |
| 프로세스 추가 시 p95 지연 급증 | Σ WSS가 RAM 넘었을 가능성 |
| NUMA | working set이 원격 노드에 흩어지면 지연 추가 (다중처리 편) |
- overcommit + burst 할당은 평소 WSS는 작은데 피크에 OOM·스래싱
- mlock, huge page는 working set을 고정·연속에 가깝게 — latency 민감 워크로드
6. 정리
- 세그멘테이션은 논리 단위·가변 길이, 페이징은 고정 프레임 — 실무는 페이징 + OS 내부 VMA
- Working set은 최근 참조 페이지 집합 — 교체·스케줄링의 기준
- 스래싱은 프레임 부족으로 폴트 폭주 — WSS 기반 할당·동시 실행 수 조절로 완화
- 메모리 파트 마무리 — 다음: 파일 시스템
다음에 다룰 것
- 파일 시스템 개념
- 파일·디렉터리, VFS, 마운트
해당 내용은 Operating System Concepts, 10/E (Avraham Silberschatz, Peter Baer Galvin, Greg Gagne) 의 내용을 기반으로 합니다.