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

JK·2023년 5월 15일
0

메모리 단편화

메모리 단편화란, 프로그램이 동적으로 할당한 메모리 공간에서 사용이 끝난 메모리 블록들이 프로그램 실행 도중에 해제되어 생기는 일종의 조각들을 말합니다.

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

내부 단편화는 메모리 블록을 할당할 때, 블록 크기와 할당할 메모리 크기가 정확히 일치하지 않아서 생기는 현상입니다. 예를 들어, 8바이트의 메모리를 할당해야 하는데, 16바이트의 메모리 블록을 할당 받는 경우를 생각해 볼 수 있습니다.

반면 외부 단편화는 프로그램이 실행되는 동안 메모리 할당과 해제가 반복되면서, 사용 가능한 메모리 블록이 분산되어 생기는 현상입니다. 예를 들어, 10바이트, 20바이트, 30바이트 크기의 세 개의 메모리 블록이 존재하는데, 15바이트 크기의 메모리를 할당해야 할 경우, 20바이트 크기의 블록을 할당받고, 5바이트의 남은 공간이 남게 되는 경우를 생각해 볼 수 있습니다.

메모리 단편화는 할당 가능한 메모리 공간이 충분해도, 단편화된 상태로 인해 연속된 큰 메모리 공간을 할당할 수 없게 됩니다. 이러한 문제를 해결하기 위해서는 메모리를 적절하게 할당하고 해제하는 방법을 사용해야 합니다.


메모리 단편화의 해결법

내부 단편화

내부 단편화를 해결하는 방법은 다음과 같습니다:

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

  2. 메모리 할당 요청 시, 요청한 크기를 미리 정해놓은 크기 단위로 조정하는 것
    메모리 할당 요청 시, 정해진 크기 단위로 요청한 크기를 조정하여 할당하는 방법입니다. 이 방법은 메모리 블록의 크기가 정해진 크기 단위로 조정되므로 내부 단편화가 발생하지 않습니다. 하지만 메모리 블록의 크기가 정해진 크기 단위로 제한되므로, 필요한 크기보다 큰 메모리 블록을 할당할 경우, 남는 공간이 발생할 수 있습니다.

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

외부 단편화

외부 단편화를 해결하는 방법은 다음과 같습니다:

  1. 메모리 할당 정책 변경
    메모리 할당 정책을 변경하여 외부 단편화를 최소화할 수 있습니다. 예를 들어, First-Fit 대신 Best-Fit 또는 Worst-Fit과 같은 메모리 할당 알고리즘을 사용할 수 있습니다. Best-Fit은 사용 가능한 가장 작은 공간을 할당하는 방법으로 외부 단편화를 줄일 수 있고, Worst-Fit은 가장 큰 공간을 할당하여 남는 공간을 최대한 크게 유지하는 방법입니다.

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

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

  4. 메모리 풀 사용
    메모리 풀은 사전에 메모리 블록을 할당하고 필요할 때마다 메모리 블록을 가져와 사용하는 방식입니다. 메모리 풀을 사용하면 외부 단편화를 줄이고, 메모리 할당 및 해제 작업이 빠르고 효율적으로 수행될 수 있습니다. 메모리 풀은 예측 가능한 크기의 메모리 요구에 특히 유용합니다.

이러한 방법들을 조합하여 외부 단편화를 최소화하고 효율적인 메모리 관리를 할 수 있습니다


메모리 할당 정책

메모리 할당 정책은 메모리 할당 및 해제를 처리하는 방법이나 알고리즘을 말합니다. 메모리 할당 정책은 시스템의 성능과 메모리 사용의 효율성에 영향을 미칩니다.

일반적으로 메모리 할당 정책은 크게 다음과 같이 분류할 수 있습니다.

  1. First-fit: 가장 처음으로 충분한 크기의 빈 공간을 찾아 할당합니다.
  2. Best-fit: 충분한 크기의 빈 공간 중에서 가장 작은 공간을 선택해 할당합니다.
  3. Worst-fit: 충분한 크기의 빈 공간 중에서 가장 큰 공간을 선택해 할당합니다.
  4. Next-fit: 이전 할당 위치에서부터 순차적으로 빈 공간을 검색해 할당합니다.
  5. Buddy allocation: 빈 공간을 2의 거듭제곱 크기로 나누어 관리하고, 작은 공간을 찾아 큰 공간을 분할하거나 합치는 방식으로 할당합니다.
  6. Slab allocation: 고정된 크기의 객체들을 일정한 크기의 캐시로 관리하고, 할당 요청이 있을 때 해당 캐시에서 객체를 할당합니다.

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


메모리 단편화와 메모리 할당 정책은 컴퓨터 과학에서 매우 중요한 개념입니다. 이를 공부하면서 가장 어려웠던 점은 이론적인 내용을 이해하는 것과, 구체적인 구현 방법을 이해하는 것이었습니다.

메모리 단편화는 메모리 공간이 분산되어 있어서 원하는 만큼의 연속된 공간을 할당할 수 없는 상황을 말합니다. 이를 해결하기 위해 메모리 할당 정책을 공부하면서, 가장 어려웠던 것은 내부 단편화와 외부 단편화의 개념을 이해하는 것이었습니다. 내부 단편화는 할당된 메모리 공간이 요구하는 크기보다 큰 경우, 할당된 메모리 공간 안에 발생하는 공간의 낭비를 말하고, 외부 단편화는 메모리 공간이 연속적이지 않아서 발생하는 메모리 낭비를 말합니다.

또한, 메모리 할당 정책에 대해 공부하면서, 다양한 방법들이 존재하며, 각 방법마다 장단점이 있음을 알게 되었습니다. 예를 들어, 최적 적합 알고리즘은 최소한의 외부 단편화를 보장하지만, 할당하는 시간이 오래 걸리며 구현이 복잡하다는 것을 알게 되었습니다.

이러한 어려움을 극복하기 위해서는, 이론적인 개념을 이해하는 것뿐만 아니라, 실제로 구현해보면서 어떻게 동작하는지를 이해해야 한다는 것을 깨달았습니다. 또한, 다양한 메모리 할당 정책 중에서 상황에 맞게 적절한 정책을 선택하는 것이 중요하다는 것을 알게 되었습니다

profile
^^

0개의 댓글