6.2. Segmentation system

김민우·2022년 6월 4일
0

운영체제

목록 보기
11/14

📌Segmentation system

Segmentaion의 개념과 특징은 아래와 같다.

  • Segmentation : 프로그램을 논리적 block으로 분할 (segment)
    - Block의 크기가 서로 다를 수 있음
    - ex. stack, heap, main procedure, shared lib, etc.

  • 특징
    - 메모리를 미리 분할 하지 않음 (VPM과 유사)
    - Segment sharing/protection이 용이 함
    - Address mapping 및 메모리 관리의 overhead가 큼
    - 내부 단편화는 없으나 외부 단편화 발생 가능

Segmentation은 스택과 힙 사이에 빈 영역이 크게 존재하는 주소 공간을 해결하기 위해 탄생한 아이디어이다.
MMU(Memory management unit)에 하나의 베이스와 바운드값이 존재하는 것이 아니라 세그먼트마다 베이스와 바운드 값이 존재한다.
Segmentation을 사용하면 운영체제는 각 세그멘트를 물리 메모리의 각기 다른 위치에 배치할 수 있고, 사용되지 않는 가상 주소 공간이 물리 메모리를 차지하는 것을 방지할 수 있다.

❓Segment Fault?
Segment Fault는 세그멘트 사용 시스템에서 잘못된 주소 접근 시에 발생한다.
이 용어는 세그멘트에 대한 지원이 전혀 없는 컴퓨터에서도 사용되며, 코드의 오류 원인을 알 수도 없다.


Address mapping

  • Virtual address: v = (s, d)
    - s : segment number
    - d : displacement in a segment (offset)
  • Segment Map Table (SMT)
  • Address mapping mechanism (Paging system과 유사)

📖 Address mapping의 순서

  1. 프로세스의 SMT가 저장되어 있는 주소 b에 접근

  2. SMT에서 segment s의 entry를 찾음

    • s의 entry 위치 = b + (s * entrySize)
  3. 찾아진 Entry에 대해 다음 단계들을 순차적으로 실행
    3.1 존재 비트가 0인 경우, (memory가 없음)
    // missing 'segment fault'
    swap device로 부터 해당 segment를 메모리로 적재 하고 SMT를 갱신

    3.2 변위(d)가 segment 길이보다 큰 경우 (d > ls)
    segment overflow exception 처리 모듈을 호출

    3.3 허가되지 않은 연산일 경우 (protection bit field) 검사,
    segment protection exception 처리 모듈을 호출

  4. 실제 주소 r 계산 (r = as + d)

  5. r로 메모리에 접근


Memory management

  • VPM과 유사
    - Segment 적재 시, 크기에 맞추어 분할 후 적재


Segment sharing/protection

  • Segmentation system은 segment가 논리적으로 분할되어 있어, 공유 및 보호가 용이함

Segmentation System - Summary

  • 프로그램을 논리 단위로 분할 (segment) / 메모리를 동적으로 분할
    - 내부 단편화 문제 없음
    - Segment sharing/protection이 용이함
    - Paging system에 비해 관리 overhead가 더 큼

  • 필요한 Segment만 메모리에 적재하여 사용하기 때문에 메모리의 효율적 활용이 가능

  • Segment mapping overhead 존재
    - 메모리 공간 및 추가적인 메모리 접근이 필요
    - 전용 HW 활용으로 해결 가능

Pros

Segmentation은 많은 문제를 해결하며, 메모리 가상화를 효과적으로 실현할 수 있다.
단순한 동적 재배치를 넘어 Segmentation은 주소 공간 상의 논리 세그멘트 사이의 큰 공간에 대한 낭비를 피함으로써 드문드문 사용되는 주소 공간을 지원할 수 있다.

세그멘테이션에 필요한 산술 연산은 쉽고 HW 구현에 적합하기 때문에 속도가 빠르다.
변환 오버헤드도 최소이다. 코드 공유의 장점도 부가적으로 발생한다.
코드가 별도의 세그멘트에 존재한다면 그러한 코드는 실행 중인 여러 프로그램 사이에서 공유될 수 있다.

Cons

세그멘트의 크기가 일정하지 않기 때문에 몇 가지 문제가 발생한다.

첫 번째는 외부 단편화이다.
세그멘트는 가변 크기이기 때문에 빈 공간들의 크기 역시 모두 다르며 메모리 할당 요청을 충족시키는 것이 어려울 수 있다.
(물론 주기적으로 메모리를 압축할 수는 있지만, 외부 단편화 문제는 가변 길이 할당의 태생적인 문제이기에 회피하기가 어렵다.)

두 번째는 Segmentation이 아직 일반적인 드문드문 사용되는 주소 공간을 지원할 만큼 충분히 유연하지 못하다는 것이다.
예를 들어, 크기가 크지만 드문드문 사용되는 힙이 하나의 논리적인 세그멘트에 배정되어 있다고 할 때 이 힙에 접근하기 위해서는 힙 전체가 여전히 물리 메모리에 존재해야 한다.
다시 말해서, 주소 공간이 사용되는 모델과 이를 지원하기 위한 세그멘테이션의 설계 방법이 정확히 일치하지 않는다면, 세그멘테이션은 제대로 동작하지 않는다.


Paging Vs. Segmentation

profile
Pay it forward.

0개의 댓글