메모리 단편화
메모리 단편화란 RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용 가능한 메모리가 충분히 존재하지만, 할당(사용)이 불가능한 상태를 말합니다.
종류로는 내부 단편화와 외부 단편화가 있습니다.
메모리 단편화로 인해 일어나는 현상
메모리 단편화가 일어나면, 실제 사용 가능한 공간이 줄어들어 시스템의 성능 저하를 일으킬 수 있습니다.
성능 저하의 원인으로는 실제 사용할 수 있는 공간을 찾는 과정이 필요하고 잦은 페이지 교체나, swapping이 있을 수 있습니다.
내부 단편화 (Internal Fragmentation)
내부 단편화란, 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어 메모리 공간이 낭비되는 상황을 말합니다.
예를 들어, 7kb를 사용하는 프로세스에게 10kb의 메모리를 할당하여 3kb의 내부단편화가 생긴 경우가 있습니다.
외부 단편화 (External Fragmentation)
외부 단편화란, 메모리가 할당 및 해제 작업의 반복으로 작은 메모리가 중간중간 존재하게 되는데, 이때 중간에 생긴 사용하지 않는 메모리가 많아서 총 메모리 공간은 충분하지만 실제로 할당이 불가능한 상황을 말합니다.
예를 들어, RAM에 5kb, 3kb, 4kb의 작은 메모리가 존재하여 총 12kb의 메모리가 존재하지만, 작게 나뉘어져 있어 7kb의 프로세스를 할당하지 못하는 경우가 있습니다.
메모리 단편화(파편화) 문제 해결 방법
1. 압축 (Compaction)
압축 방식은 메모리 공간을 재배치하여, 단편화로 인해 분산되어 있는 메모리 공간을 전부 하나로 합치는 기법입니다. (Ex. 디스크 조각 모음)
2. 통합 (Coalescing)
통합 방식은 단편화로 인한 분산된 메모리 공간들을 인접해 있는 것끼리 통합시켜 큰 메모리 공간으로 합치는 기법입니다.
즉, 압축은 재배치 되는것, 통합은 인접 공간끼리 통합된다는 것에서 차이가 있습니다.
3. 페이징 (Paging)
페이징 기법을 사용하면, 가상 메모리를 사용할 수 있고 외부 단편화를 해결할 수 있다는 장점이 있지만, 내부 단편화는 그대로 존재한다는 단점이 있습니다.
페이징 기법에 앞서, 페이지와 프레임에 대한 개념이해가 필요합니다. 페이지란 가상 메모리를 같은 크기의 블록으로 나눈 것을 말하고, 프레임이란 RAM(주기억장치)을 페이지와 같은 크기로 나눈 것을 말합니다.
페이징 기법은 사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮기는 것을 말합니다.
이때, 페이지와 프레임을 대응시키기 위해 페이지 매핑 과정이 필요하기 때문에 페이징 테이블을 만듭니다.
이러한 과정이 연속적이지 않은 메모리 공간을 활용하기 때문에 외부 단편화 문제를 해결할 수 있습니다. 그러나, 페이지 단위에 알맞게 프로세스를 꽉꽉 채워 사용하는 것이 아니므로 내부 단편화 문제는 여전히 존재합니다.
내부 단편화 문제를 해결한다고 페이지 단위를 작게하면, 페이지 매핑 과정이 많아져 오히려 효율이 떨어질 수 있습니다. 따라서 이러한 페이지의 크기를 어떻게 설정하는지도 중요한 요소가 됩니다.
페이지의 크기를 결정하는 기준
- 내부 단편화 크기
- Page-in, Page-out 시간
- I/O 오버헤드
- 페이지 테이블 크기
- 메모리 해상도 : 필요한 내용만 메모리에 담을 수 있는 정도
- 페이지 부재(Page Fault) 발생 확률
페이지 크기가 작을 때 장점
- 페이지 크기가 작을수록 메모리의 내부 공간이 작아져 내부 단편화가 줄어든다.
- 페이지가 크면 불필요한 영역까지 함께 적재될 수 밖에 없다. 따라서 반대로 페이지 크기가 작으면 필요한 부분만 메모리에 적재되어 정밀도가 증가하여 메모리 해상도가 높아진다.
페이지 크기가 클 때 장점
- I/O 시간은 대부분 디스크의 헤드 이동 시간이므로, 페이지가 클수록 한 번 이동해서 많은 데이터를 읽어올 수 있다는 장점이 있어 Page-in, Page-out 시간이 줄어든다.
- 페이지의 크기가 클수록 페이지 테이블의 크기가 커져서 많은 데이터를 읽어올 수 있다.
- 페이지가 클수록 하나의 페이지 내에 많은 내용을 담고 있으므로, 페이지 재사용 가능성이 높아지게 되고, 메모리 지역성에 의한 페이지 부재도 덜 발생하게 된다.
4. 세그먼테이션 (Segmentation)
세그먼테이션을 사용하면, 가상 메모리를 사용하여 내부 단편화 문제를 해결한다는 장점이 있지만, 외부 단편화는 그대로 존재한다는 단점이 있습니다.
세그멘테이션이란 가상 메모리를 서로 크기가 다른 논리적 단위인 '세그먼트'로 분할해서, 메모리를 할당하여 실제 메모리 주소로 변환하게 하는 방법을 말합니다. 세그먼트들의 크기는 서로 다르기 때문에 미리 분할해 둘 수 없고, 메모리에 적재될 때 빈 공간을 찾아 할당하게 됩니다.
각 세그먼트는 연속적인 공간에 저장되어 있고, 주기억장치와 가상메모리 공간의 매핑을 위한 세그먼테이션 테이블이 필요합니다. 이러한 세그먼테이션 테이블에는 각 세그먼트의 시작 주소와 메모리 공간의 크기 정보를 수록합니다.
메모리의 빈 공간을 찾아 프로세스가 필요한 메모리만큼을 할당해주기 때문에 내부 단편화는 일어나지 않으나, 여전히 중간에 프로세스가 메모리를 해제하면 생기는 구멍(hole), 즉 외부 단편화 문제는 존재하게 됩니다.
5. 메모리 풀(Memory Pool)
메모리 풀 방식은 필요한 메모리 공간을 필요한 크기, 개수 만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 기법을 말합니다.
메모리 풀 없이 동적할당과 해제를 반복하면 메모리의 랜덤한(실제론 알고리즘에 의해) 위치에 할당과 해제가 반복되면서 메모리 단편화를 일으킬 수 있습니다. 따라서 미리 공간을 할당해놓고 가져다 쓰고 반납하는 방식의 메모리 풀을 사용하면 할당과 해제로 인한 외부 단편화를 방지할 수 있습니다.
또한, 필요한 크기만큼 할당을 해놓기 때문에 내부 단편화도 방지할 수 있습니다.
그러나, 메모리 단편화로 인한 메모리 낭비량보다, 메모리 풀을 만들어놓고 사용하지 않는 메모리 양이 커질 경우 더 비효율적일 수 있습니다.
메모리 단편화(Memory Fragmentation)
Internal메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어 메모리 공간이 낭비되는 상황예를 들어 메모장을 틀었는데 OS가 10Kb 할당, 하지만 7kb만 사용하고 있을 때 필요 이
velog.io
https://jeong-pro.tistory.com/91
메모리 단편화(Memory Fragmentation)가 무엇이고 왜 발생하는가?
메모리 단편화가 무엇이고 왜 발생하는가? 메모리 단편화 - RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태를 보고 메모
jeong-pro.tistory.com
'👩🏻💻기초지식 > CS' 카테고리의 다른 글
[알고리즘] 정렬 알고리즘 8가지 (0) | 2023.10.02 |
---|---|
[네트워크] OSI 7 계층과 TCP/IP 4 계층, 계층 별 PDU (0) | 2023.09.14 |
[자료구조] 자료구조와 알고리즘을 왜 사용하고 공부하는가? (0) | 2023.09.05 |
[자료구조] 해시 테이블(Hash Table) (0) | 2023.08.25 |
[자료구조] 배열과 리스트 (0) | 2023.08.24 |