[MIPS] Data Mapping(2-Set Associate)
Set Associate Cache란?
Lower lever(ex. HD, memory)에서 data를 가져(loading)올 때 data가 들어갈 (upper level의)주소가 정해져 있는 operation입니다.
Direct mapped랑 달리 set에서는 여러 개의 block이 set의 개수만큼 들어갈 수 있으며,
Direct mapped는 다른 유효한 data가 들어오기 위해 현재 있는 cache의 값을 미뤄버려야 하지만
set associate는 그럴 필요가 없다는 것이 장점입니다.
Data가 들어갈 자리는 아래와 같은 공식으로 구할 수 있습니다.
Location in the Cache = (Block address) modulo (Number of Sets in the Cache)
Index - Data가 들어갈 upper level의 주소
Tag - 현재 upper level에 존재하는 데이터의 유효성
Data - Data
Direct mapped에서도 언급했듯이 아래와 같이 cache가 존재한다고 가정했을 때 Index는 위치 정보일 뿐 cache는 아닙니다.
Index (Set) |
Tag | Data | Tag | Data | Tag | Data | Tag | Data |
0 | ||||||||
1 |
0000(0)
0110(6)
0000(0)
0100(4)
1001(9)
2-Set associate에서는 마지막 한 bit가 data가 들어갈 주소(index)입니다.
Index | Tag | Data | Tag | Data | Tag | Data | Tag | Data |
0 | 000 | Memory[1] | ||||||
1 |
0000(0)
0110(6)
0000(0)
0100(4)
1001(9)
Index | Tag | Data | Tag | Data | Tag | Data | Tag | Data |
0 | 000 | Memory[0] | 011 | Memory[6] | ||||
1 |
0000(1)
0110(6)
0000(0)
0100(4)
1001(9)
Data가 존재하기 때문에 hit입니다.
Index | Tag | Data | Tag | Data | Tag | Data | Tag | Data |
0 | 000 | Memory[0] | 011 | Memory[6] | ||||
1 |
0000(0)
0110(6)
0000(0)
0100(4)
1001(9)
Index | Tag | Data | Tag | Data | Tag | Data | Tag | Data |
0 | 000 | Memory[0] | 011 | Memory[6] | 010 | Memory[4] | ||
1 |
0000(0)
0110(6)
0000(0)
0100(4)
1001(9)
Index | Tag | Data | Tag | Data | Tag | Data | Tag | Data |
0 | 000 | Memory[0] | 011 | Memory[6] | 010 | Memory[4] | ||
1 | 100 | Memory[9] |
◡̈