Segmentation

누디·2022년 10월 23일
0

OS

목록 보기
2/5

Segmentation

  • 대규모의 가상 주소 공간을 어떻게 지원하는가?
  • 어떻게 효율적으로 수행할 것인가?
  • 보호를 어떻게 할 수 있는가?
  • 세그먼트(segment)를 관리하는 방법은?

📌From logical to physical address

스크린샷 2022-06-11 오전 5.09.06.png

✔️ Faulty addressing

스크린샷 2022-06-11 오전 5.11.40.png

📌 주소공간을 관리해야 하는 이유

  • Limited physical memory space vs. extensive virtual memory space
    • Virtual memory는 프로세스가 자유롭게 사용할 수 있는 virtual address space를 제공
    • 그러나, 실제 물리 메모리의 용량은 충분하지 않을 수있음
  • Extended (or multi-dimensional) virtual memory
    • Address space 공간은 상위 구조를 가질 수 있음 • e.g.가상머신,보안을위한영역등
    • 그러나, 결국 linear address로 표현되어야 하고, 실제 저장된 물리 메모리 위치와 매핑되어야 함.
  • Memory allocation/release is not easy
    • OS 관점에서 다수의 프로세스들이 빈번한 메모리 할당/해제를 수행
    • 잦은 할당과 해제는 메모리 공간 내의 internal or external fragmentation 문제를 야기
    • 특히 한정된 물리 메모리를 위해 효율적인 여유메모리(free memory) 관리가 필요

📌MMU and Virtual memory

  • Memory management unit (MMU)
    • CPU 패키지 내에 존재
    • 메인 메모리 또는 장치 메모리 접근을 위한 물리 주소 변환을 담당함
    • CPU가 Load/Store 명령에서 사용하는 Virtual address (VA)들을 최종적인 physical address (PA)로 address translation 하기 위해서 별도의 주소 변환 테이블을 사용
    • 그 위치는?
      • 메인 메모리
      • E.g. Intel IA-32, 64의 global descriptor table (GDT) or 여러 종류의 page table들

스크린샷 2022-06-11 오전 5.19.01.png

📌Allocating a logical memory to an address space

스크린샷 2022-06-11 오전 5.21.49.png

스크린샷 2022-06-11 오전 5.22.02.png

  • 가정: Address space = a single memory chunk
    • 프로세스 마다 주어진 logical memory로 간주
    • 예) Base = Address space의 시작 주소, Limit = Address space의 끝 주소
  • 그러나, code, data는 생각보다 크지 않음
  • e.g. Linux kernel도 수 MB에서 수십 MB 단위
  • 나머지 영역에서 큰 부분을 차지하는 heap과 stack 영역이 늘 실제 메모리를 차지하고 있어야 한다면 ? -낭비다! 다수의 프로세스가 공존하는 경우, 여유 메모리 공간 (free address space)을 효율적으로 관리 해야 함
  • 즉, Address space 전체를 하나의 logical memory로 간주하고 관리하는 것은 매우 비 효율적

📌Segmentation

  • 의미
    • Address space를 다수로 분할하여 관리
    • 각 분할 영역에 대해 확장된 속성을 부여 가능 • 보호 설정, 실행/쓰기/읽기 권한, 공유 등
  • Segment
    • 분할된 각각의 메모리 단위를 의미
    • 세그먼트 안에서 연속된 메모리 주소를 사용
    • 기존 logical memory의 확장
      • base, limits (or bounds) + 확장된 필드들
      • 보호레벨,접근/실행권한비트등
    • 세그먼트의 수 ∝ 분할 정도
    • 많아질 경우, 유지 비용이 증가

📌Segmentation에서 보호가 필요한 이유

  • 하나의 가상 주소 공간만 주어지면?
    • 프로그램 실행 중에 얼마든지 다른 공간을 침범 할 수 있음
  • 동적 자료구조의 사용에 따라서 증가
  • 트리 노드를 계속 추가.
  • 테이블의 엔트리가 증가.
  • Stack push -Heap에서 새로운 메모리 할당
  • 침범한 메모리 영역에 민감 데이터가 존재하면?
    • 프로그램의 정상 실행이 불가

