단편화
- 컴퓨터 시스템의 메모리가 사용되지 않은 공간의 조각으로 분할될 때 발생한다.
- 대규모 메모리 할당에 사용할 수 있는 연속 메모리의 양을 줄여 시스템이 할당할 여유 메모리 블록을 검색하는데 더 큰 시간을 소비하게 되기 때문에 시스템 성능에 상당항 영향을 미친다.
- 종류로는 내부단편화, 외부 단편화가 있다.
쉽게말해 메모리 공간이 부분으로 나뉘어서 충분히 사용 가능한 메모리가 남아있지만, 프로세스 할당이 불가능한 상태를 말한다.
내부 단편화(Internal Fragmentation)
- 프로세스가 필요한 양보다 더 큰 메모리가 할당되어 메모리 공간 낭비가 발생하는 경우
- 프로세스는 실제로 사용하지 않는 메모리 영역을 가지고 있게 된다.
100MB의 메모리에 80MB 크기의 프로세스를 적재하게 되면
아래 사진처럼 20MB의 내부 단편화가 발생하며 해당 메모리는 사용이 불가능하다.
외부 단편화(External Fragmentation)
- 남아있는 총 메모리 프로세스가 요청한 메모리 공간보다 크지만, 남아있는 공간이 연속적이지 않아 사용할 수 없는 경우를 말한다.
- 프로세스들이 메모리를 할당하고 반납하는 과정에서 메모리 공간이 쪼개져서 발생한다.
- 남아 있는 메모리 공간이 쪼개어져 있어 사용할 수 없다.(메모리 낭비가 발생한다.)
위 사진과 같이 총 남아 있는 메모리 공간은 100MB이고, 필요한 메모리 공간은 80MB이지만 남아있는 메모리 공간이 쪼개어져 있어 각 메모리가 50MB이므로 프로세스를 할당할 수 없다.
단편화 해결 방법
압축(Compaction)
- 메모리 재배치를 통해 단편화 되어 있는 공간들을 하나로 합치는 방법이다.
- 외부 단편화를 해소하기 위해 사용된다.
- 작업 효율이 좋지 않다.
통합(Coalescing)
- 단편화로 인해 분산된 메모리 공간들을 인접해 있는 것끼리 통합시켜 큰 메모리 공간으로 합치는 기법이다.
- 압축은 재배치가 일어나지만 통합은 인접한 공간
들끼리 통합된다.- 외부 단편화를 해소하기 위해 사용된다.
메모리 풀(Memory pool) - 내부+외부 단편화 해결
- 필요한 메모리 크기와 개수를 지정해 미리 할당 받아 메모리 풀을 만들어 놓고 필요할 때 마다 사용 후 반납 하는 것이다.
- 할당받았던 메모리 공간을 가져다 쓰고 반납하기 때문에 메모리 할당과 해제로 인한 외부 단편화가 생기지 않는다.
- 필요한 크기만큼 할당을 해놓기 때문에 내부 단편화가 생기지 않는다.
- 미리 할당해 놓고 사용하지 않는 순간에도 메모리 누수가 일어나는 것이기 때문에 잦은 동적할당과 해제가 일어날 경우에 사용하는 것이 바람직하다.
🙇 참고 사이트 🙇
https://zu-techlog.tistory.com/132 https://shung2.tistory.com/777 https://velog.io/@xx0hn/CS-OS-Fragmentation-%EB%8B%A8%ED%8E%B8%ED%99%94