본문 바로가기
컴퓨터과학

메모리 관리 기법 (페이징, 세그멘테이션)

by 코드그래피 2025. 1. 23.
반응형

페이징과 세그멘테이션은 컴퓨터 운영체제에서 메모리 관리의 중요한 기법입니다. 두 기법은 각각 메모리의 효율적인 분배와 관리, 프로그램 실행을 최적화하는 데 핵심적인 역할을 하며, 운영체제가 메모리 자원을 어떻게 할당하는지를 이해하는 데 중요한 개념입니다. 이번 블로그에서는 페이징세그멘테이션의 정의, 특징, 차이점 및 실제 적용 사례 등을 다뤄보겠습니다.

페이징(Paging)

페이징의 개념

페이징은 프로그램의 메모리 공간을 고정된 크기의 블록(페이지)으로 나누고, 물리 메모리 역시 페이지 프레임이라고 불리는 동일한 크기의 블록으로 나누어 메모리를 관리하는 기법입니다. 페이징 기법을 사용하면, 프로그램은 논리적 주소 공간을 페이지 단위로 분할하고, 운영체제는 각 페이지를 물리적 메모리의 빈 페이지 프레임에 할당합니다.

페이징의 특징

  • 고정된 크기: 모든 페이지와 페이지 프레임은 동일한 크기입니다. 이로 인해 주소 변환이 단순해지고, 물리 메모리의 낭비가 줄어듭니다.
  • 주소 변환: 논리 주소는 페이지 번호페이지 내 오프셋으로 구성되며, 페이지 번호는 페이지 테이블을 통해 물리 주소로 변환됩니다.
  • 외부 단편화 없음: 페이지 크기가 고정되어 있기 때문에, 메모리에서 공간이 비어도 페이지 크기보다 작은 공간은 사용되지 않습니다. 이로 인해 외부 단편화가 발생하지 않습니다.
  • 내부 단편화 가능성: 페이지가 고정 크기이므로, 마지막 페이지에서 발생할 수 있는 내부 단편화 문제가 존재할 수 있습니다.

페이징의 장점

  • 효율적인 메모리 사용: 작은 크기의 페이지 단위로 메모리를 관리하므로 메모리 낭비가 적습니다.
  • 동적 메모리 할당: 프로그램이 메모리의 특정 영역을 사용하기 위해 모든 메모리를 연속적으로 할당받을 필요 없이, 페이지 단위로 필요한 부분만 할당할 수 있습니다.

페이징의 단점

  • 주소 변환 오버헤드: 페이지 테이블을 통한 주소 변환 과정이 추가되어 성능 저하를 초래할 수 있습니다.
  • 내부 단편화: 페이지 크기보다 작은 데이터를 저장할 때 남는 공간은 사용할 수 없어 낭비가 발생할 수 있습니다.

페이징의 예시

운영체제에서 각 프로그램을 실행할 때, 프로그램을 고정된 크기의 페이지로 나누고, 필요한 페이지를 메모리에서 찾아 실행하게 됩니다. 예를 들어, 4KB 페이지 크기에서 프로그램이 10KB 크기일 경우, 3개의 페이지가 필요하며 그 중 2개만 메모리에 로드될 수 있습니다.

세그멘테이션(Segmentation)

세그멘테이션의 개념

세그멘테이션은 프로그램의 논리적 구성을 다양한 크기의 세그먼트로 나누는 기법입니다. 각 세그먼트는 프로그램의 특정 부분을 나타내며, 예를 들어 코드, 데이터, 스택, 힙 등이 세그먼트로 나뉘어질 수 있습니다. 세그멘테이션에서는 각 세그먼트가 서로 다른 크기를 가질 수 있으며, 물리적 메모리에서 연속된 영역에 할당됩니다.

세그멘테이션의 특징

  • 변동 크기: 세그먼트는 고정된 크기가 아니라 논리적인 단위에 따라 크기가 달라집니다. 예를 들어, 코드 세그먼트와 데이터 세그먼트는 크기가 다를 수 있습니다.
  • 주소 변환: 세그멘테이션에서 논리적 주소는 세그먼트 번호세그먼트 내 오프셋으로 구성됩니다. 운영체제는 세그먼트 테이블을 사용하여 물리적 주소를 변환합니다.
  • 외부 단편화 발생 가능: 세그먼트가 크기가 다르기 때문에, 메모리의 연속적인 영역에 세그먼트를 배치할 수 없을 때 외부 단편화가 발생할 수 있습니다.

세그멘테이션의 장점

  • 논리적 구조 유지: 세그멘테이션은 프로그램의 논리적 구조에 맞게 메모리를 관리하기 때문에, 코드와 데이터를 구분하여 메모리를 할당할 수 있습니다.
  • 유연성: 세그먼트의 크기는 동적으로 조정할 수 있어 유연한 메모리 할당이 가능합니다.

