다른 메모리의 위치에 빠르게 접근할 수 있는 메모리 위치의 집단.
캐시는 레벨별로 메모리에 존재하며, 깊이가 깊어질수록 메모리의 크기가 커지고 느려진다.
Hit : 특정 계층의 원하는 아이템을 접근할 때, 캐시 히트라고 한다.
Miss : Cpu에서 값 x를 찾으려고 했는데, 각 메모리 레벨을 조회하게 되는데 찾지 못할 경우(miss), 메모리 레벨이 내려가면서(하위계층 메모리 조회) main memory까지 내려가게 된다.
캐시에 데이터를 cpu가 쓸 때, 캐시에 있는 데이터는 메인 메모리에 있는 데이터와 함께 쓰인다. 즉, 이 둘의 데이터는 같다.
Write-through : 캐시의 데이터를 업데이트할 경우, 메모리 계층 중 가장 느린 메인 메모리도 업데이트하기 때문에 성능 저하로 이어질 수도 있다.
Write-back : 캐시 데이터가 업데이트되고 refresh가 될 때까지 기다렸다 메인메모리에 데이터를 쓴다. -> for문에서 순회하다가 최종값만 Write-back
으로 업데이트하는 것이다. 순회하는동안 발생하는 데이터는 캐시에 업데이트!
메모리 위치를 캐시에 어떻게 넣느냐?
Replacement Policy
어떤 것을 선택하고 교체할 것인가? 에 대한 정책. 최근에 접근한 아이템을 킵하고, 가장 오랫동안 액세스하지 않는 아이템을 교체한다(RLU). Random기법도 있다
위 사진처럼, 2-way(블럭 2개) 방법을 채택할 경우, set 0
, set 1
을 각각 0과 1, 2와 3 블럭으로 묶는다. 그 후, RLU
와 같은 정책 기반으로 맵핑 작업이 이루어진다. 처음에 0 혹은 1 블럭으로 맵핑되고, 그다음은 2 혹은 3 블럭으로 맵핑된다. 만약 모두 블럭이 맵핑되어있다면, 가장 오래된 블럭을 교체한다.