눈팅하는 게임개발자 블로그

Cache Memory 본문

공부한거/컴퓨터구조

Cache Memory

Palamore 2020. 9. 22. 16:49

메모리 계층

보조기억장치 : 엄청 느림, 대용량, 전원이 없어도 데이터가 저장됨.

주 기억장치 : 느림, 전원이 있어야 동작함(데이터가 저장되지 않음)

캐시 메모리 : 빠름, 용량이 매우 적음, 프로세서(CPU)에 액세스 가능.

메모리 접근 시간 비율이 대략적으로

캐시 : 주 기억장치 : 보조기억장치 = 1 : 10 : 1000 이라고 한다.

 

계층 구조를 나누는 이유

전체 메모리 시스템의 가격을 최소화 하면서 가능한 한 최고의 평균 접근속도를 달성하기 위해.

기본적으로 저장 용량과 접근 시간의 Trade Off이다.

 

Cache Memory

캐시는 하드웨어로 구현된 해쉬 테이블과도 같으며

캐시 메모리의 동작 개념은 참조의 국한성을 기반으로 한다.

참조의 국한성이란 대부분의 프로그램에서 일정 시간 동안의 메모리 참조가

정해진 영역 내에서만 이루어지는 경향이 있다는 것을 의미한다.

메모리 참조는 한 번 참조가 이뤄진 영역의 가까운 영역 내에서, 짧은 시간 내에 일어날 가능성이 높다.

Time Locality : 한 번 참조한 데이터를 다시 참조할 확률이 높음.

Spatail Locality : 참조한 데이터 주변의 데이터를 참조할 확률이 높음.

프로세서(CPU)와 주 기억장치(DRAM)의 사이에 위치하며 

자주 참조되는 프로그램과 데이터를 캐시 메모리에 저장하면 메모리 평균 접근 시간이 감소한다.

 

메모리 접근

CPU가 메모리에 접근할 때 먼저 캐시를 Read해보고,

원하는 데이터가 캐시에 존재한다면 Cache hit 발생.

하위 계층에 접근하지 않고 그대로 데이터를 읽는다.

원하는 데이터가 캐시에 존재하지 않는다면(Cache Miss) 주 기억장치로 접근하고.

주 기억장치에도 존재하지 않는다면(Fault) 보조기억장치로 접근하여

원하는 데이터를 찾는다.

한 번 CPU에서 사용된 데이터는 Cache에 저장하여 다음 액세스 시 소모되는 시간을 단축시킨다.

 

Cache Hit Ratio

메모리에 액세스 할 때 Cache Hit가 얼마나 많이 발생하는가의 비율을

Cache Hit Ratio라고 하는데.

대부분의 프로그램은 90%이상의 비율을 보인다. (메모리 액세스의 10번중 9번은 Cache hit가 발생함)

다만 프로그램의 종류에 따라 히트율의 차이가 크게 나타날 수 있음.

예를 들어 영상, 음악을 스트리밍 하는 경우 Hit가 거의 발생하지 않음.

 

캐시 블록의 교체

Cache가 가득찬 상태에서 Cahce miss가 발생한 경우

새로운 블록을 주기억장치로부터 캐시 메모리에 올리고

기존 블록 중 하나를 주기억장치로 방출해야 한다.

여기서 어떤 블록을 방출해야 하는가를 선택하기 위한 정책이 필요하다.

 

교체 알고리즘

- FIFO(First in Fisrt Out) - 가장 먼저 들어왔던 블록을 방출

구현은 쉽지만 성능이 효율적이지 않음.

- LRU(Least Recently Used) - 최근에 사용되지 않은 블록을 방출

캐시 내에 블록마다 카운터를 설치(수명 레지스터)

블록이 참조되면 그 블록의 카운터는 0이 되며 일정한 시간이 지난후 모든 블록의 카운터가 1씩 증가한다.

사용되지 않은 블록일 수록 높은 값을 가진다.

- LFU(Least Frequently Used) - 가장 적게 사용된 블록을 방출

일정 시간 동안 참조된 비율이 가장 적은 블록을 제거

- LRFU (LRU + LFU) - LRU와 LFU를 일정 비율로 섞어서 사용할 수 있다.

 

캐시 내용의 기록

캐시 메모리가 갱신되었을 때 주 기억장치에 존재하는 해당 메모리를 갱신해야 한다.

2가지 방법에 의해 주 기억장치의 내용을 갱신.

- Write-through 방식

write 동작이 이루어질 때 캐시 메모리와 주 기억장치를 동시에 갱신.

주 기억장치는 항상 캐시와 같은 데이터를 가진다 (캐시 일관성이 보장된다)

DMA 전송을 갖는 시스템에 매우 중요한 방식.

- Write-back 방식

Write 동작 동안은 캐시 메모리의 내용만이 갱신.

플래그(Modified flag bit)를 표시하여 워드가 캐시에서 제거될 때 주기억장치에 복사 (캐시 일관성이 보장되지 않음)

워드가 캐시에 존재하는 동안 여러 번 갱신될 수 있기 때문에 이 방법이 많이 사용된다.

Single Processor의 경우 워드가 캐시에 남아있는 한 주 기억장치로의 복사가 늦어지는 것은 문제가 되지 않는다.

 

'공부한거 > 컴퓨터구조' 카테고리의 다른 글

Pipeline Hazard  (0) 2020.09.22
Instruction  (0) 2020.09.22
Register  (0) 2020.09.22