Compaction이라는 압축기법을 통해 분산된 메모리를 큰 블록으로 압축시킨다
-> 프로세스 주소공간이 동적으로 재배치 되어야 하므로 오버헤드가 크고 비효율적이다.
내부단편화
파티션이 고정되어 있기 때문에 프로세스를 적재했을 때 메모리가 낭비되는 상태
연속 메모리 관리
프로그램 전체가 하나의 커다란 공간에 연속적으로 할당되는 방식
고정 분할기법 : 주기억장치가 고정된 파티션으로 분할
-> 내부단편화 발생
동적 분할기법 : 파티션들이 동적으로 생성되며 자신의 크기가 같은 파티션에 적재
-> 외부단편화 발생
페이징
주 기억장치가 고정된 크기의 조그마한 조각으로 분할되어있고(프레임), 프로세스를 프레임의 크기로 잘게 쪼개서 곳곳에 넣는 방식
페이징을 통해 외부단편화를 해결 할 수 있지만 내부단편화는 존재(프레임의 크기가 작아도 조금의 내부단편화는 존재한다.)
프로세스는 연속적으로 시간에 따라 동작하는데 실제 적재된 곳은 분산되어 있기 때문에 연속적으로 CPU가 인식할 수 있는 기술이 필요!
-> 페이지 테이블을 사용
세그맨테이션
프로세스를 논리적 내용을 기반으로 나눠 배치하는 방식.
-> 프로그램을 구성하는 함수, 프로시저, 서브루틴 등 연관된 기승을 수행하는 모듈로 프로세스를 나눔
세그먼트의 크기가 일정하지 않기 때문에 세그먼트 테이블에는 No, base, limit 세개의 값 존재
CPU에서 해당 세그먼트의 크기를 넘어서는 주소가 들어오면 인터럽트를 발생시켜 프로세스를 강제종료한다.
기주 기억장치를 나누지 않아 내부단편화는 발생하지 않으나 외부단편화 발생
페이징 Vs 세그맨테이션
페이징은 고정분할방식으로 외부단편화를 극복했지만 내부단편화 존재
세그맨테이션은 가변분할방식으로 내부단편화를 극복하기 위한 방법이지만 외부단편화 존재
세그맨테이션은 보호와 공유에서는 성능이 좋지만 사용도 : 세그맨테이션 < 페이징
=> 메모리의 공간을 예측하기 어렵고 최적의 공간을 찾는 알고리즘이 존재하지 않음
=> 따라서 세그먼트를 페이징 기법으로 나누는 Paged Segmentation이 있음. 하지만 주소변환을 2번해야하는 단점 존재.