Computer Science/Operating System

[OS] 16장: Segmentation

kyxxn 2024. 6. 28. 01:28
728x90

16장: Segmentation

개요

세그먼트 = 임의의 길이의 연속된 주소 공간
여기서는 Code, Heap, Stack을 세그먼트라 침
주소변환 - 세그먼트 테이블

  • 물리 공간에 배치할 때, 세그먼트 단위로 배치함

    • 즉, 세그먼트마다 Base/Bounds 레지스터 필요

      → 일반화 Base/Bounds 기법

  • 하나의 프로세스는 여러 개의 세그먼트로 구성됨

세그먼트 주소 변환

물리주소 = OffSet + Base

OffSet = 세그먼트 내에서의 위치

가상 주소 공간에서 코드,힙,스택 별로 세그먼트가 있는데

그 세그먼트 시작 지점에서의 위치로 Offset을 따짐

Heap 주소 인코딩

4200 번지의 세그먼트에서 인코딩하기

4200 = 4096 + 104

⇒ 01 | 0000 0110 1000

Stack 주소 인코딩 (반대)

스택은 거꾸로 자라기 때문에,
추가 하드웨어가 필요함

세그먼트의 주소 증가 방향을 표시해줘야 함

  • 1이면 긍정적 (아래로)
  • 0이면 부정적 (위로)

Offset 계산

Offset - 최대 세그먼트 크기

ex) 15K 번지 = 11 1100 0000 0000

  • 세그먼트 = 11
  • offset = 1100 0000 0000 (3KB)
  • 방향 = 0 (스택, 위로)

물리주소 = 28K + (3K - 4K) = 27K

공유 지원

프로세스들이 세그먼트를 공유할 수 있음
보호비트 필요 (접근 권한 표시)

퀴즈

  1. Segment는 무엇인가 ?
    = 11
  2. Offset은 무엇인가 ?
    14KB = 14 * 1KB = 2^4 + 2^10 = 11 1000 0000 0000
    2K 임
  3. Direction은 어떻게 되는가 ?
    위로 진행 = Negative
  4. 물리 주소는 어떻게 되는가 ?
    28K + 2K - 4K = 26K

세그먼트 문제점

  • 잦은 할당과 회수로 인해 외부 단편화 발생

    → 압축을 통해 해결 가능