Cache란?
https://cseweb.ucsd.edu/classes/su07/cse141/cache-handout.pdf 의 자료를 참고해 작성하였다.
정의
- cache block
- 캐시 스토리지의 기본 단위이다. 여러개의 bytes로 구성된다.
- cache line
- 캐시 블록과 같다. 하지만 "row"를 뜻하는 것은 아니다.
- cache set
- 캐시 블록에서의 "row"를 말한다. cache set당 캐시 블록의 수는 cache의 layout(ex. Direct Mapped, Fully Associative Cache, Set-Associative 등)에 의해 결정된다.
- tag
- 각 캐시 블록을 구분지어주는 일종의 식별자 역할을 한다.
- valid bit
- 데이터가 유효한지를 나타내는 값으로, valid(
1
), invalid(0
)으로 나타낸다.
- 데이터가 유효한지를 나타내는 값으로, valid(
정리하면, 캐시 메모리는 여러개의 cache set으로 구성되는데, 각 cache set에 여러 cache block이 존재하게 된다.
데이터를 캐시로부터 읽어오는 과정
- 우선 어느 cache set에 저장될 지 cache set의 index를 계산한다.
- 해당 index의 cache set에 존재하는 각 cache block의 tag와 memory 주소로부터 받은 tag가 일치하는지 판단한다. 일치하면 해당 메모리 주소의 데이터가 캐시에 존재하는 것이고, 일치하지 않으면 캐시에 존재하지 않는다.
- (일치하는 경우) 해당 cache block에서 valid bit를 확인한다. 만약 valid bit가
1
이면 해당 메모리 주소의 데이터가 캐시에 있고,0
이라면 캐시에 존재하지 않는다. - (캐시에 존재하는 경우) block offset을 통해 cache block에서 찾는다.
캐시 미스가 발생했을 때, 데이터를 캐시에 저장하는 과정
- 만약에 요청한 데이터가 캐시 메모리에 존재하지 않는다면, 거기에 그대로 저장되게 된다.
- 이때, Spatial Locality의 이점을 활용하기 위해 근처에 있는 메모리 주소도 함께 가져오게 된다.
- 근처의 메모리 주소 범위로, 시작은 해당 주소의 offset을
0
으로 만들고, 끝은 offset을1
로 만들어서 계산하는데, 이때 cache block의 사이즈가 결정된 다.