본문 바로가기
Computer Architecture/Basic

캐시 메모리(Cache Memory)의 구조 및 동작 과정 - 1

by FastBench 2023. 4. 11.

초안 :  2023.04.10

 

2023.04.10 - [Computer Architecture] - 캐시 메모리(Cache Memory)의 원리

 

 

캐시메모리에는 메인메모리의 일부 내용이 복사되어 저장된다.

프로세서가 어떤 주소에 접근하려고 하면, 먼저 그 주소에 해당하는 내용이 캐시에 있는지 확인하고 있다면 캐시메모리에서 바로 읽고, 없다면 메인메모리에서 읽고 캐시로 복사해온다.

이때 해당 주소 뿐만 아니라 인접 주소 내용도 함께 블록 크기로 복사한다.

 

즉 캐시메모리에 저장되는 정보는 두개이다.

1. 메인 메모리에서 복사한 데이터 블록
2. 이 데이터 블록이 메인 메모리의 몇번지에 있던 내용인지 나타내는 Tag 정보

 

아래 그림은 4x16 형식의 캐시 메모리 구조 예시이다. 4개의 데이터 블록이 있으며, 각 블록의 크기는 16바이트 라는 의미이다.

따라서 64바이트의 데이터를 저장할 수 있는 캐시메모리이다.

 

valid 비트는 해당 블록의 캐시 정보가 유효한지 알려주는 비트로, garbage 값이 들어있을 경우 valid 비트는 0이고 실제 메모리 값이 복사되어 캐시에 저장될 경우 valid 비트는 1 이 된다.

 

 

 

캐시메모리의 동작 과정

메인메모리의 크기가 1kB 인 시스템을 가정해보자.

처음 전원을 키면 캐시메모리는 비어있다.  따라서 프로그램의 0번지를 읽으려고 하면 cache miss 가 발생한다.

따라서 메인메모리의 0번지를 포함하는 데이터 블록을 읽어 캐시에 저장한다. 위에서 한 블록을 16바이트라고 가정 했으니, 0~15번지까지의 내용이 캐시에 저장된다.

 

이때 캐시의 어느 곳에 저장할 것인가(mapping)하는가에 따라 동작 과정이 달라진다.

Fully Associative Mapping

0은 'b00000 이고 15는 'b01111 이다. 즉 블록에 포함될 데이터 주소는 'b0xxxx  이므로 태그에는 이진수 'b0 을 기록한다.

만약 프로그램이 분기가 되서 80번지로 점프를 하면 다시 cache miss 가 발생하고 메인메모리에서 80번지를 포함한 데이터 블록을 복사해서 캐시에 저장한다. (80~95 번지)

이때 80은 'b1010000 이고 95는 'b1011111 이다. 즉 블록에 포함될 데이터 주소는 'b101xxxx이므로 태그에는 'b101 을 저장한다.

 

이러한 과정을 진행할 때, 메인메모리의 블록 정보를 캐시메모리의 비어있는 곳 아무데나 저장 하는 방식을 fully associative mapping 이라고 한다.  아무 곳에다 저장을 하면, 나중에 캐시메모리에서 해당 내용을 찾을때 모든 블록을 다 뒤져야 하는데 이러면 시간이 오래걸리게 된다. 따라서 보통 각 블록마다 비교기를 두어 동시에 찾게 하고, 이는  비싼 캐시메모리를 더 비싸게 만든다.

fully associative mapping 방식에서 tag 의 width 는?
본 예시를 잘 정리해보면, 만약 메인메모리가 1kB 일 경우 프로세서가 접근하려는 주소의 범위는 10bit 내에서 정해지고 (2^10 = 1kB),
블록내의 주소 범위가 4bit 로 표현 되므로, tag 는 10 - 4 = 6bit 길이를 가져야 한다.

 

Direct Mapping

cache miss 된 블록을 메인메모리에서 복사해서 캐시에 저장할 때, 아무 곳이 아닌 지정된 한 군데만 넣을 수 있도록 제한한다면, 나중에 이 내용을 캐시메모리에서 다시 찾을 때 그 곳만 찾으면 되므로 하나의 비교기만 사용되어 저렴해 질 수 있다. 이러한 방식을 Direct mapping 이라고 한다.

 

예시를 위해 위에서 사용한 구조를 그대로 가져와보자. 시스템메모리는 1kB 이고, 캐시는 4x16 = 64 바이트라고 가정한다.

 

 

처음에 0번지를 읽을 때 캐시메모리는 비어있으므로 cache miss 가 발생하고, 메인메모리에서 0~15번지의 내용을 복사하여 가져온다. 주소는 'b000000 에서 'b001111 이므로, 0번째 slot 에 저장된다. (아래 그림 참고)

본 예의 캐시에는 4개의 블록이 존재하는데, 이 블록 번호 지정을 위해서는 2bit 이 필요하다. (2^2)
따라서 0~15 까지를 나타내는 오프셋 4bit + 블록 지정을 위한 2 bit (slot) 를 제외한 나머지 4bit 가 tag width 가 된다.

분기문으로 인해 갑자기 80번지로 뛴다면 cache miss 가 발생하고, 메인메모리에서 80번지를 포함한 데이터 블록을 가져온다. 주소는 'b1010000 에서 'b1011111 이므로, 블록에 포함된 데이터 주소는 'b101xxxx 이다. 여기서 slot bit 가 01 이므로 1번째 slot 에 저장된다. 태그에는 slot bit와 offset bit를 제외한 나머지 이진수 1을 기록한다.

 

만약 320번지를 읽고자 한다면 cache miss 가 발생하고 010100xxxx 주소 범위의 블록을 가져오는데 이는 'b00 의 슬롯에 해당한다. 따라서 빈 자리가 있음에도 불구하고 0~15번지 내용은 캐시에서 삭제된다.

 

이렇게 direct mapping 방식은 비교기를 하나만 쓰면서도 내용 검색을 빨리 할 수 잇다는 장점이 있지만, 캐시가 비어있음에도 그 공간을 활용하지 못한다는 단점이 있다.

 

 

 

Reference

  • 컴퓨터 구조의 핵심, 퍼플, 양희재

 

댓글