1. 직접매핑(Direct Mapping)
메모리 주소와 캐시의 순서를 일치시킨다. 메모리가 1~100
까지 있고 캐시가 1~10
까지 있다면 1~10
까지의 메모리는 캐시의 1에 위치하고 11~20
까지의 메모리는 캐시의 2에 위치시키는 것이다. 구현이 정말 간단하지만 저 규칙을 만족시켜서 캐시를 넣다 보면 캐시가 효율적이지 않게 자꾸 교체되어야 하는 일이 생긴다. 그래서 LRU 기법을 쓴다.
예를 들면 30~40
에 해당하는 값을 자꾸 불러다 사용해야 하는데 이를 저장할 캐시 공간은 3 하나 뿐이므로 매번 캐시 교체가 일어나게 된다. 즉 적중률이 낮고 성능이 낮은 단순한 방식이다.
2. 연관매핑(Associative Mapping)
순서를 일치시키지 않는다. 필요한 메모리값을 캐시의 어디든 편하게 저장 될 수 있다. 당연히 찾는 과정은 태그마다 비교해야 하기 때문에 복잡하고 느릴 수 있지만 정말 필요한 캐시들 위주로 저장할 수 있기 때문에 적중률은 높다. 캐시가 일반 메모리보다 속도가 훨씬 빠르므로 캐시의 검색량을 신경쓰는 것 보단 적중률이 높은게 성능이 더 좋다.
3. 직접연관매핑(Set Associative Mapping)
연관매핑에 직접매핑을 합쳐 놓은 방식이다. 순서를 일치시키고 편하게 저장하되, 일정 그룹을 두어 그 그룹 내에서 편하게 저장시키는 것이다. 예를 들면 메모리가 1~100
까지 있고 캐시가 1~10
까지 있다면 캐시 1~5
에는1~50
의 데이터를 무작위로 저장시키는 것이다. 블록화가 되어 있기 때문에 검색은 좀 더 효율적으로 되고 직접매핑처럼 저장위치에 대한 큰 제약이 있는건 아니기 때문에 적중률이 많이 떨어지지도 않는다.
'CS' 카테고리의 다른 글
Cannot add or update a child row: a foreign key constraint fails 오류 (0) | 2020.12.03 |
---|