운영체제 따라잡기

세그멘테이션과 군집화

meellon 2026. 7. 2. 05:00

학습 목표

세그멘테이션이 논리 단위(코드·데이터·스택)로 주소 공간을 나누는 방식임을 설명할 수 있다.

페이징과 세그멘테이션의 장단점·조합(세그먼트+페이지) 을 비교할 수 있다.

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) 의 내용을 기반으로 합니다.

'운영체제 따라잡기' 카테고리의 다른 글

디스크 스케줄링  (0) 2026.07.04
파일 시스템 개념  (0) 2026.07.03
가상 메모리  (0) 2026.07.01
페이징  (0) 2026.06.30
메모리 관리 기초  (0) 2026.06.29