캐시 탐색에 대한 문제점

<aside> 💡 캐시메모리의 특징 에서 이어짐


Memory/ PC = Index


메모리 = 8kb = 8192bytes 이고
PC = 1워드 = 4bytes 라고 할때

캐시 자리는 2048개가 있는것이다

캐시에는 무슨값이, 어디에 들어가있을지 모르기 때문에 계속 탐색해줘야하는데,

2048개의 영역을 게속해서 찾는것은 비효율적이다.

1클럭에 메모리의 한 영역을 찾을수 있다고 했을때

못찾으면 2048개의 클럭을 소모하는거고

찾아도 2048번째에 찾게되면 2048개의 클럭을 소모하는것

[즉, Miss가 2048개나 발생했다는 말이다](https://cybecho.notion.site/Hit-time-Miss-Penalty-Miss-46180b3b62e84c52b50ecdfd2a149667)

배보다 배꼽이 더 크자너~?

</aside>

→ 그래서 다음과 같은 방법을 이용하여 효율을 찾고자 함

<aside> 💡 캐시에 메모리를 어떻게 저장할것인지에 대한 방법론들


Direct-mapped

캐시 인덱스 한자리에 데이터 1개

캐시 사이즈가 클땐 이놈이 유용

Set Associative

캐시 인덱스 한자리에 데이터 N개

캐시 사이즈가 작을땐 이놈이 유용

Fully associative

인덱스 개념이 없고, 아무나 앉을 수 있게 만든놈

근데 이러면 배보다 배꼽이 커짐 왜?

한자리 한자리 있나 없나 확인하다보니까 100자리가 있을때

데이터가 100번 자리에 있으면 100클럭이나 필요한거니까 너무 비효율적이다

Untitled

![왼쪽대로 순서대로

  1. 화장실 한칸에 변기 하나 (자리 할당제라 다른칸 비어있어도, 자기 번호에 사람 차있으면 마냥 기다려야함)

  2. 화장실 한칸에 변기 두개 (자리 할당제지만, 한칸에 2개씩 있어서, 다른사람 이미 있어도 자리비었으면 들어감)

  3. 화장실 한칸에 변기 전부 (다른곳 비었는데 못들어갈일은 없음. 그대신 모두 꽉찼을때 LRU방식에 의거해 쫓아냄)](https://prod-files-secure.s3.us-west-2.amazonaws.com/09ccd4d5-876c-4bba-bbdf-cc77a0a11257/06d583aa-ebfc-4194-9e38-b3603219bffc/Untitled.png)

왼쪽대로 순서대로

  1. 화장실 한칸에 변기 하나 (자리 할당제라 다른칸 비어있어도, 자기 번호에 사람 차있으면 마냥 기다려야함)

  2. 화장실 한칸에 변기 두개 (자리 할당제지만, 한칸에 2개씩 있어서, 다른사람 이미 있어도 자리비었으면 들어감)

  3. 화장실 한칸에 변기 전부 (다른곳 비었는데 못들어갈일은 없음. 그대신 모두 꽉찼을때 LRU방식에 의거해 쫓아냄)

</aside>

→ Cache Organization 의 경우

Cache Organization | Set 1 (Introduction) - GeeksforGeeks

mod % 연산자를 활용하는 방법이 있다

<aside> 💡 0~9 자리를 mod % 3 연산자를 사용해 0~2 자리로 간소화

0 1 2 3 4 5 6 7 8 9
0 1 2 0 1 2 0 1 2 0

Direct-mapped

1Bit Prediction - ping pong 문제 발생 가능

0 1 2 3 4 5 6 7 8 9

🔽

Set Associative

1Bit Prediction - ping pong 문제 발생 가능

0 5
1 6
2 7
3 8
4 9

🔽

Fully associative

그냥 한 세트로 묶어버리고, 먼저 들어온놈이 앉도록 함.

이러면 자리를 두고 싸우진 않을거아냐?

예전엔 1입구에 1자리여서 싸우는거였는데

지금은 1입구에 n자리여서 자리쟁탈전은 없음

0
1
2
3
4
5
6
7
8
9

</aside>

<aside> 💡 Cache Organization Spectrum 을 알기쉽게 이해해봅시다

반마다 30명이 있습니다

학교 화장실이 협소하여, 각 반의 선생님들은

각 반마다 특정 번호를 가진 학생은 특정 화장실 칸에만 들어갈 수 있도록 했습니다.

하지만 이렇게되니, 특정 칸을 쓰기 위해 여러반의 학생들이 경쟁하는 상황이 발생했습니다

화장실 칸 하나에 한 자리밖에 없으니, 이러한 문제가 발생한 것입니다
0 1 2 3
그래서 선생님들은 다음과 같은문제를 해결하기 위해, 한칸에 변기를 두개씩 묶어서, 한칸에 여러명이 들어갈 수 있도록 만들었습니다.

근데 그럼에도 불구하고, 핑퐁 문제를 막을 수 없었습니다
0 1 2 3
그냥 모든 화장실 칸을 예전처럼 모두가 들어올 수 있도록 기존 화장실칸 할당제도 자체를 제거했습니다.

이렇게 되다보니, 만약 모든 칸이 풀방이 되었을때, 풀방에서 누가 나가야 하는지 문제가 발생했습니다.
0 1 2 3
</aside>

→→ 풀방이 되면 어떻게합니까?

방이 꽉차면 누가 먼저 나가는가? - LRU