CS/OS

[운영체제] 메모리 관리 - Memory Partitioning

F12:) 2023. 11. 27. 17:55

오늘은 메모리 관리에 대해서 알아봅시다.

 

   메모리 관리

메모리 관리는 크게 메모리 할당, 메모리 보호로 나뉩니다.

 

메모리 할당은 프로세스에게 메모리 공간을 부여하고 해당 공간에 프로세스에 대한 정보(context)를 삽입하는 과정을 말합니다.

메모리 보호는 허용되는 메모리 공간에만 접근되도록 감시하는 것을 말합니다.

 

 

   Memory Partitioning

메모리의 크기는 한정되어 있습니다. 따라서 우리는 이러한 메모리를 효율적으로 프로세스에게 배정하고 관리해야합니다. 따라서 메모리를 효율적으로 배정하기 위한 방법들이 제시되었습니다. 우리는 그 중에서 Fixed Partitioning, Dynamic Partitioning, Buddy System에 대해서 알아봅시다.

 

 

   Fixed Partitioning

Fixed Partitioning은 프로세스에게 배정할 메모리 공간을 미리 결정합니다. 이렇게 결정된 메모리 공간에 프로세스를 배정함으로써 프로세스에게 메모리 공간을 부여해줍니다.

 

Fixed Partitioning에는 Equal size partitioning과 Unequal size partitioning이 있습니다. 

 

 - Equal size partitioning

메모리 공간을 동일한 크기로 쪼개는 방식을 의미합니다. 따라서 어떠한 부분에 어느 프로세스가 배정될 지는 중요하지 않습니다. 때문에 메모리 관리가 쉬워집니다. 

 

 - Unequal size partitioning

  메모리 공간을 동일하지 않고 여러 크기의 공간에 프로세스를 배정되는 방식을 의미합니다. 각 프로세스는 배정될 수 있는 메모리 공간 중 가장 최소의 공간에 배정되어야 합니다. 그래야 메모리를 조금 더 효율적으로 사용할 수 있기 때문이죠.

 

 

하지만 이러한 Fixed Partitioning은 큰 문제가 있습니다. 배정된 각 프로세스가 무조건 정해진 메모리 공간에 최적합하다고 볼 수 없습니다. 10MB 짜리의 프로세스가 12MB에 배정된다면 2MB가 손해니 말이죠. 따라서 이러한 빈 공간을 Internal Frament라고 하고, 이런 공간이 많아져서  Internal fragmentation 문제가 발생합니다.

 

 

 

   Dynamic Partitioning

Fixed partitioning과 상반되는 개념으로, 프로세스의 크기에 맞게 메모리 크기를 할당받습니다. 해당 방식은 Fixed Partitioning의 문제를 해결할 수 있을 것으로 보입니다.

 

하지만 internal frament와 반대되는 external frament가 있습니다. internal frament는 할당받은 프로세스 공간 내부의 빈 공간을 의미하고, external frament는 할당받지 않은 잔여 메모리 공간 중 프로세스를 배정할 수 없는 빈 공간을 의미합니다.

 

아래와 같은 상황에서 external fragment가 발생할 수 있습니다.

 

(a) : 64MB의 메모리가 있고, 8MB를 OS가 차지하고 있는 상태입니다.

(b) : 20MB의 프로세스가 메모리 할당을 요청하여 OS는 20MB의 메모리 공간을 부여해줍니다. 36MB가 비어있습니다.

(c) : 14MB의 프로세스가 메모리 할당을 요청하고 Process 1의 바로 아래에 14MB를 할당 받습니다.  22MB가 남아있습니다.

(d) : 18MB의 프로세스가 메모리 할당을 요청 후, Process 2 아래에 18MB를 할당 받습니다. 4MB가 남았습니다.

(e) : Process 2의 작업이 종료되어 메모리 공간을 반납받습니다. 18MB가 남았습니다.

(f) : 8MB의 프로세스가 Process 1의 아래에 메모리 공간을 할당받습니다. 10MB가 남았습니다.

(g) : Process 1의 작업이 끝나고 메모리 공간을 반납합니다. 30MB가 남았습니다.

(h) : 14MB의 프로세스가 메모리 할당을 요청하고 OS는 14MB를 할당합니다. 16MB가 남았습니다.

 

이제, 14MB의 프로세스가 메모리 할당을 요청한다고 해봅시다. 메모리 공간이 16MB가 남았으므로, 할당 가능한 크기이지만, (h) 상태의 메모리에는 14MB의 프로세스를 할당할 공간이 없습니다.

 

