Skip to main content

Docs

God shall bless us; and all the ends of the earth shall fear him.

가상 메모리 디자인

가상 메모리​

Virtual Memory

메인 메모리를 캐시처럼 사용 -cpu 하드웨어와 os에 의해 관리됨

프로그램은 메인 메모리를 공유 -각 프로그램(프로세서)는 private 자주 사용되는 코드와 데이터의 가상 주소를 가지고 있음 -다른 프로그램으로부터 보호

cpu와 os는 물리 주소로 변환 -Page: VM block (typical size 1KB~8KB) -VM 미스는 page fault 로 불림

개요​

가상주소(virtual page no. + offset) -> Page Table -> physical address(phisical page no. + offset)

offset 유지됨

Page Table Entry(PTE) -다음 레벨의 페이지 테이블이나 실제 페이지를 가리키는 포인터 -valid, read-only, read-write, write-only의 권한 비트

인텔 x86 PTE

illusion of a large, private, uniform store -protection & privacy 여러 유저가 각자 private 주소 공간을 공유 주소공간에서 가질 수 있음 -demand pagin primary 메모리보다 큰 프로그램을 실행할 수 있음 -others 기기에 다른 메모리 설정을 할 수 있음

대신, 메모리 참조에 주소 변환이 필요함(TLB)

주소 변환과 protection​

protection check

  • kernel/user mode
  • read/write
  • exception

빨라야하고(1cycle 이내로), 공간 효율적이여야 함

가상 메모리의 세 장점​

  • 변환 물리 메모리가 섞여있어도 프로그램이 메모리에 일관적인 관점을 제공 멀티스레딩이 가능하게 함

  • 보호

  • 공유

선형 페이지 테이블​

PPN(Physical Page Number) DPN(Disk Page Number)

페이지 테이블의 크기 32-bit 주소, 4kb 페이지, 4-byte PTEs

2^20 PTEs, 4MB page table per user 4GB swap 필요

큰 페이지

  • 큰 internal 단편화(fragmentation)
  • 큰 page fault 패널티

64-bit 주소를 사용하면? 1MB 페이지, 8-byte PTE면 2^44(35TB) 필요!

Saving grace 한 페이지 조각만 populated

Page fault 처리​

  1. 참조(reference)
  2. trap
  3. os가 뒤에 있는 저장소에서 찾음
  4. missing 페이지를 가져옴
  5. page table 리셋
  6. 명령어 재시작

교체 알고리즘​

LRU(last recently used) 마지막에 사용하지 않은 것

Clock algorithm: 정확히 이처럼 작동하지 않지만 효율적인 구현(approximate LRU) 오래된 페이지(가장 오래된 것은 아니지만) 교체

하드웨어가 참조할때 접근 비트를 설정, 접근 비트가 0 이면 오랫동안 쓰지 않은 것

Advanced clock hand(실제 시간 아님) 1->0으로 변경 0->교체 후보로 선택

TLB​

Translation Look-aside Buffers

주소 변환은 매우 비싼 과정 2-level 페이지 테이블을 가정할때, 최적: 3번의 메모리 참조 최악: 2page fault+

Cache translations in TLB TLB hit: single cycle TLB miss: page table works

캐시 구조 VPN 태그 + PPN 주소

페이지 지역성이 있는가? -접근이 순차적이면 명령어는 같은 페이지에서 주로 머뭄​

TLB 계층이 필요한가?

TLB 디자인​

일반적으로 32-128 엔트리 주로 fully associative 사용 랜덤 또는 FIFO TLB에 프로세스 정보가 없으면 컨텍스트 스위치때 TLB flush

TLB Reach: 가상 주소가 모두 TLB에 매핑 가능 ex) 64TLB x 4KB page = 256KB까지 한번에

전체 흐름 TLB Lookup miss) Page Table Walk not in memory -> Page Fault(OS) In memory -> Update TLB restart inst hit) Protection check denied -> SEGFAULT permitted -> Physical Address 변환과정(캐시, ...)

캐시와 TLB​

TLB latency를 다루기 위한 메커니즘이 필요

  • 클럭 속도 줄이기?
  • TLB와 캐시 접근 파이프라이닝
  • 가상 주소 캐시
  • 병렬 TLB/캐시 접근

캐시에 물리주소​

여러 프로세서가 캐시를 동시에 접근 가능 여러 프로세서가 페이지 공유 가능 주소 변환이 critical path에 있음

캐시에 가상주소​

동음이의(homonym) 문제 -각 프로세스는 같은 주소에 다른 translation -ASIDs(Address space identifiers)가 없으면 컨텍스트 스위치마다 캐시 flush가 필요함

주소가 같거나 별칭 문제 -다른 가상 주소가 같은 물리 주소를 쓸 수 있음 -이는 하나의 변경이 다른데로 전파되지 않는 문제를 부를 수 있음