앞의 두 글 Part2, Part3에서 페이징 기법에 대해 살펴보았다. 이번 글에서는 세그먼테이션의 개념과, 페이징과 세그먼테이션을 혼용한 메모리 관리 기법에 대해 다뤄보도록 한다.
세그먼테이션이란?
세그먼테이션은 메모리를 **논리적인 단위(세그먼트)**로 나누는 방식이다.
프로그램은 보통 여러 영역으로 구성되는데, 예를 들어 다음과 같은 영역들이 있다.
- 코드 영역
- 데이터 영역
- 스택 영역
세그먼테이션은 이 각각을 별도의 세그먼트로 분리하여, 각 영역을 독립적으로 관리할 수 있도록 해준다.
이 방식의 장점은 다음과 같다:
- 논리적 구조를 명확하게 표현 가능
- 각 세그먼트의 크기가 가변적이라 필요한 만큼만 메모리 할당 가능
- 메모리 보호, 공유, 동적 확장 등 고급 기능에 유리
하지만 단점도 있다. 단편화(fragmentation)가 발생하기 쉽고, 메모리 할당과 이동이 복잡하다.
반면 페이징은 메모리를 고정된 크기의 페이지로 나누는 방식이다.
가상 메모리와 물리 메모리를 같은 크기의 블록(페이지 / 페이지 프레임)으로 나누고,
가상 페이지를 자유롭게 물리 프레임에 매핑시킨다.
장점은 다음과 같다.
- 외부 단편화가 발생하지 않음
- 메모리 관리가 간단하고 성능이 안정적
- 페이지 단위로 교체 가능하여 효율적
단점은 논리적 구조를 표현하기 어렵다는 점이다. 모든 공간이 동일한 페이지 단위로 나뉘어 있기 때문에, 코드/데이터/스택 구분이 어렵다.
이처럼 페이징과 세그먼테이션은 각각 상반되는 장단점이 있기에, 함께 사용하면 상호 보완적이다.
페이징/세그먼테이션 혼용기법
이 기법은 세그먼테이션의 논리적 장점과 페이징의 메모리 관리 측면의 장점을 동시에 누리기 위해 만들어졌다.
핵심 개념은 간단하다:
“각 세그먼트를 다시 페이지로 나눠서, 페이지 단위로 메모리를 관리하자.”
- 전체 프로그램은 세그먼트 단위로 나뉘고,
- 각 세그먼트는 다시 페이지 단위로 쪼개진다.
- 실제 메모리는 페이지 프레임이라는 고정 크기 블록으로 나뉜다.
결과적으로 세그먼트 → 페이지 → 변위라는 3단계 주소 구조가 생긴다.
🧮 가상 주소 형식
이 구조에서 프로세스가 사용하는 가상 주소는 (s, p, d)로 구성된다:
- s: 세그먼트 번호
- p: 해당 세그먼트 안에서의 페이지 번호
- d: 페이지 안에서의 오프셋(변위)
🔄 주소 변환 과정
주소를 실주소로 바꾸는 과정은 크게 두 단계로 나뉜다:
1. 연관사상으로 빠르게 찾기 → 2. 없으면 직접사상으로 찾기
✅ 1단계: 연관사상 (빠른 경로)
- CPU가 가상 주소 (s, p, d)를 사용해서 데이터를 참조하려 한다.
- MMU는 먼저 연관사상표(=TLB)를 검색해서 (s, p)에 대응하는 정보가 있는지 확인한다.
- 찾았다면 → 거기엔 이미 해당 페이지가 메모리의 어느 페이지 프레임(p′)에 있는지가 적혀 있다.
- p′과 d를 합쳐서 실주소 r = p′ × 페이지 크기 + d를 계산한다.
- 끝. 빠르게 접근 완료.
❌ 2단계: 직접사상 (연관사상 실패 시)
- 연관사상표에 (s, p)가 없으면, 운영체제는 세그먼트 사상표를 조회한다.
- 운영체제는 세그먼트 사상표를 메모리의 특정 위치에서부터 연속적으로 저장해두고 있다.
- 이 세그먼트 사상표의 시작 위치가 b
- 세그먼트 사상표의 시작주소 b에 세그먼트 번호 s를 더해서 b + s 위치를 찾는다.
- 가상 주소에서 s는 몇 번째 세그먼트인지를 의미함. 즉, s는 인덱스.
- b+s는 세그먼트 사상표 배열에서 s번째 항목이 저장된 메모리 주소
- 이 주소에 접근해 그 안에 저장된 값을 읽음.
- b+s 위치에는 세그먼트 s의 페이지 사상표 시작주소 s′가 저장되어 있다.
- 즉, 세그먼트 s에 대한 페이지 사상표는 메모리의 s'번지부터 저장되어 있음.
- 여기서부터 세그먼트 s의 각 페이지가 어떤 페이지 프레임에 매핑되는지를 알 수 있음.
- 다시 페이지 번호 p를 더해서 s′ + p 위치를 찾는다.
- 이 위치는 세그먼트 s의 페이지 사상표에서 p번째 항목이 저장된 주소
- 즉, 세그먼트 s의 p번 페이지가 물리 메모리 어디에 있는지를 알려주는 값이 저장된 곳
- s'+p 위치에 있는 값이 바로 물리 페이지 프레임 번호 p'
- 이 p'는 해당 페이지가 현재 메모리의 몇 번째 프레임에 적재되어 있는지를 나타냄.
- 이제 페이지 프레임의 시작 주소를 계산한다.
- 물리 주소는 바이트 단위로 계산되므로, p′ × 페이지 크기를 하면 해당 페이지 프레임의 시작 주소가 됨.
- 마지막으로 변위 d를 더해서 실주소 r 을 계산한다.
- 가상 주소의 세 번째 구성 요소인 d는 그 페이지 안에서의 오프셋이므로,
- 최종 실주소 r = p′ × 페이지 크기 + d
- 그리고 이 정보를 연관사상표에 등록해서, 다음부터는 빠른 경로로 처리할 수 있게 한다.
📌 주소 변환 공식을 요약하면 다음과 같다.
가상 주소 (s, p, d)에 대해:
1. s → 세그먼트 사상표의 s번째 항목 조회: s′
2. p → 페이지 사상표의 p번째 항목 조회: p′
3. r = p′ × 페이지 크기 + d

'Journey to CS > KNOU CS' 카테고리의 다른 글
| [자료구조] 스택(stack)을 이용하여 중위 표기식을 후위 표기식으로 변환해보자 (0) | 2025.09.12 |
|---|---|
| [DBS] 트랜잭션 - Part3. 타임스탬프 기반 트랜잭션 동기화 규약 (0) | 2025.06.10 |
| [운영체제] 가상메모리와 주소 변환 - Part3. 연관/직접사상의 동적 주소변환 과정 (0) | 2025.06.10 |
| [운영체제] 가상메모리와 주소 변환 - Part2. 페이징 기법과 데이터 참조 과정 (0) | 2025.06.10 |
| [DBS] 트랜잭션 - Part 2. 회복 가능한 스케줄과 비연쇄적 스케줄 (0) | 2025.06.09 |