세그먼테이션이란 무엇인가요?
메모리를 서로 크기가 다른 논리적인 블록 단위인 세그먼트(
segment)로 분할하고 메모리를 할당하여 물리 주소를 논리 주소로 변환하는 것을 말한다.미리 분할하는 것이 아니라 사용할 시점에 할당된다.
내부 단편화는 없지만 외부 단편화가 발생할 수 있다.
세그먼테이션과 페이징을 비교해 주세요.
세그먼테이션은 페이징보다 보호와 공유 면에서 더 낫다.
세그먼테이션은
read,write,execute권한을 테이블에 추가하는데, 이때 이것을 논리적으로 나누기 때문에 해당 비트를 설정하기 간단하고 안전하다.반면 페이징은
Code + Data + Stack영역이 존재할 때 이를 일정한 크기로 나누기 때문에 영역이 섞여 비트를 설정하기 까다로워 질 수 있다.공유 면에서도 마찬가지로, 페이징은 영역과 섞일 가능성이 존재하지만, 세그먼테이션은 정확히 영역을 나누므로 더 효율적으로 공유를 할 수 있다.
현재 대부분은 세그먼테이션보다 페이징 기법을 많이 사용한다.
왜냐하면, 세그먼테이션의 세그먼트 크기가 일정하지 않고 다양하기 때문이다.
세그먼트의 크기가 다양하기 때문에 다양한
hole이 발생해 외부 단편화가 발생하여 메모리 낭비가 크게 된다.
참고
Last updated