CPU가 직접 접근할 수 있는 기억 장치
프로그램이 실행되려면 해당 프로그램이 복사되어 메모리에 적재되어야 한다. (이 때 메모리에 적재된 프로그램을 프로세스라고 한다.)
CPU는 연산을 수행한 후에 메인 메모리에 데이터를 저장하거나 필요한 데이터를 요구한다.
RAM은 Random Access Memory의 약자로, 어느 위치에 저장된 데이터든지 접근하는 데 동일한 시간이 걸리는 메모리를 뜻한다.
RAM은 DRAM과 SRAM이 있는데 주기억장치는 주로 DRAM을 의미한다.
컴퓨터의 CPU가 현재 처리중인 데이터나 명령만을 일시적으로 저장하는 휘발성 메모리이다.
따라서 전원이 꺼지면 메인 메모리에 저장된 내용들은 모두 사라진다.
컴퓨터가 꺼진 이후에도 데이터를 유지하고 싶을 경우에는 데이터를 하드디스크에 저장해야 한다.
보조기억장치보다 접근속도가 빠르다.
매번 메인 메모리에 직접 접근하는 것은 비효율적이므로, CPU와 메인 메모리 속도를 맞추기 위해 캐시가 존재한다.
메인메모리에 저장된 내용의 일부를 임시로 저장해두는 기억장치
저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다.
프로세서가 매번 메인 메모리에 접근해 데이터를 받아오면 시간이 오래걸리기 때문에 캐시에 자주 사용하는 데이터를 담아두고 해당 데이터가 필요할 때 프로세서가 메인 메모리 대신 캐시에 접근하도록하여 처리속도를 높인다.
CPU 칩에는 여러개의 캐시가 들어가며 각각의 캐시는 각자의 목적과 역할을 가지고 있다.
L1 Cache : 프로세서와 가장 가까운 캐시, 속도를 위해 I$와 D$로 나뉜다
L2 Cache : 용량이 큰 캐시, 크기를 위해 L1캐시 처럼 나누지 않는다.
L3 Cache : 멀티 코어 시스템에서 여러 코어가 공유하는 캐시
CPU에서는 L1 → L2 → L3 → DRAM 순으로 데이터를 탐색하게 된다.
캐시의 성능을 측정할 때는 Hit latency와 Miss latency가 중요한 요인으로 꼽힌다.
Hit
요청한 데이터가 캐시에 존재하는 경우이다.
히트가 발생해 캐싱된 데이터를 가져오는 시간이 hit latency이다.
Miss
요청한 데이터가 캐시에 존재하지 않는 경우이다.
미스가 발생해 상위 캐시나 메인메모리에서 데이터를 가져오는 시간이 miss latency이다.
평균 접근시간은 Hit latency + (Miss rate * Miss latency)가 된다.
캐시를 잘 활용하여 miss rate를 줄인다면 비용을 많이 줄일 수 있다.
따라서 CPU가 어떤 데이터를 원할지 어느정도 예측하여 캐시에 쓸모 있는 정보가 들어있도록 해야한다.
이 때 캐시의 효율을 극대화시키기 위해 어느 데이터를 원할지의 판단에 사용되는 것이 지역성의 원리이다.
기억 장치 내의 정보를 균일하게 액세스 하는 것이 아니라 한 순간에 특정부분을 집중적으로 참조하는 특성
자주 사용하는 데이터에 대한 판단은 지역성의 원리를 따르며 지역성은 시간지역성과 공간지역성으로 구분할 수 있다.
for(int i=0; i<10; i++)
arr[i] = i;
시간 지역성
최근 접근한 데이터에 대해 다시 접근하는 경향을 말한다.
예를 들어 반복문에서 인덱스 역할인 변수 i는 짧은 시간안에 여러 번 접근이 이뤄진다.
공간 지역성
최근 접근한 데이터의 주변 공간에 다시 접근하는 경향을 말한다.
위 반복문의 경우에는 배열 arr의 각 요소를 참조하면서 가까운 메모리 공간에 연속적으로 접근하고 있다.
빈번하게 사용되는 데이터들을 캐시에 저장했더라도, 내가 필요한 데이터를 캐시에서 찾을 때 모든 데이터를 순회하는 것은 시간 낭비이다.
즉, 캐시에 목적 데이터가 저장되어있을 때 바로 접근하여 출력할 수 있어야 캐시 활용이 의미있어진다.
따라서 캐시에 데이터를 저장할 때, set이나 map 등의 자료구조를 활용해 데이터와 데이터의 메모리 주소를 함께 묶어서 저장하는데 이를 캐싱 라인이라고 부른다.
캐시는 반응 속도가 빠른 SRAM(Static Random Access Memory)으로, 주소가 키로 주어지면 해당 공간에 즉시 접근할 수 있다.
이러한 특성은 DRAM도 마찬가지지만 하드웨어 설계상 하드웨어 설계상 DRAM은 SRAM 보다 느리다.
주소가 키로 주어졌을 때 그 공간에 즉시 접근할 수 있다는 것은 캐시가 하드웨어로 구현한 해시테이블과 같다는 의미이다.
캐시가 빠른 이유는 자주 사용하는 데이터만을 담아두기 때문이기도 하지만, 해시 테이블의 시간복잡도가 O(1) 정도로 빠르기 때문이기도 하다.
캐시는 블록으로 구성되어 있는데 각각의 블록은 데이터를 담고 있으며, 블록의 개수와 블록의 크기가 캐시의 크기를 결정한다.
CPU에 존재하는 다목적 저장 공간
레지스터는 메모리 계층의 최상위에 위치하며, 가장 빠른 속도로 접근 가능한 메모리이다.
데이터와 명령어를 저장하는 역할을 하며 일반적으로 현재 계산을 수행중인 값을 저장하는 데 사용된다.
대부분의 현대 프로세서는 메인 메모리에서 레지스터로 데이터를 옮겨와 데이터를 처리한 후 그 내용을 다시 레지스터에서 메인 메모리로 저장하는 로드-스토어 설계를 사용하고 있다.
공통점
어떤 명령어나 데이터를 저장해두는 저장 공간이다.
차이점
용도에 따른 차이점이 존재한다.