메모리에 프로세스를 적재할 때 연속적으로 적재하는 방법이 연속 메모리 할당이다.
이는 초기 컴퓨터 시스템에서 많이 사용하던 방법으로, 단일 프로그래밍 환경과 다중 프로그래밍 환경으로 구분할 수 있다.
단일 프로그래밍 환경에서의 연속 메모리 할당
초기 컴퓨터 시스템에서는 한명의 사용자만 컴퓨터를 사용할 수 있었고, 자원도 한명의 사용자만 사용 가능했다.
프로그램은 메모리보다 클 수 없고 직접 배치 과정을 수행하여 항상 같은 메모리 위치에 적재되었다.
단일 프로그래밍 환경에서 연속 메모리 할당은 메모리를 사용자 영역과 운영체제 상주 영역으로 나눈다. 크게 모니터(운영체제의 상주 영역), 사용자 영역, 미사용 영역으로 나눌 수 있다. 메모리를 제어하는 모든 권한이 사용자에게 있기 때문에 사용자가 주소를 잘못 지정하면 운영체제가 손상될 수 있다. 그래서 프로세서에 경계 레지스터를 두어 이를 방지한다.
이런 메모리 할당 시스템의 문제는 사용자 프로그램의 적재이다. 컴퓨터 주소 공간이 0000부터 시작하더라도 사용자 프로그램의 시작 주소는 기준 레지스터 값의 이후가 된다. 그러므로 기준 주소가 변하면 다시 적재해야 한다. 다음 두 가지 방법을 고려하여 이런 운영체제의 동적 변화에 대비할 수 있다.
첫 번째 방법은 사용자 프로그램을 기준 레지스터보다 상위 메모리에 적재하는 것,
두 번째 방법은 주소 바인딩을 연기하는 것이다.
단일 프로그래밍 환경에서 연속 메모리 할당은 메모리의 효율성이 떨어진다. 또한 자원 낭비가 심하고 프로세스 스와핑 비용이 많이 든다.
다중 프로그래밍 환경에서의 연속 메모리 할당
1) 고정 분할 방법
고정 분할 방법에서는 메모리를 여러 개의 고정된 크기로 분할하고 분할된 각 메모리는 프로세스 하나를 실행하는 방식이다.
고정 분할 방법에서는 논리적 주소가 분할된 메모리보다 크면 오류가 발생하고, 작으면 내부 단편화가 발생한다.
내부 단편화란 분할된 메모리 공간보다 용량이 작은 작업이 들어갔을 때, 사용할 수 없게 되는 공간이 생기는것을 말한다.
2) 가변 분할 방법
가변 분할 방법은 고정된 경계를 없애고 각 프로세스가 필요한 만큼 메모리를 할당하는 방법이다.
프로세스가 할당되고 해제되다보면 사용 가능한 메모리 공간이 흩어져있게 되는데, 새로 들어갈 작업이 어느 공간에 할당되어야 할 지 결정하는 방법으로는 최초 적합, 최적 적합, 최악 적합 방법이 있다.
최초 적합 |
최초 적합 방법은 프로세스를 사용 가능 공간 중 충분히 큰 첫 번째 공간에 할당한다. |
최적 적합 |
최적 적합 방법은 프로세스를 충분히 큰 사용 가능 공간 중에서 들어갈 수 있는 가장 작은 공간에 할당한다. 이 방법을 사용하기 위해선 사용 가능 공간이 크기 순으로 정렬되어있어야 한다. |
최악 적합 |
프로세스를 가장 큰 사용 가능 공간에 할당한다. 최적 적합과 같이 공간이 크기 순으로 정렬되어있어야 한다. |
가변 분할 방법에서는 외부 단편화가 일어난다.
외부 단편화는 사용 가능한 공간의 총량은 100MB인데, 메모리공간이 연속적이지 않고 흩어져 있어 총량보다 용량이 작은 작업도 할당할 수 없게 되는것을 말한다.
외부 단편화를 해결할 방안으로 메모리 통합과 메모리 압축 방법이 있다.
메모리 통합 |
메모리 통합 방법은 하나의 작업이 끝났을 때 다른 빈 공간과 인접해 있는지 점검하여 하나로 합치는 것이다. |
메모리 압축 |
메모리 압축 방법은 메모리의 내용을 움직여 사용 가능 공간을 큰 블록 하나로 합치는 것이다. |
3) 버디 시스템
위 두 가지 방법 모두 단편화 문제가 있었다. 이를 해결하는 방법으로 버디 시스템이 제안되었다.
버디 시스템은 큰 버퍼들을 반복적으로 이등분하여 작은 버퍼들을 만들고, 가능할 때마다 인접한 빈 버퍼들을 합치는 과정을 반복한다. 나뉜 버퍼들 각각을 서로의 버디라고 칭한다.
할당 요청이 들어오면, 메모리를 요청한 메모리보다 크거나 같아질때까지 이등분하기를 반복한다.
예를 들면, 전체 메모리가 64KB고 들어온 요청은 8KB라면, 64KB를 32KB두개로, 32KB를 16KB 두개로, 16KB를 8KB 두개로 쪼개어 알맞은 크기로 생성된 8KB의 버디에 들어온 요청을 할당한다.