Journey to CS/KNOU CS

[운영체제] 가상메모리와 주소 변환 - Part4. 페이징/세그먼테이션 혼용기법

Cordilog 2025. 6. 10. 20:20

앞의 두 글 Part2, Part3에서 페이징 기법에 대해 살펴보았다. 이번 글에서는 세그먼테이션의 개념과, 페이징과 세그먼테이션을 혼용한 메모리 관리 기법에 대해 다뤄보도록 한다. 

 

세그먼테이션이란? 

세그먼테이션은 메모리를 **논리적인 단위(세그먼트)**로 나누는 방식이다.
프로그램은 보통 여러 영역으로 구성되는데, 예를 들어 다음과 같은 영역들이 있다.

  • 코드 영역
  • 데이터 영역
  • 스택 영역

세그먼테이션은 이 각각을 별도의 세그먼트로 분리하여, 각 영역을 독립적으로 관리할 수 있도록 해준다.
이 방식의 장점은 다음과 같다:

  • 논리적 구조를 명확하게 표현 가능
  • 각 세그먼트의 크기가 가변적이라 필요한 만큼만 메모리 할당 가능
  • 메모리 보호, 공유, 동적 확장 등 고급 기능에 유리

하지만 단점도 있다. 단편화(fragmentation)가 발생하기 쉽고, 메모리 할당과 이동이 복잡하다.

 

반면 페이징은 메모리를 고정된 크기의 페이지로 나누는 방식이다. 

가상 메모리와 물리 메모리를 같은 크기의 블록(페이지 / 페이지 프레임)으로 나누고,
가상 페이지를 자유롭게 물리 프레임에 매핑시킨다.

장점은 다음과 같다.

  • 외부 단편화가 발생하지 않음
  • 메모리 관리가 간단하고 성능이 안정적
  • 페이지 단위로 교체 가능하여 효율적

단점은 논리적 구조를 표현하기 어렵다는 점이다. 모든 공간이 동일한 페이지 단위로 나뉘어 있기 때문에, 코드/데이터/스택 구분이 어렵다.

 

이처럼 페이징과 세그먼테이션은 각각 상반되는 장단점이 있기에, 함께 사용하면 상호 보완적이다. 

 

페이징/세그먼테이션 혼용기법

이 기법은 세그먼테이션의 논리적 장점페이징의 메모리 관리 측면의 장점을 동시에 누리기 위해 만들어졌다.
핵심 개념은 간단하다:

 

“각 세그먼트를 다시 페이지로 나눠서, 페이지 단위로 메모리를 관리하자.”

  • 전체 프로그램은 세그먼트 단위로 나뉘고,
  • 각 세그먼트는 다시 페이지 단위로 쪼개진다.
  • 실제 메모리는 페이지 프레임이라는 고정 크기 블록으로 나뉜다.

결과적으로 세그먼트 → 페이지 → 변위라는 3단계 주소 구조가 생긴다.

🧮 가상 주소 형식

이 구조에서 프로세스가 사용하는 가상 주소는 (s, p, d)로 구성된다:

  • s: 세그먼트 번호
  • p: 해당 세그먼트 안에서의 페이지 번호
  • d: 페이지 안에서의 오프셋(변위)

🔄 주소 변환 과정

주소를 실주소로 바꾸는 과정은 크게 두 단계로 나뉜다:
1. 연관사상으로 빠르게 찾기 → 2. 없으면 직접사상으로 찾기

 

✅ 1단계: 연관사상 (빠른 경로)

  1. CPU가 가상 주소 (s, p, d)를 사용해서 데이터를 참조하려 한다.
  2. MMU는 먼저 연관사상표(=TLB)를 검색해서 (s, p)에 대응하는 정보가 있는지 확인한다.
  3. 찾았다면 → 거기엔 이미 해당 페이지가 메모리의 어느 페이지 프레임(p′)에 있는지가 적혀 있다.
  4. p′과 d를 합쳐서 실주소 r = p′ × 페이지 크기 + d를 계산한다.
  5. 끝. 빠르게 접근 완료.

❌ 2단계: 직접사상 (연관사상 실패 시)

  1. 연관사상표에 (s, p)가 없으면, 운영체제는 세그먼트 사상표를 조회한다.
    • 운영체제는 세그먼트 사상표를 메모리의 특정 위치에서부터 연속적으로 저장해두고 있다. 
    • 이 세그먼트 사상표의 시작 위치가 b
  2. 세그먼트 사상표의 시작주소 b에 세그먼트 번호 s를 더해서 b + s 위치를 찾는다.
    • 가상 주소에서 s는 몇 번째 세그먼트인지를 의미함. 즉, s는 인덱스.
    • b+s는 세그먼트 사상표 배열에서 s번째 항목이 저장된 메모리 주소
    • 이 주소에 접근해 그 안에 저장된 값을 읽음.
  3. b+s 위치에는 세그먼트 s의 페이지 사상표 시작주소 s′가 저장되어 있다.
    • 즉, 세그먼트 s에 대한 페이지 사상표는 메모리의 s'번지부터 저장되어 있음.
    • 여기서부터 세그먼트 s의 각 페이지가 어떤 페이지 프레임에 매핑되는지를 알 수 있음.
  4. 다시 페이지 번호 p를 더해서 s′ + p 위치를 찾는다.
    • 이 위치는 세그먼트 s의 페이지 사상표에서 p번째 항목이 저장된 주소
    • 즉, 세그먼트 s의 p번 페이지가 물리 메모리 어디에 있는지를 알려주는 값이 저장된 곳
  5. s'+p 위치에 있는 값이 바로 물리 페이지 프레임 번호 p'
    • 이 p'는 해당 페이지가 현재 메모리의 몇 번째 프레임에 적재되어 있는지를 나타냄.
  6. 이제 페이지 프레임의 시작 주소를 계산한다.
    • 물리 주소는 바이트 단위로 계산되므로, p′ × 페이지 크기를 하면 해당 페이지 프레임의 시작 주소가 됨.
  7. 마지막으로 변위 d를 더해서 실주소 r 을 계산한다.
    • 가상 주소의 세 번째 구성 요소인 d는 그 페이지 안에서의 오프셋이므로,
    • 최종 실주소 r = p′ × 페이지 크기 + d
  8. 그리고 이 정보를 연관사상표에 등록해서, 다음부터는 빠른 경로로 처리할 수 있게 한다.

 

📌 주소 변환 공식을 요약하면 다음과 같다.

 

가상 주소 (s, p, d)에 대해:

1. s → 세그먼트 사상표의 s번째 항목 조회: s′
2. p → 페이지 사상표의 p번째 항목 조회: p′
3. r = p′ × 페이지 크기 + d