디스크 캐시는 디스크로부터 읽은 내용을 일부 보존해두는 메모리 영역을 말한다. 나중에 같은 데이터를 읽어야 할 경우가 생기면 실제 디스크에서 읽는 게 아니라 디스크 캐시에서 빠르게 읽어낼 수 있다.
이는 메모리에서 읽는 속도가 디스크에서 읽는 속도보다 빠르기 때문이다. 결론적으로 디스크 캐시에 의해 디스크 접근 속도가 향상된다고 할 수 있다.
주 기억장치(RAM)와 보조기억장치(하드디스크) 사이에 존재하는 캐시
디스크 캐시를 활용하는 대표적인 OS는 윈도우이다. 과거에는 사용자가 디스크 캐시의 크기를 지정할 수 있었지만 98이후부터 불가능해졌다. 더군다나 지금은 하드 디스크의 액세스 속도가 향상되어 디스크 캐시의 효과는 크지 않다.
캐시 메모리는 속도가 빠른 장치와 느린 장치간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리이다.
1) CPU 코어와 메모리 사이의 병목 현상 완화
2) 웹 브라우저 캐시 파일은, 하드디스크와 웹 페이지 사이의 병목 현상을 완화
이러한 역할을 수행하기 위해서는 CPU가 어떤 데이터를 원할 것인가를 어느 정도 예측 할 수 있어야 한다. 캐시의 성능은 작은 용량의 캐시 메모리에 CPU가 이후에 참조할, 쓸모 있는 정보가 어느 정도 들어있느냐에 따라 좌우되기 때문이다.
이 때, 적중률(Hit rate)을 극대화 시키기 위해 데이터 지역성 원리를 사용한다.
지역성의 전제 조건으로 프로그램은 모든 코드나 데이터를 균등하게 Access 하지 않는다는 특성을 기본으로 한다. 즉, Locality란 기억 장치 내의 정보를 균일하게 Access하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성인 것이다. 이 데이터 지역성은 대표적으로 시간 지역성과 공간 지역성으로 나뉜다.
시간 지역성 : 최근에 참조된 주소의 내용은 곧 다음에 다시 참조되는 특성. (for나 while 같은 반복문에서 사용하는 조건 변수처럼)
공간 지역성 : 대부분의 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성
캐시에 데이터를 저장할 때는, 이러한 참조 지역성(공간)을 최대한 활용하기 위해 해당 데이터 뿐만 아니라, 옆 주소의 데이터도 같이 가져와 미래에 쓰일 것을 대비한다.
Cache Hit : CPU가 요청한 데이터가 캐시에 존재하는 것
Cache Miss : 데이터가 캐시에 없어서 DRAM에서 가져오는 것
1) Cold miss
해당 메모리 주소를 처음 불러서 나는 미스
2) Conflict miss
캐시 메모리에 A와 B 데이터를 저장해야 하는데, A와 B가 같은 캐시 메모리 주소에 할당되어 있어서 나는 미스
Direct mapped cache에서 많이 발생한다.
3) Capacity miss
캐시 메모리의 공간이 부족해서 나는 미스
Conflict는 주소 할당 문제, Capacity는 공간 문제
캐시는 프로세서 가까이에 위치하면서 빈번하게 사용되는 데이터를 놔두는 장소이다. 하지만 캐시가 아무리 가까이 있더라고 찾고자하는 데이터가 어느 곳에 저장되어 있는지 몰라 모든 데이터를 순회해야 한다면 시간이 오래 걸리게 된다. 즉, 캐시에 목적 데이터가 저장되어 있다면 바로 접근하여 출력할 수 있어야 캐시가 의미 있어진다는 것이다.
그렇기 때문에 캐시에 데이터를 저장할 때, 특정 자료구조를 사용하여 묶음으로 저장하게 되는데 이를 캐싱 라인 이라고 한다.
다양한 주소에 있는 데이터를 사용하므로 빈번하게 사용하는 데이터의 주소는 흩어져 잇다. 따라서 캐시에 저장하는 데이터에는 데이터의 메모리 주소 등을 기록해 둔 태그를 달아놓을 필요가 있다. 이러한 태그들의 묶음을 캐싱 라인이라고 하고 메모리로부터 가져올 때도 캐싱 라인을 기준으로 가져온다.
1) Direct Map(Direct Mapped Cache)
가장 기본적인 구조로, DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되는 다대일 방식
00 001 -> 001
00 101 -> 101
이때 000이 인덱스 필드
, 이를 제외한 나머지 앞에 있는 숫자가 태그 필드
라고 한다.
이처럼 캐시 메모리는 인덱스 필드 + 태그 필드 + 데이터 필드로 구성된다.
장점: 간단하고 빠름
단점: Conflict Miss 발생
2) Full Associative
비어있는 캐시 메모리가 있으면, 마음대로 주소를 저장하는 방식.
저장할 때는 매우 간단하지만, 찾을 때가 복잡하다.
조건이나 규칙이 없어서 특정 캐시 Set 안에 있는 모든 블럭을 한 번에 찾아 원하는 데이터가 있는지 검색해야 한다. CAM이라는 특수한 메모리 구조를 사용해야하지만 가격이 매우 비싸다!
3) Set Associative
Direct + Fully 방식이다.
특정 행을 지정하고, 그 행안의 어떤 열이든 비어있을 때 저장하는 방식이다.
Direct에 비해 검색 속도는 느리지만, 저장이 빠르다
Fully에 비해 저장 속도는 느리지만, 검색은 빠르다.
위에 두 가지보다 나중에 나왔다