16. 세그멘테이션

이주희·2022년 10월 27일
0

OS

목록 보기
10/17

세그멘테이션

베이스-바운드 레지스터 방식은 메모리 낭비가 심함
-> 세그멘테이션 탄생

MMU에 하나의 베이스와 바운드 값이 존재하는 것이 아니라 세그멘트 마다 베이스와 바운드 값이 존재
세그멘트 : 특정 길이를 가지는 연속적인 주소공간
세그멘테이션을 사용해서 각 세그먼트를 물리 메모리의 각기 다른 위치에 배치 가능
사용되지 않는 가상 주소 공간이 물리 메모리를 차지하는 것을 방지할 수 있음

세그멘트 종류 파악

하드웨어는 변환을 위해 세그먼트 레지스터 사용
가상주소의 최상위 비트를 세그멘트 종류를 나타내는 비트로 사용!
하위 비트는 세그멘트 내의 오프셋

ex) 세그먼트 비트가 00이라면 코드 영역임을 알고 코드 세그멘트의 베이스와 바운드 쌍을 이용하여 주소를 물리 메모리에 재배치함

공유 지원

하드웨어에 protection bit 추가 필요

세그멘트마다 읽거나 쓸 수 있는지 나타냄

소단위 대단위

소수의 세그멘트 ( 코드, 스택, 힙)만 지원하는 시스템 -> 대단위
주소공간을 작은 크기의 공간으로 잘게 나누는 것이 허용 -> 소단위

운영체제의 지원

문제
1. 문맥교환
세그멘트 레지스터의 저장과 복원이 필수
2. 세그멘트 크기의 변경
3. 미사용중인 물리메모리 관리
물리메모리가 빠르게 작은 빈 공간들로 채워진다면(외부 단편화) -> compact 필요
연산이 많이 필요하다...

해결법
빈 공간 관리 알고리즘 사용 -> 할당가능한 메모리 영역들을 리스트 형태로 유지

  • first fit
  • worst fit
  • best fit
  • buddy algorithm

0개의 댓글