캐시 는 Data 나 Value 를 미리 복사해놓는 임시 장소를 가리킨다.
캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.
캐시는 시스템의 효율성을 위해 여러 분야에서 두루 쓰이고 있다.
대용량의 메인 메모리 접근을 빠르기 위해서 CPU 칩 내부나 바로 옆에 탑재하는 작은 메모리이다.
하드 디스크에 포함된 작은 컴퓨터(=메모리), 디스크 제어와 외부와의 인터페이스를 위한 목적으로 보유. 그 종류와 목적은 다음과 같다.
OS(Operating System) 에서 디스크에 읽기/쓰기를 요청할 때, Disk Arm 은 Head를 Track 에 올려 놓은 뒤, 일정 시간 후 데이터를 읽을 수 있다. 그러나 OS 는 대부분 첫 번째 Sector 뿐만 아니라 그 이후의 Sector 를 연이어 요구하는 경우가 많기 때문에, 연속된 위치에 대한 반복적 접근 시간을 아끼기 위해서 해당 데이터를 캐시에 저장해둔다.
Disk 의 Input/Output Interface 는 대게 Disk Platter 보다 느리다.
이 때 Disk 가 Input/Output Interface 에 데이터를 넘기기 전에 캐시에 저장해둔다.
OS 가 Disk 에 쓰기를 요청했을 때, Disk 내부의 컴퓨터(=메모리)는 캐시에 데이터를 저장해 놓고 Disk Arm 이 쓰기를 끝내기 전에 OS 에게 쓰기가 끝났음을 보고할 수 있다.
이렇게 하면 OS 는 다음 작업을 신속하게 할 수 있는 장점이 있다.
그러나 단점도 있는데, Disk Arm 이 쓰기를 끝내기 전에 전원이 차단되면 Data 가 사라지거나 File System 이 망가질 우려가 있다. 이러한 문제점을 해결하기 위해서 배터리를 이용한 백업 시스템을 구현하기도 하지만, Data Accuracy 를 중요하게 여기는 다른 System 에서는 쓰기 가속 기법을 사용하지 않는 경우도 있다.
최신 시리얼 ATA 디스크와 대부분의 SCSI 디스크는 다른 명령을 수행하고 있는 와중에도 여러 개의 명령을 추가로 받을 수 있다. 이렇게 추가로 받은 명령을 캐시에 저장한다.
쓰기 가속과는 다르게 실제로 Disk Arm 이 쓰기를 끝내야 OS 에 종료를 알린다. 이를 통해 Data Accuracy 를 유지할 수 있다.
CPU Cache 는 HW:Hardware 를 통해 관리되고 다른 Cache 들은 대게 SW:Software 적으로 관리된다.
OS 의 Main Memory 를 Disk 에 복사 해놓는 Page Cache 는 OS [커널](https://ko.wikipedia.org/wiki/%EC%BB%A4%EB%84%90_(%EC%BB%B4%ED%93%A8%ED%8C%85)과 File System 을 통해 관리된다.
BIND DNS 데몬은 Domain Name 과 IP Address 사이의 Mapping 을 저장해둔다.
신뢰성이 적은 Network에서 Network 사이에 주고 받는 Data 를 Cache 해놓는 것은 매우 흔한 일이다.
이를테면 Broswer 는 최근 방문한 사이트를 캐시에 저장해둔다.
많은 Internet Provider 과 Network Operator 들은 인기있는 웹 페이지의 캐시를 Proxy Server 에 저장하여 웹 페이지 요청에 응답하게 함으로써, Network 대역폭을 아낀다.
Cache 가 효율적으로 동작하려면, 저장할 Data가 지역성을 가져야 한다.
특정 Data 가 한 번 접근되었을 경우, 가까운 미래에 또 한 번 Data 에 접근할 가능성이 높은 것을 의미한다.
메모리 상의 같은 주소에 여러 차례 읽기 쓰기를 수행할 경우, 상대적으로 같은 크기의 캐시를 사용해도 효율성을 추구할 수 있다.
특정 데이터와 가까운 주소가 ㅅ누서대로 접근되었을 경우를 의미한다.
CPU Cache 나 Disk Cache 의 경우 한 Memory Address 에 접근할 때 그 Address 뿐만 아니라 해당 Block 을 전부 Cache 에 가져오게 된다. 이 때, Memory Address 를 오름차순이나 내림차순으로 접근한다면 캐시의 효율성잌 ㅡ게 향상된다.