단편화(Fragmentation)란 ?
- 기억장치의 빈공간이 여러개의 조각으로 나뉘는 현상
- 이는 기억장치의 사용 가능한 공간을 줄이거나, 읽기/쓰기의 수행속도를 늦춤
내부 단편화
- 메모리를 할당 할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 메모리 공간이 낭비되는 현상
외부 단편화
- 메모리가 할당 및 해제 작업의 반복으로 메모리 중간중간에 사용하지 않는 메모리가 생기고 이를 합쳤을 때는 메모리가 충분하지만 실제로는 할당할 수 없는 상황
단편화 해결방법
- 통합기법
- 단편화로 인해 분산된 메모리공간들을 인접해 있는 것들끼리 통합 시킴(재배치 필요x)
- 외부단편화 해결법 - 압축
- 주기억장치에 분산되어 있는 단편화된 공간들을 통합하여 하나의 공간으로 만듦(재배치 필요)
- 비용이 많이 들어 자주쓰지 않고 정해진 주기에 따라서 실행
- 가비지컬렉션 작업이라고도 함
- 페이징(Paging)
- ``가상메모리`` 사용, `외부단편화` 해결
- Page : 보조기억장치를 이용한 가상메모리를 같은 크기의 블록으로 나눈 것 - Frame : 주 기억장치를 페이지와 같은 크기로 나눈 것
- 사용하지 않는 프레임을 페이지에 옮기고(swap-out), 필요한 메모리를 페이지 단위로 프레임에 옮기는(swap-in)기법 => 중기 스케줄링
- 페이지단위에 꽉 맞춰 쓰는게 아니라 내부 단편화 문제는 남아 있음
- 세그멘테이션(Segmentation)
- `가상메모리`사용, `내부단편화` 해결
- 가상메모리를 서로 크키가 다른 논리적단위인 세그먼트로 분할하고 메모리를 할당하여 실제 메모리 주소로 변환
- 각 세그멘트는 연속적인 공간에 저장되어 있음
- 세그먼트들의 크기가 다르기 때문에 미리 분할할 수 없고 메모리에 적재될 때 빈공간을 찾아 할당
- 메모리 풀(Memory poo)
- `내부 단편화`, `외부 단편화` 해결
- 필요한 메모리 공간을 필요한 크기, 갯수만큼 직접 지정하여 미리 할당받아 놓고 필요할 때 마다 사용하고 반납하는 기법
- 단순히 동적할당과 해제만을 반복하면 랜덤한 위치에 할당과 해제가 반복되면서 단편화를 일으킬 수 있지만 미리 공간을 할당 해놓는다면 단편화가 생기지 않음
- 그러나 단편화로 인한 메모리 낭비보다 메모리 풀을 만들고 사용하지 않았을 때의 메모리양이 커진 다면 오히려 손해(즉, 실제로 사용하지 않는 순간에도 할당되어 있기 떄문에 메모리 누수가 발생함)
- => 메모리 할당, 해제가 잦다면 메모리 풀을 쓰면 효과적
참고
https://junsday.tistory.com/36
메모리 단편화(Memory Fragmentation)
메모리 단편화(Memory Fragmentation)란? 주 기억장치에서 메모리의 공간이 작은 조각으로 나뉘어져서, 사용하기에 충분한 양의 메모리가 존재는 하지만 사실상 사용이 불가능한 경우 메모리 단편화
junsday.tistory.com
반응형