본문 바로가기
프로그래밍/컴퓨터

[CS] 메모리 단편화 & 메모리 풀

by Sik.K 2023. 5. 4.

메모리 단편화란, 메모리 공간에서 사용할 수 있는 전체 메모리의 공간은 충분하지만 각각의 공간이 너무 협소하여 더는 데이터의 공간을 할당하지 못하는 상태를 의미한다.

 

이는 내부 단편화와 외부 단편화로 나뉘는데 내부 단편화란 필요한 양보다 더 큰 공간이 할당되어 실질적으로 사용하지 않는 공간이 발생하는 경우를 의미하고, 외부 단편화는 할당 받은 메모리 공간들 사이에 작은 메모리들이 너무 많아 실질적으로 사용할 수 있는 메모리의 공간이 적어지는 경우를 의미한다.

 

가령 16byte의 공간을 할당했지만 실제로 사용하는 데이터는 8byte일 때, 8byte의 공간이 사용하지 못하는 상황이 발생한다. 이것이 내부 단편화이다.

 

또한 8byte를 할당하고 이어서 16byte를 할당했다. 이후 8byte의 공간을 해제한다면 8byte의 공간이 남게 되는데, 아직 뒤에는 데이터가 있는 공간이어서 이후 8byte를 초과하는 데이터를 할당하고 싶을 땐 이 공간을 사용하지 못한다. 이것이 바로 외부 단편화이다.

 

이런 메모리 단편화 현상을 해결하는 방법은 페이징, 세그멘테이션, 마지막으로 메모리 풀이 있다.

 

 

페이징(Paging)

 

 

페이징은 가상 메모리를 사용하는 기법으로, 외부 단편화를 해결할 수는 있지만 내부 단편화의 문제는 여전히 남게된다.

 

보조기억장치를 이용한 가상메모리를 같은 크기의 블록으로 나눈 것을 페이지라고 하고 RAM을 페이지와 같은 크기로 나눈 것을 프레임이라고 할 때, 페이징 기법은 사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮기는 기법을 의미한다.

 

페이지와 프레임을 대응시키기 위해 page mapping 과정이 필요해서 paging table을 만든다. 페이징 기법을 이용하면 연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화 문제를 해결할 수 있다.

 

하지만 페이지 단위에 알맞게 꽉 채워 쓰는 것이 아니기 때문에 내부 단편화의 문제는 여전히 남아 있다.

 

 

세그멘테이션(Segmentation)

 

 

세그멘테이션은 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당하여 실제 메모리 주소로 변환을 하게 된다.

 

각 세그먼트는 연속적인 공간에 저장이 되어 있으며 세그먼트들의 크기가 다르기 때문에 미리 분할해 둘 수 없고 메모리에 적재될 때 빈 공간을 찾아 할당한다. 페이징과 마찬가지로 mapping을 위해 segment table이 필요하다.

 

프로세스가 필요한 메모리만큼 할당해주기 때문에 내부 단편화는 일어나지 않으나 여전히 중간에 프로스세가 메모리를 해제하면 생기는 구멍, 즉 외부 단편화 문제는 여전히 남아 있다.

 

 

메모리 풀(Memory Pool)

 

 

메모리 풀은 필요한 메모리 공간을 필요한 크기, 개수만큼 사용자가 직접 지정하여 미리 할당 받아 놓고 필요할 때마다 사용하고 반납하는 기법이다.

 

메모리 풀 없이 동적할당과 해제를 반복하면 메모리의 랜덤한(실제로는 알고리즘에 의한) 위치에 할당과 해제가 반복되면서 단편화를 일으킬 수 있겠지만 미리 공간을 할당 받은 뒤 가져다 쓰고 반납하기 때문에 할당과 해제로 인한 외부 단편화가 발생하지 않는다.

 

또한 위에서 언급했다시피 필요한 크기만큼 사전에 할당 받는 것이기 때문에 내부 단편화의 문제 또한 생기지 않는다.

 

하지만 메모리 단편화로 인한 낭비량보다 메모리 풀을 만들었지만 사용하지 않았을 때 메모리 양이 커질 경우에는 사용하지 않아야 한다.

 

메모리의 할당과 해제가 잦은 경우 메모리 풀을 쓰면 효과적이다. 단, 할당은 받았지만 사용하지 않고 가지고 있을 경우에 생기는 메모리 누수에는 대처하지 못하는 방식이다.

'프로그래밍 > 컴퓨터' 카테고리의 다른 글

[CS] GPGPU  (0) 2023.07.11
[CS] SIMD(Single Instruction Multiple Data)  (0) 2023.06.19
[CS] 캐시 메모리  (0) 2023.04.20
[CS] 메모리 계층 구조(Memory Hierarchy)  (0) 2023.04.19
[CS] CPU 와 마이크로 프로세서  (0) 2023.04.19

댓글