메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

메모리 단편화

noriwiki
(Fragmentation에서 넘어옴)


개요

단편화(Fragmentation)는 운영체제에서 메모리를 효율적으로 관리하지 못해, 실제로는 가용 메모리가 충분함에도 불구하고 메모리 할당이 불가능해지는 현상을 의미한다. 이로 인해 가용 메모리 내에 사용되지 않는 불필요한 공간이 발생하며, 전체적인 메모리 활용률이 저하된다. 단편화는 크게 두 가지 유형으로 분류된다:

내부 단편화 (Internal Fragmentation)

내부 단편화는 메모리를 고정 크기의 블록 또는 단위(예: 페이지, 세그먼트)로 나눠 사용하는 방식에서 발생한다. 메모리 블록이 프로세스의 요구량보다 클 경우, 할당된 블록 내에서 일부 공간이 비어 있는 채로 남게 되며 이 공간은 다른 프로세스가 사용할 수 없다.

예시
4KB 크기의 페이지 단위로 메모리를 나누고, 한 프로세스가 6KB의 메모리를 요청한 경우, 두 개의 페이지가 할당된다. 이때 실제 사용되는 공간은 6KB지만, 할당된 공간은 8KB로, 2KB가 사용되지 않고 남게 되며 이는 내부 단편화에 해당한다.

외부 단편화 (External Fragmentation)

외부 단편화는 가변 크기의 블록을 사용하는 경우 발생한다. 메모리 내에 사용 가능한 공간은 존재하지만, 이 공간이 연속적이지 않고 조각나 있어, 큰 크기의 메모리 블록을 할당할 수 없는 상황을 말한다.

예시
100MB의 메모리 공간이 존재하나, 그 공간이 10MB, 20MB, 15MB, 30MB, 25MB와 같이 불연속적으로 나뉘어 있을 경우, 총 100MB가 남아 있음에도 불구하고 50MB의 연속된 공간을 할당하지 못하게 되는 현상이 발생한다. 이는 외부 단편화의 전형적인 예이다.

단편화 발생 원인

  • 메모리의 동적 할당 및 해제
  • 프로세스 생성/종료 반복
  • 메모리 요청 크기의 다양성
  • 세그멘테이션 또는 가변 할당 전략의 비효율성

단편화 해결 방법

  • 압축(Compaction): 외부 단편화 해결을 위해 메모리 내의 할당된 블록을 한쪽으로 몰아서 연속된 공간을 확보하는 방식. 다만, 실행 중인 프로세스를 이동시켜야 하기 때문에 오버헤드가 크다.
  • 페이징(Paging): 메모리를 동일한 크기의 블록으로 나누어 할당함으로써 외부 단편화를 방지할 수 있다. 하지만 내부 단편화는 여전히 발생할 수 있다.
  • 세그멘테이션(Segmentation): 논리적 단위로 메모리를 나누되, 각 세그먼트는 가변 크기이므로 외부 단편화 가능성이 존재한다.
  • 혼합 기법(Paging + Segmentation): 페이징과 세그멘테이션을 혼합하여 각각의 단점을 보완하는 방식.