참고 글 : https://www.clear.rice.edu/comp425/slides/L24.pdf
이 글은 다음과 같은 시스템을 가정하고 보자.
* 메인 메모리 : 4GB ( 32bit 메모리 주소 )
* Cache size : 64KB ( 2^16 bytes )
* Block ( Line ) size : 64byte ( 2^6 bytes )
-> 따라서 메인 메모리의 총 블록 수는 : 2^32 / 2^6 = 2^26
-> 캐시의 총 블록 수는 : 26^16 / 2^6 = 2^10
Fully Associative Mapping ( 완전 연관 사상 )
완전 연관 사상에서는 하나의 캐시 블록(Line)이 그 어떤 메인메모리 블록이라도 캐싱할 수 있다.
예를들어 하나의 캐시 블록은 26 bit의 Tag값을 가진다. 이 값은 메인 메모리 ( 4G= 23^2) 에서의 블록 (64B = 2^6) 을 찾아내는 주소값이 된다.
그래서 Cache가 Hit인지 알아내려면 모든 Cache 블록의 Tag값을 검사해야한다. 때문에 CPU 회로는 병렬적으로 캐시 블록들의 Tag값을 검사해 Hit인지 아닌지를 OR로 출력한다.
BYTE OFFSET은 Cache Hit했을 때 캐시라인에서 뽑아온 데이터를 MUX에서 선택하는 비트로 사용된다.
Directed Mapping( 직접 사상 )
직접 사상은 메모리를 캐시 크기로 나누어 나뉜 메모리(페이지)를 각 캐시에 완전히 맵핑 시키는 방식이다.
캐시 사이즈가 2^16 이고 블록 사이즈가 2^6 이니 캐시에는 2^10 개의 블록이 존재하게 된다. 따라서 주소값 32bit는 Tag ( 2^16 ) + Cache Block Index ( 2^10 ) + Byte offset ( 2^6 ) 으로 해석된다. Tag는 현재 캐시블록에 주소값에 맞는 메모리 페이지인지 확인하는 값이 된다. 만약 태그값이 다르다면 태그값 다시 메모리에서 페이지를 선택하는 비트로 쓰인다. 메인 메모리의 각 페이지의 첫 번째 블록은 항상 캐시의 첫 번째 블록과 매칭된다. 마찬가지로 메인 메모리의 n번째 블록은 캐시의 n번째 블록과 매칭된다.
직접 사상은 완전 연관 사상처럼 병렬적으로 Tag검사를 할 필요없이 block index bit로 하나의 block을 고르고 해당 block의 tag값을 비교하면 된다.
Set-Associative Mapping ( 세트-연관 사상 )
https://www.clear.rice.edu/comp425/slides/L25.pdf
세트 연관사상은 블록을 세트로 묶고, 각 메인 메모리의 페이지를 세트에 맵핑시키는 방법이다.
n-way 세트 연관 사상은 n개의 블록을 세트로 묶는다. 이때 4way 세트 연관사상을 가정해보자. 그러면 한 개의 세트는 4개의 블록으로 구성되므로 2^6 * 2^2 = 2^8 바이트의 사이즈를 가지고 캐시는 2^16 / 2^8 = 2^8 개의 세트로 구성된다.
따라서 주소값 32bit는 Tag ( 2^18 ) + Set Index ( 2^8 ) + Byte offset ( 2^6 ) 으로 해석된다.
캐시의 총 크기는 세트수*블록사이즈(즉 2^8 * 2^6 = 2^14)이고, 메인 메모리크기(2^32 ) / 캐시의 크기 (2^14 ) 는 Tag Bit 크기( 2^18)와 일치한다. 따라서 2^18 크기의 Tag 비트는 메인 메모리에서 캐싱 가능한 2^18 개의 블록 중 하나를 선택하는 값이 된다.
캐시 Hit, Miss를 판단할 때는 set index로 Set을 선택한 다음 Set에 존재하는 모든 Block들의 Tag값들을 검사해 Cache Hit인지 Cache Miss인지 파악해야 한다.
'Compiler & Computer Architecture' 카테고리의 다른 글
Memory Consistency Model (0) | 2023.10.24 |
---|---|
Cache coherency protocols (3) | 2023.10.24 |
Instruction-Level Parallelism : Hardware Based Speculation for Out-of-Order Execution (0) | 2023.10.24 |
Instruction-Level Parallelism : Out-Of-Order Execution (0) | 2023.10.24 |
Hypervisor ( x64 ) (0) | 2022.01.16 |
댓글