본문 바로가기
공부/컴퓨터 구조론

[컴퓨터구조론] 캐시 메모리 블록 사상 방식

by 웅대 2022. 12. 16.
728x90
반응형

메모리 계층 구조는 위 그림과 같다.

 

아래에서 위로 갈수록 가격이 비싸고 속도가 빠르며 용량이 적다.

 

계층 구조 중 캐시 메모리에 대해서 공부해보려한다.

 

캐시 메모리

캐시 메모리는 CPU와 메인 메모리 사이의 속도 차이를 줄이기 위해 필요하다.

 

CPU는 원하는 데이터를 가져오기 위해서 아래와 같은 과정을 거친다.

 

  1. CPU가 캐시 메모리에 워드를 요청한다. 존재하면 가져오고 존재하지 않으면 2번으로 간다.
  2. CPU가 메인 메모리에  워드를 포함한 블록을 요청한다. 존재하면 블록을 복사하여 캐시 메모리에 보내고 3번으로 간다. 존재하지 않으면 4번으로 간다.
  3. 캐시 메모리에 복사된 블록이 존재하므로 다시 캐시 메모리에 워드를 요청하여 가져온다.
  4. CPU가 보조 저장장치에 페이지를 요청하여 메인 메모리로 가져온다.
  5. CPU가 메인 메모리에  워드를 포함한 블록을 요청하여 복사된 블록을 캐시 메모리로 가져온다.
  6. CPU가 캐시 메모리에 워드를 요청하여 가져온다.

기본적으로 CPU가 데이터를 가져오기 위해서는 계층 구조를 뛰어넘을 수 없다.

 

캐시 메모리에 존재하지 않으면 메인 메모리로부터 바로 가져오는 것이 아니라 메인 메모리로 제어 신호를 보내서 메인 메모리 -> 캐시 메모리 -> CPU로 가져오도록 한다.

 

여기서 적중, 실패라는 용어를 사용한다.

 

  1. 적중 : 원하는 데이터가 캐시 메모리에 존재
  2. 실패 : 원하는 데이터가 캐시 메모리에 없음

적즁률은 적중/실패로 구할 수 있다.

 

캐시 메모리에는 태그 메모리와 데이터 메모리가 존재한다.

 

예시를 들어가며 태그 메모리의 필요성에 대해 공부해보려 한다. 다음과 같은 시스템이 존재한다.

메모리 : 512 Byte
캐시 : 128 Byte
블록 : 16 Byte
워드 크기 : 4 Byte

먼저 메모리와 캐시에 들어갈 수 있는 블록 개수부터 구한다.

 

하나의 블록은 16 Byte 이므로 메모리와 캐시 각각 블록 크기로 나누면 구할 수 있다.

메모리 블록 : 32개 (2의 5제곱)
캐시 블록 : 8개 (2의 3제곱)

 

이제 메모리와 캐시의 주소를 나타내기 위해 필요한 비트의 개수를 구한다.

 

메모리는 2의 9제곱이므로 이 Byte 주소를 표현하기 위해서는 9개의 비트가 필요하다.

 

캐시는 2의 7제곱이므로 이 Byte 주소를 표현하기 위해서는 7개의 비트가 필요하다.

 

메모리 주소를 표현하기 위한 비트 개수 : 9개
캐시 주소를 표현하기 위한 비트 개수 : 7개

이제 메모리 블록과 캐시 블록의 표현하기 위한 비트 개수도 같은 방식으로 구하면

메모리 블록을 표현하기 위한 비트 개수 : 5개 (메모리 블록 번호)
캐시 블록을 표현하기 위한 비트 개수 : 3개 (캐시 블록 번호)

블록의 크기는 16 Byte이므로 4개의 비트가 필요하다.

 

그리고 워드의 크기는 4 Byte이므로 2개의 비트가 필요하다. 그래서 만약 블록에서 워드를 알고싶다면 상위 두 비트만 사용하면 된다.

 

위 정보들을 바탕으로 블록 사상 방식에 대해서 공부해보려 한다.

 

블록 사상 방식은 메인 메모리의 블록을 캐시 메모리에 사상(위치)하는 방법이다.

 

이러한 사상 방식이 필요한 이유는 캐시 메모리가 메인 메모리에 비해서 용량이 적기 때문이다.

 

크게 3가지 방식이 있다.

  1. 직접 사상 : 메모리 블록은 정해진 캐시 블록에만 사상할 수 있다.
  2. 완전 연관 사상 : 메모리 블록은 캐시 블록 어디에든 사상할 수 있다.
  3. 집합 연관 사상 : 메모리 블록은 정해진 블록의 캐시 블록 어디에든 사상할 수 있다.
직접 사상 방식

메인 메모리 블록은 정해진 캐시 메모리 블록에만 사상할 수 있다.

 

위의 데이터를 다시 보면 메모리 블록을 표현하기 위한 비트 개수는 5개이고 캐시 블록을 표현하기 위한 비트 개수는 3개이다.

 

그렇기 때문에 메모리 블록마다 정해진 캐시 블록의 위치는 중복될 수 밖에 없다.

 

메모리 블록의 정해진 캐시 블록 위치는 메모리 블록 번호를 캐시 블록 개수로 나눈 나머지가 된다.

 

