Computer Architecture(컴퓨터구조)를 들으면서 Memory Hierarchy 및 Cache Memory의 작동 원리에 대해 정리해 보았다.
메모리가 Level이 있다.
CPU Register(General Purpose Register등, 정확히는 Register File)
Cache Memory(SRAM)
Main Memory(DRAM)
Second Storage(HDD, SSD)
아카이브 스토리지(Magnetic Tape 등)
Level이 상위 레벨일수록 속도는 빠르나, 가격이 비싸고, 용량이 작다.
하위 레벨일수록 속도는 느리나, 가격이 싸고, 용량이 크다.
우리가 원하는 것: 속도도 빠르고, 용량도 크고, 가격 싼 것
그러나, 이 조건을 모두 충족시키는 메모리는 존재하지 않습니다.
목적: 적절하게 구조화를 해서 빠르고 용량이 큰 것과 같은 illusion을 사용자에게 제공하는 것
상위 계층일수록 CPU와의 물리적 거리도 짧다,
구조화를 시킬 때, 어떤 것을 선택하여 어떻게 상위 메모리로 배치할지를 결정하는 것이 중요하다.
빼낼 때는 어떤 것을 빼낼 지 결정하는 것 중요하다.
| Register | Cache | Main Memory | Disk Memory | |
|---|---|---|---|---|
| Size | 100B | KB→MB | GB | GB→TB |
| Management | Compiler | Hardware(특정 오류 발생 시 OS가 개입) | Operating System | Operating System |
Memory Hierarchy의 Optimization으로 illusion을 제공할 수 있는 것은 Memory Technology와 Program Locality 때문이다.
어떤 항목이 메모리에서 참조가 되면 그 항목이 반복적으로 참조가 될 가능성이 높다.
예) 반복문 등
어떤 항목이 메모리에서 참조가 되었을 때, 주변의 영역이 참조될 수 있는 가능성이 높다.
예) 배열(array) 등
목적: 가장 높은 단계의 메모리의 속도와 가장 낲은 단계의 메모리의 가격과 용량을 사용자에게 제공하는 듯한 환상을 제공하는 것이 목적이다.
Row Major의 Locality
================================================
a[0][0]|a[0][1]|a[1][0]|a[1][1]| ......
================================================
접근 방향———————————————————————>>>>>>>
Column Major의 Locality
================================================
a[0][0]|a[0][1]|a[1][0]|a[1][1]| ......
================================================
1 3 2 4
Spacial Locality가 Row major 접근보다 낮다.
Locality를 잘 활용하는 것도 Programmer의 능력이다.
캐시 메모리: 메인 메모리보다 용량이 작고, 빠른 메모리로 데이터를 임시 저장하여 속도를 향상하는 것을 목표로 한다.
k 레벨의 메모리는 그 다음 레벨 k+1레벨의 메모리의 캐시 역할을 하게 되어 있다.
이것은 메모리에서 Locality에 의해서, k레벨의 캐시 데이터를 더 많이 참조하게 되어 가능한 일이다.
용어 정리:
Block: 이동하는 데이터의 기본 단위(word: RISC 계열은 8bits, Intel 계열은 4bits이다.)
Hit: 상위 레벨에서 엑세스하려는 데이터가 발견된 경우
Hit Rate: 상위 레벨에서 엑세스가 가능한 경우의 비율
Hit Time: 상위 레벨에서 엑세스하는데 걸리는 시간
Miss: 데이터를 하위 레벨의 메모리에서만 찾을 수 있는 경우
Miss Rate: 1 - hit rate
Miss Penalty: 낮은 레벨의 메모리에서 데이터를 복사하는데 걸리는 시간
= lower lever에서 block을 얻는데 걸리는 시간 + upper level에서 replace를 하는 시간
(당연히 Hit time도 포함되며, hit time보다 긴 시간이 소요된다.)
Average Memory Access Time = hit time + miss rate * miss penalty
문제 예시 : hit time과 miss rate, miss penalty를 구하고 성능 차이를 비교하는 문제
Additional Benefits:
CPU에서 메모리 접근 시 System Bus 사용, System Bus가 사용 중일 때는 DMA 등의 다른 장치가 사용할 수 없다. Cache이용 시 System Bus를 사용하지 않아도 되므로, Memory의 대역폭 사용을 줄일 수 있고, DMA 등 타 장치가 대역폭을 전부 활용할 수 있다.
ISA를 교체하지 않아도 된다: 상위 레벨(프로그래머 및 개발자가 이용하는 레벨)에서는 Cache가 transparent하므로 프로그래밍이나 코드를 바꾸지 않아도 된다.
ex) Intel core i7 Block의 경우
=====================================
CPU core(Reg file)
→ L1 cache(i), L1 cache(d)
→ L2 Cache
===================================(코어 1개) x4
→L3 Cache(코어 공동 사용)
→ 메모리 컨트롤러, QPI
CPU는 1 word를 요구하고, 1 word가 1 block일 때,
Direct-Mapped Cache
Cache Block의 주소는 Memory Address에 의해 결정된다.
Cache slot = memory block address % cache block size
나머지가 동일한 경우에는 같은 cache block slot에 들어가게 된다.
Memory Address의 나머지 부분은 tag로 별도로 기록을 해 두게 된다.
v(유효성 검증) | tag bits | 0 1 2 3 4 5 6 7번째 비트
Memory Address:
tag bits+find set using unit number+offset