본문 바로가기

컴퓨터시스템

메모리 단편화와 메모리 할당 정책

728x90

 

메모리 단편화란, 프로그램이 동적으로 할당한 메모리들이 사용이 끝나 실행 도중에 해제되면서 생기는 메모리 조각들을 말합니다.

 

메모리 단편화는 내부 단편화/외부 단편화로 나뉩니다.

 

내부 단편화는 고정된 단위로 메모리 블록을 할당할 때, 블록 크기와 메모리 크기가 정확히 일치하지 않아 생기는 현상입니다. 예를 들어 8바이트의 메모리를 할당해야 하는데, 맞는 크기가 없어 16바이트의 메모리 블록을 할당 받는 경우에 8바이트는 필요하지 않아 사용되지 않고 낭비되어 내부 단편화가 발생합니다.

 

외부 단편화는 메모리 할당과 해제가 반복되면서 메모리 블록이 여러 개의 작은 블록으로 분산되어 공백이 생겨 메모리를 할당할 수 없는 상태입니다. 예를 들면, 남아있는 블록은 30바이트인데 이 블록이 5, 10, 15바이트로 나뉘어 20바이트가 필요한 경우입니다. 남아있는 총 바이트 수는 충분한데 하나의 블록으로는 원하는 메모리 양을 충족시켜줄 수 없습니다.

 

메모리 단편화는 이렇듯 할당 가능한 메모리 공간이 충분함에도 연속된 메모리 공간을 할당할 수 없는 상황입니다.

 

 

 


 

메모리 단편화의 해결법

 

내부 단편화

  • 메모리 할당 시 크기가 정확하게 맞도록 한다.
    메모리 할당 시 요청한 크기보다 약간 더 큰 블록을 할당하고, 필요한 공간만큼만 사용하도록 합니다. 이 방법은 메모리 할당의 속도를 높이는 장점이 있지만, 할당된 메모리의 크기가 실제 필요한 크기보다 커 낭비가 발생할 수 있습니다.

  • 세그멘테이션 (Segmentation)
    프로세스의 가상 메모리를 서로 다른 크기의 블록인 세그먼트(Segment) 단위로 분할하여 물리 메모리에 할당하는 기법입니다. 프로세스의 크기가 동적으로 변하는 경우에 효율적으로 메모리를 할당할 수 있어 내부 단편화를 해결할 수 있습니다.

  • Buddy System
    Buddy System은 메모리 블록을 2의 거듭제곱 크기로 고정되어 할당하고, 할당된 블록을 최대한 같은 크기의 블록으로 병합하는 방법입니다. 메모리 할당 및 해제가 빠르고 내부 단편화를 최소화 할 수 있으며, 메모리 블록을 효율적으로 사용할 수 있습니다. 그러나 이 방법은 요청된 사이즈보다 큰 블록을 할당해주기 때문에 메모리 낭비가 발생할 수 있으며, 병합 작업이 복잡하고 오버헤드가 크다는 단점이 있습니다.

 

외부 단편화

  • 페이징
    프로세스의 가상 메모리를 고정 크기의 블록인 페이지(page) 단위로 분할하여 물리 메모리에 할당하는 기법입니다. 페이지들은 논리적으로 연속적인 공간으로 할당되지만, 물리적으로는 분산되어 할당됩니다. 물리 메모리 내에 작은 공간이 남더라도 이를 페이지 크기로 합쳐 큰 공간으로 사용할 수 있기 때문에 외부 단편화를 해결할 수 있습니다.
    (커널에서는 page in, out 동작을 할 때 느려지기 때문에 잘 사용하지 않는다고도 합니다.)

  • 메모리 병합 (Memory Compaction)
    메모리에 있는 작은 빈 공간들을 하나로 합치는 작업입니다. 메모리 병합을 통해 큰 연속적인 공간을 만들 수 있으며, 외부 단편화를 줄일 수 있습니다. 하지만 메모리 병합은 오버헤드가 크고, 병합을 위한 추가적인 작업과 시간이 필요하므로 성능에 영향을 줄 수 있습니다.

  • 가상 메모리 사용
    가상 메모리를 사용하여 논리적인 주소 공간을 물리적인 메모리와 분리하여 관리합니다. 가상 메모리를 사용하면 프로세스는 연속된 물리적인 메모리 공간을 필요로 하지 않고, 필요한 만큼의 가상 주소 공간을 할당받을 수 있습니다. 이러면 외부 단편화가 발생하지 않으며, 가상 메모리 매핑을 통해 물리적인 메모리와 연결됩니다.

  • 메모리 풀 사용
    사전에 필요한 메모리 크기와 개수를 정해 메모리 블록을 미리 할당받아 메모리 풀을 만들어 놓고 필요할 때마다 메모리 블록을 가져와 사용하고 반납하는 방식입니다. 필요한 공간만큼 할당받아 외부 단편화와 내부 단편화를 줄일 수 있고, 메모리 할당과 해제 작업을 빠르고 효율적으로 수행할 수 있습니다.
    메모리 단편화로 인한 낭비량보다 메모리 풀을 만들었지만 쓰이지 않는 메모리의 양이 더 큰 경우에는 사용하지 않는 것이 좋습니다.
    메모리 풀은 예측 가능한 크기의 메모리 요구에 특히 유용한 방법이며, 잦은 동적 할당과 해제가 일어나는 경우에 사용하는 것이 좋습니다.

 

 


 

