메모리는 명령어와 처리된 데이터들의 모임으로, 메모리에 상주하는 운영체제를 위한 것과 사용자 프로세스를 위한 것으로 나뉜다.
사용자 프로세스 영역에서 프로세스들은 어떻게 메모리에 할당되는지에 대해 알아본다.
메모리 할당 방식에는 연속 할당과 불연속 할당 방식으로 나뉜다.
불연속 할당 방식에는 Paging 기법과 Segmentation 기법이 있으며, 이번에는 연속 할당 방식에 대해 알아본다.
연속 할당 방식이란, 프로세스를 메모리에 올릴 때 주소 공간을 여러 개로 분할하지 않고 물리적 메모리의 한 곳에 연속적으로 적재하는 방식이다. 연속 할당 방식에는 고정 분할 방식과 가변 분할 방식이 있다.
고정 분할 방식
고정 분할 방식은 메모리를 똑같은 고정된 크기로 분할하여 각 분할된 부분마다 한 프로세스를 적재하는 것이다.
이 방식은 한 분할된 공간이 비게 되면 다른 프로세스가 빈 공간에 들어오게 된다.
고정 분할 방식은 메모리에 올릴 수 있는 프로그램의 수가 고정되어 있으며, 수행 가능한 프로그램의 최대 크기 또한 제한된다는 점에서 가변 분할 방식에 비해 융통성이 떨어지며, 외부 단편화와 내부 단편화가 발생할 수 있다.
가변 분할 방식
가변 분할 방식은 메모리에 적재되는 프로그램의 크기에 따라 분할의 크기, 개수가 동적으로 변하는 방식이다.
메모리에서 어떤 부분이 사용되고 어떤 부분이 사용되고 있지 않은지 파악하는 테이블이 존재하며, 처음에는 모든 메모리가 사용자 프로세스에서 사용이 가능하다. 이 사용 가능한 메모리를 Hole이라고 부른다.
가변 분할 방식에서는 외부 단편화 현상만 발생하며, 새로운 프로그램을 적재시키기 위해 빈 공간 중 어떤 위치에 적재할 것인지 결정하는 문제가 발생한다. 이러한 문제를 동적 메모리 할당 문제라고 부른다.
동적 메모리 할당 문제
프로세스들이 메모리를 할당받고 끝나면 되돌려주는 과정에서 빈 공간이 여기저기 생기게 된다.
이 빈 공간들을 어떻게 다른 프로세스에 할당할 것이지를 정해야 한다.
동적 메모리 할당 문제를 해결하는 대표적인 방법으로는 최초 적합, 최적 적합, 최악 적합 3가지가 있다.
최초 적합(First Fit)
첫 번째 사용 가능한 공간에 할당하는 방식이다.
25KB의 메모리 공간을 필요로 하는 프로세스 A가 있다. 사용 가능한 공간 중 25KB 이상의 공간을 찾아 가장 먼저 사용 가능한 공간에 할당한다.
최적 적합(Best Fit)
사용 가능한 공간 중 가장 작은 공간에 할당하는 방식이다.
사용 가능한 공간 중(40KB, 60KB, 25KB) 가장 작은 공간인 25KB 공간에 할당한다.
최악 적합(Worst Fit)
사용 가능한 공간 중 가장 큰 공간에 할당하는 방식이다.
사용 가능한 공간 중 가장 큰 60KB 공간에 할당한다.
프로세스를 할당해주고 남은 공간이 커야 또 다른 프로세스를 위한 공간을 확보할 수 있기에 사용한다.
위의 메모리 할당 방법은 모두 단편화를 줄이기 위해 사용한 것이다. 단편화는 메모리 공간 중 일부를 사용할 수 없게 되는 것을 말한다.
단편화는 외부 단편화(external fragmentation)와 내부 단편화(internal fragmentation)로 나뉜다.
외부 단편화
메모리들이 프로세스에게 할당되고 돌아오는 일들이 반복되면서, 어떤 hole은 너무 작은 조각이 된다. 메모리에 있는 모든 hole들을 합치면 사용할 수 있는 공간이지만, 여러 곳에 분산되어 사용할 수 없는 문제를 외부 단편화라고 한다.
내부 단편화
할당된 메모리 공간이 프로세스의 크기보다 조금 커서 자투리 공간이 생기는 것을 내부 단편화라고 한다. 이렇게 생긴 작은 자투리 공간은 다른 프로세스들이 사용하지 못한다.