Post

[운영체제-양희재 교수님]22강 세그멘테이션

경성대학교 양희재 교수님의 운영체제 22강

세그멘테이션(Segmentation)

  • 프로세스를 논리적 내용으로 잘라서 메모리에 배치
    • 세그멘트(segment) = 프로세스를 어떤 의미를 담은 논리적 내용으로 자른 것
    • 일반적으로 세그멘트의 크기는 같지 않음
  • MMU 내의 재배치 레지스터 값을 변경 ⇒ CPU는 프로세스가 연속된 메모리 공간에 위치한다고 착각
    • 이때 MMU는 세그멘트 테이블(segment table)

주소 변환(Address Translation)

  • 논리주소(Logical address)
    • CPU가 내는 주소 = segment 번호(s) + 변위(d)
  • 논리주소 → 물리주소(Physical address) 변환
    • 세그멘트 테이블 내용 = base + limit
      • limit을 넘어서는 경우 ⇒ segment violation ⇒ 인터럽트 발생
    • 세그멘트 번호(s) ⇒ 세그멘트 테이블 인덱스 값
      • 해당 테이블 인덱스 값의 테이블 내용으로 시작 위치 및 한계값 파악
    • 물리주소 = base[s] + d

보호와 공유

  • 보호(Protection)
    • 모든 주소는 세그멘트 테이블을 경유 ⇒ 세그멘트 테이블 엔트리마다 r, w, x 비트를 두어 접근 제어 가능
    • 해킹 등 방지 가능
    • 페이징은 페이지에 여러 영역이 섞일 수 있어 r, w, x 비트를 설정하기 어렵다.
      • 예를 들어 한 페이지 안에 code와 data가 섞여 있으면 r, w, x 비트를 설정하기 어렵다.
      • 따라서 보호 면에선 페이징보다 세그멘테이션이 우월하다.
  • 공유(Sharing)
    • 같은 프로그램을 쓰는 복수 개의 프로세스가 있다면 code는 공유 가능 ⇒ 프로세스의 세그멘트 테이블 코드 영역이 같은 곳을 가리키게 한다.
    • 단, non-self- modifying code(reentrant code, pure code)인 경우에만 가능
    • 메모리 낭비 방지 가능
    • 세그멘테이션은 논리적으로 자르기 때문에 더 쉽게 영역을 공유할 수 있다.
      • 따라서 공유 면에선 페이징보다 세그멘테이션이 우월하다.

외부 단편화(External Fragmentation)

  • 세그멘트 크기 가변적 ⇒ 동적 메모리 할당 필요 ⇒ 외부 단편화 발생
  • first-fit, best-fit, worst-fit, compaction 등의 문제 다시 등장

세그멘테이션 + 페이징

  • 세그멘테이션은 보호와 공유 면에서 효과적 + 페이징은 외부 단편화 문제를 해결
  • 따라서 세그멘트를 페이징 ⇒ Paged segmentation
    • 프로세스를 세그먼트로 자르고 세그먼트를 다시 페이지로 자름
    • 예) Intel 80x86
  • 세그멘테이션 테이블과 페이징 테이블을 둘 다 거쳐야 하므로 주소 변환 속도가 더 느림
This post is licensed under CC BY 4.0 by the author.