메모리 외부단편화 내부단편화
메모리의 단편화(Fragmentation)란?
연속 되지 못하고 끊어져 있는 것을 말한다.
단편화에는 외부단편화(External Fragmentation)와
내부단편화(Internel Fragmentation)가 있다.
1.외부단편화
연속된 메모리 영역들 사이에 사용되지 않는 작은 조각(공간)들 이 생성되는 현상
메모리의 반복되는 할당과 해제로 인해 사용가능한 공간들이 여러 조각으로 나누어져 있는 경우이다.
2.내부단편화
데이터 블록보다 더 큰 메모리가 할당되어 메모리 내부에 사용하지 않는 공간이 생기는 현상
주로 고정크기의 메모리 할당방식과 동적 메모리 할당 방식 모두에 발생한다.
고정크기할당방식:미리 메모리를 고정된 크기의 블록으로 나누어서 프로세스를 할당하는데, 이 크기보다 데이터가 작을경우 빈공간이(내부단편화) 생기게 된다
동적크기할당방식:데이터의 크기에 딱 맞게 가변적으로 할당한다. 그러나 외부단편화 처럼 할당 및 해제 과정과 메모리블록을 분할하는 과정에서 내부 단편화가 생긴다.
3.단편화의 극복 방안
1.페이징(Paging) 기법
가상메모리 사용, 외부 단편화 해결, 내부단편화는 여전히 존재
고정 분할 방식을 이용한 가상 메모리 관리 기법
가상주소의 각 분할된 영역을 페이지라고 하고, 물리메모리의 각 영역은 프레임이라고 한다.
가상주소와 물리주소를 연결시켜주는 것을 페이지 매핑(page mapping)이라고 하며 이를 위해 페이징 테이블(paging table)이 존재.
연속적이지 않은 공간도 활용 하므로 외부단편화문제를 해결하지만 페이지 단위에 딱 맞춰 메모리를 사용 할 수 없기에 내부단편화는 여전히 존재
2.세그먼테이션(Segmentation)
가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당하고, 실제 메모리주소로 변환
세그먼트 테이블(segment table) 필요. 이 테이블에 각 세그먼트의 시작주소 및 길이정보를 가지고 있다.
프로세스가 사용하는 만큼만 할당하여 내부단편화는 최소화 된다.
프로세스가 메모리를 해제하면서 외부단편화 문제는 여전히 존재
3.메모리 풀(Memory Pool)
미리 일정한 크기의 메모리 블록을 할당하여, 필요할 때마다 이를 재사용하는 기법
메모리 할당 및 해제 과정에서 발생하는 오버헤드를 줄이고, 내부 및 외부 단편화를 최소화 할 수 있음
4.큰 메모리 블록 할당(Large Block Allocation)
애초에 메모리 블록을 크게 할당하여 외부 및 내부 단편화를 최소화 하는 방법이다.
작은 메모리 블록을 할당하면, 이를 일일히 추적하고 관리해서 할당 및 해제과정에서 오버헤드가 증가한다.
큰 메모리 블록을 사용하면 오버헤드가 감소하고, 메모리 조각화가 감소하여 내부단편화가 최소화된다.
또한 외부단편화도 줄어든다.
5.동적 메모리 재배치(Static Memory Relocation)
프로세스가 실행 중인 메모리상의 위치를 변경한다.
주로 가상 메모리 시스템에서 사용된다.
프로세스가 필요로 하는 메모리 공간을 더 크거나 작은 영역으로 이동하거나 재배치 한다.