[Operating System] 세그먼테이션

권영태·2025년 5월 6일

Operating System

목록 보기
16/20

세그먼테이션

페이징은 사용자 프로그램과 프로세스 관점의 메모리가 일치하지 않는다.
그래서 프로세스 관점을 지원해 크기가 변할 수 있는 세그먼트로 나누는 세그먼테이션 개념이 등장했다.

비연속 메모리 할당 기법 중 하나로, 논리 영역을 세그먼트의 집합으로 인식하며 동적 분할(가변 분할) 방법으로 메모리를 할당한다.

세그먼트 공유

  • 페이지 테이블의 공유 표시를 하는 페이징과 달리 세그먼트는 공유한다고 선언만 하면 공유된다.

  • 만약 다른 프로세스의 세그먼트 테이블에 있는 항목이라면 동일한 메모리 주소를 지정하기만 해도 공유할 수도 있다.

    • 단, 이 방법은 승인된 사용자만 접근할 수 있도록 보호해야 한다.

페이징 VS 세그먼테이션

  • 분할 방식
    • 페이징: 고정 크기 분할 방식
    • 세그먼테이션: 가변 크기 분할 방식
  • 등장 배경
    • 페이징: 가상 주소 공간 사용을 위한 등장
    • 세그먼테이션: 프로그램과 데이터를 논리적으로 독립된 주소 공간으로 나누고 쉽게 공유·보호하기 위해 등장
  • 장·단점
    • 페이징: 외부 단편화 해결했지만 내부 단편화 발생 가능성
    • 세그먼테이션: 내부 단편화는 해결했지만 외부 단편화 발생 가능성

페이지화된 세그먼테이션

페이징과 세그먼테이션의 장·단점을 취합한 기법으로, 외부 단편화 문제를 제거하고 쉬운 할당 과정으로 거듭난 방법이다.

생각 정리

C/C++ 개발 시 Segmentation Fault 에러를 접할 수 있는데, 이 에러는 세그먼테이션과 어떤 관계일까??

사용자 프로그램이 유효하지 않은 논리 주소에 접근하면 MMU가 H/W 트랩인 Segmentation Fault를 발생시키고 OS가 프로세스를 강제 종료시킨다.
현대 OS는 세그먼트 대신 페이징 기반의 가상 메모리를 쓰는데 과거 세그먼트테이션을 써 예외 이름이 Segmentation Fault였는데 그대로 남아 있는 것이다.


학습하며 정리한 글이기 때문에 혼용된 표현 또는 잘못된 내용이 있을 수 있습니다.
만약, 발견하신 경우 댓글을 통해 알려주신다면 진심으로 감사드립니다.

profile
GitHub : https://github.com/dudxo

0개의 댓글