Lec16-VM II

한국어판 강의자료 · 22쪽
1쪽
p.1
2쪽
p.2page table(페이지 테이블) 접근 지연을 줄이기 위한 방법
  • address translation latency(주소 번역 지연)을 줄이기 위해
  • 변환 색인 버퍼(TLB) 사용
3쪽
p.33 변환 색인 버퍼(TLB)
  • 모든 사용자 메모리 참조(코드 또는 데이터)는 번역이 필요함
  • 번역에 필요한 메모리 접근 횟수는? 계층적 vs. 해시
  • 번역이 무척 오래 걸린다면 캐시에서 히트해도 소용없음
  • TLB: 최근에 사용된 번역의 '캐시'
  • 캐시와 BTB와 유사한 '태그' 기반 검색 구조
  • 가상 페이지 번호(VPN)를 입력하면 page table(페이지 테이블) 엔트리(PTE)를 반환함 (즉, 물리 페이지 번호(PPN) 및 보호 비트)
  • TLB 엔트리
  • • 태그: virtual address (VA)(가상 주소)의 일부, 프로세스 ID(PID)
  • • PTE: PPN, 보호 비트
  • • 기타: 유효(valid), dirty bit(더티 비트) 등
  • 캐시와 유사한 설계 고려사항
  • (즉, capacity(용량), block size(블록 크기), associativity(연관성), replacement policy(교체 정책))
4쪽
p.44 직접 매핑 TLB (나쁜 예시)
  • PTE bank(뱅크)
  • 태그
  • 인덱스
  • PTE
  • =
  • tag bank(태그 뱅크)
  • 히트?
  • 유효
  • 가상 페이지 번호(VPN)
  • 페이지 오프셋(PO)
  • 프로세스 ID(PID)
5쪽
p.55 TLB 설계
  • I-TLB와 D-TLB를 분리하거나, multi-level TLB(다단계 TLB)를 사용하는 것이 캐시와 마찬가지로 타당함
  • capacity(용량): L1 코드 캐시가 64 KB라면, I-TLB는 얼마나 커야 하는가?
  • 적어도 64 KB의 영역을 커버해야 함
  • 최소 16개의 TLB 엔트리 × safety factor(안전 계수)(2~8)
  • 고성능 CPU에서는 L1에 10~100개 이상, L2에 1000개 이상의 엔트리 사용
  • block size(블록 크기): 한 페이지에 접근한 후 다음 페이지를 접근할 가능성은 얼마나 높은가?
  • 보통 TLB 엔트리당 1개의 PTE
  • MIPS는 한 엔트리당 2개의 연속된 페이지 번역을 저장
  • associativity(연관성): 충돌을 최소화하기 위해 어떤 연관성을 사용할 것인가?
  • 과거에는 완전 연관성(CAM)이 일반적이었음
  • 현재는 4~8방향 associativity(연관성)이 더 흔함 (더 낮은 지연과 낮은 복잡성)
6쪽
p.66 TLB miss(TLB 미스) 발생 시
  • TLB hit(TLB 히트) 시 대부분의 address translation(주소 번역)이 약 1 사이클 내에 완료됨
  • TLB miss(TLB 미스) 발생 시
  • page table(페이지 테이블)을 '워크'하여 번역을 결정해야 함
  • • page table walk(페이지 테이블 워크)는 일반적으로 하드웨어(HW)에서 수행되며, 일부 아키텍처는 소프트웨어(SW)에서 수행함
  • • 이 과정은 수백 사이클이 소요될 수 있음
  • page table walk(페이지 테이블 워크) 결과에 따라 다음 동작 결정됨
  • PTE 존재 여부?
  • 유효 여부?
  • 위치
  • 행동
  • O
  • O
  • main memory(주기억장치)
  • PTE를 TLB에 삽입하고 계속 실행
  • O
  • O
  • 디스크
  • page fault(페이지 폴트) 발생 → 커널 핸들러가 페이지를 main memory(주기억장치)에 로드 → PTE 업데이트 및 TLB에 삽입 후 계속 실행
  • O
  • X
  • N/A
  • segmentation fault(세그멘테이션 폴트) 발생 → 커널에서 처리
  • X
  • N/A
  • N/A
  • TLB miss(TLB 미스) ≠ page fault(페이지 폴트)
