CS/운영체제

#16 가상 메모리 관리(Virtual Memory Management)

Scala0114 2022. 1. 19. 21:40

1. Cost Model

  • 가상 메모리의 성능을 저하시킬 수 있는 요인들을 수치화하는 모델 => 비용(cost) 산출
    • Page Fault 발생빈도
    • Page Fault 발생률

  • 비용을 최소화하는 기법을 통해 가상메모리를 관리, 성능을 최적화할 수 있음
    => Page Fault 발생률을 최소화하는 전략이 필요

  • Page Reference String(d)
    • 프로세스 실행 중 참조한 페이지 번호 순서
    • 페이지의 총 갯수 N
    • 페이지 번호 r(1) ~ r(n)

  • Page Fault Rate
    • F = (발생한 페이지 폴트 발생 횟수) / (참조했던 페이지 수)

 

 

2. Hardware Components

  • 가상메모리 성능 향상을 위해 사용하는 하드웨어 장치

  • Address Translation Device
    • 주소 변환 장치
    • 주소 매핑 과정을 빠르고 효율적으로 수행하기 위해 사용
    • TLB(Translation Lookaside Buffer)나 Page Table 전용 레지스터 등

  • Bit Vectors
    • Page의 사용 상황에 대한 정보를 기록하는 비트
    • PMT 내부에 존재

    • Reference Bits(user bit)
      • 참조 비트
      • 해당 페이지 프레임이 최근에 참조되었는지를 기록
      • 프로세스에 의해 참조되면 1로 설정, 주기적으로 0으로 초기화
      • 참조 비트를 확인하는 것으로 해당 페이지가 최근에 참조된적이 있는지 확인 가능
      • 페이지 교체 알고리즘에서 교체할 페이지를 선택하기 위한 정보로 활용 가능

    • Update Bits(modified bits, write bits, dirty bits)
      • 갱신 비트
      • 해당 페이지 프레임의 데이터가 변경된 적이 있는지 기록
      • 변경사항이 있는 데이터는 swap device에 변경 내용을 반영해야하기 때문에 필요한 비트

 

 

3. Software Components

  • 가상 메모리 성능 향상을 위한 관리 기법

  • 할당 전략(Allocation Strategies)
    • 프로세스에게 얼마만큼의 메모리를 할당할 것인가
      • 고정 할당(Fixed Allocation)
        • 고정된 크기의 메모리를 할당

      • 가변 할당(Variable Allocation)
        • 프로세스 실행중에 할당된 메모리의 크기가 변경될 수 있음

    • 프로세스의 실행에 필요한 메모리 크기의 예측
      • 너무 큰 메모리를 할당하면 메모리가 낭비됨
      • 너무 작은 메모리를 할당하면 page fault 발생률이 증가하여 성능이 저하된다(Thrashing)

  • 적재 전략(Fetch Strategies)
    • 특정 페이지를 어느 시점에 메모리에 적재할 것인가

    • 요구 페이징(Demand Paging)
      • 프로세스가 페이지를 참조하려고할 때 적재
      • page fault 발생으로 인한 오버헤드 존재

    • 예측 페이징(Pre-Paging)
      • 참조될 가능성이 높은 page를 예측
      • 가까운 미래에 참조될 가능성이 높은 page를 미리 적재
      • 예측에 성공한다면 page fault로 인한 오버헤드가 없지만 실패하면 더 큰 오버헤드가 발생
      • 참조 가능성이 높은 page를 예측하기 위한 오버헤드가 존재
    • 실제로는 대부분 요구 페이징을 사용
      => 예측 페이징은 예측 자체의 오버헤드도 크고 예측에 실패했을 때의 리스크가 크기 때문

  • 배치 전략(Placement Strategies)
    • 비어있는 공간 중 어느 위치에 적재할 것인가
    • Paging System의 경우 페이지단위로 할당하기에 불필요한 기법
    • Segementation System의 경우 First-fit, Best-fit, Worst-fit, Next-fit 등의 기법이 존재

  • 교체 전략(Replacement Strategies)
    • 새로운 페이지를 메모리에 적재할 때, 메모리에 공간이 없다면 어느 페이지와 교체할 것인가
      => 어느 페이지를 해제할 것인가

  • 정리 전략(Cleaning Strategies)
    • 변경사항이 발생한 페이지(Dirty Bit이 1인 페이지)를 어느 시점에 write-back 할 것인가

    • Demand Cleaning
      • 해당 page가 메모리에서 해제될 떄 write-back 하는 방식

    • Pre Cleaning
      • 더이상 변경될 가능성이 없다고 판단되는 시점에 write-back 하는 방식

    • 적재 전략에서와 마찬가지로 실패했을 때의 리스크와 예측의 오버헤드로 인해
      Demand Cleaning 방식을 주로 사용한다.

  • 부하 컨트롤 전략(Load Control Strategies)
    • 시스템의 다중 프로그래밍 정도(multi-programming degree) 조절
    • 사실상 할당 전략과 같음(멀티프로그래밍 정도에 따라 할당할 수 있는 메모리 크기도 달라지기 때문)

    • 적정 수준의 multi-programming degree 를 유지
      • 부하가 너무 적은 상태일 경우 시스템 자원이 낭비되고 성능이 저하
      • 부하가 너무 큰 경우 자원에 대한 경쟁이 심화되고 성능이 저하
      • 과도한 page fault 로 인한 성능 저하가 발생할 수 있음(Thrashing)

 

 

4. 기타 고려사항

  • Page 크기
    • page 크기가 작을수록 보이는 경향
      • page 갯수증가 => page table 크기 증가 => page 관리 오버헤드 증가
      • 내부단편화 감소
      • 프로그램당 page 갯수가 증가하여 I/O 시간 증가
      • 서로 무관한 데이터가 하나의 페이지에 들어갈 가능성이 줄어들어 Locality 향상
      • page 갯수가 많기에 page fault 발생률도 증가

    • page 크기가 클수록 보이는 경향
      • page 갯수감소 => page table 크기 감소 => page 관리 오버헤드 감소
      • 내부단편화 증가
      • 프로그램당 page 갯수가 감소하여 I/O 시간 감소
      • 서로 무관한 데이터가 하나의 페이지에 들어갈 가능성이 늘어나 Locality 저하
      • page 갯수가 적기에 page fault 발생률 감소

    • 최근 시스템에서 page 크기가 갈수록 커지는 경향을 보이는 이유?
      • CPU의 처리속도는 빠른속도로 발전하고있지만 디스트(swap device)의 I/O 속도는 이를 따라가지 못함
      • 메모리의 크기 또한 빠르게 커지면서 page fault 처리비용도 빠르게 증가
      • 보다 적은 I/O시간, 보다 적은 page fault 가 최적의 성능을 내기 위해 가장 중요해짐

  • 프로그램 재구성(Program Restructuring)
    • 가상 메모리 시스템의 특성에 맞게 프로그램을 재구성
    • 사용자가 메모리 관리 기법에 대해 이해하고있다면 보다 효율적인 구조의 프로그램을 작성할 수 있음

  • TLB reach
    • TLB를 통해 접근 가능한 메모리의 크기
    • TLB entry number * page size
    • TLB reach가 커질수록 hit ratio는 증가, 성능도 증가한다.