따라서 우리는 프로세스의 위치를 재조정해주는 reallocation 과정을 거쳐야합니다. 해당 과정이 빈번히 일어나게 된다면, 비효율적으로 동작합니다. 또한 (h) 상태에서 6MB와 4MB는 메모리의 빈 공간이지만 프로세스를 할당할 수 없습니다. 이러한 공간을 external frament라고 합니다.

 

 

방금 소개드린 메모리 배정 방법은 Dynamic partitioning 중 First-fit Algorithm 입니다. 처음부터 탐색하며 발견된 프로세스 배정 가능 공간에 프로세스를 배정하는 기법을 의미합니다.

 

이러한 방식 외에 다른 알고리즘도 존재합니다. First-fit algorithm 부터 다시 알아봅시다.

 

First-fit algorithm

- 메모리 처음부터 빈 공간을 탐색하여 프로세스를 할당할 수 있는 첫 공간을 찾는 방식

- 속도가 빠르다.

 

Best-fit algorithm

- 프로세스에 가장 딱 맞는 사이즈를 찾는 방식

- 최악의 경우 전체를 탐색해야 함.

- memory compaction을 더 자주 해야함.

더보기

memory compaction

메모리의 작은 여유 공간들을 합하여 하나의 큰 여유 공간으로 바꾸는 과정을 말합니다. 이 과정에서 memory reallocation이 수행됩니다.

 

Worst-fit algorithm

- Best-fit과 반대로 메모리 공간과 프로세스 공간의 차이가 가장 큰 메모리 부분을 고르는 방식

- best-fit은 전체를 탐색하는 경우가 대부분이므로, 큰 공간을 배정함으로써 해당 프로세스를 배정하고 남은 공간에 프로세스를 추가적으로 할당할 가능성이 높아질 수 있습니다.

 

Next-fit algorithm

worst-fit의 시작 위치를 변경한 알고리즘입니다. worst-fit은 프로세스에 배정할 메모리 공간을 찾을 때, 처음부터 탐색을 진행했지만 next-fit은 이전 탐색 과정에서 종료된 위치에서 다시 시작하여 탐색하는 알고리즘입니다.

 

 

   Buddy System

Buddy System은 메모리 공간을 2^n으로 쪼개서 관리하는 방법입니다. 프로세스는 2^n의 크기로 나누어 떨어지지 않습니다. 하지만 2^n으로 배정해서 남는 공간은 internal frament로 남겨둡니다. 하지만 external frament가 감소합니다.

 

메모리 배정 방식에 대해서 조금 더 자세하게 알아봅시다.

만약 128MB의 프로세스가 메모리 공간 할당을 요청하면 OS는 128MB를 부여해줍니다. 128은 2^n으로 표현되기 때문이죠.

하지만 202MB의 프로세스가 메모리 공간 할당을 요청하면 OS는 256MB를 부여해줍니다. 202MB를 수용할 수 있는 가장 작은 2^n이 256이기 때문입니다.

 

따라서, 메모리의 free space는 2^n 크기로 남고, allocate space 또한 2^n으로 존재합니다.

 

이 방식의 특이한 점은 메모리 공간을 반납할 때 발생합니다. 메모리 공간을 반납할 때, 인접한 메모리 공간이 free하다면 해당 메모리 공간과 합쳐서 free space를 증가시킵니다. 아래의 그림을 통해 조금 더 자세히 확인해봅시다.

 

이 그림에서 Release C 부분을 확인해봅시다. 기존에 C가 64K를 차지하고 있었고, 해당 메모리를 반납하자 기존에는 64 | 64 로 구분되어야할 곳이 128K로 합쳐졌습니다. 이런 식으로 메로리 공간이 합쳐지는 것이 친구와 같다고 하여 붙여진 이름이 아닐까 합니다.

 

 

이 Buddy System은 현재에서도 자주 사용되는 방식입니다.

 


지금까지 OS가 메모리 관리하는 방법에 대해서 알아봤습니다. 감사합니다.

'CS > OS' 카테고리의 다른 글

[운영체제] Paging  (3) 2023.12.08
[운영체제] Address Binding  (0) 2023.11.28
[운영체제] RAID  (1) 2023.11.27
[운영체제] 디스크 스케쥴링  (1) 2023.11.12
[운영체제] I/O 제어  (1) 2023.11.11