본문 바로가기

학교공부/컴퓨터구조

컴퓨터 구조 21 - Cache

 

 

 

마지막에 EMAT는 Tc cache에 접근하는 시간 m*Tm miss날시 그 다음 접근 시간.

만약 계속해서 미스나면 Tc + m*(EMAT') .... 이렇게 쭉쭉 늘어난다.

 

 

 

 

메모리 계층구조

 

 

 

1. data를 놓는거 2. data를 어떻게 찾을거냐 3. 찾은 data가 유효한가

 

cache 구조가 어려우니까 일단 하나의 cache 구조를 설명한다.

 

오른쪽 이 main memory 16개 저장가능 왼쪽이 8개 저장가능한 cache라고 가정.

 

mapping하는 특성은 바로 순서에 맞게 mapping한다.

0 0 8 16 24
1 1 9 17 25
2 2 10 18 26
3 3 11 19 27
4 4 12 20 28
5 5 13 21 29
6 6 14 22 30
7 7 15 23 31
Cache Memory

요런 index로 간다 이걸 식으로 표현해보면

 

binary address의 뒷자리가 같은 index로 mapping한다.

 

그렇다면 앞의 tag만 보고 contents를 알아낼수있다.

 

 

예시를 들어보자

 

processor 가 32bit address를 cache에서 찾을려고 한다.

 

처음 index보고 찾아가서 Tag를 비교한다. 같다면 contents를 cpu에 준다 끝 없으면? 다음 layer의 memory로 간다

 

 

 

근데 만약에 컴퓨터를 껏다 킬 경우에는 어떻게 될까?

랜덤값으로 초기화 되긴하는데 만약 아다리 안맞게 지금 찾는 값이 cache안에 있어버리면 이상한 contents 줄수도있다. 이러한 문제를 없애기 위해 valid를 도입한다.

 

Valid 추가

 

키자마자 Valid는 다 0으로 초기화하고 나머지는 그냥 랜덤하게 둔다.

다 초기화하면 좋겠지만 그럼 hw가 더 필요하니까 딱 valid만 초기화하는거임 ㅇㅇ

그럼 이전의 문제처럼 우연히 맞아도 valid가 0이면 무시한다.

cache가 업데이트 된다면 valid를 1로 설정한다~

 

그렇다면 이걸 종합해서

1. 처음에 Memory address를 보고 cache index로 찾아간다.

2. 해당 index의 tag와 memory address tag를 비교한다

3. 2도 같고 valid도 1이면 hit

 

만약 miss나면 어떻게될까?

miss나면 address를 system bus를 통해 보내 main memory에서 찾아서 다시 data bus통해 가져온다.

가져오는 김에 cache에 있는 tag, data도 갱신함 만약 valid가 0이라면 그것도 1로 바꿈(이건 처음 쓸떄만 적용됨)

 

 

 

write back

cpu가 연산을 통해 data를 변경하면 일단 메모리에서 써야한다. 만약 레지스터 꽉차면 memory 에서 찾아오니까. 근데 ㅏ찾아올때 cache를 먼저 찾아오니까 어찌됐던 cache는 무조건 update해야함

 

 

write through

wirte through는 cache뿐만 아니라 뒤에 main memory에도 쓴다. 

 

그럼 이 둘의 차이가 뭘까?

write through인 경우 main memory에도 동시에 쓰면 150 clock이상의 연산이 필요하다 cpu입장에서 매우 큰 손해다

근데 write back인 경우 몇 클락 안걸리는 방법으로 cache에 쓰고 나중에 한가할 때 main memory에 update하면 성능상 효율적이다.

또 write through는 바로바로 bus 통해보내니까 bus congestion이 일어날 가능성이 높음. 그에 비해 write back은 관찰하다가 시간날때 보내니까 system utilization이 좋음.

하지만 write back인 경우 자기 cache에서만 data 갖고있으니까 multi core 환경에서는 복잡해진다. 그냥 main memory에서만 가져오는게 아니라 각자 독자적인 환경도 고려해서 설계해야함.

결국 혼용해서 쓴다.

 

 

write through 장점

구현 쉽다.

아래 그림과 같이 buffer 쓰면 그나마 성능 좋아짐.

write-Through buffer

write back

dirty bit 추가해서 이게 메모리에 써졌나 안써졌나 확인 dirty bit이 1이면 나만 갖고있다 즉 나중에 시간날 때 main으로 보내라

 

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

컴퓨터구조23 - Virtual Memory  (0) 2020.06.25
컴퓨터구조 22 - Cache  (0) 2020.06.20
컴퓨터구조 18 - SMT  (0) 2020.06.17
컴퓨터구조 17 - SMT  (0) 2020.06.17
컴퓨터구조 16 - Multithreading  (1) 2020.06.17