메모리관리 관련 글입니다! 전 포스팅을 참고해주세요😀
가상 메모리를 논리적 단위인 세그먼트로 분할하고 메모리를 할당하는 기술
이 기술은 (프로세스 = 세그먼트 * n)의 관점에서 바라봅니다. 프로세스를 code + data + stack으로 바라보는 것은 하나의 세그멘테이션 기술인데요, 이 세그먼트들을 더 나누자는 것이죠.
내부 단편화를 해결하는 방법입니다. 프로세스를 고정크기가 아닌 논리적 단위로 나눠 프로세스 내부에 Hole이 생기지 않도록 하는 기술입니다.
프로세스를 나누는 것을 제외하고는 페이징과 같습니다. 매핑 시 세그먼트 테이블을 사용합니다.
세그먼트의 크기가 가변적이라 외부단편화가 발생할 수 있습니다. 이 외부단편화는 큰 메모리낭비를 발생시킵니다. 이를 해결하기 위해 세그멘테이션을 단독으로 사용하지 않고 "세그먼트를 페이징"하는 방식을 사용합니다.
① 프로세스를 세그먼트 단위로 자름 (Segmentation)
② 세그먼트를 다시 일정 크기의 페이지로 자름 (Paging)
👉 외부단편화가 발생하지 않습니다. 하지만, 세그먼트 테이블과 페이지 테이블 둘 다 거치게 되어 속도면에서 단점을 갖게됩니다.