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/캐시매핑