다중 레벨의 메모리에는 다양한 속도와 크기를 가진 메모리들이 있다.

위로 갈수록 단위 가격당 공간이 작아짐
primary = CPU가 직접 접근을 할 수 있는 메모리
Secondary : CPU가 직접 접근을 할 수 없음
NVRAM : 사라지지 않는다는 장점, DRAM보다는 느리고 비쌈
메인메모리보다 더 빠르지만 작은 메모리를 캐시라고 하며 메인메모리의 느린 접근 시간을 개선하기 위해 데이터를 임시로 저장합니다.
투명성 (존재가 외부로 드러나지 않는다는 의미) CPU는 캐시라는게 있다는걸 모른다 (몰라야한다) CPU를 설계할때 메모리가 있다는걸
CPU가 요청을 할때 CPU는 자기가 메인메모리에 요청한다고 알고있지만 사실은 캐시가 중간에 뺏어오는 그런 느낌 (있는듯없는듯) , 캐시들끼리도 서로의 존재를 몰라야한다
사용자나 프로그램이 캐시의 존재를 인식하지 않아도 캐시가 자동으로 동작하여 성능을 향상시킨다
구체적으로, 캐시는 주 메모리에 접근하는 빈도를 줄이고 데이터 접근 속도를 높이기 위해 자주 사용되는 데이터를 일시적으로 저장하는 메모리입니다. 프로그램은 캐시가 존재하는지, 어떤 데이터를 캐시에 저장하고 있는지 알 필요가 없으며, 단지 주 메모리에 접근하듯이 데이터를 요청하면 캐시가 자동으로 적절한 데이터를 반환하거나, 필요시 주 메모리에서 데이터를 가져와 캐시에 저장한 후 전달합니다.
따라서 캐시의 투명성 덕분에 개발자는 캐시의 존재 여부와 관계없이 동일한 방식으로 메모리에 접근할 수 있습니다
Underlying principle of Cache
•
Principle of Locality(프로그램은 같은 데이터를 접근하는 경향이 있다. 한번 읽은 데이터를 또 읽는다는 의미)
Principle of Locality : 프로그램이 실행되는 동안 특정 데이터에 반복적으로 접근할 가능성이 높다는 성질입니다. 이를 통해 캐시는 성능을 최적화할 수 있습니다Temporal Locality : 특정 데이터에 한 번 접근하면, 가까운 미래에 다시 그 데이터에 접근할 가능성이 높다는 원리입니다. 예를 들어, 반복문 내의 변수는 반복적으로 사용되므로 캐시에 저장해 두면 접근 시간을 단축할 수 있습니다.Spatial Locality : 특정 데이터에 접근하면, 그 데이터의 주변 데이터도 곧 접근될 가능성이 높다는 원리입니다. 예를 들어, 배열의 요소에 순차적으로 접근할 때, 첫 번째 요소에 접근한 후 그 옆의 요소들도 접근할 가능성이 높습니다.캐시 메모리는 더 낮은 레벨의 메모리보다 작다
• 캐시 메모리는 주 메모리나 디스크와 같은 더 낮은 레벨의 메모리에 비해 용량이 작습니다. 따라서, 모든 데이터를 캐시에 저장할 수 없고 자주 사용될 가능성이 높은 일부 데이터만을 선택적으로 캐시에 저장해야 합니다.
• 이 선택적인 저장 방식은 시간적 및 공간적 지역성 원리에 따라 이루어집니다. 프로그램이 자주 접근하는 데이터를 우선적으로 캐시에 배치하여 접근 속도를 최적화합니다
line(or Block) :Minimum unit of information
캐시가 한번에 읽고 쓰는 단위가 꼭 Double Word인건 아니다
Hit :When data is present in the upper level
프로세서가 원하는 데이터가 캐시에 존재하면 Hit 아니면 Miss
Hit rate (hit ratio) 메모리에 접근할 때, 필요한 데이터가 캐시에 이미 존재하여 Hit 일 비율을 말합니다.
Miss, miss rate
Hit time : Time to access the upper level (including the time to determine hit or miss)
히트가 되서 다 처리하는 시간 (작을수록 좋다)
Miss penalty : Time to copy a block from the lower level
못맞췃으니까 low level로 직접가서 갖고오는데 걸리는 시간
Replace and transfer data

