연속 할당(Continuous Allocation)이란?
- 메모리 할당 방식 중 하나로 프로세스가 메모리에서 연속적인 블록에 할당되는 방식
1. 고정 분할(Fixed Partitioning)
- 고정 분할 방식은 메모리를 미리 정해진 크기로 나누어 사용하는 방법
- 각 분할은 고정된 크기를 가지며 분할 크기는 시스템이 부팅될 때 결정
특징
- 고정된 크기 : 메모리 블록의 크기가 고정되어 있으며 시스템이 시작될 때 설정
- 단순한 구현 : 구현이 단순하여 운영 체제의 오버헤드가 적음
- 내부 단편화 : 메모리 블록이 고정 크기이기 때문에 프로세스가 할당된 메모리보다 작을 경우 남는 공간이 발생
- 효율성 : 작은 프로세스가 큰 고정 분할에 할당되면 메모리 낭비가 발생할 수 있음
2. 가변 분할(Variable Partitioning)
- 가변 분할 방식은 메모리를 프로세스가 필요로 하는 크기만큼 동적으로 할당하는 방법
- 이 방식은 고정 분할 방식의 단점을 보완
특징
- 동적 크기 : 메모리 블록의 크기가 동적으로 결정되며 프로세스의 크기에 맞게 할당
- 효율적인 메모리 사용 : 필요한 만큼만 메모리를 할당하므로 메모리 사용 효율이 높음
- 외부 단편화 : 프로세스가 종료되면 남는 메모리 블록이 발생할 수 있으며 이로 인해 외부 단편화가 발생함
- 이를 줄이기 위해 압축(compaction)을 수행할 수 있음
- 복잡한 구현 : 메모리 할당과 해제 과정이 복잡하여 운영 체제의 오버헤드가 증가할 수 있음
메모리 할당 전략
- 가변 분할 방식에서는 메모리 블록을 할당할 때 다음과 같은 전략을 사용할 수 있음
- 최초 적합(First Fit)
- 메모리의 처음부터 검색하여 프로세스를 수용할 수 있는 첫 번째 적당한 블록을 할당
- 장점 : 빠른 할당 속도
- 단점 : 초기 큰 블록이 빠르게 분할되어 외부 단편화가 발생할 가능성이 높음
- 최적 적합(Best Fit)
- 메모리 전체를 검색하여 프로세스를 수용할 수 있는 가장 작은 블록을 할당
- 장점 : 작은 단편화를 줄일 수 있음
- 단점 : 검색 시간이 길어질 수 있고 작은 블록들이 많이 남아 외부 단편화가 발생할 가능성이 높음
- 최악 적합(Worst Fit)
- 메모리 전체를 검색하여 프로세스를 수용할 수 있는 가장 큰 블록을 할당
- 장점 : 큰 블록이 분할되어 남은 공간이 상대적으로 크게 남아 다른 프로세스가 사용하기 쉬움
- 단점 : 큰 블록이 빠르게 분할되어 큰 블록이 없어지고 메모리 사용이 비효율적이 될 수 있음
- 큰 블록을 자주 분할하게 되어 외부 단편화가 발생할 가능성이 큼
내부 단편화와 외부 단편화
내부 단편화(Internal Fragmentation)
- 프로세스에 할당된 메모리 블록이 실제로 필요한 크기보다 큰 경우 사용되지 않는 내부 공간이 발생하는 현상
예시
-
초기 상태
-
메모리 분할
-
프로세스 할당
- 프로세스 A : 200KB 할당 → 분할 크기 : 250KB
- 프로세스 B : 100KB 할당 → 분할 크기 : 250KB
- 프로세스 C : 150KB 할당 → 분할 크기 : 250KB
- 프로세스 D : 50KB 할당 → 분할 크기 : 250KB
-
현재 메모리 상태
[A 200KB + Free 50KB][B 100KB + Free 150KB][C 150KB + Free 100KB][D 50KB + Free 200KB]
-
내부 단편화 발생
- 프로세스 A : 200KB 할당 → 내부 단편화 : 50KB(250KB - 200KB)
- 프로세스 B : 100KB 할당 → 내부 단편화 : 150KB(250KB - 100KB)
- 프로세스 C : 150KB 할당 → 내부 단편화 : 100KB(250KB - 150KB)
- 프로세스 D : 50KB 할당 → 내부 단편화: 200KB (250KB - 50KB)
-
내부 단편화 총합
- 총 내부 단편화 : 50KB + 150KB + 100KB + 200KB = 500KB
외부 단편화(External Fragmentation)
- 메모리의 할당과 해제가 반복되면서 사용할 수 없느 작은 메모리 조각들이 메모리 전체에 흩어져 있는 현상
- 이는 메모리 블록이 서로 떨어져 있어 충분한 양의 총 메모리가 남아 있더라도 큰 크기의 연속된 메모리 블록을 할당할 수 없는 상황을 초래
예시
-
초기 상태
-
프로세스 할당
- 프로세스 A : 200KB 할당 → 남은 가용 메모리 : 800KB
- 프로세스 B : 300KB 할당 → 남은 가용 메모리 : 500KB
- 프로세스 C : 100KB 할당 → 남은 가용 메모리 : 400KB
-
프로세스 해제
- 프로세스 A 종료 → 남은 가용 메모리 600KB(연속되지 않음)
-
현재 메모리 상태
[Free 200KB][B 300KB][C 100KB][Free 400KB]
-
새로운 프로세스 할당 시도
결과
- 프로세스 D는 450KB의 연속된 메모리 블록이 필요하지만 현재 가용 메모리는 600KB임에도 불구하고 연속된 450KB 공간이 없음, 따라서 프로세스 D는 할당될 수 없음
👉🏻 이 상황이 외부 단편화