완전 연관 사상 : 블럭이 아무 캐시 엔트리에나 저장될 수 있다. 엔트리마다 comparator가 필요해 비싸다
n-way 집합 연관 사상 : 각 집합은 n개의 엔트리를 가지고, 블럭 인덱스로 집합 결정
n개의 comparator를 가져 집합 내 모든 엔트리에서 동시에 찾는다
Base CPI = 1, Clock rate = 4Ghz = 0.25ns/cycle
Miss rate/inst = 2%, Main mem access time = 100ns
캐시가 하나 일 때
Miss panelty = 100ns/0.25ns = 400 cycles
CPI = 1 + (0.02*400) = 1 + 8 = 9
L2 캐시
접근 시간 = 5ns, 글로벌 미스율 = 0.5%, L1 미스 L2 히트 페널티 = 5ns/0.25ns = 20 cycles
CPI = 1 + 2%*20 + 0.5%*400 = 3.4
캐시 설계 시 고려할 사항들
메인 메모리를 디스크의 캐시로 이용하는 것
CPU 하드웨어와 OS에서 합동 관리한다
i. 가상 주소를 물리 주소로 변환
ii. 메모리 보호와 공유
iii. 효율적인 메모리 사용
가상 메모리에서 블럭 = 페이지, 미스 = 페이지 폴트
물리적 메모리와 상관없이 프로세서가 메모리를 보는 방법이다
물리 메모리보다 큰 프로그램, 멀티 프로그래밍, 시스템 독립적 프로그램, 물리 메모리와 독립된 시스템 개발에 용이
가상 메모리와 물리 메모리는 페이지 단위로 나눠진다
가상 페이지를 위한 변환 테이블을 생성한다 (valid bit, physical page address)
작동 : 가상 주소로부터 가상 페이지 얻은 후 페이지(변환) 테이블에 접근 해 물리 메모리에 접근한다
페이지 테이블은 메모리에 존재한다
페이지 테이블로 인해 프로그램의 페이지들을 비 연속적으로 저장할 수 있다
디스크 엑세스로 인해 페이지 전송은 비용이 많이 든다
미스 페널티 또한 커서 페이지의 크기는 비교적 커야한다 (ex. 4KB)
페이지 폴트를 줄이는 것이 중요하다 (LRU의 비용을 감수하고 사용한다)
Write-through는 비용이 너무 크기에 Write-back을 사용한다
가상/물리 주소 공간 예시
가상 주소 : 32bit -> 4GB 가상 주소 공간
물리 주소 : 30bit -> 1GB 물리 주소 공간
페이지 크기 : 12bit -> 4KB
페이지 폴트 발생 시 디스크로부터 페이지를 가져와야한다
수백만 클럭 사이클 비용 발생
페이지 폴트율을 낮추기 위해 완전 연관 배치(페이지를 아무곳에나 배치 가능)와 LRU 사용한다
페이지 접근 시 use bit = 1, 주기적으로 OS가 0으로 비움, use bit = 0은 최근 사용 안됨
디스크 쓰기에 수백만 사이클 필요하다
write-through는 불가해서 write-back을 이용한다
페이지에 쓰기 할 때 dirty bit 표시된다
주소 변환은 추가적인 메모리 참조를 필요로 함 (PTE 접근 1번, 실제 메모리 접근 1번)
하지만 페이지 테이블 접근은 좋은 지역성을 가짐
CPU내 별도의 PTE들의 캐시를 사용 : Translation Look-aside Buffer(TLB)
16~512개 PTE 캐시, 0.5~1 cycle 히트, 10~100 cycle 미스, 미스율 = 0.01%~1%
미스는 하드/소프트웨어로 처리