기본 cache memory 구조

mydailylogs
|2022. 11. 28. 01:27

각 메모리 주소가 M = 2m개의 고유한 주소를 구성하는 m비트를 갖는 컴퓨터 시스템에 대해 생각해보자. 그림에 나타낸 것처럼 이 시스템에 대한 캐시는 S = 2^s개의 Cache set들의 배열로 구성된다. 각 집합은 다시 E개의 Cache Line들로 이뤄지며, 각 라인은 B = 2^b 바이트의 데이터 블록, 해당 라인이 의미 있는 정보를 포함하고 있는지 여부를 나타내는 valid bit, 캐시 라인에 저장된 블록을 유일하게 구분할 수 있는 t = m - (b + s) 의 tag bit(현재 블록의 메모리 주소의 일부분으로 구성)로 구성된다.

일반적으로 캐시의 구성은 순서 쌍_(S, E, B, M)_으로 규정할 수 있다. 캐시의 크기 C는 모든 블록의 크기를 합하는 형태로 설명한다. 태그비트와 유효비트는 여기에 포함되지 않는다. 따라서 _C = S x E x B_로 나타낸다.

CPU가 메인 메모리 주소 A에서 하나의 워드를 읽으라는 load 인스트럭션에 의해 지시를 받을 때, CPU는 주소 A를 캐시로 보낸다.

캐시가 해당 워드의 사본을 가지고 있는지 어떻게 알 수 있을까?

캐시는 요청된 워드를 간단히 주소 비트만 조사해서 찾아낼 수 있도록 구성되어 있으며, 이런 방식은 매우 단순한 해시 함수를 사용하는 해시 테이블과 유사하다. 동작하는 방식은 다음과 같다.

  1. 매개변수 S와 B는 m 주소 비트를 세 개의 그림과 같은 필드로 나눈다. A(Address)의 s 집합 인덱스 비트는 S 집합 배열의 인덱스를 구성한다. 집합 인덱스 필드를 통해 워드가 어떤 집합을 찾을지가 결정된다.
  2. 어떤 집합에 저장되어야 하는지를 알게 되었다면, A의 t 태그비트는 몇 번째 라인이 워드를 포함하고 있는지를 알려준다. 이때 해당하는 Cache Line의 유효비트가 1이고, 해당 줄의 태그비트가 주소 A의 태그 비트와 일치할 경우에만 해당 워드를 포함한다.
  3. 만약 집합 인덱스에 의해 식별된 집합 내의 태그로 라인을 찾았다면, b 블록 오프셋을 사용하면 B-바이트 데이터 내 워드의 오프셋을 알 수 있다.