블록배치방식 - 캐쉬에 블록을 위치시키는 방법은 다음의 세가지 방식이 존재한다.
  1. Directed Mapped : 블록이 단지 한곳에만 위치할 수 있는 방법
  2. Fully Associative : 블록이 캐쉬내의 어느 곳에나 위치할 수 있는 방식.
  3. Set associative : n-way 집합연관 캐쉬는 각각 n개의 블록으로 이루어진 다수의 집합들로 구성되어 있다. 빠른 검색을 위해 n개의 블록을 병렬로 수행한다.

집합 연관방식 장,단점
  - 장점
  연관 정도를 늘리는 것의 장점은 대개 실패율이 줄어든다는 것이다.
(부가설명=>n-way 집합 연관방식에서는 n개의 블록을 병렬로 검색한다. 따라서 더 많은 수의 블록을 검색하기 위한 논리 게이트가 증가한다, 반면에 캐쉬 내 집합의 개수는 감소하여 찾을 범위가 더 적어진다.)
  - 단점
  가장 큰 단점은 적중 시간의 증가이다.(비용적 문제도 증가)

집합 연관 방식에서 블록 교체 방식
  집합연관 캐쉬는, 대개 집합내에서 가장 오래전에 사용된 블록을 교체시키는 LRU(least recently used)교체 방식을 사용한다.


문제
  4개의 1워드 블록으로 구성된 캐쉬가 있다(캐쉬 크기가 4워드). 직접사상, 2-way 집합연관, 4-way 집합연관, fully 집합연관방식이다. 각 캐쉬 구현에 대해서 다음 순서에 따른 블록 주소의 참조시 발생하는 실패의 수는 각각 얼마인가? 블록주소 : 0, 8, 0, 6, 8

직접사상캐쉬 : 5번
2-way 집합연관 캐쉬 : 4번
4-way 집합연관 캐쉬(완전 집합연관방식) : 3번

4-way 집합연관 캐쉬

  위 그림은 4-way 집합연관 캐쉬이다. 하나의 블럭은 1워드이다. 집합의 개수는 256개(0~255)이다. 따라서 캐쉬의 사이즈는 4byte * 집합의 개수 * n-way(블럭개수) 로 계산이 가능하므로, 4byte * 256 * 4 = 4096 byte, 즉 4K이다.
  그림에서 보는거와 같이 색인값은 필요한 주소를 가지고 집합을 선정하는데 이용되고, 선정된 집합 내부의 모든 블록의 태그는 비교되어야 한다. 선정된 모든 태그는 빠른 속도를 위하여 병렬로 검색한다.
  완전연관 캐쉬의 경우, 실제 한 개의 집합만이 존재하며 모든 블록들은 병렬로 검사되어야 한다. 따라서 색인이 필요 없고, 블록 변위를 제외한 전체주소는 모든 블록의 태그와 비교된다. 즉 색인을 사용하지 않고 전체 캐쉬를 검색해야 한다.

문제
연관정도를 늘리는 것은 캐쉬 블록 당 더 많은 태그 비트를 요구할 뿐만 아니라, 더 많은 비교기를 필요로 한다. 4K개의 블록을 갖고 하나의 블록은 4개의 워드를 가지며 32 비트 주소를 갖는 캐쉬에 대해 직접 사상, 2-way 집합연관, 4-way 집합연관과 완전연관 방식을 적용하였을때 각각에 대해 전체 집합의 수와 전체 태그 비트 수는 ?
  정답 : 직접사상, 2-way, 4-way, 완전연관 => 64Kbits, 68 Kbits, 72 Kbits, 112Kbits

출처 : 컴퓨터 구조 및 설계 - 하드웨어/소프트웨어 인터페이스 -
Posted by initproc
,

즉시 쓰기(write-through) : 쓰기 발생 시, 항상 데이터를 메모리와 캐쉬에 같이 쓰는 것.
나중 쓰기(write-back) : 쓰기 발생 시, 새로운 값은 캐쉬 내의 블록에만 쓰여진다. 그리고 수정된 블록은 교체될 때 메모리 계층 구조의 더 낮은 계층(버퍼 혹은 메모리)으로 쓰여지게 된다.

출처 : 컴퓨터 구조 및 설계 -하드웨어/소프트웨어 인터페이스 -
Posted by initproc
,

- 메모리의 각 워드에 대한 캐쉬의 위치를 할당하는 가장 간단한 방법은 메모리 주소에 기반을 두고 할당하는 것이다. 이 캐쉬 구조를 직접 사상(direct mapped)이라 한다. 즉 각 메모리 위치가 캐쉬 내의 정확히 한 곳에만 사상되는 캐쉬 구조이다.

Direct Mapped Cache


 
 캐쉬 내의 각 위치는 여러 메모리 주소의 내용을 적재할 수 있다. 이때, 어떻게 캐쉬 내의 워드가 프로세스가 요구하는 것과 일치하는지를 알 수 있는가 ? 즉 요구하는 워드가 캐쉬 내에 있는지 없는지 어떻게 알 수 있는가? 이것은 캐쉬에 태그(빨간 글씨로 표현)를 추가함으로써 해결할 수 있다. 태그는 캐쉬의 색인으로 사용되지 않은 비트들에 해당하는 주소의 윗부분을 포함하기만 하면 된다.

또한 유효비트(valid bit)를 캐쉬에 첨가하여 캐쉬 블록이 유효한 정보를 가지고 있는지 알아내도록 한다.

이것을 심화시키면 다음 그림과 같다.[Intrinsity사의 FastMATH 프로세서에 사용되는 16KB Cache]

Index : 블록을 고르는데 쓰이는 캐쉬 색인
Tag : 캐쉬의 태그 필드 값과 비교되어 지는 태그 필드
Block offset : 블록 내부의 워드 구별(위 그림에서는 16개 중 하나를 선택)
Byte offset : 워드 내부의 바이트

크기가 큰 블록의 공간적 지역성은 실패율을 감소하게 한다. 그러나 블록의 크기를 캐쉬 크기의 상당 부분을 차지하도록 크게 만들면 실패율이 올라갈 수도 있다. 왜냐하면, 캐쉬 내에 존재할 수 있는 전체 블록의 수가 작아져서 블록들 간에 상호충돌이 생길 수 있기 때문이다. 결과적으로 블록 내의 많은 워드들이 접근되기도 전에 그 블록이 캐쉬로부터 방출될 수도 있기 때문이다.

출처 : 컴퓨터 구조 및 설계 -하드웨어/소프트웨어 인터페이스 -
Posted by initproc
,