본문 바로가기

Computer Science

Cache memory 세부적인 이해를 위한 간단한 그림

 

 

 

 

( ' Memory unit ' 의 기초적인 개념과 계층 구조를 이해하고 있다는 전제 하에 작성되었습니다. )

 

 

 

 

 

이번 글에서는 현대 컴퓨터 과학에서 CPU의 성능 향상을 위해 아주아주 중요하며, 직접적인 역할을 하는 Cache memory 에 대해서 보다 자세하게 알아보도록 하겠습니다.

 

Cache memory 속도 차이가 나는 두 장치들 사이에서 이를 극복하기 위해 탑재되는 중간 Memory Unit 입니다.

 

보통 Main memory 에서 미리 데이터를 복사해둠으로써 CPU 가 보다 빠른 속도로 데이터에 접근하고,처리할 수 있도록 도와줍니다.

 

사실 '중간 단계의 Memory' 라는 점에서  Main memory(주 기억 장치) 가 CPUAuxiliary storage(보조 기억 장치) 사이에서 하는 역할도 결국 같은 역할입니다.

 

개념적으로 넓은 관점에서 보자면 Main memoryCache memory 라고 할 수 있는 것이죠.

 

다만 중간 단계의 Memory 로써 두 장치들 사이의 '속도 완충기' 역할만을 수행하는 Cache Memory 와 달리,

 

Mein memory 는 프로그램을 동작시키기 위한 작업공간으로써 그 외의 기능들도 수행한다는 점에서 구분되는 것입니다.

 

그러니까 엄밀히 말하자면 Main memory 의 여러 역할 중에는 Cache 로써의 역할도 포함되어 있다 라고 보는 것이 정확합니다.

 

 

 

 

그렇다면 이러한 Cache Memory 는 정확히 어떤 방식으로 CPUMain memory 간의 속도차이를 해결해 주는 것일까요?

 

아주 단순합니다. 바로 CPU 가 사용할 것 같은 데이터를 알아서 잘 딱 깔끔하고 센스있게 미리 가지고 있는 것이죠.

 

CPU 는 필요한 데이터가 있을 때 Cache Memory 를 먼저 확인하고 없다면 Main memory 를 확인하거나 필요한 경우 다시 연산 잡업을 통해 값을 도출합니다.

 

그러니까 CPU의 성능 향상을 위해서는 Cache Memory 가 다음 사용할 데이터를 잘 때려맞춰서 들고있다가 필요할 때 바로 건내주는게 중요한 것이죠.

 

이렇게 때려 맞춘 데이터가 마침 CPU 가 필요한 데이터여서 Main memory 조회 까지 가지 않는 것을 Cache Hit (캐시 히트) 라고 하고,

 

반대로 CPU 가 Cache Memory 에서 데이터를 찾지 못하여 메인 메모리까지 가야하는 경우를 Cache Miss (캐시 미스) 라고 합니다.

 

그리고 CPU 의 전체 요청건 중 Cache Hit 에 성공한 비율을 Hit rate (히트 레이트), 실패한 비율을 Miss rate (미스 레이트) 라고 합니다.

 

 

그렇다면 당연히 Cache Hit rate 를 높이는 방법이 열심히 연구되었겠죠?

 

그렇게 등장한 개념이 '데이터의 지역성' 과 이를 활용한 다양한 방식의 'Cache mapping (캐시 매핑)' 방법들 입니다.

 

 

 

데이터의 지역성

 

데이터의 지역성이란 특정한 데이터로의 접근이 시간적으로 혹은 공간적으로 가깝게 일어나는 특성을 의미하는데요.

 

그러니까 특정한 데이터로의 접근이 발생했을 때, 가까운 미래에 다시 접근할 가능성이 높다는 것을 시간적 지역성 이라고 하고,

 

특정 데이터로의 접근이 발생했을 때,  해당 데이터와 가까운 주소에 위치한 데이터로 접근할 가능성이 높다는 것을 공간적 지역성 이라고 합니다.

 

즉, 데이터로의 접근이 Memory 상에서 균일하게 일어나는 것이 아니라, 어느 한 순간 어느 한 곳에서 집중적으로 일어나는 경향이 있음을 뜻하는 것이죠.

 

 

 

Cache entry (캐시 엔트리)

 

다양한 Cache mapping 방법들을 알아보기 전에 Cache Memory 에 저장되는 데이터가 어떤 형식으로 저장되는지에 대해 먼저 알아보겠습니다.

 

Cache Memory 에 데이터가 저장될 때는 실제 저장해둘 데이터와 그 '식별값'이 함께 저장됩니다.

 

해당 데이터가 Main memory 주소 어디에서 왔는지 그리고 유효한 데이터인지 판별하기 위해 추가로 식별값을 할당하는 것이죠.

 