메모리 할당 정책

 

메모리 할당 정책이란, 메모리 할당과 해제를 처리하는 방법이나 알고리즘입니다. 어떤 정책을 사용하는지에 따라 시스템의 성능과 메모리 사용 효율성에 영향을 줄 수 있습니다. 

 

메모리 할당 정책의 종류

  • First-fit : 가장 처음에 만난 충분한 크기의 빈 공간을 할당합니다. 검색은 공간의 첫 부분부터 수행합니다.
  • Best-fit : 충분한 크기의 빈 공간 중에서 가장 작은 공간을 선택해 할당합니다.
  • Worst-fit : 충분한 크기의 빈 공간 중에서 가장 큰 공간을 선택해 할당합니다.
  • Next-fit : First-fit과 달리 이전 할당 위치에서부터 순차적으로 빈 공간을 검색해 할당합니다.
  • Buddy allocation : 메모리의 크기를 절반씩 분할 하면서 가장 잘 맞는 크기의 메모리를 찾습니다. 빈 공간을 2의 거듭제곱 크기로 나누어 관리하고, 작은 공간을 찾아 큰 공간을 분할하거나 합치는 방식으로 할당합니다.
  • Slab allocation : 다양한 크기의 객체들을 일정한 크기의 캐시로 관리하고, 할당 요청이 있을 때 해당 캐시에서 객체를 할당합니다.

각 정책은 장단점이 있으며, 사용하는 시스템에 따라 가장 적합한 정책을 선택해야 합니다. 일반적으로 First-fit과 Buddy allocation이 많이 사용됩니다. First-fit은 구현이 간단하며 외부 단편화가 적은 반면, 내부 단편화가 많이 발생할 수 있습니다. Buddy allocation은 내부 단편화가 없고 외부 단편화를 최소화할 수 있지만, 구현이 복잡하고 낭비되는 공간이 발생할 수 있습니다.

 

 

 

 

 


출처

5/15 메모리 단편화, 메모리 할당 정책

 

velog

 

velog.io

[운영체제] 메모리 관리 기법

 

[운영체제] 메모리 관리 기법

메모리 관리 기법 다중 프로그래밍 시스템에서는 메모리의 사용자 영역을 여러 프로세스가 상주할 수 있도록 세분화해야된다. 이러한 세분화 작업을 메모리 관리라고 한다. 메모리 할당 정책

skytitan.tistory.com

 

기억장치 배치전략

 

메모리 단편화(Fragmentation)에 대한 해결방법

 

메모리 단편화(Fragmentation)에 대한 해결방법

메모리 단편화에 대한 개념과 이에대한 해결방법에 대하여 알아보겠다. 메모리 단편화 RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당(사용)이

gguljaem.tistory.com

[운영체제] 내부 단편화(Internal Fragmentation)와 외부 단편화(External Fragmentation)

 

[운영체제] 내부 단편화(Internal Fragmentation)와 외부 단편화(External Fragmentation)

💡단편화(Fragmentation)란? 메모리 공간이 부분으로 나뉘어서 충분히 사용 가능한 메모리가 남아있지만, 프로세스 할당이 불가능한 상태 내부 단편화(Internal Fragmentation) 프로세스가 필요한 양보다

zu-techlog.tistory.com