본문 바로가기
컴퓨터 지식창고

캐시메모리의 개념과 매핑기법에 대한 설명

by 재미보장 2021. 12. 11.

Cache Memory는 메인 메모리와 CPU간의 데이터 속도 향상을 위한 중간 버퍼 역할을 하는 CPU내 또는 외에 존재하는 메모리이다. 전체 시스템의 성능의 개선을 시킬 수 있는 메모리이다. 이번 포스팅에서는 캐시 메모리에 대한 기본 개념과작동 기법에 대하여 알아보겠다.

캐시메모리란

캐시 메모리라고 하면 실제 메모리와 CPU 사이에서 빠르게 전달을 위해서 미리 데이터들을 저장해두는 좀더 빠른 메모리이다. 네트워크에서 캐시는 로컬에 파일을 미리 받아놓고, 그 내용을 보거나 웹서버에서도 매번 로딩을 해야 하는 파일들을 미리 로딩해두고, 응답을 주기도 한다. 데이터 베이스를 매번 확인해야 하는것도 캐시서버를 이용한다면 빠른 응답을 해줄 수 있다.

 

데이터의 임시 보관소. Cache Memory의 'Cache’라는 의미는 보관이나 저장의 의미이다. Cache Memory라 하면 이러한 역할을 하는 물리적 장치 즉 메모리를 말한다. CPU와 메인 메모리 사이에 존재한다고 말할 수 있는데, CPU내에 존재할 수도 있고 역할이나 성능에 따라서는 CPU밖에 존재할 수도 있다. 빠른 CPU의 처리속도와 상대적으로 느린 메인 메모리에서의 속도의 차이를 극복하는 중간 버퍼 역할을 한다. 쉽게 표현하면 CPU는 빠르게 일을 진행하고 있는데, 메모리에서 데이터를 가져오고 가져가는데 느려서 중간에 미리 CPU에 전달될 데이터를 들고 서 있는 형태라고 말할 수 있다.

캐시메모리 매핑기법

매핑기법에는 직접매핑/연관매핑/직접연관매핑이 있다. 이중 직접매핑을 위주로 나머지 매핑에 대하여 설명하겠다.

1. 직접매핑(Direct Mapping) 

메모리 주소와 캐시의 순서를 일치시킨다. 메모리가 1~100까지 있고 캐시가 1~10까지 있다면 1~10까지의 메모리는 캐시의 1에 위치하고 11~20까지의 메모리는 캐시의 2에 위치시키는 것이다. 구현이 정말 간단하지만 저 규칙을 만족시켜서 캐시를 넣다 보면 캐시가 효율적이지 않게 자꾸 교체되어야 하는 일이 생긴다. 

예를 들면 30~40에 해당하는 값을 자꾸 불러다 사용해야 하는데 이를 저장할 캐시 공간은 3 하나 뿐이므로 매번 캐시 교체가 일어나게 된다. 즉 적중률이 낮고 성능이 낮은 단순한 방식이다. 

 

쉽게 말하면 메인메모리와 캐시를 똑같은 크기로 나누고 순서대로 매핑하는 것을 말합니다. 블록은 업로드 될 수 있는 지정된 라인을 가지고 있다. 좀 더 자세한 이해를 위해 자세히 기술하겠다.

 

자 만약 캐시의 크기가 16워드이고 메모리의 크기가 64워드라고 가정해봅시다.

블럭하나가 4워드면 메모리의 블럭 개수는 64/4해서 16이 되겠죠? 즉 16개 블럭을 가집니다.

마찬가지로 캐시는 16/4해서 4개의 줄을 가질거예요. 하나의 라인이 4워드를 가지니 하나의 블록 크기만큼만 들어갈 수 있겠네요 

 

컴퓨터는 이진수이기 때문에 64를 표현하려면 2^6 =64 즉 6bit가 필요해요. 즉 첫 번째 워드 주소는 000000, 두 번째 워드 주소는 000001 ... 마지막 64번째 워드 주소는 111111이 될 겁니다. 2진수의 특성에 의해서 두자리만 보면 00 01 10 11 00 01 10 11 즉 2^2=4 단위마다 반복 특징을 띄므로 마지막 2비트는 각 블록의 워드 순번이 되는 것을 알 수 있어요.

111111하면 앞의 4비트 1111, 1+2+4+8 =15행의 뒤의 2비트 11 즉 4번째 워드가 되는거죠 (각 블록 행은 4개의 워드를 가짐!) 이게 블록 하나에 4개의 워드라 가정했기 때문에 2비트로 워드의 순번을 알 수 있는거예요. 2의 2승이 4이기 때문

그래서 6bit 기준으로 마지막 2비트를 block offset이라고 하고 앞의 4bit를 Block number라고 한다.

 

결론적으로 순서대로 블럭 하나 캐시 하나 매치한 것이 Direct Mapping이다

즉 캐시 0라인에는 블럭 0을 캐시 1라인에는 블럭 1을 .... 캐시 3라인에는 블럭 3을, 캐시 4라인에는 블럭 0을.. 이렇게 1대1로 직접 매칭하기 때문에 Direct Mapping이다. 여기서 0,1,2,3은 블록 순번이예요. 0블럭에는 0,1,2,3 순번의 4개의 워드가 들어가 있고 1블럭에는 4,5,6,7 워드가 들어가 있겠죠? 캐시도 1라인이 4워드 즉 블록크기와 워드의 크기가 일치하기 때문이 이와 같이 블럭과 캐시를 1대 1 매핑할 수 있다.

2. 연관매핑(Associative Mapping) 

순서를 일치시키지 않는다. 필요한 메모리값을 캐시의 어디든 편하게 저장 될 수 있다. 당연히 찾는 과정은 복잡하고 느릴 수 있지만 정말 필요한 캐시들 위주로 저장할 수 있기 때문에 적중률은 높다. 캐시가 일반 메모리보다 속도가 훨씬 빠르므로 캐시의 검색량을 신경쓰는 것 보단 적중률이 높은게 성능이 더 좋다.

3. 직접연관매핑(Set Associative Mapping) 

연관매핑에 직접매핑을 합쳐 놓은 방식이다. 순서를 일치시키고 편하게 저장하되, 일정 그룹을 두어 그 그룹 내에서 편하게 저장시키는 것이다. 예를 들면 메모리가 1~100까지 있고 캐시가 1~10까지 있다면 캐시 1~5에는 1~50의 데이터를 무작위로 저장시키는 것이다. 블록화가 되어 있기 때문에 검색은 좀 더 효율적으로 되고 직접매핑처럼 저장위치에 대한 큰 제약이 있는건 아니기 때문에 적중률이 많이 떨어지지도 않는다. 




댓글