캐시는 중앙처리장치(CPU)와 주기억장치 사이의 속도 차이를 줄이기 위해 두는 고속의 소형 저장장치이다.[2] 자주 쓰는 데이터와 명령어를 임시로 보관해 다시 쓸 때 바로 공급하므로, 메모리 계층 구조에서 지연 시간을 줄이고 처리 효율을 높이는 핵심 요소로 작동한다.[2][3]
1. 메모리 계층 구조와 위치
2. 작동 원리와 기술적 특징
캐시는 주로 SRAM을 기반으로 만들어져 DRAM보다 빠르지만 비용이 높고 용량이 작다.[2] 데이터는 보통 캐시 라인 단위로 묶여 저장되며, 주소의 일부는 태그와 인덱스로 나뉘어 어떤 블록이 들어 있는지 판별한다.[9] 이런 구조는 메모리 계층 구조에서 하위 기억장치 접근을 줄이려는 설계와 맞닿아 있다.[7]
요청한 데이터가 이미 캐시에 있으면 캐시 히트이고, 없으면 캐시 미스다. 미스가 발생하면 시스템은 더 느린 하위 계층으로 내려가 데이터를 다시 가져와야 하므로 평균 접근 시간이 길어진다.[3] 캐시 라인과 함께 TLB 같은 하드웨어 장치는 주소 변환 비용을 낮추고, 데이터 탐색 경로를 단축해 연산 흐름을 더 매끄럽게 만든다.[7]
3. 성능 최적화와 캐시 일관성
멀티코어 환경에서는 각 코어가 자기 캐시를 가지므로 같은 메모리 주소를 서로 다르게 보관하는 문제가 생길 수 있다. 이때 캐시 일관성 프로토콜이 코어 간 상태를 맞추고 최신 값을 유지하도록 돕는다.[5] 가상 머신 환경에서도 물리적 자원의 효율적 배분을 위해 캐시 최적화가 중요하며, 소프트웨어와 하드웨어 간의 긴밀한 상호작용을 통해 이루어진다.[5]
워크로드의 접근 패턴이 규칙적일수록 캐시 적중률은 높아지고, 대기 시간은 짧아진다.[2] 연구자들은 워크로드 접근 패턴과 공유 정도를 관측하여 캐시 적중률과 대기 시간, 통신 오버헤드를 주요 지표로 삼아 하드웨어의 설계 변수를 평가한다.[6] 그래서 캐시 배치 정책과 교체 알고리즘을 조정하는 일은 단순한 하드웨어 최적화가 아니라 전체 시스템의 응답성과 처리량을 함께 다루는 작업이다.[2]
4. 소프트웨어 개발과 캐시 친화적 프로그래밍
프로그램은 메모리 접근 순서만 바꿔도 캐시 효율이 달라진다. 연속된 메모리 접근, 불필요한 포인터 추적 감소, 자주 쓰는 데이터의 재사용은 캐시 적중률을 높이는 대표적인 방법이다.[8] 특히 알고리즘이 데이터를 읽고 쓰는 순서를 잘 설계하면 캐시 미스가 눈에 띄게 줄어든다.[8]
배열과 구조체의 배치, 루프 순서, 작업 분할 방식은 실행 시간에 직접적인 차이를 만든다. 배열과 같이 연속적인 메모리 공간을 사용하는 자료구조는 연결 리스트보다 공간 지역성을 활용하기에 유리하며, 캐시 친화적인 특성을 보인다.[8] 캐시 친화적 설계는 알고리즘 선택만큼 중요하며, 특히 대용량 데이터를 처리할 때는 그 차이가 더 분명하게 드러난다.[3]
5. 보안과 캐시의 관계
7. 인용 및 각주
[1] Security levels, tb-manual.torproject.org(새 탭에서 열림)
[2] Cache Memory in Computer Organization, www.geeksforgeeks.org(새 탭에서 열림)
[3] 기억장치와 캐시 (cache hit rate), 80000coding.oopy.io(새 탭에서 열림)
[5] 가상 머신과 CPU의 효율적 활용: 멀티코어와 캐시 구조의 이해, f-lab.kr(새 탭에서 열림)
[6] [OS 운영체제] 메모리 계층구조 (Memory Hierarchy), iingang.github.io(새 탭에서 열림)
[7] 캐시 라인, TLB, 컨텍스트 스위치 — 고급 분석, kr.linkedin.com(새 탭에서 열림)
[8] 캐시 친화적 프로그래밍: 성능을 결정짓는 보이지 않는 요소, m.dcinside.com(새 탭에서 열림)
[9] Cache Memory, revi1337.com(새 탭에서 열림)
[11] 메모리 계층과 캐싱 뽀개기, velog.io(새 탭에서 열림)