Swapping : Mechanisms

dev_butler·2023년 11월 23일

Virtual Memory Concepts

  • 제한된 physical memory size : physical memory의 사용가능한 공간보다 큰 프로그램 실행 불가
  • 일반 program 실행 패턴
    • 프로그램 전체가 아닌 일부만 실행
    • 프로그램 특정 옵션 및 기능은 거의 안쓰일 수 있음
  • Virtual memory : memory에 완전히 있지 않은 process도 실행 가능 (program 일부는 memory에 있어야 함)

: logical memory address space와 physical memory address space의 분리,
logical memory address space는 physical memory address space보다 클 수 있음

Demand Paging

  • Virtual memory는 demand paging 통해 구현될 수 있음
  • 필요할 때만 page를 memory에 넣음
    • 적은 I/O, memory 필요
  • page를 주고받을 수 있어야 함

How to Swap?

(memory 꽉찼을 때 밀어내는거 : swapping)

  • Overlays
    • 프로그래머는 필요에 따라 코드나 데이터를 메모리 안팎으로 수동으로 이동시킴
    • OS에서 지원받을 필요 없음
  • Process-level swapping
    • process는 일시적으로 메모리 부족으로 backing store로 swap된다
    • 나중에 실행되기 위해 memory로 돌아옴
  • Page-level swapping
    • page를 memory에서 backing store로 swap (swap-out)
    • backing store에서 page를 memory로 swap (swap-in)

    Where to Swap?

  • Swap space
    • page를 앞뒤로 이동하기 위해 예약된 디스크 공간 (page 단위로 swap)
    • swap space의 크기에 따라 사용할 수 있는 최대 메모리 페이지 수가 결정됨
    • 블록 크기는 페이지 크기와 도일함
    • 파일 시스템에서 전용 파티션 또는 파일일 수 있음

Present Bit

  • 디스크 간에 Page를 swap할 수 있도록 시스템에서 일부 기계를 상위에 추가
    : 하드웨어가 page table entry를 검색하면 물리적 메모리에 페이지가 없는 것을 발견 할 수 있음
    • Value 1 : page가 physical memory에 있음
    • Value 0 : page가 memory에는 없지만 disk에 있음

The Page Fault

  • physical memory에 없는 page에 접근
    • 페이지가 존재하지 않고 디스크를 swap한 경우 , OS는 페이지 오류 해결하기 위해 페이지를 메모리로 swap 해야 함
    • page fault handler(페이지 장애 처리기)로 알려진 특정 코드가 실행되고 페이지 장애를 처리해야 함

Page fault handler

  • Page fault handling

Memory가 다 찼다면?

  • OS는 새 페이지를 가져올 공간을 마련하기 위해 페이지를 넘기는 것을 좋아함
    • 시작하거나 바꿀 페이지를 선택하는 프로세스를함page-replacement (페이지 교체 정책)이라 함

Page Fault control Flow - HW

VPN = (VirtualAddress & VPN_MASK) >> SHIFT
//  VPN 추출
(Success, TlbEntry) = TLB_Lookup(VPN)
//  추출한 VPN에 대한 주소 변환 정보가 TLB에 있는지 확인
if (Success == True)
//  TLB에 있으면
    if (CanAccess(TlbEntry.ProtectBits) == True)
        Offset = VirtualAddress & OFFSET_MASK
        PhysAddr = (TlbEntry.PFN << SHIFT) | Offset
        Register = AccessMemory(PhysAddr)
    else RaiseException(PROTECTION_FAULT)
else
//  TLB에 없으면
PTEAddr = PTBR + (VPN * sizeof(PTE))
//  Page Table에 접근해 page위치 알아옴
PTE = AccessMemory(PTEAddr)
if (PTE.Valid == False)
    RaiseException(SEGMENTATION_FAULT)
else
    if (CanAccess(PTE.ProtectBits) == False)
        RaiseException(PROTECTION_FAULT)
    else if (PTE.Present == True)
    //  Present bit가 True라면 (메모리에 page table 존재)
        TLB_Insert(VPN, PTE.PFN, PTE.ProtectBits)
        RetryInstruction()
    else if (PTE.Present == False)
    //  Present Bit가 False라면 (Swap 공간에 page table 존재)
        RaiseException(PAGE_FAULT)
        //  Page Fault 발생

Page Fault control Flow - SW

PFN = FindFreePhysicalPage()
//  Page 가지고 와서 할당할 메모리 공간을 찾음
if (PFN == -1)
    PFN = EvictPage()
    DiskRead(PTE.DiskAddr, PFN)
    //  disk에서 page table 데이터를 가지고 옴
    PTE.present = True
    // Present Bit를 True로 수정
    PTE.PFN = PFN
    RetryInstruction()
  • OS는 곧 오류가 발생할 페이지의 물리적 프레임을 찾아야 함
  • 해당 페이지가 없는 경우 replace algorithm (교체 알고리즘)이 실행되어 일부 페이지를 메모리에서 꺼낼 때까지 기다림

Replacement Occur 시

  • OS는 메모리가 완전히 채워질 때까지 기다렸다가 다른 페이지의 공간을 만들기 위해 페이지를 바꿈
    : 비현실적임. OS가 작은 부분의 메모리를 더 적극적으로 사용할 수 있도록 유지해야 하는 여러 가지 이유가 있음
  • Swap Daemon, Page Daemon
    • 사용 가능한 LW page 수가 적으며, 이는 메모리 실행의 자유를 담당하는 백그라운드 스레드임
    • 스레드는 사용 가능한 HW page가 있을 때가지 페이지를 내보냄

What to Swap

  • low mem에서 각 유형의 page frame에 발생하는 작업
    • Kernel code
    • Kernel data
    • Page tables for user processes
    • Kernel stack for user processes § User code pages
    • User data pages
    • User heap/stack pages
    • Files mmap’ed to user processes § Page cache pages
      → Not swapped → Not swapped → Not swapped → Not swapped → Dropped
      → Dropped or swapped
      → Swapped
      → Dropped or go to file system → Dropped or go to file system
  • Page replacement은 내보낼 페이지 선택

0개의 댓글