페이징과 세그멘테이션

기술노트

페이징과 세그멘테이션

페이징(Paging)세그멘테이션(Segmentation)은 운영체제가 가상 메모리를 구현하기 위한 대표적인 메모리 관리 기법입니다. 두 기법 모두 프로세스에게 크고 연속적인 가상 주소 공간을 제공하면서, 실제 물리 메모리에는 비연속적으로 매핑될 수 있도록 합니다. 핵심적인 차이는 메모리를 나누는 단위에 있습니다.


📄 페이징 (Paging)

  • 개념 (Concept) : 가상 메모리 공간과 물리 메모리 공간을 고정된 크기의 블록으로 나누어 관리하는 기법입니다.

> * 페이지 (Page) : 가상 메모리 공간의 고정 크기 블록. > * 프레임 (Frame) : 물리 메모리 공간의 고정 크기 블록. (페이지와 동일한 크기)

  • 동작 원리

> * 프로세스의 가상 주소는 '페이지 번호(Page Number)'와 '오프셋(Offset)'으로 구성됩니다. > * 페이지 번호는 '페이지 테이블(Page Table)'을 통해 물리 메모리의 프레임 번호로 변환되고, 프레임 번호와 오프셋을 결합하여 실제 물리 주소를 얻습니다.

  • 장점 (Advantages)

> * 외부 단편화 (External Fragmentation) 문제 해결 : 고정된 크기로 나누기 때문에, 메모리 중간에 작은 빈 공간이 생기는 외부 단편화가 발생하지 않습니다. > * 간단한 메모리 관리 : 고정된 크기 덕분에 메모리 할당 및 회수가 비교적 간단합니다.

  • 단점 (Disadvantages)

> * 내부 단편화 (Internal Fragmentation) 발생 : 페이지의 마지막 부분이 완전히 채워지지 않아, 페이지 내부에 사용되지 않는 공간이 발생할 수 있습니다. > * 페이지 테이블 크기 : 프로세스의 가상 주소 공간이 클수록 페이지 테이블의 크기가 커집니다. (다단계 페이지 테이블 등으로 해결)


🧩 세그멘테이션 (Segmentation)

  • 개념 (Concept) : 가상 메모리 공간을 가변적인 크기의 논리적 단위인 '세그먼트(Segment)'로 나누어 관리하는 기법입니다. 세그먼트는 코드, 데이터, 스택 등 프로그램의 논리적 구조를 반영합니다.
  • 동작 원리

> * 프로세스의 가상 주소는 '세그먼트 번호(Segment Number)'와 '오프셋(Offset)'으로 구성됩니다. > * 세그먼트 번호는 '세그먼트 테이블(Segment Table)'을 통해 물리 메모리의 시작 주소(Base Address)와 길이(Limit)로 변환됩니다. 오프셋이 세그먼트 길이를 초과하는지 검사 후, 시작 주소와 오프셋을 더하여 실제 물리 주소를 얻습니다.

  • 장점 (Advantages)

> * 내부 단편화 문제 해결 : 세그먼트가 필요한 만큼의 크기로 할당되므로 내부 단편화가 발생하지 않습니다. > * 논리적 구조 반영 : 프로그램의 논리적 구조(함수, 배열 등)를 그대로 메모리에 반영하여, 프로그래머가 메모리를 더 쉽게 이해하고 관리할 수 있습니다.

  • 단점 (Disadvantages)

> * 외부 단편화 발생 : 가변적인 크기 때문에 메모리 중간에 사용되지 않는 빈 공간(외부 단편화)이 발생할 수 있습니다. > * 복잡한 메모리 관리 : 가변적인 크기 때문에 메모리 할당 및 회수가 복잡합니다.


💡 개발자 핵심 Point

| 특징 | 페이징 | 세그멘테이션 | |---|---|---| | 분할 단위 | 고정 크기 (페이지) | 가변 크기 (세그먼트) | | 단편화 | 내부 단편화 발생 | 외부 단편화 발생 | | 메모리 관리 | 비교적 간단 | 복잡 | | 논리적 구조 | 반영 안 됨 | 반영됨 |

  • 현대 운영체제는 대부분 페이징 방식을 사용합니다. 페이징은 외부 단편화 문제를 해결하고 메모리 관리를 단순화하는 데 유리하기 때문입니다.
  • 일부 시스템에서는 페이징과 세그멘테이션의 장점을 결합한 세그먼티드 페이징(Segmented Paging) 방식을 사용하기도 합니다. 이는 프로그램을 세그먼트로 나누고, 각 세그먼트를 다시 페이지로 나누어 관리하는 방식입니다.