사용가능한 메모리가 충분히 존재하지만, 메모리의 공간이 작은 조각으로 나뉘어져 할당(사용)이 불가능한 상태
시스템 성능 저하를 일으킬 수 있음 (잦은 페이지 교체 필요)
필요한 양보다 더 큰 메모리가 할당이 되어서, 할당된 메모리 내부에 사용하지 않는 메모리 공간이 발생한 상황
메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 생겨나는데,
이러한 메모리 공간들이 많아지면서 총 사용 가능한 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황
메모리 공간들을 재배치하여, 단편화로 인해 분산되어 있는 메모리 공간들을 하나로 합치는 기법
ex) 디스크 조각 모음
단편화로 인해 분산된 메모리 공간들을 인접해 있는 것끼리 통합시켜 큰 메모리 공간으로 합치는 기법 (압축처럼 분산된 메모리 영역이 재배치 되진 않음)
이외 페이징과 세그멘테이션 기법이 있다
가상 메모리를 페이지로 나누는 기법
이때, 가상 메모리는 물리 메모리(RAM)의 한계를 극복하기 위한 개념으로 프로그램이 필요한 데이터 및 명령을 담을 수 있는 주소 공간을 의미한다
일반적으로 디스크를 사용해 구현된다
여전히 내부 단편화 문제는 발생할 수 있다
즉, 프로세스 크기가 페이지 크기의 배수가 아닐 경우 마지막 페이지는 한 프레임(페이지)를 다 채울 수 없고, 이는 메모리 낭비의 원인이 된다
페이지 단위를 작게하면 내부 단편화 문제가 감소하지만, 대신 페이지 매핑 과정이 많아져 오히려 효율이 떨어질 수 있고 페이지 테이블 크기 또한 증가한다
❓ 페이지 크기에 따른 차이
- 페이지 크기가 작을수록
- 내부 단편화 감소: 페이지가 작을수록 버려지는 메모리의 내부 공간도 작아짐
- 메모리 해상도 증가: 페이지가 크면 불필요한 영역까지 함께 적재될 수 밖에 없지만, 적을수록 필요한 부분만 메모리에 적재되는 정밀도가 증가함
- 페이지 크기가 클수록
- Page-in, Page-out 시간 감소: 페이지가 클수록 한 번 이동해서 많은 데이터를 읽어올 수 있어 I/O 시간이 감소함
- Page Table Size 감소: 페이지의 크기가 클수록 테이블의 row 수는 적어짐
- Page Fault 발생 확률 감소: 페이지가 클수록 하나의 페이지 내에 많은 내용을 담고 있기 때문에, 페이지 재사용 가능성이 높아지고 메모리 지역성에 의해 페이지 부재도 덜 발생하게 됨
가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당하여 실제 메모리 주소로 변환하게 하는 방법
https://jeong-pro.tistory.com/91
https://cocoon1787.tistory.com/859
https://velog.io/@hanhs4544/메모리-단편화Memory-Fragmentation
https://bellog.tistory.com/159
https://blog.naver.com/ruvendix/221333044853
https://jartlife.tistory.com/59