[운영체제] Memory - Segmentation

Judy·2022년 12월 12일
0

운영체제

목록 보기
12/14

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

profile
iOS Developer

0개의 댓글