본문 바로가기
💻 Operating System

Memory Management : 세그먼테이션

by iirin 2023. 2. 20.

세그먼테이션 Segmentation

불연속 할당 방식의 하나
세그먼테이션은 페이징과 달리 프로세스를 물리적 단위인 페이지가 아닌 논리적 단위인 세그먼트로 분할해서 메모리에 적재하는 방식을 말한다.

  • 분할 방식을 제외하면, 페이징과 세그멘테이션이 동일하기 때문에 매핑 테이블의 동작 방식도 동일하다.
    • 가변 분할 다중 프로그래밍에서 이용된 방법과 동일하게 배치되며
    • 일반적으로 최초적합First-fit최적적합Best-fit이 이용된다.
  • 세그멘테이션은 프로세스를 논리적 내용을 기반으로 나눠서 메모리에 배치하는 것을 의미한다.
  • 참고하고자 하는 세그먼트가 주 기억장치에 있으면 프로세스에 의해 계속 실행되며, 현재 주 기억장치에 없으면 보조기억장치로부터 주기억장치로 옮겨온다. 주기억장치에 옮겨지는 세그먼트가 들어갈 만큼의 충분한 공간이 연속적으로 확보되어야 한다.

 

세그먼트 segment

  • 가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것을 의미한다.
  • 논리적 단위가 되는 프로그램 모듈, 자료구조 등
  • 고유한 이름과 길이를 가진다.
  • <segment, offset> 형태로 구성되며, 세그먼트 번호를 통해 세그먼트의 기준 (세그먼트의 시작 물리 주소)와 한계 (세그먼트의 길이)를 파악할 수 있다.
세그먼트 번호 S , 변위 d

가상주소 v = (s,d)
  • 세그먼트는 특정 크기를 갖도록 제안받지 않는다.
    • 배열에 대응되는 세그먼트의 크기 == 배열의 크기
    • 동적 자료구조에 대응되는 세그먼트의 크기 == 자료구조가 가지는 크기

 

순수 세그먼테이션 시스템에서 가상 주소 변환

세그먼트 사상 테이블 항목

  • 세그먼트 부재 결함 segment missing fault
    • 발생원인 : 존재 비트 r을 점검하여 만약 없으면 세그먼트 부재 결함을 발생
    • 대처 : 운영체제가 보조기억장치 주소 a로부터 세그먼트를 적재시킨다.
  • 세그먼트 오브플로우 결함 segment overflow fault
    • 발생 원인 : 세그먼트가 적재되면 변위d가 세그먼트 길이L보다 작거나 같은지 점검하면서 주소 변환하다 d가 L보다 크면 세그먼트 오버플로우 결함 발생
    • 대처 : 운영체제가 그 프로세스에 대한 처리를 종결시킨다.

 

세그먼트의 논리 단위

프로세스를 code 영역, data 영역, stack 영역 등으로 나누는 것 또한 세그먼테이션이라고 할 수 있다.
  • main program
  • procedure
  • function
  • method
  • object
  • stack
  • local variable
  • global variable
  • etc...

 

세그먼트의 공유와 보호

  • 페이징 기법과 비슷하다.

페이징과 세그먼테이션의 차이점은?

외부단편화, 내부단편화와 함께 반드시 미리 정리해두자. 단편화 복습
  • 페이징 : 프로그램을 같은 일정 크기의 페이지로 분할. 외부 단편화를 해결할 수 있지만, 내부단편화가 발생한다.
  • 세그멘테이션 : 논리적 의미를 기준으로 필요한 크기만큼 세그먼트를 분할. 프로세스 크기만큼 할당하므로 내부 단편화는 생기지 않는다. 다만 외부 단편화가 발생한다.

 

세그먼테이션은 페이징보다 보호와 공유 면에서 더 좋은 방법이다.

 세그먼테이션code, data, stack을 논리적으로 나누기 때문에 비트를 설정하기 간단하고 안전하다. 반면 페이징은 각 영역을 무시하고 일정한 크기로 나누기 때문에 영역이 섞여 비트 설정에 까다로워질 수 있다.

 공유할 때도 페이징은 순서가 섞일 가능성이 존재한다.

 

하지만 현재 대부분 페이징 기법을 주로 사용하는데, 그 이유는 세그먼트가 다양한 hole이 발생하는 외부단편화가 있기 때문에 메모리 낭비가 크기 때문이다.