캐시 히트 미스 - kaesi hiteu miseu

캐시 메모리의 구조(Cache Structure)와 캐시 히트(Cache Hit), 캐시 미스(Cache Miss)

캐시 히트 미스 - kaesi hiteu miseu
윌리2021. 3. 28. 13:47

Temporary Storage

캐시 메모리(Cache Memory)는 CPU 프로세서가 빠른 속도로 데이터를 주고 받을 수 있도록 도와주는 메모리이다. 이를 위해, 캐시 메모리는 CPU 프로세서와 인접하게 위치하고 있으며, 참조 지역성(Locality of Reference)의 원리에 따라 주 기억장치(Main Memory) 또는 보조기억장치 등과 같은 메모리 저장소의 데이터를 미리 가져와 보관하는 임시 저장소 역할을 수행한다. 이번 페이지에서는 캐시를 논리적으로 구성하는 방법(Cache Organization and Mapping)에 대하여 알아보자

참조 지역성의 원리란, 자주 사용되는 데이터에 대한 판단기준이다. 참조 지역성은 시간 지역성과 공간 지역성으로 구분된다. 더 자세한 내용은 아래 페이지를 참고하자

추천 페이지 : https://blog.naver.com/cjsksk3113/222251293739

Tag Field, Valid Bit, Data

캐시 메모리는 캐시 블록(Cache Block)이라는 데이터 그룹 단위를 가진다. 각각의 캐시 블록은 데이터를 담고 있으며, 캐시 태그(Cache Tag)와 묶어서 하나의 캐시 엔트리(Cache Entry)를 구성한다. 태그(Tag)는 캐시 블록의 고유 식별값으로 CPU 프로세서는 캐시 태그 값을 통해 캐시 블록에 접근할 수 있다. 캐시 태그에는 해당 캐시 블록에 올바른 데이터가 저장되어 있다는 것을 나타내는 유효 비트(Valid Bit)가 포함되어 있다. 캐시 블록이 비어있거나 올바르지 못한 값을 가지고 있으면, 유효비트는 0으로 설정(Set)되어 유효한 블록이 없는 것을 알려준다

이처럼, 캐시가 빠른 이유는 참조 지역성의 원리에 따라, 자주 사용하는 데이터를 우선적으로 저장하고 있기 때문이기도 하지만, 유효비트와 태그필드를 이용한 메모리 접근으로 인하여 시간복잡도가 O(1)일 정도로 작아지기 때문이기도 하다

캐시 히트 미스 - kaesi hiteu miseu

캐시 메모리는 S개의 집합(Set)으로 묶여있으며, 각 집합은 E개 캐시 엔트리를 가지고 있는 캐시라인(Cache Line)으로 구성된다. 필요한 캐시 메모리의 크기는 메모리에 존재하는 캐시 블록의 전체 개수(Blocks)와 블록 하나당의 크기(Block size)로 계산한다

여기서 기억해야할 것은 태그 필드와 유효 비트를 가지고 있는 캐시 태크는 필요한 캐시 메모리의 크기와는 별도의 요구되는 공간이라는 점이다. 또한 뒤에서 이야기할 인덱스 필드의 경우에도 캐시 메모리의 크기에 영향을 주지 않는데, 인덱스 필드는 별도의 비트 필드를 가지지 않아도 하드웨어에서 물리적인 주소로 바로 연결을 시켜주기 때문이다

아래에서 이야기하겠지만 Cache Line(E)에 따라 캐시 메모리의 논리적인 구조가 구분된다

E = 1이면 Direct-Mapped Cache으로 부르며, E > 1이면 E-Way Set Associative Cache라고 부른다

캐시 히트 미스 - kaesi hiteu miseu

(예시)

32 KB 캐시라는 말은 32 KB 데이터를 저장할 수 있는 캐시 메모리라는 의미이다. 이 메모리 크기에 캐시 태그 크기는 포함되어 있지 않다. 캐시 블록의 크기가 32 바이트 일때, 캐시 태그가 태그 필드로 17 비트, 유효 비트 1비트를 가지고 있다고 가정해보자

32 KB 캐시 메모리에는 32 바이트 캐시 블록이 1024개 들어가 있다. 하나의 캐시 블록당 17 + 1 = 18 비트의 캐시 태그를 가지고 있으므로, 총 18 * 1024 = 18 Kb의 메모리 크기를 더 가지고 있음을 알 수 있다. 18 Kb는 바이트로 변환하면 2.25 KB이다. 즉, 32 KB의 캐시는 2.25 KB의 메모리를 더 가지고 있으므로, 사실 34.25 KB의 크기를 가지고 있다

캐시 태그로 인한 메모리는 캐시 블록과는 상관없는 오버헤드(Overhead)로 취급된다. 따라서 32 KB 캐시는 약 7%의 태그 오버헤드를 가지고 있음을 확인할 수 있다. 태그 오버헤드가 증가할수록 데이터 액세스에 대한 레이턴시(Latency)가 증가한다. 태그 오버헤드로 인한 레이턴시를 줄이기 위해, CPU 프로세서는 태그를 확인하는 과정과 데이터에 접근하는 과정을 동시에 수행한다

