본문 바로가기

운영체제

[운영체제] Swapping : Mechanisms

ostep 21. swapping mechanisms
korean_24. 물리 메모리 크기 극복 : 매커니즘

24.1 스왑 공간

물리 메모리가 부족할 때 사용하지 않는 페이지(데이터)를 일시적으로 저장하는 메모리 공간

  • swap out : 메모리 페이지를 읽어 쓰기
  • swap in : 메모리 페이지를 읽어 메모리에 탑재

페이지 : 스왑 공간의 입출력 단위

OS는 스왑 공간의 모든 페이지들의 디스크 주소를 기억

  • 스왑 공간의 크기
    • 시스템이 사용할 수 있는 메모리 페이지의 최대 수 결정

  • 4개의 페이지(물리 메모리)와 8개의 페이지를 위한 공간(스왑 공간)
  • 3개의 프로세스가 물리 메모리를 공유
  • 프로세스 전체가 물리 메모리에 올라가 있는 것이 아니라 프로세스의 일부 페이지만 물리 메모리에서 실행 : 나머지 페이지는 스왑 아웃 상태 → 실행 중 x
  • 당장 필요한 페이지만 물리 메모리에 할당하여 실행
  • 실행 중인 것처럼 보이지만, 당장 필요하지 않는 페이지는 가상 공간에 스왑 아웃하여 실행 중인 것처럼 즉 더 큰 메모리를 사용 중인 것처럼 보이게 함

스왑 공간을 둠으로써, 실제 물리 메모리의 영역보다 더 많은 메모리 공간이 존재하는 것처럼 가정할 수 있다.

 

24.2 Present Bit

페이지 스왑 하는 법

하드웨이 기반의 tlb를 사용하는 시스템이라고 가정

현재 가상 페이지가 물리 메모리에 존재하는지 여부를 나타내는 비트

  • present bit = 1 (Set) → 가상 페이지가 현재 물리 메모리에 로드되어 있음 → 바로 사용 가능
  • present bit = 0 (Clear) → 해당 가상 페이지가 현재 물리 메모리에 없음(디스크에 존재하거나 할당되지 않음) → page fault
    • page fault가 되면,
      • 운영체제는 해당 페이지를 디스크에서 다시 물리 메모리로 가져오고 (스왑 인)
      • 페이지가 로드되면, 페이지 테이블 업데이트 + TLB 갱신
      메모리 로드 후 다시 실행 (성능 저하 문제)

해당 페이지가 현재 물리 메모리에 존재하는지를 결정하는 중요한 정보

TLB hit/miss는 주소 변환 속도와 관련 있지만 Present Bit가 0이면 페이지 폴트가 발생하여 디스크에서 데이터를 가져와야 하므로 성능이 크게 저하됨

TLB miss이 발생해도 Present Bit이 1이면 비교적 빠르게 해결되지만 0이면 디스크 I/O로 인해 속도가 매우 느려질 수 있음

  • Present Bit은 메모리에 페이지가 실제로 존재하는지 체크
  • TLB hit/miss는 가상 주소 변환 속도와 관련된 캐싱 메커니즘

 

24.3 page fault

  • Case 1: TLB Hit + Present Bit = 1
    • 가상 주소 0x1234를 CPU가 요청 → TLB에서 변환 정보 찾음 → 물리 메모리에 존재 → 빠르게 접근
    • TLB 미스 핸들러가 PTE에서 PEN을 가져와서 명령어 재시도
  • Case 2: TLB Miss + Present Bit = 1
    • TLB에는 정보가 없지만, 페이지 테이블에는 해당 매핑이 존재 → 물리 메모리에 있으므로 페이지 테이블 참조 후 TLB 업데이트 → 실행 가능
  • Case 3: TLB Miss + Present Bit = 0
    • 페이지 폴트 발생
    • TLB에도 없고, 페이지 테이블 확인 결과 현재 물리 메모리에 없음 → 운영체제가 디스크(스왑)에서 해당 페이지를 가져와야 함 → 메모리에 로드 후 다시 실행

TLB 미스 + 현재 가상 페이지가 물리 메모리에 없어서 운영체제가 해당 페이지를 디스크에서 다시 물리 메모리로 가져와야 하는 상태 (swap-in을 해야함)

TLB 미스에 대하여 하드웨어 기반의 TLB / 소프트웨어 기반의 TLB 가 처리

이때의 OS → page fault handler가 처리 메커니즘 규정 (대부분 소프트웨어적으로 처리)

  • 디스크로 찾으러 들어가면, 그 많은 데이터 중 원하는 페이지의 위치를 어떻게 파악할 것인가디스크에 있다면 어디에 저장되어 있는지 파악 → 메모리에 탑재
  • OS는 PFN(Pysical Frame Number)과 같은 PTE(Page Table Entry)의 특정 비트를 사용하여 해당 페이지가 디스크에 있는지 물리 메모리에 있는지 구분

page fault로 tlb가 갱신

 

24.4 메모리에 빈 공간이 없다면

이전의 경우는 스왑 공간에 여유 메모리가 있을 때

  • page-in 을 해야하는데 메모리 여유 공간이 없다면 기존에 있던 것들을 빼야한다.
    • 이때 어느 페이지가 교체될 것인가를 결정하는 것이 페이지 교체 정책 (page-replacement policy)
  • → page-out : 탑재하고자 하는 새로운 페이지를 위한 공간 확보를 위해 기존의 페이지를 page-out

 

24.5 page fault 처리

  • tlb miss
    • 페이지 유효 (present bit = 1) : TLB 미스 핸들러가 PTE에서 PFN을 가져와 명령어 재시도 (→ tlb hit)
    • 페이지 유효 but 존재 x : page fault handler
    • 디스크에 존재하여 사용할 수 있는 프로세스이기는 하지만 물리 메모리에 존재하지 않은 상태
    • 페이지 유효 x : 프로그램 버그 등으로 잘못된 주소를 접근하는 경우의 처리

  1. os가 탑재할 페이지를 위한 물리 프레임 확보
  2. 만약 여유 프레임이 없다면, 교체 알고리즘을 실행하여 메모리에서 page-out로 물리 프레임 확보
  3. I/O 요청을 통해 스왑 영역에서 페이지를 읽어옴
  4. os는 테이블 갱신 및 명령어 재시도
  5. 재시도 → tlb miss → 재시도 → tlb hit

 

24.6 실제 교체가 일어나는 시기

메모리 여유 공간이 없기 전에 먼저 메모리 여유 공간을 확보해 놓아야 한다.

이를 위해 os는 여유 공간에 관련된 최대값(high watermark)과 최솟값(low watermark)을 설정하여 교체 알고리즘 작동에 활용한다.

  • 동작 방식
    • (여유 공간 < 최소)가 되면 여유 공간 확보를 담당하는 백그라운드 thread 실행 → 여유 공간의 크기가 최대값에 이를 때까지 페이지 제거→ 충분한 공간이 확보되면 백그라운드 thread는 슬립 모드로 전환
    • 백그라운드 thread ⇒ swap daemon 또는 page daemon 이라고 부름
  • 일시에 여러 개를 교체하면 성능 개선이 가능
    • 많은 시스템들은 다수의 페이지들을 cluster나 group으로 묶어 한 번에 스왑 파티션에 저장하여 디스크 효율을 높임