Segmentation
Page vs Segmentation
- Paging : 프로그램을 구성하는 주소 공간을 같은 크기의 page 단위로 쪼개기
- Segmentation : 프로세스를 구성하는 주소 공간을 의미 단위로 쪼개기
ex) code - data - stack
Segment Table
- 세그먼트 별로 주소변환을 해야 하므로 Segment Table을 가짐
- Segment Table base register(STBR): 물리적 메모리에서 세그먼트 테이블의 시작 주소
- Segment Table limit register(STLR): 세그먼트 테이블의 길이(세그먼트 개수)
Segment Table 엔트리
- base: 물리 메모리의 세그먼트의 시작 주소
- limit: 세그먼트의 길이
주소 변환
- Logical address =
segment number
, offset
CPU가 논리 주소를 제공 (s: segment number, d: offset)
➡️ s < STLR 확인
➡️ 세그먼트 테이블에서 s를 찾아감
➡️ d < limit 확인
➡️ base + d
로 주소 변환
page와 주소변환 시 차이
- page는 정확한 시작 주소가 아니라 몇 번 frame인이지만 필요
- page는 크기가 정해져 있어 limit이 필요 없음
Segmentation 장단점
✅ 장점
- 의미 단위로 분리했기 때문에 효과적
- Protection(보안): 보통 의미 단위로 권한(read/write)을 부여하는데 page에서는 권한 부여가 어려울 수 있음
- Code Sharing(공유): 코드를 공유할 때 의미 단위로 되어 있으므로 유리
❎ 단점
- segment의 크기가 균일하지 않아 hole이 생길 수 있음
Segmentation 특징
- 세그먼트 테이블의 엔트리 개수 = 프로그램이 사용하는 세그먼트의 개수
- page는 일반적으로 개수가 많은 반면에 segment는 사용 개수가 많지 않다
---> 테이블로 인한 메모리 낭비 - page > segment
- 공유 시에는 같은 세그먼트 번호를 가져야 함
Segmentation with Paging
segmentation과 page를 혼합한 방식
- segment를 page 단위로 구성
- hole이 생기는 문제를 해결
- 세그먼트 테이블의 엔트리가 segment의 base 주소가 아닌 segment를 구성하는 페이지 테이블의 base 주소를 가짐
- 세그먼트 당 페이지 테이블이 존재
- 주소 변환 시 두 단계를 거침
CPU에서 논리 주소 제공 |s(number) | d(offset)|
➡️ 세그먼트 테이블을 찾아감(STBR) | segment length | page table base |
➡️ d < segment length 확인
➡️ d를 나눔 |p(number)|d'(page offset)|
➡️ 해당 세그먼트의 페이지 테이블의 시작 위치를 찾음(page table base)
➡️ page table base에서 p 위치에 f (frame number)를 찾음
➡️ f + d'로 변환
참고 링크
반효경 교수님 강의
Segmented Paging