7쪽
p.7virtual address (VA)(가상 주소)에서 physical address (PA)(물리 주소)로의 변환
  • 효과 주소 (EA)
  • TLB 조회
  • page table walk(페이지 테이블 워크)
  • TLB 업데이트
  • segmentation fault(세그멘테이션 폴트)
  • 보호 검사
  • 물리 주소 (PA) → 캐시
  • 아니요
  • 예
  • protection violation(보호 위반)
  • ~1 사이클
  • ~100의 사이클
  • ~10ms
  • 히트
  • 발견됨
  • 무효
  • 유효 (기억장치 내)
  • 허용됨
  • 아니요
  • 예
  • page fault(페이지 폴트)
  • demand paging(요구 페이징)
  • 유효 (디스크 내)
8쪽
p.8하드웨어 또는 software-managed TLB(소프트웨어 관리 TLB)?
  • TLB miss(TLB 미스)를 어떻게 처리할까? (즉, page table(페이지 테이블) 워크)
  • 하드웨어 – RISC-V, x86, Arm 등
  • 빠름
  • 유연성 낮음
  • 소프트웨어 – MIPS, Alpha, UltraSPARC 등
  • 특수 명령어와 예외를 사용
  • 느림 (예: 예외를 지원하기 위해 10~100개의 명령어 필요)
  • TLB miss(TLB 미스) 핸들러 명령어도 캐시에서 미스 가능
  • 예외 발생 시 파이프라인 flush(플러시)
  • 높은 유연성
9쪽
p.9virtual memory(가상 메모리)와 캐시는 어떻게 상호작용해야 할까?
  • CPU
  • TLB
  • L1 cache(L1 캐시)
  • 하위 레벨
  • physical cache(물리 캐시)
  • CPU
  • L1 cache(L1 캐시)
  • TLB
  • 하위 레벨
  • 가상 캐시 (L1)
  • 가상 주소 (VA)
  • 물리 주소 (PA)
  • CPU
  • L1 cache(L1 캐시)
  • TLB
  • 하위 레벨
  • 하이브리드!
  • 가상 주소 (VA)
  • 물리 주소 (PA)
  • 가상 주소 (VA)
  • 물리 주소 (PA)
10쪽
p.10L1 cache(L1 캐시)를 가상으로 사용할 수 있을까?
  • TLB가 있더라도 여전히 address translation(주소 번역)에 시간이 소요됨
  • 단순한 구현에서는 최선의 경우 메모리 접근 시간은 TLB hit(TLB 히트) 시간 + L1 cache(L1 캐시) hit time(히트 시간)
  • 왜 캐시에 virtual address (VA)(가상 주소)로 접근하고, DRAM에 캐시 미스 시에만 번역하지 않을까?
  • TLB hit(TLB 히트) 시간 >> L1 cache(L1 캐시) hit time(히트 시간)이라면 의미 있음
  • SUN SPARC의 virtual cache(가상 캐시), 약 1990년대
  • die 크기가 충분히 커져 L1 cache(L1 캐시) 통합 가능
  • MMU와 TLB 여전히 별도 칩에 존재
  • CPU 속도가 빨라져 외부 SRAM 접근이 너무 느림
  • 그러나 이러한 조건은 더 이상 성립하지 않음
11쪽
p.11virtual cache(가상 캐시)의 문제점 – homonyms(동음이의어)
  • homonyms(동음이의어): 같은 발음이지만 다른 의미 ("동음이의어")
  • 다른 프로세스에서 동일한 가상 주소(VA)가 서로 다른 물리 주소(PA)를 가리킴
  • → 캐시에서 이를 구분해야 함
  • 해결책
  • context switch(컨텍스트 전환) 시 virtual cache(가상 캐시) flush(플러시)
  • cache tag(캐시 태그)에 프로세스 ID(PID) 포함
  • 0xABCD0123
  • 0xFFFFFFFF
  • 0x00000000
  • 0xABCD0123
  • 0xFFFFFFFF
  • 0x00000000
  • 프로세스 0의 virtual address (VA)(가상 주소) 공간
  • 프로세스 1의 virtual address (VA)(가상 주소) 공간
  • 0x000000
  • 0xFFFFFF
  • physical address (PA)(물리 주소) 공간
