** 가정 **
32비트 주소 (vs 5비트 주소),
캐시의 크기가 2^10 (vs 2^3),
각 entry의 크기는 2^2 bytes
Byte offset
각 캐시 블록은 22B의 데이터를 포함할 수 있다.
데이터 항목의 기본 단위는 Byte이다.
캐시 블록 내에서 데이터의 Byte를 식별해야 한다.
주소의 앞 20bit는 tag, 10bit는 index로 사용된다.
마지막 2bit는 Byte offset으로 사용된다.
데이터의 Byte가 참조되면, 참조된 데이터와 인접한 데이터를 포함한 22Byte의 데이터를 메모리에서 캐시로 가져온다.
이 동작은 캐시가 spatial locality(공간적 지역성)을 활용할 수 있도록 한다.
주소가 주어지면, 10bit의 index값으로 대상 캐시 블록에 접근한다.
그 다음 20bit의 태그 값으로 캐시 블록의 tag 필드와 비교한다.
hit인 경우, 전체 4byte의 데이터가 읽히고, miss인 경우 메인메모리에서 데이터를 가져온다.
Generalization of Direct Mapped Cache
만약 캐시의 크기가 2^n blocks이고, block의 크기가 2^m word라고 하자.
Byte offset
각 캐시 블록은 2^(m+2) byte의 데이터를 포함할 수 있다.
m bit는 블록 내의 word를 식별하는데 사용되고, 2bit는 word 내의 byte를 식별하는데에 사용된다.
따라서, 마지막 m+2 bit는 byte offset으로 사용된다.
Index (to select a cache block)
캐시에는 2^n개의 block이 있다.
따라서 데이터의 index를 결정하기 위해 n bit가 필요하다.
Tag (to identify a specific data item)
나머지 bit는 tag로 사용된다.
tag field의 크기는 32 - (n + m + 2)이다.
캐시의 크기는 다음과 같다.
block 개수 * (block size + tag size + valid bit size)
따라서 tag와 valid bit field에 의해 캐시의 실제크기는 데이터의 총량보다 크다.
Block offset
주소에 block offset 개념을 넣을 수도 있다.
cache block size가 512bit (=2^6 byte = 2^4 word)라고 할 때, block offset은 4bit이다.
이는 index에서 상대 위치로 몇 워드 떨어져있는지를 나타낸다.
block offset 만큼 떨어진 word에서 byte offset 만큼 떨어진 byte를 찾으면 된다.
당연하게도, byte offset은 6-4 = 2bit를 가진다.
여기서 위 그림을 참조했을 때, index로 나타낼 수 있는 크기는 2^8bit이다.
따라서 캐시가 가질 수 있는 엔트리의 개수는 2^8개 (256개)이다.
tag의 크기는 32 - (8 + 4 + 2) = 18 bit이다.
따라서 캐시의 한 entry의 크기는 512 + 1 + 18 = 531 bit가 되고,
총 캐시의 크기는 531 * 2^8이 된다.
'학교강의필기장 > 컴퓨터구조' 카테고리의 다른 글
컴퓨터구조[23]: virtual memory (0) | 2023.06.22 |
---|---|
컴퓨터구조[22]: associative cache (0) | 2023.06.22 |
컴퓨터구조[20]: Access a Direct Mapped Cache (0) | 2023.06.22 |
컴퓨터구조[19]: memory, Direct Mapped Cache (0) | 2023.06.22 |
컴퓨터구조[18]: Data Hazard - Stall (0) | 2023.06.22 |