[기술 면접] 7. 메모리 단편화가 무엇인가요?

제목을 입력해주세요 복사본 8 001 2

저번 시간에 이어, 이번에는 메모리 단편화에 대해 알아보겠습니다. 메모리 단편화는 메모리 공간이 일부 조각으로 나뉘어 사용되는 상황을 나타냅니다. 메모리 단편화와 관련된 배치 정책들을 포함하여 자세히 알아보는 시간을 가지겠습니다.

image 36



Q: 메모리 단편화가 무엇인가요?

메모리 내에서 사용 가능한 공간이 작은 조각으로 나뉘어져서 효율적으로 활용되지 못하는 상태를 일컫습니다. 이는 메모리 할당 및 해제로 인해 발생하며, 외부 단편화내부 단편화로 나뉩니다.



Q: 외부 단편화와 내부 단편화가 무엇인가요?

외부 단편화는 메모리 사이에 사용할 수 있는 작은 공간들이 존재하여, 큰 Block을 할당할 수 없는 상태이며, 내부 단편화필요 이상으로 메모리를 할당받게 되어, 남는 공간이 발생하는 상태를 말합니다.


외부 단편화 부가 설명

[ ] 하나당 20KB일때, 다음과 같은 순서로 프로세스들이 메모리를 할당하고 해제하는 상황을 가정해보겠습니다.

  1. 프로세스 A (20KB 할당) – [A]
  2. 프로세스 B (15KB 할당) – [A][B]
  3. 프로세스 C (10KB 할당) – [A][B][C]
  4. 프로세스 A (할당 해제) – [][B][C]
  5. 프로세스 D (25KB 할당) – [][B][C][D]


이 경우, A의 20KB 자리에 D를 배치하지 못하여, 외부 단편화가 발생한다고 할 수 있습니다. 충분한 메모리 공간이 있음에도 프로세스가 적재되지 못하는 것이죠.



Q: 배치 정책이 무엇이고 어떤 것들이 있나요?

프로세스를 메모리 어디에 위치시킬지 결정하는 정책이며, Paging, Segmentation, Paged segmentation이 있습니다.



Q: Paging이 무엇인가요?

process가 할당받은 메모리 공간을 일정한 page 단위로 나누어, 물리 메모리에서 연속되지 않는 서로 다른 위치에 저장하는 메모리 관리 기법입니다.

paging 기법에는 주소 바인딩(address binding)을 위해 모든 프로세스가 각각의 주소 변환을 위한 page table을 갖습니다.

  • 고정 분할 방식



Q: paging 기법 사용 시 발생할 수 있는 메모리 단편화(Memory fragmentation)문제에 대해 설명해주세요.

물리적 메모리 공간이 작은 공간으로 띄엄띄엄 존재하여, 총 량은 충분히 존재함에도 할당이 불가능한 상태를 말합니다.

paging 기법은 process의 논리적 주소 공간과 물리적 메모리가 같은 크기page단위로 나누어지기 때문에 외부 단편화 문제가 발생하지 않습니다. 하지만, process주소 공간의 크기가 page 크기의 배수라는 보장이 없기 때문에, 프로세스의 주소 공간 중 가장 마지막에 위치한 page에서는 내부 단편화 문제가 발생할 가능성이 있습니다.

  • 논리적 주소(logical address) : process가 memory에 적재되기 위해 독자적 주소 공간인 논리적 주소가 생성됩니다. 논리적 주소는 각 process마다 독립적으로 할당되며, 0번지부터 시작합니다.
  • 물리적 주소(physical address) : process가 실제로 메모리에 적재되는 위치를 말합니다.
  • 주소 바인딩(address binding) : CPU가 기계어 명령을 수행하기 위해 process의 논리적 주소가 실제 물리적 메모리의 어느 위치에 매핑되는지 확인하는 과정을 주소 바인딩(address binding)이라고 합니다.



Q: Segmentation에 대해서 설명해주세요.