캐시 블록 개수는 8개이므로 메모리 블록 번호에서 8을 나눈 나머지가 들어가게 될 캐시 블록 위치가 된다.

 

메모리 블록 번호를 표현하기 위한 비트의 개수는 5개이고 8은 이진수로 1000이므로 결국 메모리 블록 번호의 하위 3개 비트가 들어가게 될 캐시 블록 위치가 된다. 이를 인덱스라고 한다.

 

이 블록이 인덱스에 해당하는 캐시 블록 번호에 저장되는 것이다.

 

ex)

00100 % 0100 = 100

01100 % 0100 = 100

10100 % 0100 = 100

 

그런데 이 인덱스만으로는 CPU에서 찾는 정보가 동일한지 알 수가 없다.

 

메모리 블록 번호 비트는 5개인데 캐시 블록 번호 비트는 3개(인덱스)이기 때문이다.

 

메모리 블록 번호 상위 비트 2개도 사용해야만 CPU에서 찾는 정보가 동일한지 알 수 있다.

 

그래서 이 상위 비트를 태그라고 하며 이는 캐시 메모리의 태그 메모리에 따로 보관한다.

 

그래서 CPU가 원하는 정보를 찾고자 한다면 먼저 cPU가 요청한 메모리 주소를 분할하여 상위 비트 5개를 구한다.

 

이 구한 상위 비트 5개에서 상위 2개 비트는 태그이고 하위 3개 비트는 인덱스이다.

 

먼저 인덱스를 가지고 캐시 블록 번호를 찾는다.

 

값이 존재한다면 이제 태그를 비교할 차례이다. 인덱스가 동일한 다른 데이터일 수도 있기 때문이다.

 

글로 본다면 이해가 어려울 수도 있는데 아래 그림을 보면 이해가 쉬울 것이다.

 

CPU는 01100XXXX 주소값을 바탕으로 값을 가져오고 싶다고 가정하자.

  1. 01100XXXX를 위와 같이 3개의 정보로 나눈다.
  2. 먼저 인덱스를 기준으로 캐시 블록 번호를 찾는다.
  3. CPU의 태그와 캐시 메모리의 태그를 비교한다. (비교기를 사용)
  4. 같으면 가져오고 없다면 5번으로 간다.
  5. 태그+인덱스인 01100을 바탕으로 메인 메모리에서 값을 찾아서 캐시 메모리로 보내도록 한다.
  6. 캐시 메모리로 보낼 때 인덱스와 동일한 캐시 블록 번호의 태그에 자신의 태그 값을 기록해야한다.
  7. 2,3의 과정을 반복하여 캐시 메모리에서 원하는 값을 가져온다.

 

 

장점 : 태그의 길이가 짧고 태그만 비교하므로 비교기 하나 사용.
          메모리 블록의 위치가 정해져있어 구현이 쉽고 접근이 빠르다.

단점 : 메모리 블록의 위치가 중복되기 때문에 덮어씌우는 일이 빈번하다. 그래서 적중률이 낮다.

 

완전 연관 사상 방식

직접 사상 방식과 다른 점은 메모리 블록을 캐시 블록에 사상할 때 정해진 위치가 없다는 점이다.

 

정해진 위치가 없기 때문에 직접 사상 방식과 달리 캐시 블록 번호와 메모리 블록간의 연관성이 전혀 없다.

 

그러나 캐시 블록에 대응되는 메모리 블록을 알아야 하므로 메모리 블록번호를 태그로 사용한다.

 

01100XXXX라는 메모리 주소가 존재한다면 인덱스는 없고 01100 전부가 태그로 취급한다.

 

값을 가져오는 과정은 직접 사상 방식과 비슷하나 차이점이 존재한다.

 

먼저 CPU가 원하는 메모리의 주소를 태그와 블록 오프셋 두 가지로 나눈다.

 

직접 사상 방식은 인덱스에 해당하는 캐시 블록 번호만 확인하면 되었지만 완전 연관 사상 방식은 모든 캐시 블록 번호를 찾아가면서 태그를 비교해야한다.

 

장점 : 직접 사상 방식보다 적중률이 높다.

단점 : 모든 태그를 찾아야하므로 비교기가 많이 필요하다.
          태그의 길이가 길고 시간이 오래 걸린다.

 

집합 연관 사상 방식

직접 사상 방식과 완전 연관 사상 방식을 적절히 섞은 것이다.

 

메모리 블록을 캐시 블록에 사상할 때의 위치가 정해져있지만 직접 사상과는 달리 해당 캐시 블록 위치에 블록이 2개 이상이 있다.

 

n 방향 집합 연관 사상 방식이라고 한다면 n개의 캐시 블록이 존재하는 곳 어디에든 대응되는 메모리 블록을 사상할 수 있다.

 

메모리 블록 번호의 상위 3비트는 태그로 사용하고 하위 2비트는 인덱스로 사용한다.

장점 : 전체 태그를 탐색하지는 않는다.
          비교기가 많이 필요하지 않는다.
          태그의 길이가 짧다.
          직접 사상 보다는 적중률이 높고 완전 연관 사상보다는 적중률이 낮다.
728x90
반응형

댓글