[CS] 메인 메모리와 캐시

giggle·2023년 8월 1일
0
post-custom-banner

📌 메인 메모리

메인 메모리란 CPU가 직접 접근할 수 있는 기억 장치입니다. 주기억장치이자 RAM 입니다.

메인 메모리란?

프로그램이 실행되려면 해당 프로그램이 복사되어 메모리에 적재되어야 합니다. CPU는 연산을 수행한 후에 메인 메모리에 데이터를 저장하거나 필요한 데이터를 요구합니다.

RAM은 Random Access Memory의 약자로, 어느 위치에 저장된 데이터든지 접근하는 데 동일한 시간이 걸리는 메모리를 의미합니다. RAM은 DRAM과 SRAM이 있는데 주기억장치는 주로 DRAM을 의미합니다.

특징

  • 컴퓨터의 CPU가 현재 처리중인 데이터나 명령만을 일시적으로 저장하는 휘발성 메모리입니다.
    그러므로 전원이 꺼지면 메인 메모리에 저장된 내용들은 모두 사라집니다.
  • 컴퓨터가 꺼진 이후에도 데이터를 유지하고 싶을 경우에는 데이터를 하드디스크에 저장해야 합니다.
  • 보조기억장치보다 접근속도가 빠릅니다.
    -매번 메인 메모리에 직접 접근하는 것은 비효율적이므로, CPU와 메인 메모리 속도를 맞추기 위해 캐시가 존재합니다.

📌 캐시

메인메모리에 저장된 내용의 일부를 임시로 저장해두는 기억장치이자 CPU와 주기억장치의 속도 차이로 성능 저하를 방지하기 위한 방법입니다.

캐시란?

저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공합니다. 프로세서가 매번 메인 메모리에 접근해 데이터를 받아오면 시간이 오래걸리기 때문에 캐시에 자주 사용하는 데이터를 담아두고 해당 데이터가 필요할 때 프로세서가 메인 메모리 대신 캐시에 접근하도록하여 처리속도를 높입니다.

캐시의 종류

CPU 칩에는 여러개의 캐시가 들어가며 각각의 캐시는 각자의 목적과 역할을 가지고 있습니다.

L1 Cache : 프로세서와 가장 가까운 캐시, 속도를 위해 ID와 D로 나눔
Instruction Cache : 메모리의 TEXT영역 데이터를 다루는 캐시
Data Cache(D$) : TEXT영역을 제외한 모든 데이터를 다루는 캐시
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가 어떤 데이터를 원할지 어느정도 예측하여 캐시에 쓸모 있는 정보가 들어있도록 해야한다.
이 때 캐시의 효율을 극대화시키기 위해 어느 데이터를 원할지의 판단에 사용되는 것이 지역성의 원리이다.

Locality(지역성)

기억 장치 내의 정보를 균일하게 액세스 하는 것이 아니라 한 순간에 특정부분을 집중적으로 참조하는 특성

자주 사용하는 데이터에 대한 판단은 지역성의 원리를 따르며 지역성은 시간지역성과 공간지역성으로 구분할 수 있다.

for(int i=0; i<10; i++)
arr[i] = i;

시간 지역성
최근 접근한 데이터에 대해 다시 접근하는 경향을 말한다.
예를 들어 반복문에서 인덱스 역할인 변수 i는 짧은 시간안에 여러 번 접근이 이뤄진다.

공간 지역성
최근 접근한 데이터의 주변 공간에 다시 접근하는 경향을 말한다.
위 반복문의 경우에는 배열 arr의 각 요소를 참조하면서 가까운 메모리 공간에 연속적으로 접근하고 있다.

캐싱라인

빈번하게 사용되는 데이터들을 캐시에 저장했더라도, 내가 필요한 데이터를 캐시에서 찾을 때 모든 데이터를 순회하는 것은 시간 낭비이다.
즉, 캐시에 목적 데이터가 저장되어있을 때 바로 접근하여 출력할 수 있어야 캐시 활용이 의미있어진다.

따라서 캐시에 데이터를 저장할 때, set이나 map 등의 자료구조를 활용해 데이터와 데이터의 메모리 주소를 함께 묶어서 저장하는데 이를 캐싱 라인이라고 부른다.

캐시의 구조

캐시는 반응 속도가 빠른 SRAM(Static Random Access Memory)으로, 주소가 키로 주어지면 해당 공간에 즉시 접근할 수 있다.
이러한 특성은 DRAM도 마찬가지지만 하드웨어 설계상 하드웨어 설계상 DRAM은 SRAM 보다 느리다.

주소가 키로 주어졌을 때 그 공간에 즉시 접근할 수 있다는 것은 캐시가 하드웨어로 구현한 해시테이블과 같다는 의미이다.
캐시가 빠른 이유는 자주 사용하는 데이터만을 담아두기 때문이기도 하지만, 해시 테이블의 시간복잡도가 O(1) 정도로 빠르기 때문이기도 하다.

캐시는 블록으로 구성되어 있는데 각각의 블록은 데이터를 담고 있으며, 블록의 개수와 블록의 크기가 캐시의 크기를 결정한다.


참고


피드백 및 개선점은 댓글을 통해 알려주세요😊

profile
배움을 글로 기록하는 개발자가 되겠습니다.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

이런 유용한 정보를 나눠주셔서 감사합니다.

답글 달기