프로그램의 논리적 구분에 따라 프로그램의 메모리를 여러 세그먼트로 나누는 메모리 관리 기법이다.
- 프로세스를 가변 크기의 논리적 세그먼트로 나눈다.
- 각 부분은 함수나 배열과 같은 프로그램 단위를 나타냅니다.
- 주소 변환에 세그먼트 테이블을 사용합니다.
- 서로 다른 세그먼트는 접근 권한(읽기, 쓰기, 실행)을 가질 수 있으며 프로세스 간에 공유될 수 있다.
NOTE
세그멘트는 논리적인 단위로 분할하기에 각 요소들에게 권한을 주기에 용이하다.
세그멘테이션을 통해 각 세그멘트에 서로 다른 보호 수준을 적용하여 이를 보장할 수 있다.
프로세스를 code, data, stack, heap 영역으로 나누는 것 또한 세그멘테이션이라고 할 수 있다.
한계점
그러나 아래와 같은 한계점으로 인해 페이징 기법이 더 많이 사용된다.
- 세그먼트의 크기는 일정하지 않기에 다양한 Hole이 발생하여 외부 단편화가 발생한다.
- 가변 크기 세그먼트 관리는 고정 크기 페이지 관리보다 더 복잡할 수 있기에 추가적인 오버헤드가 발생할 수 있다.
- 각 세그먼트에는 크기 제한이 있으며, 이로 인해 특정 세그먼트에 할당할 수 있는 메모리 양이 제한될 수 있다.
