프로세스는 RAM의 공간을 나누어 사용하는데 이 때 사용 가능한 메모리는 충분한데 메모리 할당을 하지 못하는 경우를 메모리 단편화라고 한다.
메모리 단편화에는 내부 단편화와 외부 단편화가 있다.
Paging은 프로세스가 사용할 메모리 공간을 일정한 크기의 "page 단위"로 나누어 물리 메모리에 데이터를 저장하는 메모리 관리 방법이다.
사용하지 않는 프레임(물리적 메모리 공간)을 페이지 테이블에 놓고 프로세스를 page단위로 나눠 매핑시켜 주소 바인딩을 한다. 따라서 연속적이지 않은 공간에도 메모리할당이 가능해 외부 단편화 문제를 해결한다. 하지만 paging을 사용할 때 마지막의 page가 메모리를 모두 사용하지 않을 때 내부 단편화가 생길 수 있고, 페이지를 프레임에 매핑시키는 일이 많으면 효율이 떨어질 수 있다.
Segmentation은 프로세스가 사용할 메모리 공간을 "segment 단위"로 나누어 물리 메모리에 저장하는 메모리 관리 방법이다.
보통 Code, Data, Heap, Stack 영역을 segment 단위로 나누어 사용한다. 메모리에 적재할 때 세그먼트 테이블을 통해 물리적 메모리 영역에 주소바인딩을 해준다. 이 때 segment의 크기만큼 메모리를 할당하기 때문에 내부 단편화 문제를 해결해 주지만 프로세스가 메모리를 해제하면 구멍이 생겨 외부 단편화문제가 생긴다.
프로세스를 segmentation을 통해 나눈 메모리를 paging 을 통해 한번 더 나눠 물리 메모리에 할당하는 방식으로 내,외부 단편화 문제를 해결한다. 매핑이 많이 일어나 성능저하를 일으킬 수 있다는 단점이 있다.
Virtual Memory란 실제로 사용하는 메모리를 물리 메모리에 할당하고 나머지는 모두 DISC에 저장하는 방식이다. 이러한 Virtual Memory를 사용한 개념이 Demand Paging이다.
Demand Paging은 통해 cpu요청이 들어올 때 page를 메모리에 적재해 메모리 사용량을 줄인다.
Demand Paging에서는 유효/무효 비트 개념을 두어 페이지가 메모리에 존재하는지 확인하고 메모리에 없을경우(page fault) 디스크에서 꺼내 프레임에 적재하여 사용한다. 이 때 메모리가 모두 사용중일 경우 이후에 참조될 가능성이 가장 낮은 page를 선택해 디스크로 옮겨야하는데 쓰이는 페이지 교체 알고리즘으로는 FIFO, LRU(Least Recently Used), LFU(Least Frequently Used)가 있다.