12쪽
p.12virtual cache(가상 캐시)의 문제점 – synonyms(동의어)
  • synonyms(동의어): 다른 발음이지만 같은 의미 ("동의어" – 별칭 문제)
  • 같은 또는 다른 프로세스에서 다른 가상 주소(VA)가 동일한 물리 주소(PA)를 가리킴
  • → 동일한 PA가 서로 다른 VA로 캐시에 두 번 저장될 수 있음
  • 한 캐시 복사본을 업데이트해도 다른 복사본에는 반영되지 않음!
  • 해결책
  • synonyms(동의어)가 캐시에 동시에 존재하지 않도록 보장
  • 예: OS가 VA-PA 매핑을 제한하여 synonyms(동의어)가 항상 동일한 cache index(캐시 인덱스)를 갖도록 함
  • 0xABCD0123
  • 0xFFFFFFFF
  • 0x00000000
  • 0x9BCD0123
  • 0xFFFFFFFF
  • 0x00000000
  • 프로세스 0의 virtual address (VA)(가상 주소) 공간
  • 프로세스 1의 virtual address (VA)(가상 주소) 공간
  • 0x000000
  • 0xFFFFFF
  • physical address (PA)(물리 주소) 공간
  • 0x6BCD0123
13쪽
p.13하이브리드: 가상 인덱싱, 물리 태그 (VIPT)
  • 캐시 capacity(용량) ≤ (페이지 크기 × 연관성)인 경우, cache index(캐시 인덱스) 비트는 page offset (PO)(페이지 오프셋)에서만 나옴 (VA와 PA에서 동일)
  • 캐시와 TLB가 모두 칩 내부에 있다면, VA 비트를 사용하여 두 배열을 동시에 인덱싱
  • 마지막에 캐시 태그(물리적)를 TLB 출력과 비교
  • → 일치하면 데이터는 이미 캐시에서 읽혀짐
  • 가상 페이지 번호 (VPN)
  • 페이지 오프셋 (PO)
  • 변환 색인 버퍼 (TLB)
  • 물리 페이지 번호 (PPN)
  • 캐시 인덱스 (IDX)
  • 블록 오프셋 (BO)
  • physical cache(물리 캐시)
  • 태그 (물리적)
  • 데이터
  • 캐시 히트?
  • TLB hit(TLB 히트)?
  • ※ L1 cache(L1 캐시)에만 해당
14쪽
p.14큰 가상 인덱싱 캐시에서의 '별칭' 문제
  • 캐시 크기가 (페이지 크기 × 연관성)보다 큰 경우, cache index(캐시 인덱스) 비트에 VPN이 포함됨 → 동의어(또는 별칭)로 인해 문제가 발생!
  • 해결 방법:
  • 가상 페이지 번호 (VPN)
  • 페이지 오프셋 (PO)
  • 변환 색인 버퍼 (TLB)
  • 물리 페이지 번호 (PPN)
  • 캐시 인덱스 (IDX)
  • 블록 오프셋 (BO)
  • physical cache(물리 캐시)
  • 태그
  • 데이터
  • 캐시 히트?
  • TLB hit(TLB 히트)?
  • a
  • associativity(연관성) 증가 → cache index(캐시 인덱스) 비트 수 감소
  • 페이지 크기 증가 또는 캐시 크기 감소
  • OS가 VA-PA 매핑을 제한
  • MIPS R10K 방식과 유사한 방법 사용 (다음 슬라이드 참조)
15쪽
p.15MIPS R10000의 가상 인덱싱 캐시
  • 32 KB, 2-way(2-웨이) 가상 인덱싱 L1 캐시 (16B 블록) → 인덱스에 10비트, block offset(블록 오프셋)에 4비트 필요
  • page offset (PO)(페이지 오프셋)은 12비트이므로, 인덱스의 2비트는 VPN[1:0]에 해당
  • 직접 매핑 물리 L2 cache(L2 캐시) → L2는 L1을 포함함
  • VPN[1:0]은 L2의 '태그'에 추가됨
  • 두 가상 주소(VA와 VB)가 VPN[1:0]만 다를 경우, 동일한 물리 주소(PA)로 매핑됨
  • VA가 먼저 접근되어 L1 및 L2에 블록 할당됨
  • VB가 참조될 때 발생하는 일:
  • 1. VB는 L1에서 다른 블록을 인덱싱하고 미스 발생
  • 2. VB는 PA로 번역되어 L2에서 VA와 동일한 블록에 접근
  • 3. 태그 비교 실패 (VPNVA[1:0] ≠ VPNVB[1:0])
  • 4. L2는 L1에 synonym(동의어)인 VA가 캐시된 것을 감지
  • → VB가 L1에 다시 채워지기 전에 VA의 엔트리 eviction(축출)
16쪽
p.16MIPS R10000에서의 synonyms(동의어) 처리
  • L2 PIPT 캐시
  • a1 물리 태그
  • 데이터
  • 인덱스
  • a1
  • page offset (PO)(페이지 오프셋)
  • 인덱스
  • a2
  • page offset (PO)(페이지 오프셋)
  • VA1
  • VA2
  • 1
  • 0
  • 변환 색인 버퍼 (TLB)
  • 미스
  • { , 물리 태그 }
  • a2
  • a2 ≠ a1
  • L1 VIPT 캐시
  • a1
  • 슬라이드 출처: Hsien-Hsin Sean Lee
