자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소
캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용.
캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있음
메모리 계층 구조 - 데이터 저장 공간은 속도와 용량 등 특성에 맞게 역할을 나눠서 사용
데이터 처리속도를 높이기 위해 자주 사용되는 데이터를 담아두고, 해당 데이터가 필요할 때 캐시에 접근
L1 Cache
-프로세서와 가장 가까운 캐시
-속도를 위해 IC와 DC로 나뉜다.
-IC(Instruction Cache) : 메모리에서 text 영역의 데이터를 다루는 캐시
-DC(Data Cache) : 메모리에서 text 영역을 제외한 모든 데이터를 다루는 캐시
L2 Cache
-용량이 크다.
-크기를 위해 L1 Cache와 같이 나누지 않는다.
L3 Cache
-멀티 코어 시스템에서 여러 코어가 공유하는 캐시
Cache는 아래와 같은 경우에 사용을 고려하면 좋다.
접근 시간에 비히 원래 데이터를 접근하는 시간이 오래 걸리는 경우(서버의 균일한 API 데이터)
반복적으로 동일한 결과를 돌려주는 경우(이미지나 썸네일 등)
주기억장치에서 자주 사용하는 프로그램과 데이터를 저장해두어 속도를 빠르게 하는 메모리
속도가 빠른 장치와 느린 장치간의 속도 차에 따른 병목현상을 줄이기 위한 범용 메모리
CPU가 어떤 데이터를 원하는지 어느 정도 예측할 수 있어야 한다.
캐시 메모리에 CPU가 이후에 참조할, 필요 있는 정보가 어느 정도 들어있느냐에 따라 캐시의 성능이 좌우되기 때문
주기억장치와 CPU사이에 위치
메모리 계층 구조에서 가장 빠른 소자이며, 처리속도가 거의 CPU의 속도와 비슷할 정도의 속도를 가지고 있다.
캐시메모리를 사용하면 주 기억장치를 접근하는 횟수가 줄어들어 컴퓨터의 처리속도가 향상
캐시의 크기는 보통 수십 KByte ~ 수백 KByte
지역성이란 기억장치 내의 정보를 균일하게 접근하는 것이 아닌 어느 한순간에 특정 부분을 집중적을 참조하는 특성 합니다. 데이터의 접근이 시간적, 공간적으로 가깝게 일어나는 것을 의미하며 캐시가 효율적으로 동작하려면, 캐시의 적중률을 극대화시켜야 한다.
캐시에 저장할 데이터가 지역성(Locality)을 가져야 한다.
지역성이란, 데이터 접근이 시간적, 혹은 공간적으로 가깝게 일어나는 것을 의미한다.
지역성의 전제 조건으로 프로그램은 모든 코드나 데이터를 균등하게 Access하지 않는다는 특성을 기본으로 한다.
1) 시간적 지역성
최근에 참조된 주소의 내용은 곧 다음에 다시 참조되는 특성.
특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은 것
메모리 상의 같은 주소에 여러 차례 읽기 쓰기를 수행할 경우,
상대적으로 작은 크기의 캐시를 사용해도 효율성을 꾀할 수 있다.
2) 공간적 지역성
공간적 지역성은 기억장치 내에 서로 인접하여 저장되어 있는 데이터들이 연속적으로 액세스 될 가능성이 높아지는 특성이다.
CPU 캐시나 디스크 캐시의 경우 한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져오게 된다.
이때 메모리 주소를 오름차순이나 내림차순으로 접근한다면, 캐시에 이미 저장된 같은 블록의 데이터를 접근하게 되므로 캐시의 효율성이 크게 향상된다.
3) 순차적 지역성
분기가 발생하지 않는 한 명령어들은 기억장치에 순서대로 인출되어 실행
캐시가 아무리 CPU에 가깝게 위치하더라도, 데이터가 캐시 내의 어느 곳에 저장되어 있는지 찾기가 어려워 모든 데이터를 순회해야 한다면 캐시의 장점을 잃기 때문에 쉽게 찾을 수 있는 구조가 필요
따라서, 캐시에 데이터를 저장할 때 특정 자료구조를 사용하여 묶음으로 저장하는데, 이를 캐싱 라인(Caching Line)이라고 한다. 빈번하게 사용되는 데이터의 주소들이 흩어져 있기 때문에 캐시에 저장하는 데이터에는 데이터의 주소 등을 기록해둔 태그를 달아둘 필요가 있다. 이러한 태그들의 묶음을 의미
캐시 메모리의 매핑 프로세스
주기억장치로부터 캐시 메모리에 데이터를 가져와 저장하는 방법
- 직접 매핑(Direct Mapping)
-주기억장치의 블록들이 지정된 한 개의 캐시 라인으로만 사상될 수 있는 매핑 방법.
메모리의 특정 블럭은 특정 캐싱 라인에만 저장
간단하고 구현하는 비용이 적다는 장점이 있지만 캐시 적중률이 낮아질 수 있다.- 연관 매핑(Associate Mapping)
-순서를 일치시키지 않고 필요한 메모리 값(데이터)을 캐시의 어디든지 저장
찾는 과정이 복잡하고 느리지만 충돌이 적으며 필요한 캐시 위주로 저장하기에 적중률 높음- 집합 연관 매핑(Set Associate Mapping)
-직접 매핑과 연관 매핑의 장점만을 취한 방식. 집합 간의 순서는 일치시키는 반면 집합 내에서는 순서를 일치시키지 않고 편하게 저장.