-지역성의 원칙
1. temporal locality 시간적 지연성
한번 참조된 항목은 곧바로 다시 참조되는 경향이 있음.
순환문 -> 명령어와 데이터를 반복적으로 접근
2. spatial locality 공간적 지연성
어떤 항목이 참조되면 그 근처에 있는 다른 항목들이 곧바로 참조될 가능성이 높음.
배열이나 레코드의 요소들 순차적 접근
시프 강의에서 본건데 반갑다 반가워 근데 잘은 모르는게 함정
컴퓨터의 메모리를 메모리 계층구조로 구현함으로써 지역성의 원칙을 이용할 수 있다.
메모리 계층구조는 서로 다른 속도와 크기를 갖는 여러 계층의 메모리로 구성되어 있다.
그 목적은 사용자에게 가장 빠른 메모리의 접근 속도를 제공하면서 동시에 가장 싼 메모리만큼의 용량을 제공하는 것.
빠를수록 비싸고 작다고 보면 됨!
1. SRAM (Static RAM)
2. DRAM (Dynamic RAM)
3. Flash storage
4. Magnetic disk
계층 안 기본 단위: 블록(Block) / 라인(Line)
-> Unit of copying, 계층 간 무엇인가 복사할 때에는 대개 블록 전체가 이동됨
프로세서가 요구한 데이터가 상위 계층의 어떤 블록에 있을 때: Hit
찾을 수 없다면: Miss -> 필요한 데이터를 포함하는 블록을 찾기 위해 하위 계층 메모리를 접근하게 됨
hit ratio: #hits / #accesses
miss ratio: #misses / #accesses = 1 - hit ratio
hit time: 메모리 계층구조의 상위 계층을 접근하는 데 걸리는 시간
miss penalty: 하위 계층에서 해당 블록을 가져와서 상위 계층 블록과 교체하는 시간 + 그 블록을 프로세서에 보내는 데 걸리는 시간
<Cache>
요 부분이 아마 이번 시험에서 제일 중요한 부분이 될 것 같다. 뭔가 느낌상 그렇다 왜냐면 계산할게 많그등
데이터가 캐시 내에 있는지 어떻게 알 수 있을까? 그리고 알 수 있다면 어떻게 찾을 수 있을까?
각 메모리 워드에 캐시 내의 위치를 할당하는 가장 간단한 방법은 그 워드의 메모리 주소를 이용하는 것이다.
-> direct mapped cache
각 메모리의 위치가 캐시 내의 딱 한 장소에 바로 사상된다.
direct mapped cache가 메모리 주소를 캐시 위치로 바꾸는 방법은 간단하다!
(블록 주소) modulo (캐시 블록 수)
만약 주소가 10001, 캐시가 8 blocks라면 10001 % 8 -> 하위 3비트 잘라서 '001' (Use low-order address bits)
왜 하위 3비트냐 하신다면 8은 2의 세제곱이기 때문이죠
ㅇㅋㅇㅋ 캐시에 메모리 주소 할당했어
그럼 프로세서가 요구하는 워드가 캐시 내에 있는지 없는지는 어떻게 알 수 있나요?
캐시에 태그(tag)를 추가하면 됩니다 ~!
태그는 캐시 내의 워드가 요청한 것인지 아닌지를 식별하는 데 필요한 주소 정보를 포함한다.
태그는 캐시 인덱스로 사용되지 않은 주소의 상위 부분 비트들로 구성된다. (태그에는 인덱스 비트 포함되지 않음)
그럼 캐시 블록이 유효한 정보를 가지고 있는지는 어떻게 알아내죠?
캐시 엔트리에 유효 비트(valid bit)를 추가하면 됩니다 ~!
이 비트가 0이면 이 엔트리에는 유효한 블록이 없는 것으로 간주한다.
valid(1 bit) | tag | data |
표 크기 조정이 안 되는게 아쉽구먼
- Address Decomposition
1. Offset: determined by the block size
1 word/block: 2 bits, 8 words/block: 5 bits
8 word는 8 * 4 = 32bit자나요 근데 32는 2의 5승. offset은 5bit.
2. Index: determined by the number of blocks in cache
4KB cache, 4 words/block
1 block is 16 bytes. 4KB/16B = 256 blocks in cache. 256은 2의 8승. index는 8bit.
3. Tag: 나머지
- Cache example
memory address: 8 bit
8-blocks, 1 word/block, direct mapped
-> 8 blocks는 2의 3승. index는 3bit
-> 1 word는 4비트. 4비트는 2의 2승. offset은 2bit
나머지 8 - 3 - 2 = 3bit는 tag
load 1
address: 0x58
010/110/00 -> tag 010 / index 110 / offset 00
block address: 010 110
index: 110, Valid: Y, Tag: 010, Data: Mem[0x58]
'SKKU SW > Computer Architecture' 카테고리의 다른 글
[컴퓨터구조] 캐시 성능의 측정 및 향상 (0) | 2023.06.02 |
---|---|
[컴퓨터구조] 캐시 실패의 처리 (0) | 2023.06.01 |
[컴퓨터구조] Procedure Calling (0) | 2023.04.17 |
[컴퓨터구조] RISC-V Instruction Formats(2) (0) | 2023.04.15 |
[컴퓨터구조] RISC-V Instruction Formats(1) (0) | 2023.04.14 |