cs

캐시 매핑

ssoonn 2024. 8. 4. 22:38

매핑(사상)이란?

블록을 메모리에서 가져와서 캐시에 어떻게, 어디다 가져다 놓을건지를 정하는 것.

 

매핑의 필요성

캐시의 크기는 메모리보다 작기 때문에, 다수의 메모리 블록이 동일한 캐시 블록에 매핑된다.

 

  • 직접 매핑(direct mapping) : 메모리 블록을 정해진 하나의 캐시 블록에만 사상 (사상 = 매핑)
  • 완전 연관 매핑(fully-associative mapping) : 메모리 블록을 어떤 캐시 블록에도 사상
  • 집합 연관 매핑(set-associative mapping) : 직접 사상과 완전 연관 사상을 절충하여, 메모리 블록을 정해진 블록의 집합 내 어디든 사상

 

직접 매핑 Direct Mapping

메모리의 특정 블록은 특정 캐시라인에만 매핑하는 것.

= 메인메모리와 캐시를 똑같은 크기로 나누고 순서대로 매핑하는 것.

 

예시: 메모리가 1~100까지 있고 캐시가 1~10까지 있는 경우,

  • 1~10까지의 메모리는 캐시의 1에 위치
  • 11~20까지의 메모리는 캐시의 2에 위치

장점

  • 간단한 구현
  • 해당 자리만 확인하면 됨

단점

  • 스와핑이 빈번하게 발생
  • 예시: 30~40에 해당하는 값 사용 시, 저장할 캐시 공간이 3 하나뿐임
  • 매번 캐시 교체(스와핑)이 발생함

즉 처리가 빠르지만 충돌 발생이 잦고, 적중률 역시 낮다.

 

연관 매핑 Associative Mapping

순서를 일치시키지 않고, 관련 있는 캐시와 메모리를 매핑 -> 필요한 메모리값을 캐시의 어디에든 저장할 수 있다.

 

충돌은 적지만, 캐시의 모든 블록을 탐색해야 해서 속도가 느리다.

 

정말 필요한 캐시들 위주로 저장 -> 적중률이 높다.

  • 캐시가 일반 메모리보다 속도가 훨신 빠르므로, 캐시의 적중률이 높은 것이 성능이 좋음

 

집합 연관매핑 Set Associative Mapping

연관매핑 + 직접매핑.

순서를 일치시키면서 편하게 저장하되, 일정 집합을 나누어 각 집합에 연관 매핑을 사용하는 것.

 

집합을 나누고 각 집합에 직접 매핑을 사용하는 것.

 

예시: 메모리가 1~100까지 있고 캐시가 1~10까지 있는 경우

  • 캐시 1~5에는 1~50의 데이터를 무작위로 저장

집합으로 나눴기 때문에 스와핑을 완화시키고, 집합 내의 집합매핑을 사용할 수 있기 때문에 연관매핑처럼 모든 캐시를 뒤지는 일 없이 바로 캐시 히트, 미스 여부를 알 수 있다.

 

ref.

https://velog.io/@ssongjh55/캐시매핑

https://ssoonidev.tistory.com/35

https://gguljaem.tistory.com/entry/%EC%BA%90%EC%8B%9C%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EB%A7%A4%ED%95%91%EA%B8%B0%EB%B2%95%EC%97%90-%EB%8C%80%ED%95%9C-%EC%84%A4%EB%AA%85