이 포스팅은 Operating Systems: Three Easy Pieces, Remzi H. Arpaci-Dusseau & Andrea C. Arpaci-Dusseau을 읽고 개인 학습용으로 정리한 글입니다.
스택과 힙 사이 공간 사용되지 않더라도 주소 공간을 물리 베모리에 재배치할 때 물리 메모리를 차지한다
-> 메모리 낭비가 심하다
또한, 주소 공간이 물리 메모리보다 큰 경우 실행이 매우 어렵다
MMU안에 주소 공간의 논리적인 세그멘트(segment)마다 베이스와 바운드 쌍 존재
세그멘트: 특정 길이를 가지는 연속적인 주소 공간
-> 주소 공간에는 세 종류의 세그멘트 존재: 코드, 스택, 힙
세그멘테이션을 사용하면 운영체제는 각 세그멘트를 물리 메모리의 각기 다른 위치에 배치 가능
사용되지 않는 가상의 주소공간이 물리 메모리를 차지하는 것 방지
하드웨어는 가상 주소가 어느 세그멘트를 참고하는지, 그 세그멘트 안에서 오프셋은 얼마인지를 어떻게 알 수 있는가?
일반적인 접근법: 가상 주소의 최상위 몇 비트를 기준으로 주소 공간을 여러 세그멘트로 나누는 것
주소 공간을 3개의 세그멘트로 나누기 위해서는 2비트가 필요
-> 최상위 2비트: 하드웨어에게 참조하는 세그멘트의 종류 알려줌
-> 하위 12비트: 세그멘트 내의 오프셋
최상위 2비트 00: 코드 세그멘트
최상위 2비트 01: 힙 세그멘트
최상위 2비트 10: 스택 세그멘트