운영체제

메모리 할당과 단편화

운영체제는 프로세스가 요청한 크기만큼 연속된 메모리를 떼어 줍니다. 할당과 해제를 반복하면 빈 공간이 여기저기 흩어지고, 빈 공간을 다 합치면 충분한데도 큰 요청을 받아 주지 못하는 상황이 생깁니다.

100KB 메모리에서 할당과 해제를 반복하며 외부 단편화가 생기는 과정을 보여 주는 시뮬레이터

1. 빈 공간을 고르는 방식을 정하세요

2. 메모리를 요청하거나, 예시 시나리오를 재생하세요

0255075100 KB
빈 공간 합계100 KB
가장 큰 빈 공간100 KB
빈 공간 조각 수1개

색칠된 블록은 할당된 메모리이고, 빗금 친 곳은 빈 공간입니다. 할당된 블록을 누르면 그 블록이 해제됩니다. 처음이라면 [예시 시나리오 재생]부터 눌러 보세요.

빈 공간을 고르는 세 가지 방식

First-fit은 메모리 앞쪽부터 훑어서 요청이 들어가는 첫 번째 빈 공간을 씁니다. 찾는 시간이 짧습니다.

Best-fit은 요청이 들어가는 빈 공간 중 가장 작은 곳을 씁니다. 남는 조각이 작아서 효율적으로 보이지만, 아무 데도 못 쓸 아주 작은 조각이 많이 생깁니다.

Worst-fit은 가장 넓은 빈 공간을 씁니다. 남는 조각을 크게 남기려는 방식이지만, 큰 빈 공간이 빨리 사라져서 나중에 큰 요청이 오면 받기 어렵습니다.

외부 단편화

빈 공간의 합계는 충분한데 조각조각 흩어져 있어서 연속된 공간이 필요한 요청을 받지 못하는 상태를 외부 단편화라고 합니다. 위 통계에서 빈 공간 합계와 가장 큰 빈 공간의 차이가 클수록 단편화가 심한 것입니다.

해결 방법은 두 가지입니다. 사용 중인 블록을 한쪽으로 몰아 빈 공간을 하나로 합치는 압축이 있고, 메모리를 같은 크기의 페이지로 나눠 연속된 공간 자체가 필요 없게 만드는 페이징이 있습니다. 오늘날 운영체제는 대부분 페이징을 씁니다.