일반적으로 CPU가 주기억장치보다 더 속도가 빠르기 때문에 속도 차이로 인한 CPU 대기 시간이 생긴다.(=병목현상) 이 CPU 대기 시간을 최소화하기 위해 CPU와 주기억장치 사이에 설치하는 고속 반도체를 Cache Memory 라고 한다.
주기억장치에서 자주 사용하는 프로그램과 데이터를 저장하여 속도를 빠르게 하는 메모리
주기억장치에 접근하는 횟수를 줄여서 컴퓨터 처리속도를 향상시키는 메모리
1) 메모리 계층 구조에서 가장 빠른 소자. (CPU 속도에 근접할 정도)주기억장치보다 액세스 속도가 높은 고속 반도체 칩 사용.
2) 가격 및 제한된 공간 때문에 용량이 적음. 일반적으로 수십 Kbyte - 수백 Kbyte
3) Locality 활용: 시간적/공간적 지역성의 원리에 의한 블록 단위 메모리 참조
4) 캐시 일관성: 멀티 프로세서 멀티 캐시 컴퓨터에서 캐시 일관성 유지 문제가 중요
- 직접 매핑 (Direct Mapping)
- 연관 매핑 (Associate MApping)
- 집합 연관 매핑 (Set Associate Mapping)
CPU 로부터 가져온 내용을 memory의 어느 위치에 둘 것인가
CPU가 원하는 것이 메모리에 있는지 없는지 여부를 어떻게 판단할 것인가
hit/miss 를 어떻게 판단할 것인가
Cache와 Memory의 inconsistent가 발생하기 때문에 고려해야하는 문제
새로운 내용을 가져오기 위해서 기존의 것 중 어떤 것을 뺄것인가
사상(Mapping): 캐시 & 주기억장치 사이에서 정보를 옮기는 과정
- 주기억장치 블록들이 정해진 캐시 라인으로만 적재되는 방식
- 특정 주소에 해당하는 캐시에 놓고, 몇번 블록에서 가져왔는지 명시
1) 캐시로 기억장치 주소가 보내지면, 그 중 라인 번호를 이용하여 캐시의 라인을 선택
2) 선택된 라인의 태그 비트들을 읽어서 기억 장치 주소의 태그 비트들과 비교.
3) 주소를 주기억장치로 보내어 한 블록을 액세스
4) 인출된 블록을 지정된 캐시 라인에 적재하고 주소의 태그 비트들을 라인의 태그 필드에 기록
5) 만약 그 라인에 다른 블록이 이미 적재되어 있다면, 그 내용은 지워지고 새로이 인출된 블록을 적재
- 주기억장치의 블록이 적재될 캐시 라인이 정해지지 않음
- 주기억장치의 모든 블록들이 캐시의 어느 슬롯(블록)에도 저장됨
1) 주기억장치 블록은 캐시의 어느 블록이든 적재가능 태그 필드 내용을 비교하여 일치하는 것이 있으면 캐시 hit. cpu로 데이터를 전송
2) 태그 값이 일치하지 않으면 캐시 miss. 주기억장치로부터 데이터 인출.
3) 주기억장치로부터 인출된 데이터 블록을 캐시의 어느 라인에 적재할 것인지를 결정해야함. 캐시에 빈 라인들이 있따면 라인 번호에 따라 차례대로 적재하면되지만, 비어있는 라인이 없을 때는 적절한 교체 알고리즘을 이용해서 라인들 중 하나를 선택한 다음에 새로운 블록을 적재
- 주기억장치 블록 그룹이 하나의 세트를 공유 ( 1set 당 2개 이상의 라인 적재 ok)
- 동일한 태그를 가진 블록들이 저장되는 캐시 슬롯 그룹을 집합으로 관리
- 만약 하나의 set이 2개의 block으로 이루어져있다면 2-way set-associative cache
하나의 set이 3개의 block으로 이루어져있다면 3-way set-associative cache- 즉, n-way set-associative cache는 block들을 n열 종대로 배열한 것
1) 기억장치 주소의 세트 비트들을 이용해서 캐시 세트들 중 하나를 선택
2) 주소의 태그 필드 내용과 그 세트 내의 태그들을 비교하여 일치하는 것이 있으면 캐시 적중
- 그 라인 내의 한 단어를 단어 필드에 의해 선택하여 인출
3) 일치하는 것이 없으면 캐시 miss
- 주기억장치를 액세스 라인들 중의 어느 라인에 새로운 블록을 적재할 것인지를 결정하여 교체
- Cache에서 하나의 set은 2개의 block으로 이루어져있다.
- Main memory의 각 block은 들어갈 set이 정해져있다.
최근에 사용되지 않은 set를 뺀다.
temporal locality에 기반
Reference Bit
- LRU를 사용하기 위해 reference bit를 축
- 최근에 사용된 것의 reference bit를 1로 만든다.
Cache에 write를 할 때 cache의 내용과 memory의 내용이 변형이 생겨 달라진다.(inconsistent)
이를 맞춰주기 위한 방법들이다.
Cache에 write할 때 main memory에도 write하기
변경 사항을 메모리에 즉각 반영
main memory는 access 속도가 매우 느리다. CPI 증가
If) CPI=1, 10% 의 instruction이 sw, memory access time=50cycle
Then) effective CPI= 1+ 0.1*5 = 6
캐시보다 작은 크기의 메모리
cache에만 write한 후, 더 미룰수 없을 때 main memory에 나중에 write
cache에 write 하지 않았다면, 이후에 main memory에 write할 필요가 없다. 이를 구분하기 위한 flag의 의미.
dirty bit=1(dirty) : 내용이 변경됨. 이후 main memory에 write해야함
dirty bit=0(clean) : main memory와 cache가 같은 값을 가지므로 write할 필요 없음. memory fetch로 새로 cache line이 쓰였거나, 캐시가 초기화된 시점에서 dirty bit는 false여야함.
main memory에서 caching 하면 clean 상태, cache에 write 하면 dirty 상태
이후 다른 block들과 교체될 때 dirty bit=1 이면 memory에 wirte를 수행
이 때 main memory access속도가 느리기 때문에 miss penalty 증가. 이를 방지하기 위한 buffer
- cache에서 write buffer로 write를 하고, write buffer에서 main memory로 write.
- cache->write buffer로 write하는 시간이 걸리긴하지만, cache->main memory로 write하는 것보다 빠름
[+]
[-]
혜윤님 글씨도 정말 잘쓰시고 필기도 꼼꼼히 하셨네요~:)