[컴퓨터 구조] 캐시(Cache)
2020. 6. 13. 16:04ㆍ컴퓨터 구조
캐시(Cache)
용량이 적으나 속도가 빠른
버퍼 메모리
일시적으로 데이터를 저장한다.
CPU보다 속도가 느린 주변장치와의 속도 차이를 보충해준다.
CPU의 성능이 좋아지는 속도를
메모리의 속도가 따라잡지 못해 이를 보충하기 위해 넣게 되었다.
CPU가 메인 메모리를 접근하기 전에 거치는 곳이다.
cache hit
캐시에 데이터가 있음
cache miss
캐시에 데이터가 없음
direct mapped
캐시 내 위치를 메모리 주소에 기반을 두고 할당한다.
블록의 캐시 내 위치 = 블럭주소 modulo 캐시 전체 블록 수
그러나 이러한 방식으로는
캐시에 위치한 블럭이 어떠한 블록인지를 알 수 있는 방법이 없다.
그래서 태그(tag)를 추가하게 된다.
태그(tag)
캐시에 위치한 블럭이 어떠한 블럭인지를 알게 해주는 값
보통 메모리 주소값의 앞에 위치한 비트를 의미한다.
유효 비트(valid bit)
캐시에 위치한 데이터가 유효한 데이터인지 확인하는 비트
이 비트가 1 이라면 올바른 데이터가 들어있다는 것이다.
cache overhead = (valid + tag) 용량 / 1 cache의 저장용량
CPU 데이터 접근
CPU에서 캐시로 데이터를 요구한다.
index, tag, valid bit를 확인한다.
캐시 내에 원하는 데이터가 있다면
(cache hit 라면)
캐시에서 CPU로 데이터를 전달한다.
캐시 내에 원하는 데이터가 없다면
(cache miss 라면)
메모리에서 캐시로 데이터를 가져온다.
다시 캐시에 접근한다.
CPU는 데이터가 오기를 기다리며
전체 시스템을 지연시킨다
=
cache miss가 발생할 경우 비용이 증가한다.
이는 큰 손실로 이어질 수 있다.
크기가 큰 블럭의 공간적 지역성은 실패율을 감소시킨다.
블록 크기의 증가는, 실패율의 감소로 이어진다.
but
너무 커진다면, 실패율이 올라간다.
블록수가 적어져 사용되기 전에 방출될 수 있다.
접근 지연(latency)
데이터를 찾는데 걸리는 시간
전송 시간
블록을 이동시키는데 걸리는 시간
write
데이터를 저장할 때 캐시에만 쓰고 메인 메모리에 쓰지 않을 경우
불일치(Inconsistent)가 발생한다.
즉시 쓰기(write-through)
메모리와 캐시를 같이 쓰자
언제나 메인 메모리에 쓰여야 하므로 성능이 안 좋다.
해결법
쓰기 버퍼(write buffer)
메모리에 들어갈 데이터를 저장해 놓는 큐.
CPU는 이곳에 데이터를 저장해 놓고 다른 일을 할 수 있다.
이곳이 가득 찬 경우에만 쓰기가 중단된다.
그러나 쓰기 버퍼를 사용하더라도 지연이 발생할 수 있다.
그렇기에 대안으로 나온게 나중 쓰기 방식이다.
나중 쓰기(write-back)
새로운 값을 캐시 내의 블록에만 쓰고
나중에 캐시에서 쫓겨날 때 메모리에 쓰여지는 방식
구현하기 어렵다는 단점이 있다.
'컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 파이프라인(Pipeline) (1) | 2020.06.12 |
---|---|
[컴퓨터 구조] CPU 명령어 수행 방식 (0) | 2020.06.12 |
[컴퓨터 구조] 컴퓨터 논리 하드웨어 (0) | 2020.06.12 |
[컴퓨터 구조] 부동 소수점 (0) | 2020.06.12 |
[컴퓨터 구조] 컴퓨터의 연산 (0) | 2020.06.12 |