[운영체제] 메모리 단편화 (Memory Fragmentation)

강민혁·2023년 3월 27일
0

기술면접 | 운영체제

목록 보기
23/32

메모리 단편화 (Memory Fragmentation)에 대해 설명하세요

Keyword

Internal Fragmentation, External Fragmentation, paging, segmentation


Script

Fragmentation은 크게 Internal Fragmentation(내부 단편화)와 External Fragmentation(외부 단편화)로 나뉩니다.

Internal Fragmentation은 메모리를 할당할때, 프로세스가 필요한 크기보다 더 큰 메모리 공간이 할당되어 메모리 공간이 낭비되는 경우를 말합니다. 예를 들어, 실질적으로 특정 프로세스에서 사용하는 메모리 공간이 30MB인데 반해, 해당 프로세스에 50MB의 메모리 공간이 할당되는 경우를 Internal Fragmentation이라고 할 수 있습니다.

External Fragmentation은 총 여분 메모리 공간은 충분하지만, 실제로 할당할 수 없는 경우를 말합니다. 예를 들어, 메모리에 여분 공간이 100MB가 있고, 70MB를 특정 프로세스에 할당하려고 할 때를 가정할 수 있습니다. 이 때, 만약 메모리 공간이 불연속적으로 50MB씩 두 곳에서 비어있다면, 70MB를 한번에 할당할 수 없습니다.

Fragmentation을 해결하는 방법으로는 메모리 압축, paging 기법이나 segmentation 기법이 있습니다.


Additional

그림

Internal Fragmentation

External Fragmentation

External Fragmentation solution - compaction

외부 단편화를 해결할 수 있는 대표적인 방안으로 메모리 압축(compaction)이 있다. 메모리 조각 모음이라고도 불리는데, 흩어져있는 빈 공간들을 하나로 모으는 방식이다.

하지만 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던 일을 중지해야 하고, 이는 많은 오버헤드를 요구하는 작업이다. 그리고 어떤 프로세스를 메모리에 어떻게 배치할지를 결정하는 것도 굉장히 어려운 일이다.

연속 메모리 할당

연속 메모리 할당은 프로세스를 메모리에 할당할 때, 주소 공간을 여러개로 분할하지 않고 물리적 메모리의 한 곳에 연속적으로 적재하는 방식이다.

크게 고정 분할 방식과 가변 분할 방식으로 나뉜다.

고정 분할 방식
물리적 메모리를 주어진 개수만큼의 영구적인 분할로 미리 나누어두고, 각 분할에 하나의 프로세스를 적재해 실행시키는 방식이다.

고정 분할 방식에서는 동시에 메모리에 올릴 수 있는 프로그램의 수가 고정되어 있으며, 수행 가능한 프로그램의 최대 크기 또한 제한된다.

고정 분할 방식에서는 외부 단편화와 내부 단편화가 발생할 수 있다.

만약 특정 프로세스가 분할된 공간보다 크다면, 외부 단편화에 의해 메모리에 할당할 수 없다.

그리고 특정 프로세스가 작은 공간만 필요로 함에도, 분할된 공간이 더 커서, 해당 분할에 프로세스를 적재하고도 메모리 공간이 남는 내부 단편화가 발생할 수 있다.

가변 분할 방식
가변 분할 방식은 메모리에 적재되는 프로세스의 크기에 따라 분할의 크기와 개수가 동적으로 변하는 방식이다.

가변 분할 방식에서는 프로세스 크기에 맞게 메모리를 할당하기 때문에, 내부 단편화가 발생하지 않는다. 그대신 메모리 할당과 해제가 반복되면서 산발적으로 여러 곳에 메모리 가용공간(빈공간)이 생기면서, 외부 단편화 문제가 생길 수 있다.

이를 해결하기 위해, 새로운 프로세스를 적재할때, 가용 공간 중에서 어떤 위치에 프로세스를 올릴 것인지를 결정하는 문제가 생기게 되고, 이 것을 동적 메모리 할당 문제라고 부른다.

이 문제를 해결하는 대표적인 방법이 최초 적합, 최적 적합, 최악 적합이다.

메모리 할당 방식

특정 프로세스가 메모리에 적재될 때, 아래 세가지 방식에 따라서 적재될 수 있다.
먼저 아래 그림과 같은 형태로 메모리의 상태를 가정하고, 각 방식에 따른 차이를 살펴보자.

최초 적합(first fit)

최초 적합은 메모리에서 가장 최초로 발견된 빈 공간에, 프로세스를 할당하는 방식이다. 할당할 수 있는 메모리 공간을 순차적으로 탐색하면서, 최초로 발견된 가능한 빈 공간에 프로세스를 할당한다.

가용 공간 탐색을 위한 시간이 적어, 오버헤드가 적어지고, 시간적인 측면에서 효율적이다.

최적 적합(best fit)

위 그림 처럼, 최적 적합은 메모리의 모든 빈 공간 중에서 가장 효율적으로 메모리를 적재할 수 있는 곳에 프로세스를 적재하는 방법이다.

모든 가용공간을 탐색해야 하기 때문에 오버헤드가 발생하지만, 공간 사용률 측면에서는 효율적인 방법이다.

최악 적합(worst fit)

말 그대로, 모든 빈 공간 중에서 가장 큰 빈 공간에 메모리를 할당하는 방식이다.


Reference

Book - 혼자 공부하는 컴퓨터 구조+운영체제

[운영체제]메모리 단편화 (Fragmentation)

최초적합, 최적적합, 최악적합

메모리 할당 - 연속할당 방식

profile
with programming

0개의 댓글