이번 포스팅에서는 캐시 에서 Miss 가 났을때 무슨일이 일어나는지 봐보자.
💻 Cache Miss Handling in processor
캐시 Miss가 일어나면 무슨일이 프로세서에서 일어나는지 보자.
먼저 앞서 말했지만, 캐시에는 여러종류가 있다.
그중 Multi-level Cache는 캐시를 여러개를 들여 멀티레벨로 사용하는 것이다.
위 그림을 보자. 하나의 Core안에는
L1i, L1d가 존재하고, L2 Cache가 존재한다.
L1i,L1d는 level 1을 존재한다. 이는 L2보다 사이즈가 작다. 앞에서 말했었다.
사이즈를 보면 L1<L2<L3인 것을 알 수 있다.
L1은 두가지로 나뉘어 졌다.
instruction을 담고 있는 L1i, data를 담고 있는 L1d가 있다.
instruction은 sequential 하고, data는 random한 속성을 지니고 있다. 따라서, 이처럼 서로 다른 메커니즘을 적용하는것이 훨씬 편하다.여기서 L3는 모든코어의 데이터가 저장되며 서로 영향을 끼친다. L3는 하위 레벨 메모리와 연결되어있다.
다시 본론으로 돌아가면, instruction에서 Cache miss가 날때, 해결하기 위한 순서를 봐보자.
이는, data에도 동일하게 적용된다.
- 메모리 유닛으로 PC-4를 보낸다.
여기서 PC도 아닌 PC-4를 보내는 이유는 PC가 현재 instruction 주소를 가리키고 있는데 그 주소로 가면 자동으로 PC+4로 업데이트가 된다. 그런데, 그 주소로 갔는데 Miss가 난 경우이다. 그렇다면 업데이트된 주소를 원래 instruction의 주소로 바꿔야한다. 따라서 PC-4를 보내는 것이다.
2.메인메모리 가 read 하도록 명령한다.
3.데이터가 준비될때까지 기다린다.
4.데이터가 준비됬다면, 캐시 엔트리에 데이타를 작성하고, tag,valid 필드를 채운다.
캐시 성능을 향상시키기 위해 이미 알아봤지만, pipeline을 쓰는게 좋다.
💻 Write Handling in Cache
앞선 것들은 캐시에 있는 값들을 읽어오는 방식들이었다.
그렇다면 작성하는 Write도 이루어 져야 할 것이다.
Write를 하는방법에는 크게 두가지로 볼 수 있다.
1. Write - through Cache
Write-Through Cache는 캐시에 데이터를 쓸 때, 동시에 메모리에도 동일한 값을 입력해주는것이다.
캐시와 메모리에 있는 값이 항상 일치한다는 장점이 있지만 속도가 느리다는 단점이 있다.
이래서, write buffer를 사용하여 단점을 조금이나마 보완하였다.
캐시에 데이터를 쓴다면 원래는 바로 메인메모리에도 데이터를 써주었는데, 그러지 않고 write buffer에 저장해줬다가 한꺼번에 Main Memory에 작성해주는 방식이다.
2. Write-back Cache
속도가 느린 Write-through Cache를 보완해주는 Write-back cache이다.
메모리의 값을 같이 바꾸는 것이아니라, 캐시의 값부터 바꾸는 것이다.
dirty bit이라는것도 같이 생성해주는데 , 이것은 캐시가 더럽혀졌다? 한마디로 값이 바뀐상태라는 것이다.
CPU가 메인메모리에 데이터를 기록하고자 할 때, 그 데이터는 먼저 캐시로 기록이 된다.
캐시 내에 일시적으로 저장된 후에 나중에 Main Memory에 기록해주는 방식이다.
속도가 빠른 대신에 종종 캐시와 MainMemory의 값이 서로 다른경우가 발생한다.
'2-2 > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] Associative Cache (0) | 2022.11.25 |
---|---|
[컴퓨터 구조] Cache Performance (0) | 2022.11.25 |
[컴퓨터 구조] Direct- mapped Cache (0) | 2022.11.25 |
[컴퓨터 구조] Cache (0) | 2022.11.25 |
[컴퓨터 구조] Data Hazard (0) | 2022.11.23 |