1. 세그멘테이션 시스템(Segmentation System)

  • 프로그램을 논리적인 단위로 분할(segment)하는 방식
  • 블록의 크기가 서로 다를 수 있음

  • 고정크기로 분할하는 방식이 아니기때문에 메모리를 미리 분할해둘 수 없음
    => 가변 분할 방식(Variable Partition Multi-Programming)과 유사

  • 가변 분할 방식과 마찬가지로 내부 단편화는 발생하지 않으나 외부 단편화는 발생할 수 있음

  • 페이징 시스템에 비해 주소 매핑과 메모리관리의 오버헤드가 큼
  • 프로그램의 논리적 흐름을 고려한 분할방식이기에 블록(세그먼트)의 공유, 보호가 쉬움

 

 

2. 주소 매핑(Address Mapping)

  • (segment number, offset) 의 쌍으로 이루어진 가상 주소를 사용

  • SMT(Segment Map Table)을 사용하여 가상주소를 실제주소에 매핑

  • SMT에서는 세그먼트가 메모리에 적재되어있는지 여부를 나타내는 residence bit와 
    swap device 상의 어느 위치에 저장되어있는지를 나타내는 secondary storage address(= 실제주소),
    메모리상의 주소(segment address in memory), 세그먼트의 길이(segment legnth)
    세그먼트 보호를 위한 protection bits 등의 값을 관리한다.

  • 프레임 번호만 알면 실제 메모리에서의 위치를 알 수 있었던 페이징 시스템과 달리 세그먼트의 길이가
    서로 다르기 때문에 segment length 가 추가적으로 필요해진다.

  • 페이징 시스템에서는 페이지가 논리적으로 분할된 블록이 아니기에 protections bits를 사용한 권한 관리가
    복잡했지만 세그멘테이션 시스템의 경우 한 블록이 하나의 논리적인 단위이기에 세그먼트 단위로 권한을 
    관리할 수 있어 세그먼트 보호가 훨씬 용이해진다.

  • 주소 변환 과정
    • SMT의 시작주소가 b이고 세그먼트 번호는 s, offset은 d 일 때

    • SMT에 접근하여 세그먼트(s)의 엔트리 위치를 탐색(b + (entry_size * s)

    • 해당 세그먼트의 residence bit를 체크, 메모리에 적재되지 않은 상태라면 segment fault가
      발생하고 페이징 시스템의 page fault 때와 마찬가지로 커널에 요청하여 세그먼트를 메모리에 적재

    • offset(d) 이 세그먼트의 범위를 벗어나는 경우 overflow 가 발생, 이를 처리하는 루틴을 거침 
    • protection bits 를 체크하여 허용되지 않은 연산을 시도할 경우 예외가 발생, 이를 처리하는 루틴을 거침

    • 문제가 없다면 실제 주소(r = entry_address + d)를 계산하여 메모리에 접근

 

 

3. 세그멘테이션 시스템의 메모리 관리

  • 페이징 시스템이 FPM과 유사했듯이 세그멘테이션 시스템은 VPM과 유사한 방식으로 메모리를 관리

  • 세그먼트 적재시 크기에 맞춰 메모리를 분할하여 적재, Partition Table을 통해 이를 관리한다.

  • 파티션 테이블(Partition Table)
    • 페이징 시스템의 프레임 테이블에 대응하는 메모리 관리를 위한 테이블

    • 시작 주소(start address)
      • 파티션의 시작 주소

    • 크기(size)
      • 파티션의 크기

    • PID(Process ID)
      • 해당 파티션을 사용중인 프로세스의 ID

    • 세그먼트 번호(segment number)
      • 해당 파티션에 적재된 세그먼트의 번호

    • 기억장치 접근권한(storage protection key)
      • 해당 파티션에 대한 접근 권한 정보

  • 세그먼트 공유(Segment Sharing)
    • 페이징 시스템의 경우 페이지가 논리적 단위가 아니기 때문에 특정 페이지에서 branch(=jump)가
      발생할 경우 프로세스에 따라 목적지 주소가 달라져야하는 모호한 경우가 생길 수 있었으며
      이를 공유하는 페이지에 대한 정보는 PMT의 같은 엔트리에 저장하는 등의 방식으로 해결하였음

    • 세그먼트의 경우 애초에 논리적인 단위로 프로그램을 분할하였기에 jump가 세그먼트 내에서 발생하므로
      이러한 문제가 발생할 일이 없어 세그먼트 공유가 용이함

  • 세그먼트 보호(Segment Protection)
    • 페이징 시스템의 경우 하나의 페이지가 하나의 논리적 흐름을 가지는 것이 아니기에 페이지 보호가 복잡했음

    • 세그멘테이션 시스템의 경우 하나의 세그먼트는 하나의 논리적 단위이기에 세그먼트 단위로 protection bits를 
      적용하는 것만으로 간단하게 세그먼트 보호가 가능해짐

+ Recent posts