Cache Hit, Cache Miss

CPU 프로세서는 필요한 데이터가 있을때마다 해당 데이터의 메모리 주소를 이용하여 액세스한다. 하드웨어 장치에서 물리적인 메모리 주소로 바로 연결을 시켜주기 때문에 메모리 주소는 별도의 메모리 공간을 가지지 않는다. 참고로 캐시 메모리는 사용자 프로그램과 메모리 저장소에 대하여 투명하게(transparently) 동작하므로, 프로그래머가 캐시 메모리를 고려하여 코드를 작성할 필요가 없다

캐시 메모리가 투명(Transparent)하다는 의미가 무엇인지 궁금하다면, 아래의 페이지를 참고하세요

추천 페이지 : https://blog.naver.com/cjsksk3113/222282661350

찾고 있는 데이터의 메모리 주소는 먼저 캐시 메모리에서 이용된다. 메모리 주소를 이용하여 찾고 있는 데이터가 캐시 블록에 있는지 여부를 식별하는데 사용한다. Cache Hit(캐시 히트)는 캐시 메모리에 찾는 데이터가 존재하였을 때를 나타내며, Cache Miss(캐시 미스)는 캐시 메모리에 찾는 데이터가 존재하지 않음을 나타낸다. Cache Miss가 발생하면, 메모리 저장소로부터 필요한 데이터를 찾아 캐시 메모리에 로드한다

메모리 주소는 올바른 캐시 블록을 식별할 수 있도록 캐시 태그(Cache Tag), 세트 인덱스(Set Index) 그리고 블록 오프셋(Block Offset)으로 구성된다. 블록 오프셋은 캐시 블록 내의 특정 바이트 위치에 액세스하기 위한 필드이다

캐시 히트 미스 - kaesi hiteu miseu

(예시)

32 비트 CPU 프로세서가 Direct-Mapped(직접 사상) 캐시 메모리에 액세스하고 있다고 가정하자. 메모리 주소는 태그 필드 T 비트, 세트 인덱스 S 비트, 블록 오프셋 B 비트로 구성되어 있다. 캐시 메모리에 존재하는 블록의 개수 s가 8개이고, 블록의 크기 b는 4바이트(32 비트)이다

여기서, 세트 인덱스인 S와 블록 오프셋인 B는 각각 S = 2^s, B = 2^b를 만족하는 값이다. 이 때, 캐시 블록의 개수 s가 8개이므로 세트 인덱스 S = 3 비트이며, 블록의 크기 b가 4바이트이므로 블록 오프셋 B = 2 비트가 된다. 따라서 태그 비트 T = 32 - 3 - 2 = 27 비트를 가진다

이를 그림으로 나타내면, 아래와 같다

캐시 히트 미스 - kaesi hiteu miseu

CPU 프로세서에 액세스해야 할 메모리 주소가 지정되면, 이 주소를 필요한 필드로 분할하고 캐시 메모리의 엔트리(Cache Entries)를 검사하기 시작한다

1. 먼저 세트 인덱스(Set Index)에 따른 캐시 엔트리(Cache Entry)에 액세스한다

2. 해당 캐시 엔트리의 유효 비트(Valid Bit)가 1인지 확인한다

3. 유효 비트가 1이라면, 메모리 주소의 태그 필드와 캐시 엔트리의 태그 필드가 동일한지 비교한다

4. 두 개의 태그가 동일하다면, 유효비트와 AND 연산한다

유효 비트가 1이라는 것은 캐시 블록에 올바른 데이터가 존재한다는 것을 의미한다. 또한 CPU에 지정된 메모리 주소의 태그와 캐시 엔트리의 태그 또한 같으므로, 올바른 메모리 주소에 액세스되었음을 확인할 수 있다. 이것이 바로 Cache Hit(캐시 히트)이다

만약, 유효 비트가 0이라면 Cache Miss(캐시 미스)가 발생한다. 이는 캐시 블록이 비었거나 올바르지 않은 데이터가 있다는 뜻이다. 캐시 메모리는 상위 캐시 메모리나 주기억장치(Main Memort)에서 데이터를 다시 가져와 작성한 후, 유효 비트를 1로 변경한다

유효비트가 1이라도 태그가 서로 일치하지 않으면 Cache Miss가 발생한다. 이 경우 캐시 메모리의 교체 정책에 따라 조치가 이루어진다. FIFO(선입선출) 정책을 사용하고 있다면, 가장 오래된 데이터가 가장 먼저 교체된다. 캐시 엔트리의 태그 필드를 메모리 주소의 태그로 변경하고, 상위 캐시 메모리나 주기억장치에서 데이터를 가져와 변경한다

캐시 히트 미스 - kaesi hiteu miseu

게시물이 도움이 되셨나요?

이해가 잘 안되는 내용이 있거나

잘못된 내용을 찾으셨다면

댓글을 남겨주세요

저 또한 계속 공부하여

정확하고 쉬운 설명을 드리도록

꾸준히 노력하겠습니다

오늘도

좋은 일만 가득하세요! :)