OS : 16. 세그멘테이션

TechN0·2025년 2월 14일

베이스 바운드 레지스터 사용 시그림과 같이

스택 - 힙 사이 공간은 사용되지 않아도 주소 공간을 재배치 할 때 물리 메모리를 차지함

  • 이 방법은 메모리 낭비 심함
  • 주소 공간이 물리 메모리보다 큰 경우 실행 어렵스

19.1 세그멘테이션: 베이스/바운드(base/bound)의 일반화 정상화

위 문제를 해결하기 위해 탄생한 아이디어

  • 세그멘테이션: MMU안에 오직 하나의 베이스&파운드 쌍이 존재하는 것이 아닌 주소 공간의 논리적인 세그먼트 마다 베이스와 바운드 쌍이 존재

  • 세그멘트: 특정 길이를 가지는 연속적인 주소 공간

기준으로 삼은 주소 공간에는 코드, 스택, 힙 이 세 가지의 세그먼트 존재

  • 세그먼 테이션 사용시 OS는 각 세그먼트를 물리 메모리의 각기 다른 위치에 배치 가능(연속일 필요가 없다는 )
  • 사용되지 않는 가상주소의 물리 메모리 차지 방지

  • 잘못된 메모리 접근이 있으면 세그먼테이션 폴트가 발생함

19.2 세그멘트 종류의 파악

HW는 가상주소가 어느 세그멘트를 참조하는지, 세그멘트 안에서 오프셋은 얼마인지 어떻개 알까?

일반적인 접근법은 가상 주소의 최상이 몇 비트를 기준으로 주소 공간을 여러 세그먼트로 나눔

위의 예시에서는 세그먼트가 3개

주소공간을 세그먼트로 나누기 위해 2비트 필요

00이면 코드

01이면 힙

이런 식으로

가상 주소 4200을 변환해보면 아래와 같음

01이니 힙

0000 0110 1000 는 104

19.3 스택

스택은 다른 세그멘트와 다르게 반대 방향으로 확장

베이스가 10이고 바운드가 4면

끝이 14가 아니라 6임

증가 방향을 0/1로 설정해줘야

19.4 공유 지원

  • 메모리 절약을 위해 때로 주소 공간들 간 특정 메모리 세그먼트를 공유하는게 유용
  • 공유를 지원하기 위해 세그멘트마다 protection bit 를 주가해 세그멘트를 읽기/쓰기/실행 가능을 나타냄

16.6 운영체제의 지원

  1. 문맥교환시 세그먼트 레지스터를 저장하고 복원해야 함
  2. 미사용중인 메모리 관리
    • 새로운 주소 공간 생성 시 OS는 이 세그멘트를 위한 적절한 물리 메모리 영역을 찾을수 있어야 함
    • 물리 메모리가 빠르게 작은 크기의 빈 공간으로 채워질 수 있는데 이때 외부 단편화 발생

문제 해결

  • 기존 세그멘트를 정리하여 물리 메모리를 압축
  • 빈 공간 관리 알고리즘
    • 최적 적합
    • 최악 적합
    • 최초 적합
    • 버디 알고리즘

0개의 댓글