나만의 작은 도서관

[OS] 내부 단편화, 외부 단편화 본문

Common/CS-일반

[OS] 내부 단편화, 외부 단편화

pledge24 2025. 3. 10. 22:55

내부 단편화 (Internal Fragmentation)

내부 단편화 예시

 

내부 단편화는 OS가 내부적으로 사용하는 시스템으로 인해, 실제 요청한 메모리보다 더 큰 블록을 할당받아 낭비되는 메모리가 발생하는 것을 말한다.

 

내부 단편화가 발생하는 경우

  1. 고정 크기 메모리 할당
    • 운영체제(OS) 또는 메모리 관리자(MMU)가 메모리를 일정한 크기의 블록(ex. 페이지, 슬롯)으로 관리하기 위해, 실제 요청한 크기보다 더 큰 블록을 할당한다.
    • ex. 페이지
      3.8KB의 메모리 할당을 요청했음에도 페이지 크기가 4KB로 설정되어있어 3.8KB가 아닌 4KB를 할당해준다. 
      => 0.2KB 만큼 내부 단편화 발생
  2. 메모리 정렬(Alignment)
    • CPU는 특정 크기의 데이터(ex. 4바이트, 8바이트)를 효율적으로 처리하기 위해 주소를 특정 크기로 정렬하려고 한다. 따라서, 실제 필요한 크기보다 더 큰 공간을 할당함으로써 메모리를 정렬한다.
    • ex. 구조체 패딩(padding)
// 구조체 크기 : 8 X 3 = 24바이트(10바이트 패딩)
struct PackedData {
	int a;      // 4바이트 => 8바이트 할당
	int* ptr;   // 8바이트 => 8바이트 할당
	short b;    // 2바이트 => 8바이트 할당
};

 


외부 단편화 (External Fragmentation)

 

외부 단편화 예시

 

외부 단편화는 사용 가능한 메모리 총 크기가 요청한 메모리 크기보다 크지만, 요청한 메모리 크기를 담을 수 있는 연속된 메모리 공간이 없어 할당할 수 없는 경우를 말한다. 외부 단편화는 메모리 할당과 해제를 반복하면서 작은 크기의 빈 공간(hole)들이 생기는 것이 발생 원인이다.

 

외부 단편화 해결 방법들(일부)

  1. 압축 (Compaction)
    • 두 빈 공간을 메모리 재배치를 통해 연속되게 배치하여 해결하는 방법이다. 메모리 재배치 작업을 하는 과정에서 오버헤드가 발생한다.
  2. 페이징(Paging)
    • 프로세스를 페이지 단위로 쪼갠 다음 각 페이지를 메모리에 할당한다. 이때 페이지들은 연속적일 필요가 없기 때문에 충분한 메모리 공간만 있다면 외부 단편화는 발생하지 않는다.

 


참고 자료

https://zu-techlog.tistory.com/132

https://baejun.tistory.com/15