Segmentation

세그멘테이션(Segmentation) 기법
가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트(Segment)로 분할
    페이징 기법에서는 가상 메모리를 같은 크기의 블록으로 분할
    ex) x86리얼 모드
        CS(Code Segment), DS(Data Segment), SS(Stack Segment), ES(Extra Segment)로 나눠서, 메모리 접근
참고) 보호모드(80286)이 출시되면서 protection ring에 따라 kernel/user mode가 나누어 지게 되었다.
그래서 기존의 8086, 80186의 소프트웨어가 구동이 불가능하게 됨.
이를 실행하기 위한 모드가 ‘리얼모드’ 이다.
메모리 공간을 최대 1GB 사용할 수 있으며, CS, DS ,SS ,ES로 세스먼트를 나누어서 메모리에 접근한다.
세그먼트 가상주소
v=(s, d): s는 세그먼트 번호, d는 블록 내 세그먼트의 변위
(페이징 시스템과 거의 유사한 방식으로 virtual memory와 physical memory를 계산)
세그멘테이션 기법은 크기가 다른 segment 단위로 물리 메모리에 로딩한다.

참고)
문제점
내부 단편화(페이지 기법)
    페이지 블록만큼 데이터가 딱 맞게 채워져 있지 않을 때, 공간 낭비
외부 단편화(세그멘테이션 기법)
    물리 메모리가 원하는 연속된 크기의 메모리를 제공해주지 못하는 경우
    (메모리의 사이의 공간이 애매하게 있을 경우)
세그멘테이션/페이징 모두 하드웨어 지원 필요
    다양한 컴퓨터 시스템에 이식성을 중요시하는 리눅스는 페이징 기법을 기반으로 구현
    CPU중 세그멘테이션을 지원하지 않는 모델이 존재하기 때문에 페이징을 기반으로 구현