8-3.[os] 세그먼테이션 기법

  • 가변분할 방식을 이용한 가상메모리 관리 기법
  • 물리 메모리를 프로세스의 크기에 따라 가변적으로 나누어 사용

세그먼테이션 기법의 구현

  • 세그먼테이션 테이블 (segmentation table) = 세그먼테이션 매핑 테이블 (segmentation mapping table)

image.png

  • limit: 세그먼트의 크기를 나타냄
  • address: 물리 메모리상의 시작 주소

  • 프로세스의 크기에 따라 메모리를 분할하기 때문에 매핑 테이블에 크기 정보 를 포함

  • limit:

    • 자신에게 주어진 메모리 영역을 넘어가면 안 되기 때문에 제한을 뜻하는 limit를 사용
    • 메모리를 보호하는 역할
  • 물리 메모리 부족 -> 스왑 영역
  • -> address에 I (Invalid) 표시
  • 장점: 메모리를 프로세스 단위로 관리하기 때문에 *테이블이 작고 단순하다
  • 단점: 물리 메모리의 외부 단편화로 인해 물리 메모리 관리가 복잡하다

세그먼테이션 기법의 주소 변환

  • 가상 주소: VA=〈S, D〉

  • S: 세그먼트 번호 (segment number)

  • D: 세그먼트 시작지점에서 해당주소까지의 거리 (distance) = 0부터 시작하니까 결국 주소가 됨

image.png

예시) 프로세스 A의 32번지에 접근할 때 주소 변환 과정

1.가상 주소를 구한다

  • 프로세스 A는 세그먼트 0으로 분할되었음 -> S는 0, D는 32
  • -> 가상 주소는 VA=〈0,32〉
  1. 세그먼트 테이블에서 시작주소 + 거리 = 물리주소

    • 세그먼테이션 테이블에서 세그먼트 0의 시작 주소를 알아냄
    • 시작 주소 120 + 거리 32 = 물리주소 152번지
    • 메모리 관리자는 거리가 세그먼트의 크기보다 큰지 점검
    • 메모리를 벗어나면 -> 메모리 오류 출력 -> 프로세스 강제 종료
    • 메모리 안이면 -> 물리 주소를 구한다
  2. 물리 주소 152번지에 접근하여 원하는 데이터를 읽거나 쓴다


트랩(trap): 사용자가 세그먼트의 크기(limit) 보다 더 큰 주소에 접근할 때 발생하는 오류

  • 자신의 영역을 벗어나는 주소에 접근하거나 숫자를 0으로 나누는 것과 같이 사용자가 의도치 않게 일으키는 인터럽트

  • 트랩 발생 -> 세그먼테이션 오류(segmentation fault) 메시지


  • ※ 트랩과 반대로 사용자가 강제로 Ctrl+C 키를 눌러 프로세스를 중지시키는 것과 같이 사용자가 의도한 인터럽트를 시그널(signal)이라고 한다. 시그널은 외부 인터럽트중 하나이다.

Did you find this article valuable?

Support Software Engineer at Your Service by becoming a sponsor. Any amount is appreciated!