CS
[CS] 캐시/캐싱
2juhyunju
2022. 5. 25. 23:15
캐시
무어의 법칙에 의해 CPU의 처리속도가 급격히 증가했지만 메모리 접근 속도는 늘어나지 못했다.
그래서 캐시는 CPU의 빠른 처리속도와 메모리의 느린 속도 차이로 인한 병목현상을 완화하고 지역성을 이용하여 데이터 접근 속도를 빠르게 하기 위한 메모리 계층이다.
캐시의 특징은 다음과 같다.
- CPU와 램사이에 위치하고 자주 사용되는 데이터들을 캐시에 저장하면 CPU가 빠르게 꺼내어 사용 할 수 있다.
- 저장 공간이 작고 비용이 비싼 대신 빠른 성능 제공
- CPU에서 요청한 데이터가 캐시 안에 있을 때는 캐시 히트(cache hit) 라고 말하며 요청한 데이터가 캐시에 존재하지 않을 때는 캐시 미스(cache miss) 라고 말한다.
캐시의 지역성
이러한 역할을 수행하기 위해선 CPU가 어떤 데이터를 원할 것인가를 어느 정도 에측할 수 있어야 한다.
이 때 예측 할 수 있는 적중률을 극대화 시키기 위해서 데이터 지역성의 원리를 사용한다.
시간 지역성
- 특정 데이터가 한번 접근되었을 경우 가까운 미리에 또 한번 데이터에 접근한 가능성이 높은것
- 메모리 상의 같은 주소에 여러 차례 쓰기를 수행할 경우
공간 지역성
- 특정 데이터와 가까운 주소가 순서대로 접근된 경우
CPU 캐시,디스크 캐시의 경우 한 메모리 주소에 접근 시 그 주소뿐 아니라 해당 블록을 전부 캐시로 가져온다. - 이 때 메모리 주소를 오름차순이나 내림차순으로 접근하면, 캐시에 이미 저장된 같은 블록의 데이터를 접근하게 되므로 캐시의 효율성이 향상된다.
캐시 종류
L1 Cache
- 프로세서와 가장 가까운 캐시
- 속도를 위해 IC와 DC로 나뉩니다.
- IC(Instruction Cache) : 메모리에서 text 영역의 데이터를 다루는 캐시
- DC(Data Cache) : 메모리에서 text 영역을 제외한 모든 데이터를 다루는 캐시
L2 Cache
- 용량이 큽니다.
- 크기를 위해 L1 Cache와 같이 나누지 않습니다.
L3 Cache
- 멀티 코어 시스템에서 여러 코어가 공유하는 캐시
캐싱
- 캐싱이란 위에서 말한 캐시 영역으로 데이터를 가져와서 접근하는 방식을 말한다.
- 속도가 느린 하드디스크의 데이터를 속도가 빠른 메모리로 가져와서 메모리상에서 읽고 쓰는 작업을 수행하는 걸
'데이터를 메모리에 캐싱한다' 라고 표현 - 또한 위에서 말한 지역성이라는 특성을 이용해서 자주 접근될 데이터를 더 빠른 속도의 메모리 상에 가지고 와서 연산을 수행하며 성능을 높이는 것이 캐싱의 목표
캐싱 라인
캐시 메모리는 메인 메모리에 비해 크기가 매우 작기 때문에 메인 메모리와 1:1 매칭이 불가능하다.
캐시가 아무리 가까이 있더라도 찾고자 하는 데이터가 어느 곳에 저장되어 있는지 몰라 모든 데이터를 순회해야 한다면 캐시의 장점을 잃기 때문에 쉽게 찾을 수 있는 구조가 필요하다. 즉, 캐시에 목적 데이터가 저장되어 있다면 바로 접근하여 출력할 수 있어야 캐시가 의미 있어진다는 것이다.
따라서, 캐시에 데이터를 저장할 때 특정 자료구조를 사용해 묶음으로 저장하는 것을 캐싱 라인이라고 한다.
Direct Mapping
- 직접 매핑으로, 메인 메모리를 일정한 크기의 블록으로 나누어 각각의 블록을 캐시의 정해진 위치에 매핑하는 방식
- 가장 간단하고 구현도 쉽지만 적중률이 낮아질 수 있다는 단점이 있다.
- 동일한 캐시 메모리에 할당된 여러 데이터를 사용할 때 충돌이 발생하게 되는 단점이 있다.
Full Associative Mapping
- 연관 매핑으로, 비어있는 캐시메모리가 있으면 마음대로 주소를 저장하는 방식
- 충돌의 위험은 적지만 비교할 때 마다 순차탐색 시간이 발생하므로 오래 걸림
- 비용이 비싸 거의 사용하지 않는다.
Set Associative Mapping
- 직접 매핑과 연관 매핑의 장점들을 고려하여 만들어진 방식
- 특정 로우를 지정해서 그 로우안의 어떤 열이든 비어있으면 저장한다.
- 직접 매핑에 비해 검색은 오래 걸리지만 저장이 빠르며 연관 매핑보다 저장은 느리지만 검색이 빠른 중간형이다.