특정메모리에 있는 데이터가 캐시에 올라갈때 메모리 주소를 캐시 슬롯 위치로 매핑하여(function 으로 가공) , 특정 메모리 블록이 캐시의 고정된 위치에만 저장될 수 있게 하는 방식입니다
-> 즉, 하나의 메모리 블록은 캐시에 단 하나의 위치에만 저장될 수 있습니다.
캐시 슬롯 결정 방식
Direct-mapped Cache에서 캐시 블록의 수는 2의 제곱수여야 한다
이로 인해 메모리 주소의 일부 비트만으로도 캐시 위치를 쉽게 구할 수 있습니다.
EX) 예를 들어, 8개의 캐시 블록이 있다고 가정하면, 메모리 주소를 8로 나눈 나머지가 그 블록의 위치가 됩니다.

Number of Cache block : 800001 (1) , 01001 (9), 10001 (17), 11001 (25) % 8 : 001(1)Direct-mapped Cache에서는 여러 메모리 블록이 하나의 캐시 슬롯에 매핑될 수 있습니다.
예를 들어, 001(1)번 슬롯에 00001 , 01001, 10001, 11001 주소의 메모리 블록들이 모두 매핑될 수 있습니다.
이렇게 여러 블록이 동일한 캐시 슬롯에 매핑될 수 있기 때문에, 캐시에 들어온 블록이 실제로 어느 메모리 주소에서 온 것인지 확인할 필요가 있습니다.

Tags (태그) : 태그는 메모리 주소의 상위 비트(high-order bits)로 구성되며, 이 태그 값을 통해 같은 슬롯에 들어온 여러 블록을 구분할 수 있습니다. 실제로는 태그의 비트수는 매우 크다
Valid bit (유효 비트) : 해당 캐시 슬롯에 저장된 데이터가 유효한지를 나타내는 비트입니다
그림상에는 001 과 101을 제외한 공간이 비워져있지만, 사실은 랜덤으로 초기화된 garbage값이 들어가있다. 따라서 그 값들이 실제로 타당한 값인지 확인하기 위해서이다
value + tag + valid를 모두 합친것이 Cache다!

Address is divided into tag part and index part
세상의 모든 cpu들은 개별 바이트를 구분 및 지칭할 수 있다는 능력을 가져 byte-addressable하다

data를 4byte로 가정했을때, 이 데이터를 지칭하려면 00,01,10,11 총 4개가 필요하다
그럼 offset으로는 2비트만 있으면 표현이 가능하다는 것
또한 현재 index의 갯수가 1024개이므로 index로는 10비트만 있으면 된다
또는 이렇게 생각할 수 있다
Data의 갯수는 1024개, 그리고 개당 4byte이므로 한바이트짜리가 4096개 있다.
그렇다면 4096개 중 하나를 특정하기 위해선 2의 12승이필요하므로 총 12비트가 필요하다
비트는 특정 바이트를 가리키는데 소비되는 자원이다!

n = 10
m = 0

Cache Size = Block Size × Number of Blocks
Block Size : 캐시가 한번에 읽고 쓰는 데이터 단위
같은 캐시 크기에서 Block Size가 작아진다는 것은 한 블록에 저장되는 데이터의 양이 줄어든다는 것을 의미한다
하지만, 같은 캐시 크기를 유지하기 위해 더 많은 블록(라인)을 가질 수 있습니다.
블록 크기가 작을수록 블록의 개수가 많아지므로, 캐시를 세로로 길게(라인 수가 많게) 설계하는 효과를 갖게 됩니다.
Spatial Locality(공간 지역성)은 프로그램이 특정 메모리 주소를 읽거나 쓸 때, 그 근처 주소도 곧 읽거나 쓸 가능성이 높다는 메모리 접근 패턴을 말합니다.
프로그램이 한 번 읽은 메모리 데이터의 연속적인 데이터 범위를 자주 사용합니다
Temporal Locality(시간 지역성)은 "최근에 접근한 데이터는 다시 접근될 가능성이 높다"는 메모리 접근 패턴을 의미합니다.
즉, 한 번 사용한 데이터는 가까운 시간 내에 다시 사용될 확률이 높다는 특성입니다.
Temporal Locality를 잘 활용하려면 최근 사용한 데이터를 가능한 많이 캐시에 저장해 두는 것이 중요합니다.
캐시 안에 작은 상자를 많이 두는 것과 같습니다. 다양한 데이터를 저장할 수 있어서 최근 사용한 데이터(Temporal Locality)를 유지하기 쉽습니다.
캐시 안에 큰 상자를 몇 개 두는 것과 같습니다. 한 상자에 많은 데이터를 담을 수 있지만, 필요한 데이터 외에 불필요한 데이터도 같이 들어옵니다. 상자 수가 적으니 다른 데이터(Temporal Locality를 가진 데이터)를 저장할 공간이 줄어들게 됩니다. 대신 Spatial Locality가 커진다
의미: 캐시(Cache)에서 데이터를 찾지 못했을 때 발생하는 시간적 손실.
캐시 미스(Cache Miss) 발생 시, 필요한 데이터를 메인 메모리(Main Memory)에서 가져와야 하므로 추가 시간이 소요된다.
Miss penalty : Set-up time + transfer time
Set-up time : 캐시가 메모리에 정보(주소, 바이트 등)를 전달하고, 실제 데이터를 전달하기 직전까지의 준비 작업 시간
transfer time : 세팅이 끝난 후 순수하게 데이터를 전송하는데 걸리는 시간
early-restart : 캐시에서 데이터를 가져오는 동안 전체 블록을 로드하기 전에 필요한 데이터(critical data)를 먼저 CPU에게 전달해 읽을 수 있도록 하는 캐시 최적화 기법입니다. 나머지 데이터는 백그라운드에서 계속 로드합니다.
주로 명령어 캐시(instruction cache)에서 효과적입니다.
critical word first :캐시 미스 발생시 CPU가 당장 필요로 하는 데이터(critical word)를 메모리 블록에서 가장 먼저 가져오는 기법입니다. 이 기법은 CPU의 대기 시간을 최소화하는 데 초점을 둡니다.
주로 데이터 캐시(data cache)에서 효과적입니다.

