연속 메모리 할당 방식은 말 그대로 프로세스를 연속적으로 메모리 공간을 할당하는 방식을 말합니다.
프로세스 A는 A의 크기만큼 메모리 주소를 할당받아 연속적으로 배치되고, 또 다른 프로세스도 마찬가지로 크기만큼 메모리 주소를 할당받아 연속적으로 배치됩니다.
연속 메모리 할당 방식에는 3가지 방식이 있습니다.
최초 적합(First - Fit) : 할당할 프로세스 크기보다 크거나 같은 빈 공간을 탐색하고 가장 먼저 찾은 빈 공간에 프로세스를 할당하는 방식입니다.
최적 적합(Best - Fit) : 할당할 프로세스 크기와 빈 공간 크기의 차이가 가장 적은 빈 공간에 프로세스를 할당하는 방식입니다.
최악 적합(Worst - Fit) : 할당할 프로세스 크기와 빈 공간 크기의 차이가 가장 큰 빈 공간에 프로세스를 할당하는 방식입니다.
각 할당 방식의 일반적인 성능을 비교해보면, 속도면에서는 최초 적합
이 가장 빠릅니다. 그리고 메모리 이용률에서는 최초 적합
, 최적 적합
이 비슷한 성능을 가집니다.
하지만 최적 적합
을 사용하더라도 외부 단편화
로 인해 전체 메모리의 1/3을 낭비한다고 알려져 있습니다.
그러면 이 외부 단편화는 무엇일까요?
요즘은 메모리에 프로세스가 여러 개 할당되는 다중 프로그래밍 환경
입니다.
시간이 지나면서 프로세스가 메모리에 올라가고 나가고를 반복하면서 여러 구역에 서로 다른 크기의 빈 공간이 존재하게 될 것입니다. 이런 빈 공간들이 흩어져 있다고볼 수 있는데, 이런 빈 공간들이 불연속하게 흩어져 있는 상태를 메모리 단편화(Memory Fragmentation)
라고 합니다.
메모리 단편화로 인해 여러 구역에 빈 공간들이 흩어져서 생기면 메모리에 프로세스를 적재하는데 문제가 발생할 수 있습니다.
어떤 문제가 발생하는지 예를 들어 설명하자면, 빈 공간이 3개가 있고 각 크기는 50 byte
, 80 byte
, 100 byte
크기 만큼 적재할 수 있다고 가정하겠습니다. 그런데 여기서 할당하려는 프로세스의 크기는 150 byte
입니다.
각 빈 공간들을 하나로 합치면 230byte
로 이 프로세스를 할당할 수 있는데 실재로는 나누어져 있으므로 할당되지 못하는 문제가 발생합니다. 이러한 현상을 외부 단편화(External Fragmentation)라고 합니다.
즉, 외부 단편화는 작업보다 많은 공간이 있더라도 메모리 배치에 때문에 실제로 그 작업을 받아들일 수 없는 경우를 말합니다.
위에서 설명한 외부 단편화를 해결할 수 있는 대표적인 방법은 바로 메모리를 압축(Compaction)
하는 방법이 있습니다.
이 압축은 여러 곳에 흩어져있는 빈 공간들을 하나로 합치는 것입니다. 그렇지만 빈 공간을 옮기는 오버헤드가 너무 크고, 어느 빈 공간을 옮겨야 빠르게 합칠 수 있는지에 대한 최적의 알고리즘이 존재하지 않는다는 단점이 존재합니다.
이상으로 연속 메모리 할당에 대해서 간단히 알아봤습니다.