[OS] - Virtual Memory - Segmentation System

오동훈·2021년 4월 16일
0

Operating System

목록 보기
7/16

1. Segmentation System

  • 프로그램을 논리적 Block으로 분할 (segment)
    - Block의 크기가 서로 다를 수 있음
    ex) stack, heap, main procedure, shared lib, Etc
  • 특징
    - 메모리를 미리 분할 하지 않음
    VPM과 유사
    - Segment sharing / Protection이 용이함
    - Address mapping 및 메모리 관리의 overhead가 큼
    - No internal fragmentation (내부 단편화 X)
    - External fragmentation (외부 단편화) 발생 가능
  • 내부 단편화 - 프로세스를 적재한 뒤, 메모리안에 작은 빈공간들을 내부 단편화라고 얘기합니다.
  • 외부 단편화 - 메모리가 할당되고 해제되는 작업이 반복될 때, 작은 메모리가 중간중간 존재하게 됩니다. 이때 중간중간 사용하지 않는 메모리가 존재해서 총 메모리는 충분하나 실제로 할당할 수 없는 상황을 얘기합니다.

1.1 Address mapping

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

1. Segment Map Table(SMT)

2. Address Mapping(Direct Mapping)

  1. 프로세스의 SMT가 저장되어 있는 주소 b에 접근
  2. SMT에서 Segment s의 entry를 찾기
    - s의 entry 위치 = b + s * entrySize
  3. 찾아진 entry에 대해 다음 단계들을 순차적으로 실행
    1). 존재 비트가 0인 경우 // segment fault
    swap device로 부터 해당 segment를 메모리로 적재 및 SMT를 갱신
    2). 변위(d)가 segment 길이보다 큰 경우(d > l(s)) // segment overflow
    segment overflow exception 처리 모듈을 호출
    3). 허가되지 않은 연산일 경우, (Protection bit field 검사)
    segment protection exception 처리 모듈을 호출
  4. 실제 주소 r 계산 (r = a(s) + d)
  5. r로 메모리에 접근

2. Summary

  • 프로그램을 논리 단위로 분할 / 메모리를 동적으로 분할
    - 내부 단편화 문제 없음
    - segment sharing / protection이 용이함
    - paging system 대비 관리 overhead가 큼
  • 필요한 segment만 메모리에 적재하여 사용
  • segment mapping overhead
    - 메모리공간 및 추가적인 메모리 접근이 필요
    - 전용 H/W 활용으로 해결 가능

지금까지의 내용은 HPC Lab의 강의와 자료를 참조했습니다

profile
삽질의 기록들🐥

0개의 댓글