17쪽
p.17사례 연구: Intel x86의 virtual memory(가상 메모리)
18쪽
p.18Intel x86
  • 두 단계 address translation(주소 번역)과 세그먼트를 사용한 이름 지정 및 보호를 위한 설계
  • 사용자 전용 48비트 효과 주소 (EA)
  • • 16비트 세그먼트 번호(암시적) + 32비트 세그먼트 오프셋
  • • 각 주소 레지스터는 해당 세그먼트 레지스터를 가짐
  • 글로벌 32비트 가상 주소 (20비트 virtual page number (VPN)(가상 페이지 번호) + 12비트 페이지 오프셋)
  • 현재 주요 OS는 세그먼트 기능을 사용하지 않음
  • Linux에서는 모든 프로세스가 동일한 세그먼트 사용: 사용자 코드 세그먼트, 사용자 데이터 세그먼트, 커널 코드 세그먼트, 커널 데이터 세그먼트 (include/asm-x86_64/segment.h)
  • context switch(컨텍스트 전환) 시 MMU가 page table(페이지 테이블)에 대한 다른 포인터를 사용하도록 설정 (CR3 레지스터)
  • 구형 x86 기계에서는 context switch(컨텍스트 전환) 시 TLB 플러시 (다른 가상-물리 매핑)
  • Westmere (2010년 이후)부터는 TLB 엔트리에 12비트 프로세스 컨텍스트 식별자 (PCID) 포함 → 여러 프로세스의 PTE를 TLB가 유지 가능
19쪽
p.19Pentium II의 address translation(주소 번역)
20쪽
p.20Core i7 page table(페이지 테이블) 번역
  • CR3 register(CR3 레지스터): page global directory(페이지 전역 디렉터리)의 physical address (PA)(물리 주소)
  • 가상 주소 (VA): 36비트
  • 가상 페이지 번호 (VPN) 1 ~ 4: 각각 9비트
  • 페이지 오프셋 (PO): 12비트
  • 물리 페이지 번호 (PPN): 40비트
  • 물리 페이지 오프셋 (PPO): 12비트
  • L1 페이지 테이블 (L1 PT): page global directory(페이지 전역 디렉터리)
  • L2 페이지 테이블 (L2 PT): page upper directory(페이지 상위 디렉터리)
  • L3 페이지 테이블 (L3 PT): page middle directory(페이지 중간 디렉터리)
  • L4 페이지 테이블 (L4 PT): 페이지 테이블
  • 각 page table(페이지 테이블) 엔트리 (PTE): 8바이트
  • 각 엔트리의 크기: 512GB, 1GB, 2MB, 4KB 지역을 나타냄
21쪽
p.21Core i7 address translation(주소 번역)의 종단 간 흐름
  • CPU에서 가상 주소 (VA) 입력: 36비트 VPN + 12비트 VPO
  • L1 TLB (16세트, 세트당 4개 엔트리): TLB 인덱스 (TLBI) = 4비트, TLB 태그 (TLBT) = 32비트
  • TLB hit(TLB 히트): TLB에서 PPN을 바로 가져옴
  • TLB miss(TLB 미스): page table walk(페이지 테이블 워크) 수행
  • page table walk(페이지 테이블 워크)를 통해 PTE를 검색하여 PPN과 PPO 추출
  • 물리 주소 (PA): 40비트 PPN + 12비트 PPO
  • L1 데이터 캐시 (64세트, 세트당 8블록): 캐시 인덱스 (CI) = 6비트, 캐시 태그 (CT) = 40비트, 블록 오프셋 (CO) = 6비트
  • L1 cache(L1 캐시) 히트: 데이터를 바로 가져옴
  • L1 cache(L1 캐시) 미스: L2, L3, main memory(주기억장치)로 접근
  • 가상 주소 (VA) → 가상 페이지 번호 (VPN) 1~4 → 물리 주소 (PA)로의 변환 흐름 완료
22쪽
p.22질문?
  • 공지사항:
  • - 교재 읽기: P&H Ch 5.5 – 5.6, 5.11, 5.18
단축키
Ctrl K · s자료 검색
[ ]이전·다음 강의
Space영상 재생·정지
j k다음·이전 section
n p다음·이전 slide
b강의 목록 접기·펴기
t맨 위
/강의 검색
Esc닫기