2025-09-14 00:30
Tags: 소프트웨어 공학
단편화(Fragmentation)
-
데이터를 저장하거나 메모리를 할당할 때 데이터가 여러 조각으로 나뉘어 흩어지는 현상으로, 시스템 성능 저하의 핵심 원인
-
단편화는 크게 저장 장치에서 발생하는 ‘디스크 단편화’와 메모리에서 발생하는 ‘메모리 단편화(내부/외부)‘로 구분된다.
-
컴퓨터의 저장 장치(하드디스크, SSD)나 메모리(RAM)는 거대한 도서관과 같고, 데이터(파일, 프로그램)는 책과 같다.
-
데이터를 쓰고 지우는 과정이 반복되면서, 데이터는 조각나고 저장 공간은 파편화되어 전체적인 시스템의 처리 속도를 저하시키는 것
단편화의 구조 종류와 원리
메모리 단편화 (Memory Fragmentation)
주기억장치인 RAM에서 프로세스에 메모리를 할당하고 해제하는 과정에서 발생한다.
내부 단편화 (Internal Fragmentation)
메모리를 할당할 때, 요청한 크기보다 더 큰 공간이 할당되어 남는 내부의 사용되지 않는 공간을 의미한다.
- 발생 원인:
- 운영체제는 메모리를 일정한 크기의 블록(Block)이나 페이지(Page) 단위로 관리한다.
- 프로세스가 3KB의 메모리를 요청했는데, 할당 단위가 4KB라면 4KB를 할당해 주고 1KB의 공간이 내부에서 낭비된다. 이 1KB가 바로 내부 단편화다.
- 특징: 낭비되는 공간을 계산하기는 쉽지만, 할당된 블록 내부에 존재하므로 다른 프로세스가 사용할 수 없어 공간 효율성을 떨어뜨린다.
외부 단편화 (External Fragmentation)
메모리 할당과 해제가 반복되면서, 할당된 메모리 공간들 사이에 작은 빈 공간들이 생겨나는 현상이다. 이 작은 공간들을 모두 합치면 충분한 크기가 되지만, 연속적이지 않아 큰 메모리 요청을 처리할 수 없는 상태다.
- 발생 원인:
- 크기가 다양한 프로세스들이 메모리에 적재되고 해제되는 것을 반복하면, 프로세스들 사이에 사용되지 않는 작은 ‘구멍(hole)‘들이 생긴다.
- 특징:
- 시스템 전체로 보면 메모리가 충분하지만, 당장 필요한 연속 공간이 없어 메모리 할당에 실패(Out of Memory)할 수 있다.
구분 | 내부 단편화 (Internal Fragmentation) | 외부 단편화 (External Fragmentation) |
---|---|---|
개념 | 할당된 공간 내부에 발생하는 낭비 공간 | 할당된 공간들 사이에 발생하는 낭비 공간 |
원인 | 고정된 크기 단위로 메모리 할당 시 발생 | 가변적인 크기의 메모리 할당/해제 반복 시 발생 |
상태 | 총 메모리는 충분하지만 낭비가 심함 | 총 메모리는 충분하지만 연속 공간이 없어 할당 불가 |
비유 | 큰 상자에 작은 물건 하나를 넣은 상황 | 주차장의 자투리 공간들 |
주요 해결책 | 세그멘테이션 기법 등 | 페이징, 압축(Compaction) 기법 등 |
메모리 단편화 해결 기법
- 페이징 (Paging):
- 외부 단편화를 해결하기 위한 대표적인 기법.
- 프로세스를 ‘페이지(Page)‘라는 고정된 크기의 블록으로 나누고, 물리 메모리 역시 ‘프레임(Frame)‘이라는 동일한 크기로 나누어 페이지를 프레임에 불연속적으로 할당한다.
- 어떤 크기의 프로세스든 페이지 단위로 메모리에 올라가므로 외부 단편화가 발생하지 않는다. 다만, 마지막 페이지에서는 내부 단편화가 발생할 수 있다.
- 세그멘테이션 (Segmentation):
- 내부 단편화를 해결하기 위한 기법.
- 프로세스를 코드, 데이터, 스택 등 논리적인 의미 단위인 ‘세그먼트(Segment)‘로 나누어 메모리에 할당한다.
- 필요한 만큼만 할당하므로 내부 단편화는 발생하지 않지만, 크기가 다른 세그먼트들이 할당/해제되면서 외부 단편화가 발생할 수 있다.
- 메모리 풀링 (Memory Pooling):
- 필요한 크기의 메모리 블록들을 미리 할당해 ‘풀(Pool)‘을 만들어두고, 요청이 오면 풀에서 꺼내주고 반납받는 방식.
- 동적 할당/해제로 인한 오버헤드와 단편화를 줄일 수 있다.
- 압축 (Compaction):
- 외부 단편화의 직접적인 해결책.
- 메모리 곳곳에 흩어져 있는 사용 중인 메모리 영역을 한쪽으로 이동시켜, 분산된 빈 공간들을 하나의 큰 연속 공간으로 만드는 기술이다.
- ‘메모리 조각 모음’이라고 할 수 있지만, 시스템에 큰 부하를 주므로 자주 사용되지는 않는다.
저장 장치 단편화 (Storage Fragmentation)
파일 단편화 (File Fragmentation)
- 하나의 파일이 저장 장치의 연속되지 않은 여러 공간, 즉 여러 ‘클러스터(Cluster)‘나 ‘블록(Block)‘에 나뉘어 저장되는 현상을 말한다
- 발생 원인:
- 파일의 생성, 수정, 삭제가 반복되면서 연속적인 빈 공간을 찾기 어려워진다.
- 운영체제는 파일을 저장하기 위해 어쩔 수 없이 흩어져 있는 작은 빈 공간들을 모아 파일을 조각내어 저장한다.
- HDD에서의 영향:
- 치명적이다.
- HDD는 물리적인 헤드(Head)가 디스크(Platter) 위를 움직여 데이터를 읽는다.
- 파일이 여러 조각으로 흩어져 있으면, 헤드는 각 조각을 찾아 디스크의 여러 위치를 물리적으로 이동해야 한다.
- 이 과정에서 발생하는 탐색 시간(Seek Time)과 회전 지연 시간(Rotational Latency) 때문에 파일 접근 속도가 현저히 느려진다.
- SSD에서의 영향:
- 거의 없다.
- SSD는 반도체 기반으로, 기계적인 움직임 없이 전기적 신호로 데이터에 직접 접근(Direct Access)한다.
- 따라서 데이터가 물리적으로 어디에 흩어져 있든 접근 속도에 거의 차이가 없다.
- 오히려 잦은 데이터 재배치는 SSD의 수명을 단축시키는 원인이 될 수 있다.
자유 공간 단편화 (Free Space Fragmentation)
- 파일이 아닌, 사용 가능한 ‘빈 공간’ 자체가 잘게 쪼개져 흩어져 있는 상태를 말한다.
- 분명히 총 여유 공간은 충분한데, 큰 파일을 저장할 만한 연속된 단일 공간이 없는 경우다. 이로 인해 새로 저장되는 파일이 단편화될 가능성이 커진다.