토픽 50 / 111·메모리 계층 (Memory Hierarchy)
세그멘테이션 (Segmentation)
세그멘테이션 (Segmentation)
프로세스의 주소 공간을 논리적 단위(코드, 데이터, 스택 등)인 세그먼트로 분할하여 각각 독립적으로 관리하는 가변 크기 메모리 관리 기법
목적: 논리적 메모리 구조 반영, 메모리 보호, 공유 용이, 프로그래머 관점의 메모리 관리
특징: 가변 크기, 논리적 분할, 세그먼트 테이블, 외부 단편화 발생
구성요소
- •세그먼트(Segment): 논리적 단위(코드/데이터/스택/힙), 가변 크기
- •세그먼트 테이블(Segment Table): 세그먼트별 Base(시작주소) + Limit(길이) 저장
- •세그먼트 번호(Segment Number): 논리 주소의 상위 비트, 세그먼트 식별
- •오프셋(Offset): 세그먼트 내 변위, Limit 초과 시 트랩 발생
주소 변환: 논리주소(세그먼트번호 + 오프셋) → 세그먼트 테이블 조회 → Base + Offset = 물리주소 (Offset > Limit이면 세그멘테이션 폴트)
보호: 세그먼트별 R/W/X 권한 설정, Limit 검사로 경계 위반 탐지
공유: 코드 세그먼트를 여러 프로세스가 공유 가능(공유 라이브러리)
장점: 논리적 구조 반영, 세그먼트별 보호·공유 용이, 내부 단편화 없음
단점: 외부 단편화(가변 크기), 메모리 압축(Compaction) 필요, 관리 복잡
- •First Fit: 첫 번째 적합 공간에 배치, 탐색 빠름, 앞쪽에 단편화 집중
- •Best Fit: 가장 작은 적합 공간에 배치, 공간 효율적, 탐색 느림, 작은 잔여 조각 다수
- •Worst Fit: 가장 큰 공간에 배치, 큰 잔여 공간 확보, 큰 요청 실패 가능
- •Next Fit: 마지막 배치 위치부터 탐색, First Fit 변형, 균등 분산
외부 단편화 해결 기법
- •압축(Compaction): 세그먼트를 한쪽으로 모아 연속 빈 공간 확보, 높은 오버헤드(프로세스 중단·재배치)
- •버디 시스템(Buddy System): 2^n 단위로 분할·병합, 빠른 할당·해제, 내부 단편화 존재
- •세그멘테이션+페이징: 세그먼트를 페이지로 재분할하여 외부 단편화 근본 제거
세그멘테이션+페이징: 세그먼트를 다시 페이지로 분할, 외부 단편화 해결, Intel x86(세그먼트→선형주소→페이징), 복잡도 증가
적용사례: Intel x86(CS/DS/SS/ES 세그먼트 레지스터), Multics, OS/2
현대 동향: x86-64에서 세그멘테이션 사실상 비활성(Flat Model, Base=0/Limit=Max), 페이징 중심으로 전환
비교: 세그멘테이션(가변/논리적/외부단편화) vs 페이징(고정/물리적/내부단편화) vs 세그멘테이션+페이징(혼합/복잡/단편화해결)
연관: 가상 메모리, 페이징, MMU, 메모리 보호, 외부 단편화