또한 이 식별값을 통해 데이터에 접근하기 때문에, 데이터 접근의 시간복잡도를 항상 O(1) 로 유지할 수 있는 것이기도 합니다.

 

실질적인 데이터가 들어가는 곳을 Cache block (캐시 블록) 이라고 하고, 식별값이 들어가는 곳을 Cache Tag (캐시 태그) 라고합니다.

 

Cache MemoryMain memory 에서 데이터를 가져와 저장하는 최소 단위가 Cache entry 이고, 

 

이러한 Cache entryCache Tag Cache block 으로 구성된 것입니다.

 

그리고 Cache entry 가 들어가는 Cache Memory 공간의 한 줄을 Cache line (캐시 라인) 이라고 합니다.

 

그러니까 " Cache entry Cache line 에 어떻게 배치할 것인가 "Cache mapping 알고리즘의 핵심이라는 것을 이해하면서 다음으로 넘어가 보겠습니다.

 

 

 

Cache mapping (캐시 배치 정책)

 

Cache mapping 에는 크게 세가지 종류가 있습니다.

 

Direct mapping (직접 매핑) 과 Associative mapping (연관 매핑), 그리고 이 둘을 섞은 Set-Associative mapping (집합 연관 매핑)이 그것입니다.

 

시간순으로 봤을때 순서대로 앞선 방식의 문제를 보완하는 식으로 등장하였습니다.

 

 

Direct mapping

Main memory 의 크기를 Cache Memory 의 크기로 나누고 Main memory 의 각 주소를 대응할 Cache line 을 순서대로 지정하는 가장 단순한 방식의 Cache mapping 입니다.

 

하나의 Cache memory 주소에,  여러 Main memory 주소가 대응되는 다대일 방식이기 때문에, 같은 Cache line 을 지정받은 데이터를 2개 이상 사용할 경우 매단위로 Cache 교체가 일어난다는 치명적인 단점이 존재합니다.

 

구현이 간단하여 동작 비용이 다른 방식에 비해 적다는 장점이 있지만, 공간 활용도가 낮고 Cache miss 문제가 심하기 때문에 현대 CPU 에서는 잘 채택되지 않는 방식입니다.

 

 

Associative mapping

특별한 규칙이나 순서가 없이 비어있는 Cache line 어디든 데이터를 저장하는 방식입니다.

 

복잡한 알고리즘이 필요없어 간단하면서 필요한 데이터 위주로만 저장하기 때문에 공간 활용도가 높습니다.

 

하지만 데이터를 찾을 때 순서대로 저장하지 않았기 때문에 모든 Cache entry 를 일일이 검색해야한다는 단점이 있습니다.

 

이러한 단점을 보완하기 위해 특수한 형태의 Memory 구조인 CAM (content addressable memory) 이 사용되기도 하는데요.

 

CAM 은 대부분의 Memory unit 이 데이터가 저장되어 있는 '주소'로 그 내용에 접근하는 것과는 달리, 접근하려는 '내용'을 기반으로한 비교를 통해 동일한 내용을 가진 셀에 접근합니다.

 

이때 Memory unit 각각의 셀들에 병렬적으로 동시에 접근하는 방식으로 빠른 속도를 꾀합니다.

 

하지만 CAM 은 구현이 매우 복잡하며 비용도 많이 든다는 단점이 있습니다.

 

Associative mapping 은 공간 활용도와 Cache hit rate 가 높지만, CAM 을 사용하지 않을 경우 검색에 많은 시간이 소요된다는 단점이 있고, CAM 을 사용할 경우 구현이 복잡하고 비용이 크다는 단점이 있습니다. 

 

 

Set-Associative mapping 은

앞선 두 방식을 섞은 방식으로 Memory 주소를 특정 범위별로 그룹화하여 순서를 지정하지만, 그 그룹 범위 내에서는 각각의 Cache entry 가 비어있는 어디든 저장되는 방식입니다.

 

어느 정도 블록화가 되어있어 Associative mapping 보다는 검색에 효율적이고, Direct mapping 보다는 공간 활용도와Cache hit rate 가 좋습니다.

 

현대 CPU 의 거의 대부분의 Cache memory 가 채택하는 방식입니다.

 

 

 

 

 

 

 

 

 

작성 전 학습/ 참고한 자료

[OS] 캐시 메모리(Cache Memory)란? 캐시의 지역성(Locality)이란? (tistory.com)

[운영체제/OS] 캐시(Cache)와 지역성(Locality) & 캐싱라인(Caching Line) (tistory.com)

캐시 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

[컴퓨터구조] 캐시 메모리 (velog.io)

캐시 메모리 - 나무위키 (namu.wiki)