캐시 메모리
Last updated
Last updated
캐시 메모리 정의
CPU와 메인 메모리 사이에 위치한 임시 저장 장치
메인 메모리로부터 전송된 데이터의 일부 또는 앞으로 전송될 데이터의 일부를 저장
배경
메모리 계층 구조에서 발생하는 성능 격차 해결
현대 CPU는 매우 빠르게 작동하지만, 메인 메모리 접근 속도는 상대적으로 느림
이로 인한 데이터 가져오기 지연이 성능 저하를 초래
캐시 메모리의 역할
CPU와 메인 메모리 사이의 속도 차이 완화
자주 사용하는 데이터를 빠른 캐시 메모리에 저장
CPU가 메인 메모리 대신 캐시 메모리에서 데이터를 빠르게 액세스 가능
L1 캐시(Level 1)
CPU 코어 내부에 위치한다
가장 빠르지만 용량이 작다
L2 캐시(Level 2)
CPU 칩 내부에 위치하며, 각각의 코어나 코어 그룹에 할당될 수 있다
L1보다는 느리지만 용량이 크다
L3 캐시(Level 3)
모든 CPU 코어가 공유하는 캐시로 CPU 칩 내부에 위치한다
L2 보다는 느리지만 더 큰 용량을 가진다.
캐시 라인(or 캐시 블록):
캐시에서의 데이터 저장 단위. 일반적으로 캐시 라인은 여러 바이트로 구성된다. ex) 32바이트. 64바이트
특정 메모리 주소 범위의 데이터를 저장한다
메모리로부터 데이터를 가져올 때는 이 캐시 라인 단위로 올라온다
CPU가 특정 주소의 데이터에 접근하려 할 때, 해당 주소를 포함하는 전체 캐시 라인이 캐시로 가져와진다.
교체 정책 (Replacement Policy):
캐시가 꽉 찼을 때 어떤 캐시 라인을 교체할지를 결정하는 알고리즘
LRU (Least Recently Used)
: 가장 오랫동안 사용되지 않은 캐시 라인을 교체한다.
FIFO (First-In, First-Out)
: 가장 먼저 캐시에 올라온 라인을 교체한다.
Random
: 무작위의 캐시 라인을 교체한다.
쓰기 정책 (Write Policy):
CPU가 데이터를 쓰려 할 때, 해당 데이터의 캐시와 주기억장치의 동기화 방법을 결정하는 정책.
Write Through
: 데이터를 캐시와 메인 메모리에 동시에 기록한다.
Write Back
: 캐시에만 먼저 데이터를 기록하고, 특정 조건에서 메인 메모리에 업데이트한다.
캐시 동기화란 여러 캐시가 동일한 메모리 위치에 대한 데이터를 동시에 가질 때, 그 데이터의 일관성을 유지하는 것을 의미한다.
예를 들어, 한 프로세서의 캐시가 특정 메모리 주소의 값을 변경했을 때, 다른 캐시들도 이 변경을 인식하고 자신의 데이터를 갱신해야 한다.
일관성을 위해 여러 프로토콜이 사용되며, MESI 프로토콜이 대표적이다.
특징
주 메모리의 각 블록은 캐시의 한 라인에만 매핑될 수 있다
주소의 특정 비트를 사용하여 캐시 라인을 결정한다
장점
간단한 구조로 구현 가능하며, 캐시 접근 시간이 빠르다
주소를 통해 직접적으로 해당 캐시 라인을 찾을 수 있다
단점
특정 캐시 라인이 과도하게 사용될 수 있는 반면, 다른 라인들은 사용되지 않을 수 있다 (캐시 충돌)
이로 인해 효율성이 떨어질 수 있다
특징:
주 메모리의 블록은 캐시 내의 어떤 라인에도 매핑될 수 있다
데이터를 찾을 때 캐시의 모든 라인을 동시에 검사한다 (태그 비교)
장점:
최적의 캐시 활용이 가능하며, 충돌 문제가 없다
잦은 데이터 교체 없이 다양한 데이터를 캐시에 유지할 수 있다
단점:
모든 라인을 검사해야 하므로, 태그 비교 회로가 복잡하고, 캐시 접근 시간이 길어질 수 있다
특징:
캐시는 여러 세트로 나뉘며, 각 세트에는 여러 개의 라인이 있다
주 메모리의 블록은 특정 세트에 매핑되지만, 그 세트 내에서는 어떤 라인에도 매핑될 수 있다
장점:
직접 매핑의 간결함과 완전 연관 매핑의 유연성을 조합한 방식이다
충돌을 줄이면서도 태그 비교 회로의 복잡성을 감소시킬 수 있다
단점:
여전히 특정 세트 내에서 충돌이 발생할 수 있다
구현 복잡성이 직접 매핑보다는 높다
프로그램의 실행 특성상 연속적으로 동작하게 되므로, 한 번 접근한 데이터나 그 주변의 데이터를 곧 다시 사용할 가능성이 높다.
시간적 지역성 (Temporal Locality)
한 번 접근된 데이터에 대해 가까운 미래에 다시 접근될 확률이 높다.
예를 들어, 반복문 내에서의 변수 접근, 스택의 최상위 데이터 등이 이에 해당한다.
공간적 지역성 (Spatial Locality)
한 번 접근된 데이터의 주변 데이터에 대해 가까운 미래에 접근될 확률이 높다.
예를 들어, 배열을 순차적으로 처리하는 경우, 현재 위치의 다음 배열 요소에 접근하는 경우가 이에 해당한다
컴퓨터에서 메모리는 일차적원적인 구조를 가진다. 이차원 배열도 실제로는 이 일차원 메모리에 연속적으로 저장된다. 예를 들어 2x2 이차원 베열이 있다면 다음과 같이 저장된다 [0][0], [0][1], [1][0], [1][1]
가로로 탐색(배열의 행을 연속적으로 탐색하는 것)
[0][0] -> [0][1] -> ...
메모리에 연속적으로 저장된 데이터를 순차적으로 접근하므로 공간적 지역성이 높게 된다
따라서 캐시 히트율이 높아져 성능이 좋아질 가능성이 크다
세로로 탐색(배열의 열을 연속적으로 탐색하는 것)
[0][0] -> [1][0] -> ...
메모리에 연속적으로 저장되어 있지 않는 데이터에 접근하게 되므로 공간적 지역성을 활용하기 어렵다
따라서 캐시 미스율이 가로로 탐색하는 것보다 높아질 수 있다
메모리 계층성은 컴퓨터 시스템 내에서 다양한 메모리와 스토리지 유형이 속도, 크기, 비용 등의 특성에 따라 계층적으로 구성되어 있다는 개념이다
이 계층 구조는 최상위의 빠른 속도와 작은 크기를 가진 메모리부터 최하위의 느린 속도와 큰 크기를 가진 스토리지까지 범위를 갖는다
레지스터 (Registers):
CPU 내에 위치.
매우 빠르고 크기가 매우 작음.
비용이 가장 높음.
캐시 메모리 (Cache Memory):
Level 1 (L1), Level 2 (L2), Level 3 (L3) 등 여러 레벨로 나뉨.
CPU에 가깝게 위치하며, 레지스터보다는 크지만 느림.
비용은 레지스터보다 낮지만 주 메모리보다 높음.
주 메모리 (Main Memory or RAM):
대부분의 응용 프로그램과 데이터가 로드되는 장소.
캐시보다는 느리지만, 보조 메모리보다 빠름.
비용은 캐시보다 낮음.
보조 메모리 (Secondary Memory):
하드 드라이브 (HDD), 솔리드 스테이트 드라이브 (SSD) 등.
주 메모리보다 훨씬 크지만 느림.
보통 데이터의 지속적인 저장을 위해 사용됨.
테이프 드라이브 (Tertiary Memory):
아카이브나 백업용으로 사용.
매우 느리지만, 대용량의 데이터를 저장하기에 적합.
빠른 메모리는 비용이 높기 때문에 크기를 작게 유지하며, 느린 메모리는 비용이 낮기 때문에 크기를 크게 유지한다. 프로그램의 실행 중에는 자주 접근되는 데이터나 명령어는 빠른 메모리 (예: 캐시나 레지스터)에 저장되고, 자주 접근되지 않는 데이터는 느린 메모리 (예: 하드 드라이브)에 저장된다.