0.🚶들어가며

지난 글에서는 메모리 관리와 관련된 개념과 단일 프로그래밍 환경에서의 메모리 할당에 대해 배웠습니다. 이번 글에서는 멀티프로그래밍 환경에서의 메모리 할당에 대해 알아보겠습니다.

 

한 번에 한 프로세스만 실행되는 메모리 구조에서는 오버레이와 스왑 정도로 메모리 관리가 충분할 수도 있습니다. 하지만 메모리에 여러 프로세스가 동시에 올라오면 문제가 조금 달라집니다. 훨씬 복잡한 환경으로 변하는 것이죠. 또한 프로세스들은 서로 크기가 달라 메모리에 어떤 방식으로 적재할지도 고민해봐야 합니다. 이와 관련된 내용에 대해 알아보도록 하겠습니다.


1.📚메모리 분할 방식

메모리 분할 방식에는 크게 가변 분할, 고정 분할 방식이 있습니다. 아래 그림을 살펴보도록 합시다.

 

가변 분할 방식과 고정 분할 방식

1) 가변 분할 방식

가변 분할 방식은 프로세스의 크기에 따라 메모리를 나누는 방식입니다. 위 좌측 사진을 보시면 프로세스 크기에 맞게 메모리가 분할되어있음을 확인할 수 있습니다. 한 프로세스가 연속된 공간에 배치되기 때문에 연속 메모리 할당이라고도 불립니다. 

 

2) 고정 분할 방식

고정 분할 방식은 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 방식입니다. 위 우측 사진을 보시면 모두 20KB로 메모리 공간이 나뉘어져있고 그 안에 프로세스들이 여러 조각으로 나뉘어 들어가 있는 것을 확인할 수 있습니다. 이러한 방식 때문에 비연속 메모리 할당이라고도 불립니다.


2.😀가변 분할 방식의 메모리 관리

가변 분할 방식의 프로세스 배치 방법과 장단점에 대해 알아보도록 하겠습니다.

 

가변 분할 방식 메모리 배치

위 사진은 가변 분할 방식의 메모리 배치 예시입니다. (a)를 살펴보시면 프로세스 크기에 맞춰 연속적으로 메모리에 할당되어 있는 것을 확인할 수 있습니다. 이렇게 프로세스를 나누지 않고 한 덩어리로 처리하여 연속적인 공간에 배치할 수 있음은 가변 분할 방식의 장점이 됩니다.

 

작업 2가 종료되고 (b)에서 빈 공간이 생긴 후 (c)에서 작업 4를 또 연속적으로 할당했습니다. 이런 식으로 프로세스를 배치하는 방법이 가변 분할 방식입니다. 방식이 어렵진 않죠.

 

이때 (c)를 보시면 170K에서 200K 까지 사이 공간이 비어있는 모습을 확인할 수 있습니다. 이 부분을 바로 외부 단편화라고 합니다. 외부 단편화는 가변 분할 방식에서 사용할 순 있지만 프로세스를 할당하기엔 너무 작아 조각으로 남아버리는 쓰지 못하는 메모리 공간입니다. 이런 공간이 많아질수록 비효율성이 생깁니다. 이를 해결하기 위한 방법으론 아래 두 가지 방식을 사용합니다.

1) 메모리 배치 방식

메모리 배치 방식은 조각이 생기기 전에 조각이 생기지 않도록 노력하며 프로세스를 배치하는 방식입니다. 최초 배치, 최적 배치, 최악 배치 같은 방식을 사용하여 효과적으로 프로세스를 배치하는 방법을 모색하는 것입니다.

  • 최초 배치(First-Fit) : 최초 배치는 외부 단편화를 고려하지 않고 할당 가능한 메모리 빈 공간을 발견하면 바로 프로세스를 배치하는 방식
  • 최적 배치(Best-Fit) : 메모리의 빈 공간을 모두 확인하고 할당 가능한 가장 작은 크기의 공간에 프로세스를 배치하는 방식
  • 최악 배치(Worst-Fit) : 메모리의 빈 공간을 모두 확인하고 할당 가능한 가장 큰 크기의 공간에 프로세스를 배치하는 방식

