[운영체제-양희재 교수님]22강 세그멘테이션
세그멘테이션(Segmentation)
- 프로세스를 논리적 내용으로 잘라서 메모리에 배치
- 세그멘트(segment) = 프로세스를 어떤 의미를 담은 논리적 내용으로 자른 것
- 일반적으로 세그멘트의 크기는 같지 않음
- MMU 내의 재배치 레지스터 값을 변경 ⇒ CPU는 프로세스가 연속된 메모리 공간에 위치한다고 착각
- 이때 MMU는 세그멘트 테이블(segment table)
주소 변환(Address Translation)
- 논리주소(Logical address)
- CPU가 내는 주소 = segment 번호(s) + 변위(d)
- 논리주소 → 물리주소(Physical address) 변환
- 세그멘트 테이블 내용 = base + limit
- limit을 넘어서는 경우 ⇒ segment violation ⇒ 인터럽트 발생
- 세그멘트 번호(s) ⇒ 세그멘트 테이블 인덱스 값
- 해당 테이블 인덱스 값의 테이블 내용으로 시작 위치 및 한계값 파악
- 물리주소 = base[s] + d
- 세그멘트 테이블 내용 = base + limit
보호와 공유
- 보호(Protection)
- 모든 주소는 세그멘트 테이블을 경유 ⇒ 세그멘트 테이블 엔트리마다 r, w, x 비트를 두어 접근 제어 가능
- 해킹 등 방지 가능
- 페이징은 페이지에 여러 영역이 섞일 수 있어 r, w, x 비트를 설정하기 어렵다.
- 예를 들어 한 페이지 안에 code와 data가 섞여 있으면 r, w, x 비트를 설정하기 어렵다.
- 따라서 보호 면에선 페이징보다 세그멘테이션이 우월하다.
- 공유(Sharing)
- 같은 프로그램을 쓰는 복수 개의 프로세스가 있다면 code는 공유 가능 ⇒ 프로세스의 세그멘트 테이블 코드 영역이 같은 곳을 가리키게 한다.
- 단, non-self- modifying code(reentrant code, pure code)인 경우에만 가능
- 메모리 낭비 방지 가능
- 세그멘테이션은 논리적으로 자르기 때문에 더 쉽게 영역을 공유할 수 있다.
- 따라서 공유 면에선 페이징보다 세그멘테이션이 우월하다.
외부 단편화(External Fragmentation)
- 세그멘트 크기 가변적 ⇒ 동적 메모리 할당 필요 ⇒ 외부 단편화 발생
- first-fit, best-fit, worst-fit, compaction 등의 문제 다시 등장
세그멘테이션 + 페이징
- 세그멘테이션은 보호와 공유 면에서 효과적 + 페이징은 외부 단편화 문제를 해결
- 따라서 세그멘트를 페이징 ⇒ Paged segmentation
- 프로세스를 세그먼트로 자르고 세그먼트를 다시 페이지로 자름
- 예) Intel 80x86
- 세그멘테이션 테이블과 페이징 테이블을 둘 다 거쳐야 하므로 주소 변환 속도가 더 느림
This post is licensed under CC BY 4.0 by the author.