📌Segmentatino을 H/W로 구현하는 방법

  • 메인 메모리 내 세그먼트 테이블 (segment table)을 두어 관리함
    • MMU가 세그먼트 레지스터들을 직접 사용
      • STBR := Segment table base 주소 적재
      • STLR := Segment table length를 적재
    • STBR과 STLR로 올바른 세그먼트 번호를 구분 가능 -잘못된 세그먼트 번호의 경우?
      예외 발생 (Segmentation violation or fault)
    • 세그먼트의 수 ∝ 세그먼트테이블엔트리수

스크린샷 2022-06-11 오전 5.28.29.png

  • 메모리 참조
  • Base 주소가 아니라, Segment 번호를 사용.
  • 세그먼트 내 특정 위치는 offset 값으로 참조
    예) 2비트 세그먼트 번호, 12비트 오프셋인, 14비트 세그멘테이션의 VA 4200 (0x1068)은?

📌Direction bit in Segmentation

  • Heap이나 일반적인 메모리 주소의 성장 방향?
    • 낮은 주소(low address)에서 상위(high address)로 성장
  • Stack은?
    • 상위 주소에서 낮은 주소로 성장
  • Segmentation에서 이 차이를 표현하는 방법은?
    • direction bit
      • 1 = positive, 0 = negative
  • (질문) 왜 필요할까?
    • 경계 체크 : 다음load&store할주소의구분이필요(더낮은주소?더높은주소?)

📌Sharing in Segmentation

  • 프로그램 메모리의 일부를 공유할 수 있다면 많은 이점이 존재
  • 여러 프로그램 간의 효율적 데이터 교환 -라이브러리 등에서 필요한 프로그램 코드의 재활용 등
  • Segmentation에서는 protection bit를 통해 제한적인 Segment 공유가 가능
    • 읽기, 쓰기, 실행의 권한 조합을 통해 해당 권한이 있는 프로세스는 공유가 가능해짐
    • 보통 코드는 읽기 및 실행 권한이 주어짐
    • 권한이 없으면? → Raise an exception 스크린샷 2022-06-11 오전 5.33.52.png

📌Segment sizes can be different

  • 가상 메모리 내에서는 얼마든지 세그먼트를 생성 가능 (논리적 단위)
  • 생성한 세그먼트들은 결국 물리 메모리에 최종 배치되어야 프로세스가 사용 가능함
  • 그러나 세그먼트들의 크기는 서로 다 다를 수 있음 스크린샷 2022-06-11 오전 5.34.18.png

📌Pure Segmentation의 결과

  • External fragmentation (외부 단편화)
  • (a)-(d) 공간은 있으나, 할당할 수 없는 메모리 영역이 발생
  • (e) 빈 공간을 합친다면? (compaction)

✔️ Compaction

  • 여유 메모리를 확보하기 위해 기존의 segment들을 재배열
    • 수행중인 프로세스들을 멈추고, 필요한 크기의 연속된 메모리 영역에 데이터를 복사
    • 새로운 물리 메모리 영역을 가리키도록 세그먼트 레지스터를 변경
  • Compaction is expensive!!
    • 메모리복사연산이필요→CPU를꽤소모함
  • 어떻게 비어 있는 메모리를 선택할 것인가?
    • 여유 메모리 관리 (free memory management)

✔️ Segmentation의 기본적인 여유 메모리 관리 방법

  • 기본적으로 할당되지 않은 메모리 공간은 OS가 free list로 관리함
    • Segmentation의 경우, 할당하지 않은 메모리 영역 역시 Free 세그먼트로 보고 리스트로 유지
  • 세그먼트 적재 시 free list 내 영역 선택 정책
    • First-fit 비어있는메모리영역가운데,현재세그먼트를적재가능한경우,가장처음의공간을선택
    • Best-fit 현재 세그먼트의 크기와 가장 차이가 적은 비어있는 공간을 선택 크기에 의해 정렬되지 않았다면?
      → 전체여유공간리스트를검색해야함
    • Worst-fit 현재세그먼트의크기와가장차이가큰비어있는공간을선택
      마찬가지로, 정렬이 필요하며, 안된 경우 전체 영역을 모두 검색해야 함
    • Best-fit과 Worst-fit은 둘 다 현재 배치된 순서와 무관하게 선택

✔️예상문제

스크린샷 2022-06-11 오전 5.41.26.png

0개의 댓글