본문 바로가기
프로그래밍 기초/운영체제

메모리 단편화(Memory Fragmentation)

by junsday 2017. 6. 19.

메모리 단편화(Memory Fragmentation)란?


주 기억장치에서 메모리의 공간이 작은 조각으로 나뉘어져서, 사용하기에 충분한 양의 메모리가 존재는 하지만 사실상 사용이 불가능한 경우 메모리 단편화가 발생했다고 한다. 메모리 단편화는 내부 단편화와 외부 단편화로 구분할 수 있다.


내부 단편화(Internal Fragmentation)

필요한 양보다 더 큰 메모리가 할당이 되어서 할당 된 메모리 내부에 사용하는 메모리 공간 이외에 사용하지 않는 메모리 공간이 발생했을 때를 말한다.


외부 단편화(External Fragmentation)

메모리가 할당이 되고 해제가 되는 작업이 반복될 때 작은 단위의 메모리가 띄엄띄엄 존재하게 되는데 빈 메모리의 전체 공간은 충분한 양이지만 실제로 사용할 수 없는 경우를 말한다.



메모리 단편화(Memory Fragmentation) 해결 방법


압축(Compaction)

메모리 공간들을 재배치 하여, 단편화로 인해 분산되어 있는 메모리공간들을 하나로 합치는 기법이다.


통합(Coalescing)

단편화로 인해 분산된 메모리공간들을 인접해 있는 것끼리 통합시켜 큰 메모리 공간으로 합치는 기법이다. 압축은 재배치가 일어나지만 통합은 인접한 공간들끼리 통합된다는 차이가 있다.


페이징(Paging) - 가상 메모리 사용, 외부 단편화 해결

보조기억장치를 이용한 가상 메모리(Virtual Memory)를 같은 크기의 블록으로 나눈 것을 페이지(Page)라고 한다.

주 기억장치를 페이지와 같은 크기로 나눈 것을 프레임(Frame)이라고 한다.

페이징 기법이란 사용하지 않는 프레임을 페이지에 옮기고(swap-out), 필요한 메모리를 페이지 단위로 프레임에 옮기는(swap-in) 기법이다(중기 스케줄링). 외부 단편화는 해결이 되지만 내부 단편화는 해결되지 않는다.


세그멘테이션(Segmentation) - 가상 메모리 사용, 내부 단편화 해결

가상메모리를 사용한다는 것으로는 페이징 기법과 유사하지만 같은 크기로 나누지 않고 서로 다른 크기로 나누고 단위는 세그먼트(Segment)라고 하며, 이를 이용한 메모리 관리 기법을 세그멘테이션 기법이라고 한다. 내부 단편화는 해결이 되지만 외부 단편화는 해결되지 않는다.


메모리 풀(Memory pool) - 내부 단편화, 외부 단편화 해결

동적 할당과 비슷한 개념이지만 필요한 메모리 공간을 필요한 크기, 갯수만큼 사용자가 직접 지정하여 미리 할당받아 놓는다는 점에서 차이가 있다. 미리 할당받아서 메모리 풀을 만들어 놓고 필요할 때마다 사용하고 반납하는 것이 메모리 풀 기법이다. 

메모리 풀 없이 동적할당과 해제를 반복하면 랜덤한 위치에 할당과 해제가 반복되면서 단편화를 일으킬 수 있지만 미리 공간을 할당해 놓는다면 필요할 때마다 할당받았던 메모리 공간을 가져다 쓰고 반납하기 때문에 메모리 할당과 해제로 인한 외부 단편화가 생기지 않는다. 필요한 크기만큼 할당을 해놓기 때문에 내부 단편화 또한 생기지 않는다는 장점이 있다. 하지만 메모리 단편화로 인한 메모리 낭비량보다 메모리 풀을 만들었지만 쓰이지 않는 메모리의 양이 큰 경우에는 사용하지 않아야 한다.

사전상의 의미인 내부 단편화와 외부 단편화는 생기지 않지만 미리 할당해 놓고 사용하지 않는 순간에도 역시 메모리 누수가 일어나는 것이므로 잦은 동적할당과 해제가 일어날 경우에 사용하는 것이 바람직하다.


댓글