캐시 메모리
IT 위키
더 많은 작업
- Cache Memory
CPU와 주기억장치 사이에 있는 고속 메모리로, CPU와 주기억장치의 처리 속도 차이를 보완하기 위한 기억장치
- 구역성(Locality)의 원리에 따라 CPU가 참조하는 데이터를 예측하여 캐시 메모리에 미리 담아 둔다.
- 캐시 메모리에 있는 데이터는 주기억장치를 참조하지 않고 고속의 캐시메모리에서 바로 가져와 실행한다.
- Hit Rate(적중률) = 적중 횟수 / 접근 횟수 * 100
- Miss Rate(실패율) = (100 - 적중률)
- Data Replacement Algorithm
※ 직접 사상의 경우 교체 알고리즘 선택 불가
- Random
- 무작위로 선택하여 교체
- 비효율적이지만 구현이 간단하여 많이 사용
- Round Robin
- 공평하게 돌아가면서 선택
- 구현이 간단하지만 효율이 좋지 않음
- LRU(Least Recently Used)
- 가장 오랫동안 이용되지 않은 데이터 교체
- 가장 이상적이지만 CPU Cache에서는 판단이 어려움
- Write Strategy
- Write Through
- 데이터 변경 시 캐시와 메모리에 곧바로 기록
- 구현이 쉬우며 캐시와 주기억장치 사이의 불일치가 생기지 않음
- 잦은 쓰기로 속도 느려짐
- Write Back
- 캐시에 먼저 기록하고 메모리엔 나중에 기록
- 속도가 빠르지만 일관성 문제 발생 가능성
- Dirty Bit, Flag 등 이용 필요
- Cache Coherence
멀티코어 프로세서나 대칭형 다중 처리(SMP) 시스템처럼 코어마다 자기 캐시를 갖는 환경에서는 같은 메모리 블록의 복사본이 여러 캐시에 생긴다. 한 코어가 값을 바꿔도 다른 코어의 캐시에는 옛 값이 남아 있으면 잘못된 데이터를 읽게 된다. 이를 막는 것이 캐시 일관성이다. DMA로 입출력 장치가 주기억장치를 직접 바꿀 때도 같은 문제가 생긴다.
위의 쓰기 정책은 한 캐시와 주기억장치 사이의 불일치를 다룰 뿐, 다른 코어 캐시의 복사본 문제는 해결하지 못한다. Write Through를 써도 다른 코어의 캐시에 남은 옛 값은 그대로이므로 별도의 일관성 프로토콜이 필요하다.
| 구분 | 스누피 프로토콜(Snoopy) | 디렉토리 프로토콜(Directory) |
|---|---|---|
| 원리 | 모든 캐시 제어기가 공유 버스를 엿보며(snoop) 다른 캐시의 쓰기를 감지해 자기 복사본을 무효화·갱신 | 블록마다 어느 캐시가 복사본을 가졌는지 디렉토리에 기록하고, 해당 캐시에만 무효화 메시지 전송 |
| 통신 | 브로드캐스트 | 점대점(필요한 캐시에만) |
| 확장성 | 버스 대역폭 한계로 코어 수가 적을 때 적합 | 코어·소켓이 많은 대규모 시스템(NUMA)에 적합 |
| 지연 | 짧음(버스 한 번) | 디렉토리 조회 단계가 추가되어 김 |
| 비용 | 구현 단순 | 디렉토리 저장 공간과 제어 복잡도 |
스누피 방식의 대표 구현이 각 캐시 블록을 Modified, Exclusive, Shared, Invalid 네 상태로 관리하는 MESI 프로토콜이다. 자세한 내용은 캐시 일관성 문서를 본다.
- 캐시 메모리 사이즈
- 전송 블록 사이즈
- 교체 알고리즘