process가 할당받은 메모리 공간을 논리적 의미 단위(segment)로 나누어, 연속되지 않는 물리 메모리 공간에 할당될 수 있도록 하는 메모리 관리 기법입니다.

일반적으로 process의 메모리 영역 중 Code, Data, Heap, Stack등의 기능 단위로 segment를 정의하는 경우가 많습니다.

segmentation 기법에서는 주소 바인딩을 위해 모든 프로세스가 각각의 주소 변환을 위한 segmentation table을 갖습니다.

  • 가변 분할 방식



Q: segmentation의 메모리 단편화 문제에 대해 설명해주세요.

segmentation 기법에서 segment의 크기만큼 메모리를 할당하므로 내부 단편화 문제가 발생하지 않습니다. 하지만, 서로 다른 크기의 segment들이 메모리에 적재되고, 제거되는 일이 반복되면, 외부 단편화가 발생할 가능성이 있습니다.



Q: paging과 segmentation의 차이는 무엇인가요?

paging메모리를 일정한 크기의 단위로 나누어 할당하고, segmentation code, data, heap, stack 등의 기능(의미)단위로 물리 메모리를 할당합니다.

paging의 경우 내부 단편화가 발생할 수 있으며, segmentation은 외부 단편화가 발생할 수 있습니다.



Q: paged segmentation 기법에 대해 설명해주세요.

segmentation을 기본으로 하되, 이를 다시 동일 크기의 page로 나누어 물리 메모리에 할당하는 메모리 관리 기법입니다. 즉, 프로그램을 의미 단위의 segment로 나누고, 개별 segment의 크기를 page의 배수가 되도록 하는 방법입니다.

이를 통해 segmentation 기법에서 발생하는 외부 단편화 문제를 해결하고, 동시에 segment 단위로 process 간의 공유나 process내의 접근 권한 보호가 이루어지도록 해서 paging 기법의 단점을 해결합니다.



Q: 메모리 단편화는 어떤 상황에서 발생할까요?

  1. 프로세스 실행 및 종료: 프로세스들이 생성되고 종료될 때 메모리 할당 및 해제가 일어나며, 이 과정에서 메모리 단편화가 발생할 수 있습니다.
  2. 동적 메모리 할당: 프로그램 실행 중에 동적으로 메모리를 할당하고 해제하는 경우, 메모리 단편화 문제가 발생할 수 있습니다.
  3. 메모리 관리 방식: 메모리 할당 방식이나 메모리 관리 기술에 따라서도 단편화가 발생할 수 있습니다.



Q: 메모리 단편화는 어떻게 해결할 수 있을까요?

  1. 메모리 할당 전략 변경: 다양한 “메모리 할당 알고리즘”을 사용하여 메모리 공간을 관리하는 방식을 변경할 수 있습니다. First Fit, Best Fit, Worst Fit 등의 알고리즘을 활용하여 메모리 조각화(segmentation) 문제를 완화할 수 있습니다.
  2. 가상 메모리: 가상 메모리 기술을 사용하여 물리적인 메모리와 논리적인 메모리를 분리함으로써 단편화 문제를 해결할 수 있습니다. 이는 페이징(paging) 또는 세그멘테이션(segmentation)과 같은 기술을 통해 구현될 수 있습니다.
  3. 메모리 풀: 메모리 풀을 사용하여 프로세스들이 동일한 크기의 메모리 블록을 할당받고 반환하게 함으로써 내부 단편화 문제를 줄일 수 있습니다.
  4. 메모리 조각 재배치: 주기적으로 메모리 조각을 재배치하여 연속된 빈 공간을 만들어 내부 단편화 문제를 해결할 수 있습니다.



마치며

메모리 단편화에 대한 다양한 개념과 관리 기법, 해결 방법 등을 알아보았습니다. 메모리 관리에 관한 내용은 방대하며 다른 과목들과 접목하여 등장하기도 합니다. 모두 연관된 질문들이기 때문에 서로 도움이 될것으로 생각합니다.

다음 시간에는 가상 메모리에 대해 알아보겠습니다.

메모리 단편화

Leave a Comment