세 방식 중 실험적인 결과로 최초 배치와 최적 배치가 속도와 공간 이용률 면에서 효과적인 것으로 알려졌습니다.

2) 조각 모음

위와 같은 메모리 배치 방식을 사용하여도 외부 단편화 현상은 발생하기 마련입니다. 메모리 배치 방식으로는 단편화 원인의 근본적인 해결 방법이 되지 못하기 때문이죠. 따라서 조각들이 일정 수준 이상 생기면 이 조각들을 모아 한 덩어리로 만들 필요가 있습니다. 이를 조각모음이라고 하죠. 조각 모음은 다음과 같은 순서로 진행됩니다.

  • 조각 모음을 하기 위해 이동할 프로세스들의 동작을 멈춘다.
  • 프로세스들을 적당한 위치로 이동한다. 프로세스들이 원래 위치에서 이동하기 때문에 프로세스의 상대 주소 값을 바꾼다.
  • 작업을 다 마친 후 프로세스를 다시 시작한다.

슬쩍 살펴보아도 엄청 오버헤드가 커 보이는 작업입니다. 모든 프로세스를 중지시키고, 이동하고, 주소를 바꾸고, 다시 시작하는 작업이기 때문이죠. 따라서 이러한 외부 조각들이 생기는 것이 가변 분할 방식의 단점으로 꼽힙니다. 


3.🐢고정 분할 방식의 메모리 관리

고정 분할 방식의 프로세스 배치 방법과 장단점에 대해 알아보겠습니다.

 

고정 분할 방식에서는 프로세스 크기와는 상관없이 메모리를 같은 크기로 나눈다고 했었습니다. 또한 가변 분할 방식처럼 프로세스가 메모리에서 나갔다 들어왔다를 반복해도 외부 단편화가 생기지 않습니다. 이는 곧 조각 모음과 같은 처리를 해줄 필요가 없다는 말이죠. 하지만 프로세스가 메모리의 여러 조각으로 나뉘어 저장되는 것이 단점입니다. 또한 내부 단편화라는 현상이 생깁니다. 

내부 단편화 예시

 위 사진을 살펴보시면 분할된 공간에 프로그램이 올라가고 분할 크기보다 작은 프로그램은 내부적으로 빈 공간이 발생하는 것을 확인하실 수 있습니다. 이것이 바로 내부 단편화입니다. 내부 조각들은 조각모음을 할 수도 없어서 이를 해결하기 위해서는 공간 분할을 어떤 식으로 할지가 관건이 됩니다.  


4.📖버디 시스템

버디 시스템은 가변 분할 방식과 고정 분할 방식의 중간 구조 방식입니다. 가변 분할 방식이지만 외부 단편화를 완화하기 위해 고정 분할 방식과 유사한 방식으로 프로세스를 배치합니다. 작동 방식은 다음과 같습니다.

  • 프로세스의 크기에 맞게 메모리를 계속하여 1/2로 자른다.
  • 프로세스 크기보다 작은 메모리 구역이 나오면 그만 자른 뒤 최적 배치로 프로세스를 할당해준다.
  • 프로세스가 종료되면 주변의 빈 조각과 합쳐 하나의 큰 덩어리로 만든다.

버디 시스템은 메모리가 프로세스 크기와 비슷하게 나뉘며 고정 분할 방식처럼 하나의 구역에 다른 프로세스가 들어갈 수 없어 내부 단편화가 생깁니다. 하지만 비슷한 크기의 덩어리들이 주변에 서로 모여있어 통합하기가 조각 모음보다 훨씬 수월합니다.


 

 

 

반응형
복사했습니다!