스택과 힙 사이에 사용하지 않는 공간이 있다. 베이스 - 바운드 레지스터 방식은 메모리 낭비가 심하다. 또한, 주소공간이 물리 메모리보다 큰 경우 실행이 어렵다. -> 유연성이 없어버령
---> 세그멘테이션 등장.
한 개의 베이스와 바운드 쌍이 존재하는 것이 아니라, 주소 공간의 논리적인 세그멘트마다 베이스와 바운드 쌍이 존재하게 한다. 여기서 세그멘트란 특정 길이를 가지는 연속적인 주소 공간을 의미한다. 코드 , 힙, 스택 세 종류의 세그먼트가 있다.
세그멘테이션을 사용하면 운영체제는 각 세그멘트를 물리 메모리의 각기 다른 위치에 배치할 수 있다.
세그멘테이션에서 중요한 키워드이다.
이 세그멘트 시작으로 몇 번째 바이트인가??를 의미한다.
세그멘트| 베이스 |크기
코드 | 32KB | 2KB
힙 | 34KB | 2KB
스택 | 34KB | 2KB
가상주소 4200은 어떻게 물리 메모리에 맵핑될까? offset을 이용한다!
virtual address start point - virtual address = offset
힙은 4KB에서 시작한다.
4096 - 4200 = 104! 104가 offset이 된다.
physcial address = base + offset
물리 메모리 주소는 34KB + 104 가된다.