연속 메모리 할당

Sundae·2023년 11월 5일
0

운영체제

목록 보기
12/15
post-thumbnail

연속 메모리 할당


아래 이미지와 같이 프로세스에 연속적인 메모리 공간을 할당하는 방식을 연속 메모리 할당 방식이라고 한다.

위 이미지에서 프로세스E가 적재되어야한다고 가정해보자. 그리고 프로세스B는 입출력 작업으로 인해 대기 상태가 되어 사용되지 않는다. 메모리를 효율적으로 사용하기 위해서는 사용되지 않는 프로세스는 메모리에서 제거하고 다른 프로세스를 적재해야한다. 이러한 방식을 스와핑이라고 한다.

스와핑에서 사용되지 않는 프로세스를 임시적으로 보조기억장치에 존재하는 스왑영역(swap space)이라는 곳에 보관하며, 이를 스왑 아웃(swap-out)이라고한다. 반대로 스왑 영역에 있는 프로세스를 다시 메모리에 옮기는 것을 스왑 인(swap-in)이라고한다.

스와핑을 이용하면 프로세스가 적재되기 위해 요구하는 메모리 공간이 실제 공간보다 작은 경우에도 동시에 실행할 수 있다.
아래 이미지에서 프로세스A, 프로세스B, 프로세스C, 프로세스D의 용량을 모두 합하면 메모리 용량보다 크지만, 스와핑을 이용하면 네 개의 프로세스를 동시에 실행 할 수 있다.

메모리 할당 방식


프로세스는 메모리에 존재하는 빈 공간에 적재된다. 만약 메모리에 비어있는 공간이 여러 개가 있다면 프로세스를 어디에 배치하면 좋을까?

대표적으로 최초 적합, 최적 적합, 최악 적합 세 가지 방식이 있다.

최초 적합

최초 적합(first fit)은 운영체제가 메모리의 빈 공간을 찾다가 프로세스를 적재할 수 있는 공간을 찾으면 해당 공간에 배치하는 방식이다. 이 방식은 빈 공간을 찾는 즉시 배치하므로 찾는 연산을 최소화할 수 있으므로 빠른 적재가 가능하다.

최적 적합

최적 적합(best fit)은 운영체제가 메모리의 빈 공간을 모두 찾고 적재되길 원하는 프로세스의 용량과 가장 비슷한 공간에 배치하는 방식이다.

최악 적합

최악 적합(worst fit)은 운영체제가 메모리의 빈 공간을 모두 찾고, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 배치하는 방식이다.

외부 단편화


연속 메모리 할당과 할당 방식에 대해서 알아보았다. 중요한 점은, 이 방식에는 외부 단편화(external fragmentation)라는 문제를 내포하고 있다.

위 이미지를 보면, 메모리에는 두 개의 30MB 크기를 가진 빈 공간이 존재한다. 60MB의 크기를 가진 프로세스C와 B가 다시 사용되어 스왑 인을 시킬 예정이다. 그러나, 현재 빈 공간은 30MB 크기를 가진 공간 뿐인데 60MB를 가진 프로세스C 또는 B를 스왑 인 할 수 있을까? 불가능할 것이다.

이처럼 연속 메모리 할당 환경에선 위와 같이 메모리 사이에 빈 공간들이 생기며 메모리 낭비가 초래된다. 이러한 현상을 외부 단편화(external fragmentation)라고 한다.

메모리 조각 모음

이를 해결하는 대표적인 방법으로 메모리를 압축(compaction)하는 방법이 있다. 메모리 조각 모음이라고도 부른다. 압축은 메모리 내에 존재하는 여러 빈 공간들을 하나로 모으는 방법이다. 다시말해, 메모리에 적재되어있는 프로세스를 재배치시켜 빈 공간들을 하나로 모으는 방법이다.

하지만, 압축에는 여러 단점이 있다. 메모리에 있는 프로세스들을 재 배치하고, 빈 공간들을 하나로 모으는 과정들은 시스템을 일시적으로 중단시키고, 많은 오버헤드를 발생시킨다.

메모리 조각 모음에는 위와 같은 단점이 있어 또 다른 해결 방안이 등장했다. 바로 가상 메모리 기법이라 불리는 방법이다. 그 중에서도 오늘날까지 사용되는 페이징 기법이 있다.



나가는 글


꽤나 오랜만에 CS를 공부하고 정리하였다. 최근, 구직 활동 때문에 바빠진게 그 원인이지만, 그래도 3개월 안에 CS 입문서 한 권을 끝낸다는 목표가 실패한 것은 무척 슬픈 일이다.

다시 여유가 생겼으니 빠른 시일 안에 나머지 내용을 끝내보자.

다음은 페이징 기법에 대한 공부 기록이다.

profile
성장 기록 / 글에 오류가 있다면 댓글 부탁드립니다.

0개의 댓글