세그멘테이션의 단점

  • 외부 단편화: 세그먼트가 다양한 크기를 가짐에 따라 메모리 공간이 비어 있어도 세그먼트 크기에 맞는 공간을 찾기 어려운 경우가 많습니다. 이로 인해 외부 단편화가 발생할 수 있습니다.
  • 주소 변환 오버헤드: 세그먼트 테이블을 통한 주소 변환 과정도 페이징과 마찬가지로 성능 저하를 일으킬 수 있습니다.

세그멘테이션의 예시

세그멘테이션을 사용하면 각 프로그램의 코드, 데이터, 스택 등을 별도의 세그먼트로 분리할 수 있습니다. 예를 들어, 프로그램에 3개의 세그먼트가 있을 경우, 각각 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트로 나누어 메모리 배치가 됩니다. 각 세그먼트는 논리적으로 독립적인 주소 공간을 가지며, 프로그램이 실행되면서 필요한 세그먼트를 메모리에서 찾아 로드할 수 있습니다. 이렇게 하면 각 세그먼트가 다르게 크기를 가질 수 있어, 코드와 데이터가 함께 사용되는 경우에도 메모리의 낭비를 줄일 수 있습니다.

페이징과 세그멘테이션의 비교

1. 메모리 관리 방식

  • 페이징은 메모리를 고정된 크기의 페이지로 나누어 관리하며, 각 페이지는 물리 메모리의 페이지 프레임에 배치됩니다. 이로 인해 주소 변환이 단순하고 외부 단편화가 없지만, 내부 단편화가 발생할 수 있습니다.
  • 세그멘테이션은 논리적으로 의미 있는 단위(코드, 데이터, 스택 등)로 메모리를 나누며, 각 세그먼트는 다양한 크기를 가질 수 있습니다. 세그멘테이션은 논리적 구조를 유지하며 유연하지만 외부 단편화가 발생할 수 있습니다.

2. 주소 변환

  • 페이징에서는 논리 주소가 페이지 번호와 페이지 내 오프셋으로 나뉘며, 페이지 테이블을 통해 물리 주소로 변환됩니다.
  • 세그멘테이션에서는 논리 주소가 세그먼트 번호와 세그먼트 내 오프셋으로 구성되며, 세그먼트 테이블을 사용해 물리 주소로 변환됩니다.

3. 단편화

  • 페이징은 외부 단편화가 없지만, 내부 단편화가 발생할 수 있습니다.
  • 세그멘테이션은 외부 단편화가 발생할 수 있으며, 세그먼트의 크기가 다르기 때문에 비효율적인 메모리 사용이 발생할 수 있습니다.

4. 장단점

  • 페이징은 주소 변환이 빠르고 외부 단편화가 없지만, 페이지 크기가 고정되어 내부 단편화가 발생할 수 있습니다. 또한, 각 페이지를 물리 메모리에 배치할 때 발생하는 오버헤드가 존재합니다.
  • 세그멘테이션은 프로그램의 논리적 구조에 맞게 메모리를 배치할 수 있어 유연하고 직관적이지만, 외부 단편화가 발생하고 주소 변환이 더 복잡할 수 있습니다.

페이징과 세그멘테이션의 혼합 기법

일부 현대 운영체제는 페이징과 세그멘테이션을 결합하여 사용하는 하이브리드 방식을 채택합니다. 이 방식에서는 프로그램을 세그먼트로 나눈 후, 각 세그먼트를 페이지로 나누는 방식을 사용합니다. 이를 통해 세그멘테이션의 유연성과 페이징의 효율성을 동시에 확보할 수 있습니다.

하이브리드 방식의 예시

운영체제에서, 프로그램의 코드와 데이터는 각각 하나의 세그먼트로 나누고, 각 세그먼트는 페이지로 나누어 메모리에 로드됩니다. 이 방식은 세그멘테이션의 논리적 구조와 페이징의 메모리 할당 효율성을 동시에 고려할 수 있어, 두 기법의 단점을 보완할 수 있습니다.

결론

페이징과 세그멘테이션은 각각 고유한 장단점을 가진 메모리 관리 기법입니다. 페이징은 고정 크기의 페이지로 메모리를 관리하여 외부 단편화를 해결하고, 세그멘테이션은 프로그램의 논리적 구조에 맞춰 다양한 크기의 세그먼트를 사용하여 유연성을 제공합니다. 각각의 기법은 메모리 관리의 효율성을 극대화하는 방법을 다르게 접근하고 있으며, 실제 운영체제에서는 이 두 기법을 결합하여 사용하기도 합니다.

이러한 메모리 관리 기법들은 컴퓨터 시스템의 성능과 효율성을 향상시키는 데 중요한 역할을 하며, 시스템 설계자와 개발자에게는 반드시 이해해야 할 기본적인 개념입니다. 각 기법의 특성과 차이를 명확히 이해하는 것이 시스템 최적화 및 개발에 매우 중요한 요소임을 알 수 있습니다.

반응형