캐시 메모리의 사상 알고리즘을 배울때 이해를 돕기 위해 도식을 그려서 캐시 메모리와 메인 메모리에서 일어나는 일을 해설한다. 이때 중요한 것은 캐시 메모리를 각 라인별로 구획한 각 부분의 명칭이 태그, 인덱스, 오프셋처럼도 표시되고 때로는 태그, 라인, 워드처럼도 표시되는 것이 왜 그런가하는 것이다. 기능상의 차이나 해설상의 이점 등등이 겹쳐서 해설자마다 채택한다는 것은 알겠는데 이 정확한 구분법이 중요해보여서 진도를 안나가고 뜸을 들이고 있다.
일단 캐시의 크기와 블록 개수, 메인 메모리의 크기와 같은 정보가 주어지면 캐시의 각 라인별 구획 비트수가 나온다.
512바이트의 메모리
128바이트의 캐시 메모리
16바이트의 블록
워드는 4비트
일때
블록 개수:
메모리는 32개의 블록 (512/16)
캐시는 8개의 블록 (128/16)
비트수:
메모리는 512=2^9이므로 주소는 9비트
메모리 블록이 32=2^5이므로 메모리 블록 번호 5비트
캐시는 128=2^7이므로 주소로는 7비트
캐시 블록은 8=2^3이므로 블록 번호 3비트
메모리 캐시 둘다 하나의 블록이 16=2^4이므로 블록 오프셋 4비트
결국
메모리 주소는 블록 번호 5비트와 블록 오프셋 4비트
캐시 주소는 블록 번호 3비트와 블록 오프셋 4비트
로 구성된다.
메모리는 견본으로 00000부터 11111까지 주소가 주어진다면
캐시 메모리는 블록 번호 3비트이므로 2진법 모듈로 연산으로 인해 메모리 블록의 하위 3비트인 000~111까지 인덱스로 간주된다
그런데 메모리에는 00000, 01000, 10000, 11000처럼 하위 3비트가 000인 메모리 블록이 다수이고 이를 어느 블록인지 알려면 구분법이 필요하다
그래서 메모리 블록 번호 5비트중 상위 2비트를 태그로 쓴다.
즉 캐시 메모리에는
태그 2비트, 인덱스 필드 3비트, 오프셋 4비트의 크기를 가진 라인들이 존재한다.
이로부터
직접 사상 방식에서 데이터 참조 방법은
(1) CPU가 주소 010100000를 생성하여 캐시 메모리에 데이터 요청
(2) 캐시 메모리는 주소를 태그 01, 인덱스 010, 오프셋 0000으로 분할
(3) 인덱스 010이 가리키는 캐시 메모리 추출
(4) CPU 태그와 캐시 태그 비교
(5) 캐시 메모리가 초기 상태라 유효 비트 0이고 캐시 실패
(6) CPU가 메모리에 동일한 주소 전송 후 데이터 요청
(7) 데이터가 있는 메모리 블록 01010을 복사하여 캐시 메모리로 전송
(8) 메모리 블록을 인덱스 필드 010이 지시하는 캐시 블록으로 사상
(9) 캐시 태그를 01로 갱신, 유효 비트 1로 설정
(10) 오프셋 0000을 사용하여 캐시 블록에서 데이터 추출후 CPU에 전송
그림을 그려서 해설하면 메인 메모리와 캐시 메모리의 추상화된 구획 크기가 더 한눈에 들어오는데 생략합니다.
잘 이해한 것 같은데 서술이 잘 이해되는지 확신은 안됩니다 ^^ (1)부터 (10)까지는 우종정 교수님 책에 나온 순서대로입니다.
캐시 메모리에서 직접 사상 방법으로 접근하는 것을 대략적으로 설명했습니다. 우종정 교수님의 저서와 타기술자들의 글을 참고해서 해두었습니다. 설명자마다 조금씩 다른 용어를 쓰고 도식도 다른데 최대한 많이 접해보시면 이해가 됩니다. 일단은 캐시 메모리와 메인 메모리가 추상적으로 어떻게 마디로 나누어지는지 알면 좋구요. 이를 지칭하는 용어들끼리의 호환되는 정도를 알고 이 마디들이 어떻게 갱신되는지 알면 됩니다.
캐시 메모리에서 직접 사상 방법으로 접근하는 것을 대략적으로 설명했습니다. 우종정 교수님의 저서와 타기술자들의 글을 참고해서 해두었습니다. 설명자마다 조금씩 다른 용어를 쓰고 도식도 다른데 최대한 많이 접해보시면 이해가 됩니다. 일단은 캐시 메모리와 메인 메모리가 추상적으로 어떻게 마디로 나누어지는지 알면 좋구요. 이를 지칭하는 용어들끼리의 호환되는 정도를 알고 이 마디들이 어떻게 갱신되는지 알면 됩니다.