쓰기 작업이 발생하면 캐시와 메인 메모리에 동시에 데이터를 업데이트합니다.
데이터 일관성(Data Consistency)이 항상 유지됩니다.
-캐시와 메인 메모리 간 데이터 불일치로 인해 데이터 일관성을 보장하기 어려움.
Normal execution : includes cache hit time
Memory stall cycle: cache miss penalty

읽기 및 쓰기 미스 패널티가 동일하다는 가정 하에
Write-through : complication from write buffer
Write-back : potential stall from sync when a block is replaced

Direct-mapped cache: a block can be placed in one location
Fully associative cache: a block can be placed anywhere in the cache
Set associative cache : more than one location, but not anywhere
Direct-mapped 캐시에서는 각 메모리 블록이 특정 캐시 슬롯(한 위치)에만 매핑됩니다.
예를 들어, Block #4는 항상 특정한 슬롯(예: 슬롯 4)에 저장됩니다.
검색(Search) 과정에서 단일 슬롯만 확인하면 되므로 하드웨어 구현이 간단하고 빠릅니다.
특징:
구현이 간단하며 비용이 낮습니다.
충돌(Conflict)이 자주 발생:
서로 다른 메모리 블록이 동일한 캐시 슬롯에 매핑되면, 기존 데이터가 덮어씌워지는 캐시 미스가 발생합니다.
2. Set Associative Cache
설명:
n-way set associative cache는 하나의 세트(Set) 안에 n개의 슬롯을 가지며, 메모리 블록은 해당 세트 내 어디든 저장될 수 있습니다.
예를 들어, Set #0은 2개의 슬롯(2-way associative cache)을 가지며, Block #0과 Block #4가 해당 세트에 저장됩니다.
검색(Search) 과정에서 세트 내의 모든 슬롯을 확인해야 합니다.
특징:
Direct-mapped와 Fully associative의 절충안으로, 성능과 유연성을 동시에 제공합니다.
충돌(Conflict) 가능성이 줄어들지만, 완전히 제거되지는 않습니다.
하드웨어 복잡성이 약간 증가:
세트 내에서 여러 슬롯을 검색해야 하므로 Direct-mapped보다 구현이 복잡합니다.
3. Fully Associative Cache
설명:
Fully associative 캐시에서는 모든 캐시 슬롯이 하나의 세트로 간주됩니다.
따라서, 메모리 블록은 캐시의 어디에나 저장될 수 있습니다.
검색(Search) 과정에서 모든 슬롯을 확인해야 하므로 시간이 오래 걸립니다.
특징:
가장 유연한 방식:
어떤 블록도 캐시 내 아무 위치에 저장 가능.
충돌(Conflict) 없음:
특정 슬롯에 고정되지 않으므로 캐시 미스 확률이 낮아짐.
하드웨어 비용과 복잡성 증가:
모든 슬롯을 검색해야 하므로 구현이 매우 복잡하며, 검색 속도도 느립니다.