Segmentation
세그먼테이션은 프로그램을 의미 단위로 나눠 배치한다
코드, 데이터, 힙, 스택은 성격과 보호 규칙이 다르다. 세그먼트는 각 단위에 base와 limit을 따로 주어 필요한 곳에 배치한다.
base
세그먼트가 실제 메모리에서 시작하는 위치
limit
해당 세그먼트 안에서 허용되는 길이
권한
읽기, 쓰기, 실행 권한을 세그먼트별로 다르게 둔다.
Text
실행 코드
보통 읽기와 실행만 허용해 코드 변경을 막는다.
Data
전역 데이터
초기값이 있는 전역 변수와 정적 변수를 담는다.
Heap
동적 할당 영역
실행 중 크기가 변하며 조각화 영향을 받기 쉽다.
Stack
호출 기록
함수 호출, 지역 변수, 반환 주소를 관리한다.
관점
장점
주의점
프로그래머 시각
논리 단위가 코드 구조와 잘 맞는다.
세그먼트 번호와 offset을 함께 다뤄야 한다.
보호와 공유
코드 세그먼트 공유나 권한 분리가 자연스럽다.
권한 설정이 잘못되면 보호 경계가 흔들린다.
메모리 배치
각 세그먼트를 빈 공간에 따로 둘 수 있다.
가변 크기 때문에 외부 단편화가 생긴다.
의미 단위
페이지보다 사람에게 보이는 프로그램 구조와 가깝다.
경계 검사
세그먼트마다 limit을 확인해 다른 영역 침범을 막는다.
단편화
서로 다른 크기의 빈 공간이 남아 배치가 어려워질 수 있다.