컴퓨터 과학에서 데이터나 값을 미리 복사해놓는 임시 장소를 가리킨다.
캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.
캐시에 데이터를 미리 복사해놓으면 계산이나 접근시간없이 더 빠른 속도로 데이터에 접근할 수 있다.
내 주변의 대표적인 예시 : JPA 1차캐시
대용량의 메인 메모리 접근을 빠르게 하기 위해 CPU칩 내부나 바로 옆에 탑재하는 작은 메모리이다.
디스크 버퍼라고도 불리며 1980년대 이후 판매되는 대부분의 하드디스크는 디스크 제어와 인터페이스를 위해 작은 컴퓨터를 내장하고있다.
이 작은 컴퓨터는 대게 디스크에 입출력되는 데이터를 저장하는 작은 메모리를 갖고있는데, 이를 디스크캐시라고 한다.
- 디스크캐시의 용도
- 미리읽기
운영체제에서 디스크에 읽기/쓰기를 요청할 때, 디스크 암은 헤드를 해당하는 트랙에 올려 놓은 뒤 일정 시간이 걸려야 비로소 데이터를 읽을 수 있다. 그러나, 운영 체제는 대개 첫 번째 섹터 말고도 그 이후 섹터를 연이어 요구하는 경우가 많기 때문에 연속된 위치에 대한 반복적 접근 시간을 아끼기 위해 디스크는 뒷부분의 데이터를 미리 읽어서 캐시에 저장해 놓는다. - 속도조절
디스크의 입출력 인터페이스는 대개 디스크 플래터가 데이터를 읽어들이는 속도에 비해 훨씬 느리다.
그러므로 디스크 암이 빠르게 읽고 쓰기를 수행하기 위해서 데이터를 인터페이스에 넘기기전에 캐시에 잠시 저장해놓는다. - 쓰기가속
운영체제가 디스크에 쓰기를 요청했을 때, 디스크 내부의 컴퓨터는 캐시에 데이터를 저장해놓고 디스크 암이 쓰기를 끝내기도 전에 운영체제에게 쓰기가 끝났음을 보고할 수 있다.
이렇게 하면 운영체제는 디스크 쓰기가 끝나는 것을 기다릴 필요 없이 다음 작업을 신속하게 진행할 수 있다.
그러나 이 방법은 디스크 암이 쓰기를 마치기 앞서 전원이 차단되는 일이 일어나면 데이터가 사라지거나 파일 시스템이 망가질 우려가 있어, 쓰기 가속 기법은 논쟁의 대상이 되고 있다. 최신 RAID 컨트롤러는 이 문제를 해결하기 위해 배터리를 이용한 백업 시스템을 구현하기도 하지만, 데이터 정확성을 중요하게 여기는 다른 시스템에서는 쓰기 가속 기법을 사용하지 않는 경우도 있다. - 명령큐
최신 시리얼 ATA 디스크와 대부분의 SCSI 디스크는 다른 명령을 수행하고 있는 중에도 여러 개의 명령을 추가로 받을 수 있다. 이 명령 큐는 나중에 처리하기 위해 디스크 캐시에 저장된다. 명령 큐는 쓰기 가속과는 달리, 쓰기가 완전히 끝났을 때 운영 체제에게 그 사실을 알림으로써 파일 시스템의 정확성을 유지한다.
- 미리읽기
CPU 캐시는 하드웨어를 통해 관리되고, 그 밖의 다른 캐시들은 대개 소프트웨어적으로 관리된다. 운영 체제의 메인 메모리를 하드 디스크에 복사해 놓는 페이지 캐시는 운영 체제 커널과 파일 시스템을 통해 관리된다. BIND DNS 데몬은 도메인 이름과 IP 주소 사이의 매핑을 저장해 둔다.
신뢰성이 적은 네트워크(이더넷 등)에서, 네트워크 사이에 주고 받는 데이터를 캐시해 놓는 것은 매우 흔한 일이다.
이를테면, 웹 브라우저는 최근 방문한 사이트를 캐시에 저장해 놓는다. 많은 인터넷 제공업체들과 대규모 네트워크의 운영자들은 인기 있는 웹 페이지의 캐시를 프록시 서버에 저장하여 웹 페이지 요청에 응답하게 함으로써 네트워크 대역폭을 아낀다.
구글 검색 엔진은 검색 대상 사이트들의 내용을 캐시에 저장해 검색 엔진에 사용하기도 하고, 검색 결과의 일부로서 사용자들에게 보여 주기도 한다.
특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은 것을 시간적 지역성이라고 한다.
메모리 상의 같은 주소에 여러 차례 읽기 쓰기를 수행할 경우 상대적으로 작은 크기의 캐시를 사용해도 효율성을 꾀할 수 있다.
특정 데이터와 가까운 주소가 순서대로 접근되었을 경우를 공간적 지역성이라고 한다.
CPU 캐시나 디스크 캐시의 경우 한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져오게 된다.
이 때 메모리 주소를 오름차순이나 내림차순으로 접근한다면, 캐시에 이미 저장된 같은 블록의 데이터를 접근하게 되므로 캐시의 효율성이 크게 향상된다.