compaction
압축은 흩어진 빈 공간을 하나로 만들지만 실행 중 메모리를 옮긴다
외부 단편화를 줄이려면 프로세스를 낮은 주소 쪽으로 모아야 한다. 그래서 복사 비용, 일시 정지, 주소 재배치가 함께 따라온다.
목표
작은 hole 여러 개를 큰 연속 hole 하나로 합친다.
조건
실행 시 바인딩과 주소 재배치 정보가 필요하다.
한계
복사량이 클수록 CPU와 메모리 대역폭을 크게 쓴다.
압축 전
P1
40MB
hole
20MB
P2
70MB
hole
55MB
P3
50MB
hole
10MB
총 빈 공간은 충분해도 연속된 최대 hole이 작으면 큰 요청을 받지 못한다.
압축 후
P1
고정 또는 이동
P2
낮은 주소
P3
낮은 주소
큰 hole
85MB
프로세스를 모은 뒤 끝에 큰 연속 공간을 만들면 큰 블록 요청을 다시 처리할 수 있다.
판단 축
얻는 것
지불하는 것
확인 질문
공간
외부 단편화를 직접 줄이고 큰 hole을 만든다.
프로세스 메모리 복사와 캐시 오염이 생긴다.
새 요청을 받을 만큼 큰 연속 공간이 필요한가.
시간
연속 할당 방식을 더 오래 유지할 수 있다.
이동 중 일시 정지와 스케줄링 지연이 생길 수 있다.
pause 시간을 사용자나 시스템이 감당할 수 있는가.
주소
이동 뒤에도 프로세스가 계속 실행된다.
실행 시 바인딩과 재배치 정보가 필요하다.
주소를 바꿔도 참조가 안전하게 갱신되는가.
이동 대상
모든 프로세스를 옮길지, 필요한 크기만 만들 정도로 옮길지 정책을 정한다.
중단 비용
복사량이 클수록 압축은 메모리 대역폭과 응답 시간을 잡아먹는다.
근본 대안
페이징처럼 연속 배치 제약을 없애면 외부 단편화 자체를 피할 수 있다.