캐시 메모리
캐시 메모리 (Cache Memory)
캐시 메모리(Cache Memory)는 CPU와 주기억장치(Main Memory, RAM) 사이에 위치하여, CPU가 자주 사용하는 데이터를 임시로 저장해 두는 작고 빠른 메모리입니다. CPU의 처리 속도와 주기억장치의 접근 속도 차이로 발생하는 병목 현상을 줄여, 시스템의 전반적인 성능을 향상시키는 것이 주된 목적입니다.
🚀 캐시 메모리의 필요성
- CPU와 주기억장치 간의 속도 차이 해소
> * CPU는 매우 빠르게 동작하지만, 주기억장치(RAM)는 CPU에 비해 훨씬 느립니다. 이 속도 차이로 인해 CPU가 데이터를 기다리는 시간이 길어져 전체 시스템 성능이 저하되는 '병목 현상(Bottleneck)'이 발생합니다.
- 데이터 접근 속도 향상
> * 캐시 메모리는 CPU가 자주 사용하는 데이터를 미리 가져다 놓음으로써 CPU가 데이터를 기다리는 시간을 줄여줍니다.
- 지역성 (Locality of Reference) 원리 활용
> * 캐시 메모리는 프로그램의 '지역성' 특성을 활용하여 성능을 극대화합니다. > * 시간 지역성 (Temporal Locality) : 최근에 참조된 데이터는 가까운 미래에 다시 참조될 가능성이 높습니다. > * 공간 지역성 (Spatial Locality) : 최근에 참조된 데이터 주변의 데이터는 가까운 미래에 참조될 가능성이 높습니다.
⚙️ 캐시 메모리의 동작 원리
- 캐시 히트 (Cache Hit) : CPU가 찾으려는 데이터가 캐시 메모리에 존재하는 경우. CPU는 메인 메모리까지 가지 않고 캐시에서 바로 데이터를 가져오므로 매우 빠르게 접근합니다.
- 캐시 미스 (Cache Miss) : CPU가 찾으려는 데이터가 캐시 메모리에 없는 경우. CPU는 메인 메모리에서 데이터를 가져와야 하며, 이때 가져온 데이터를 캐시에도 저장합니다.
- 캐시 라인 (Cache Line) : 캐시와 메인 메모리 간에 데이터를 주고받는 최소 단위. 일반적으로 32~256바이트. 공간 지역성을 활용하여, 요청된 데이터뿐만 아니라 그 주변 데이터도 함께 캐시 라인 단위로 가져옵니다.
- 캐시 매핑 (Cache Mapping) : 메인 메모리의 데이터를 캐시의 어느 위치에 저장할지 결정하는 방식입니다. 직접 매핑, 완전 연관 매핑, 세트 연관 매핑 등이 있습니다.
- 캐시 쓰기 정책 (Cache Write Policy) : 캐시의 데이터가 변경되었을 때, 이를 메인 메모리에 언제 반영할지 결정합니다.
> * Write-Through : 캐시와 메인 메모리에 동시에 데이터를 씁니다. 일관성 유지에 유리하지만, 쓰기 성능이 느립니다. > * Write-Back : 캐시에만 데이터를 쓰고, 나중에(캐시 라인이 교체될 때 등) 메인 메모리에 반영합니다. 쓰기 성능이 빠르지만, 데이터 일관성 유지에 더 복잡한 메커니즘이 필요합니다.
💡 개발자 핵심 Point
- 캐시 메모리는 하드웨어적인 영역이지만, 개발자가 코드를 작성할 때 지역성을 고려하면 캐시 효율을 높여 프로그램 성능을 향상시킬 수 있습니다.
- 캐시 친화적인 코드 (Cache-friendly Code)
> * 데이터를 순차적으로 접근 (공간 지역성 활용). > * 반복문 내에서 자주 사용되는 변수는 지역 변수로 선언 (시간 지역성 활용). > * 데이터 구조를 설계할 때 캐시 라인 크기를 고려.
- 멀티레벨 캐시 : 현대 CPU는 L1, L2, L3 등 여러 단계의 캐시를 가집니다. L1이 가장 빠르고 작으며 CPU에 가장 가깝고, L3가 가장 느리고 크며 CPU에서 가장 멀리 떨어져 있습니다.
- 캐시 메모리의 존재는 단순히 빠른 메모리가 아니라, CPU와 메모리 간의 병목 현상을 해결하기 위한 컴퓨터 아키텍처의 핵심적인 설계 원리입니다.