8 캐시기억장치 IT CookBook, 컴퓨터 구조와 원리 2.0
학습목표 기억장치들 간의 상호 연관성에 대해 이해한다. 캐시기억장치의 원리에 대해서 이해한다. 캐시기억장치와 주기억장치 사이의 정보교환 방법에 대해 이해한다. 캐시기억장치의 교환 알고리즘에 대해 이해한다.
목 차 캐시기억장치의 개념 캐시기억장치의 원리 캐시기억장치의 설계 캐시기억장치의 구조
01 캐시기억장치의 개념 주기억장치에 저장되어 있는 명령어와 데이터 중의 일부를 임시적으로 복사해서 저장하는 장치로 데이터를 저장하고 인출하는 속도가 주기억 장치보다 빠름 중앙처리장치가 캐시기억장치에 저장된 명령어와 데이터를 처리할 경 우, 주기억장치보다 더 빠르게 처리할 수 있음 결과적으로 캐시기억장치는 느리게 동작하는 주기억장치와 빠르게 동 작하는 중앙처리장치 사이에서 속도차이를 줄여줘서 중앙처리장치에서 의 데이터와 명령어 처리속도를 향상시킴 캐시기억장치는 고속완충기억장치라고 함
01 캐시기억장치의 개념 컴퓨터의 기억장치 구성 기억장치의 계층적으로 분류 원의 넓이 : 저장 용량을 나타낸다. 원의 둘레 : 기억장치가 데이터를 저장하거나 인출하는데 걸리는 시간. 따라서 원의 둘레는 처리속도를 나타낸다고 할 수 있다. 원통의 높이 : 기억장치의 가격을 나타낸다.
01 캐시기억장치의 개념 중앙처리장치 내부 캐시(Cache)기억장치 CPU의 처리속도와 비슷한 접근속도를 가진 레지스터들이 포함한다. 이러한 기억장치는 높은 가격 때문에 많은 용량으로 구성하기 어렵다. 캐시(Cache)기억장치 주기억장치에 비해 5~10배 정도 접근속도가 빠르다. 자주 사용되는 명령들을 저장하고 있다가 중앙처리장치에 빠른 속도로 제공한다. 캐시기억장치의 용량에 의해 CPU의 가격이 결정된다.
01 캐시기억장치의 개념 SRAM SRAM(Static RAM, Static Random Access Memory)은 플립플롭을 기억 소자로 구성하여, 집적 밀도가 높아 소용량의 기억장치에 사용 DRAM보다 처리속도가 5배 정도 빨라서 캐시메모리(cache memory)에 주로 사용 SRAM의 기억소자(memory cell)구조
01 캐시기억장치의 개념 SRAM의 동작과정 선택입력 S가 0이면 기억소자가 선택되지 않았으므로 읽기와 쓰기동작 은 일어나지 않는다. S가 1일 때, 본격적인 동작 S=1이고 𝑅/ 𝑊 =0 이면 쓰기 동작을 수행하여서 입력 단자에 입력된 데이터가 플립플롭에 저장되고 데이터의 출력은 없다. S=1이고 𝑅/ 𝑊 =1이면 읽기 동작을 수행하여서 플립플롭에 저장되어 있던 데이터 비트를 데이터 출력 단자를 통해서 출력을 하게 된다.
01 캐시기억장치의 개념 SRAM의 기억조자 구조 SRAM의 기억소자 블록 격자의 배열구조로 형성된 SRAM의 기본 구조 기억소자들이 4x3의 배열이므로 12비트를 저장, 워드의 길이는 3비트가 된다. 4개의 워드가 존재하므로 주소는 0, 1, 2, 3의 4개가 필요. 2x4 디코더는 2비트를 가지고 4개 중에서 하나를 선택한다.
01 캐시기억장치의 개념 SRAM의 쓰기 동작 과정 주소 선택선을 통해 입력신호 A0A1=01이 입력되면 디코더에서 주소 D1이 선택된다. 그리고 제어 단은 𝑅/ 𝑊 =0 이 되어 쓰기동작을 수행한다. 따라서 주소 D1의 기억 소자 3개에 입력 데이터 101이 저장되게 된다. 여기서 모든 기억소자에 입력 값이 전달되지만, D1을 제외한 다른 주소는 쓰기 제어 입력을 받지 못하므로 어떤 값도 저장되지 않는다.
01 캐시기억장치의 개념 SRAM의 읽기 동작 과정 주소 선택선을 통해 들어온 입력신호 A0A1는 01의 값에 해당되는 주소가 디코더에서 선택된다. 이때 제어 단은 𝑅/ 𝑊 =1 이 되어, 선택된 각각의 기억소자는 출력단자를 통하여 출력을 내보내게 된다.
02 캐시기억장치의 원리 중앙처리장치는 그 속도가 저장장치에 비해서 고속이므로 저장장치의 읽기와 쓰기 동작과정 동안 기다려야 하며, 이런 문제를 극복하기 위해 서는 중앙처리장치의 처리속도만큼 빠른 저장장치가 필요 주기억장치는 보조기억장치보다 처리속도가 빠르지만 중앙처리장치의 처리속도와 비교하면 그 차이는 크다. 그래서 주기억장치보다 빠른 저 장장치를 생각하게 되었고 이에 따라 캐시기억장치가 등장 캐시기억장치는 5~100ns 정도의 빠른 접근시간을 제공하는 기억장치 로 수행할 명령어나 피연산자를 주기억장치로부터 가져와 저장하고 있 다가 빠른 속도로 중앙처리장치에 제공함
02 캐시기억장치의 원리 캐시기억장치의 동작 캐시기억장치가 없는 컴퓨터 시스템의 기억장치 접근 캐시기억장치가 없는 컴퓨터 시스템의 기억장치 접근 ① 단계 : CPU가 명령어와 데이터를 인출하기 위해서 주기억장치에 접근한다. ② 단계 : 주기억장치에서 명령어나 필요한 정보를 획득하여 CPU내의 명령어 레지스터 등에 저장한다. 캐시기억장치를 포함하고 있는 컴퓨터 시스템 CPU가 명령어 또는 데이터를 인출하기 위해 주기억장치보다 캐시기억장치를 먼저 조사한다. CPU가 명령어를 인출하기 위해 캐시기억장치에 접근하여 그 명령어를 찾았을 때를 적중(hit)이라고 하고, 명령어가 존재하지 않아 찾지 못하였을 경우를 실패(miss)라고 한다.
02 캐시기억장치의 원리 캐시기억장치의 실패(miss) 중앙처리장치가 100번지의 워드가 필요 1단계에서 캐시기억장치가 1000번지의 워드를 저장하고 있는지를 검사하고 1000번지 워드가 캐시기억장치 내에 존재하지 않는다면 실패상태가 된다 실패인 경우에 원하는 정보를 찾아 CPU로 전달하는 과정 ① 단계 : 주기억장치에서 필요한 정보를 획득하여 캐시기억장치에 전송한다. ② 단계 : 캐시기억장치는 얻어진 정보를 다시 중앙처리장치로 전송한다.
02 캐시기억장치의 원리 캐시기억장치의 적중(hit) CPU가 1002번지의 워드를 필요로 하고 이것이 캐시기억장치에 존재 ① 단계 : 캐시기억장치가 1002번지의 워드를 저장하고 있는지를 검사하고, 1002번지 워드가 캐시기억장치 내에 존재 한다면 적중이 된다. ② 단계 : 캐시기억장치에서 얻어진 정보를 중앙처리장치로 직접으로 전송한다. 주기억장치를 거치는 것보다 훨씬 빠른 속도로 원하는 정보를 획득하게 된다. 캐시기억장치의 동작은 기억장치 참조의 지역성(locality of reference) 에 의해 가능 중앙처리장치의 주기억장치 참조는 제한된 영역에서만 이루어지는 현상이다. 짧은 시간 동안 중앙처리장치가 접근하는 범위는 지역적으로 제한된다.
02 캐시기억장치의 원리 캐시기억장치의 동작 순서
02 캐시기억장치의 원리 적중률(Hit Ratio) 적중률은 캐시기억장치를 가진 컴퓨터의 성능을 나타내는 척도로 적중률이 높을수록 속도가 향상 주기억장치와 캐시기억장치에서 데이터를 인출하는데 소요되는 평균 기억장치 접근시간 Taverage 캐시기억장치 접근시간에 대한 평균과 주기억장치 접근시간에 대한 평균을 합한 것이 평균 기억장치 접근시간이다. 평균 캐시기억장치 접근시간은 캐시기억장치 접근시간 Tcache와 적중률 Hhit_ratio와의 곱으로 얻어진다. 평균 주기억장치 접근시간은 주기억장치 접근시간 Tmain과 실패율 (1-Hhit_ratio)와의 곱으로 얻어진다. 여기서 실패율은 곧 주기억장치에 접근하는 율을 나타낸다.
02 캐시기억장치의 원리 평균 기억장치 접근시간 Taverage 계산 예 Tcache = 50ns, Tmain = 400ns일 때, 적중률을 증가시키면서 기억장치 접근시간을 계산하면 적중률 70%의 경우: Taverage = 0.7 x 50ns + 0.3 x 400ns = 155ns 적중률 80%의 경우: Taverage = 0.8 x 50ns + 0.2 x 400ns = 120ns 적중률 90%의 경우: Taverage = 0.9 x 50ns + 0.1 x 400ns = 85ns 적중률 95%의 경우: Taverage = 0.95 x 50ns + 0.05 x 400ns = 67.5ns 적중률 99%의 경우: Taverage = 0.99 x 50ns + 0.01 x 400ns = 53.5ns 캐시기억장치의 적중률이 높아질수록 평균 기억장치 접근시간은 캐시기억자치 접근시간에 근접하게 되어 컴퓨터의 처리 속도의 성능 향상을 가져온다.
03 캐시기억장치의 설계 주기억장치와 캐시기억장치 간의 정보 공유 주기억장치에 저장된 데이터의 일부가 블록단위로 캐시기억장치에 복사되고, 중앙처리장치가 적중된 데이터들을 워드 단위로 캐시기억장치에서 읽어온다.
03 캐시기억장치의 설계 캐시기억장치 설계 시 고려할 요소 캐시기억장치의 크기(Size) 인출방식(fetch algorithm) 사상함수(Mapping function) 교체 알고리즘(Replacement algorithm) 쓰기 정책(Write policy) 블록 크기(Block size) 캐시기억장치의 수(Number of caches)
03 캐시기억장치의 설계 캐시기억장치의 크기 캐시기억장치의 용량이 주기억장치의 많은 블록을 복사해 저장할 수 있 으므로 적중률이 높아짐 용량이 커질수록 주소 해독 및 정보 인출을 위한 주변 회로가 더 복잡해 지기 때문에 접근시간이 더 길어진다. 그러므로 용량이 증가한 만큼의 속 도 향상을 가져오지는 못함 캐시기억장치는 주기억장치보다는 비용이 고가이므로 용량의 증가는 비 용의 증가로 이어짐 결과적으로 캐시기억장치의 용량과 주변회로 간의 복잡도 관계를 최적 화하여 적중률을 향상시키고 접근시간에 대한 저하를 막는 용량을 결정 해야 함 캐시기억장치의 크기와 비용 간의 조정을 통해 적절한 용량과 비용을 결 정해야 한다. 연구 결과에 의하면 1 k∼128 k 단어(word)가 최적이라고 알 려져 있음
03 캐시기억장치의 설계 인출방식 주기억장치에서 캐시기억장치로 명령이나 데이터 블록을 인출해 오는 방식에 따라서 캐시기억장치의 적중률은 많이 변함 요구인출(Demand Fetch) 방식 CPU가 현재 필요한 정보만을 주기억장치에서 블록 단위로 인출해 오는 방식. 경우에 따라서 매번 주기억장치에서 인출을 수행하므로 실패율이 높아져서 캐시기억장치의 효과를 얻지 못할 때도 있다. 선인출(Prefetch) 방식 CPU가 현재 필요한 정보 외에도 앞으로 필요할 것으로 예측되는 정보를 미리 인출하여 캐시기억장치에 저장하는 방식이다. 주기억장치에서 명령이나 데이터를 인출할 때 필요한 정보와 이웃한 위치에 있는 정보들을 함께 인출하여 캐시에 적재하는 방식으로 지역성(locality)이 높은 경우에 효과가 높다.
03 캐시기억장치의 설계 사상함수 주기억장치와 캐시기억장치의 구조 주기억장치에서 하나의 번지에 저장되는 데이터의 단위는 단어가 된다. 단어가 여러 개 모여서 하나의 블록(Block)이 되며, 캐시기억장치로 인출되는 정보의 그룹이다. 만약 주기억장치의 용량이 2n 개의 단어라고 하고 블록이 K개의 단어로 구성된다면, 블록의 개수는 블록의 수 = 2n/K 개다. 주기억장치와 캐시기억장치의 구조 캐시기억장치에서 슬롯(Slot)은 한 블록이 저장되는 장소다. 따라서 블록은 캐시기억장치 각 슬롯에 저장되는 데이터의 길이가 된다. 태그(tag)는 슬롯에 적재된 블록을 구분해주는 정보다.
03 캐시기억장치의 설계 사상의 개념 캐시기억장치의 사상방법에는 다음과 같이 대표적인 세 가지 방법이 존재 캐시기억장치에서의 인출이 실패하게 되면 캐시기억장치의 일부분은 주기억장치로 옮기고 주기억장치에서 필요한 정보를 캐시기억장치에 기억시키는 정보 교환이 이루어진다. 이렇게 주기억장치와 캐시기억장치 사이에서 정보를 옮기는 것을 사상(mapping)이라고 한다. 캐시기억장치의 사상방법에는 다음과 같이 대표적인 세 가지 방법이 존재 직접 사상(direct mapping) 연관 사상(associative mapping) 집합 연관 사상(set-associative mapping)
03 캐시기억장치의 설계 직접 사상(Direct mapping) 직접 사상에서 주기억장치의 주소 형식 주기억장치의 블록이 캐시기억장치의 특정 라인에만 적재될 수 있기 때문에 캐시의 적중 여부는 그 블록이 적재될 수 있는 라인만 검사 사상 과정이 간단하고 작은 용량의 RAM을 캐시기억장치로 사용하기 때문에 비용이 저렴한 장점이 있다. 프로그램이 동일한 라인에 적재되는 두 블록을 반복적으로 접근하는 경우 계속 캐시 실패가 발생해서 실패율이 현격하게 높아질 수 있다. 직접 사상에서 주기억장치의 주소 형식 태그 필드는 태그 번호를 나타낸다. 슬롯 번호는 캐시기억장치에서 총 슬롯의 수 m = 2s개 중에서 하나를 지정하는 번호다. 단어 필드는 각 블록 내의 2w개 단어들 중의 하나를 선택한다. CPU가 요구하는 주기억장치의 주소 중 태그 필드와 슬롯 필드에 해당 되는 캐시영역에서의 슬롯 필드와 태그 필드를 비교하여 동일하면 적중 동일 슬롯 번호를 가지고 있지만 태그가 다른 두 개 이상의 단어가 반 복하여 접근되면 적중률이 상당히 떨어지는 단점이 발생함
03 캐시기억장치의 설계 모듈로(modulo) 연산 주기억장치의 블록 j가 적재될 수 있는 캐시 슬롯의 번호 i는 모듈로 (modulo) 연산에 의해서 결정. m은 캐시 슬롯의 전체 수 i = j mod m 모듈로 연산은 나머지를 구하는 연산. Q는 몫이고 R은 나머지 J / m = Q + R, R = i 모듈로 연산의 예들 5 mod 3 = 2, 3 mod 7 = 3, 2 mod 7 = 2, 8 mod 2 = 0 캐시 슬롯은 주기억장치의 블록들을 공유하여 저장함. 이때 같은 슬롯을 공유하는 주기억장치 블록들은 서로 다른 태그를 가지게 됨 캐시 슬롯이 공유할 수 있는 주기억장치의 블록들
03 캐시기억장치의 설계 직접사상의 수행 절차 블록의 단어의 수는 1단어이고 CPU가 00001번지 단어를 필요로 한다. 직접 사상의 동작(1) CPU는 2비트의 태그 정보 00과, 3비트의 캐시기억장치의 주소(슬롯 번호) 001를 동시에 표시한 00001를 캐시기억장치에 전달. 그러면 캐시기억장치는 오직 001번지 주소만을 참 조, 해당 번지가 비어 있으므로 실패(miss) 상태가 된다. 캐시 실패를 확인하고 주기억장치에서 00001번지를 참조하여서 단어를 획득한다. 획득한 단어는 캐시기억장치의 해당 주소에 데이터 1234와 태그 00을 저장한다. 그리고 다시 단어 1234를 CPU에 전달한다.
03 캐시기억장치의 설계 직접 사상의 동작 중앙처리장치가 00010번지 단어를 필요로 하는 경우 처음의 2비트 00은 태그를 나타내고, 다음 3비트 010은 캐시기억장치의 주소. 그래서 캐시기억장치의 010번지 주소만을 참조. 해당 번지가 비어 있으므로 실패(miss)한 것으로 판단하고 주기억장치를 참조하게 된다. 주기억장치의 주소 00010에서 필요한 단어를 획득하게 된다. 캐시기억장치의 해당 주소 010에 단어 데이터 5678과 태그 00을 저장한다. 단어 데이터 5678를 CPU로 전달한다.
03 캐시기억장치의 설계 중앙처리장치가 10001번지 워드를 필요로 하는 경우 처음의 2비트 10은 태그를 표시하고, 다음 3비트 001은 캐시기억장치의 주소 캐시기억장치의 001번지에만 접근하는데, 태그가 00으로 불일치하므로 실패. 주기억장치 10001번지에서 단어를 획득한다. 캐시기억장치의 001번지에 단어 데이터 7890과 태그 10을 저장한다. 따라서 태그를 포함해서 00 1234가 10 7890으로 변경된다. 단어 데이터 7890이 CPU로 전달된다.
03 캐시기억장치의 설계 중앙처리장치가 00010번지 워드를 필요로 하는 경우다. 처음의 2비트 00은 태그를 표시하고, 다음 3비트 010은 캐시기억장치의 주소를 표시한다. 캐시기억장치의 주소 010번지만 참고하는데, 태그가 00으로 일치하므로 적중한 것으로 판단한다. 캐시기억장치 010번지에서 중앙처리장치가 요구하는 단어를 획득하게 된다.
03 캐시기억장치의 설계 직접 사상에 의한 주기억장치 데이터의 캐시기억장치로의 사상 직접 사상에 의한 주기억장치 데이터의 캐시기억장치로의 사상 주기억장치의 용량이 128바이트, 블록의 크기가 4바이트일 때와 캐시기억장치의 크기가 32바이트, 캐시 슬롯의 크기가 4바이트일 때, 직접 사상에 의하여 데이터가 캐시기억장치에 저장되는 과정 전제 캐시 슬롯의 수는 캐시의 크기 32바이트를 캐시 슬롯의 크기 4바이트로 나눠서 8개로 결정된다. 그리고 블록내의 단어의 수는 1개다. 따라서 단어 필드는 항상 00이 된다.
03 캐시기억장치의 설계 연관 사상(Associative mapping) 주기억장치의 주소 형식 직접 사상의 단점을 보완한 것으로 주기억장치의 블록을 캐시기억장치의 어느 라인에든 적재할 수 있다. 그래서 가장 빠르고 융통성 있는 구조이다. 적중 검사가 모든 라인에 대해서 이루어지므로 검사 시간이 길어진다. 또한 모든 캐시 슬롯의 태그 번호들을 고속으로 검색하기 위해서는 복잡한 회로가 필요하다. 주기억장치의 주소 형식 태그의 필드가 주기억장치의 블록 번호를 나타내고 캐시기억장치의 정해진 슬롯 번호에 저장되는 것이 아니라 임의적으로 저장될 수 있다. 그래서 슬롯 번호를 위한 필드는 존재하지 않는다. 그리고 단어 필드는 블록내에 존재하는 단어를 선택하는데 사용된다. 만약 블록내에 하나의 단어만 존재하면 단어 필드의 모든 비트는 0이 된다. 그 이상의 단어 번호가 존재할 필요가 없기 때문이다.
03 캐시기억장치의 설계 연관사상의 동작 주기억장치에 저장된 단어들은 임의의 위치의 캐시기억장치에 저장한다. 주기억장치에 저장된 단어들은 임의의 위치의 캐시기억장치에 저장한다. 태그 필드는 5비트이고 단어 필드는 2비트이지만 블록내의 한 개의 단어만 존재하므로 모두 00으로 되어 있다. 캐시기억장치에서는 태그와 데이터를 저장하고 있는 것을 확인할 수 있다. CPU가 주기억장치에 저장된 단어들을 인출하려면 우선, 캐시기억장치에 대하여 일일이 검색을 수행하고 캐시 적중이 발생하면 인출이 가능하다. 모든 지역을 검색하여도 원하는 데이터가 존재하지 않을 때는 캐시 실패가 된다. 이 경우 주기억장치에서 원하는 데이터를 얻을 수 있다.
03 캐시기억장치의 설계 연관 사상 구조로 동작하는 캐시기억장치 연관 사상에서는 주기억장치의 주소 태그와 단어 데이터가 캐시기억장치에 저장되므로 캐시 단어의 크기는 주기억장치 주소 태그 t와 단어당 데이터 비트 수의 합이 된다. CPU에서 나온 주기억장치의 주소는 레지스터에서 태그 부분만 비교하여 캐시가 적중이면 해당 주소 번지의 데이터를 읽어 CPU로 전송한다. 태그 필드와 단어 필드로 구성된 캐시기억장치와 주기억장치의 주소 즉, 태그 필드와 단어 필드가 저장되어 있는 인수 레지스터를 통해서 태그 부분만을 비교해서 원하는 번지의 데이터를 찾는다. 캐시기억장치가 꽉 차 있는 경우, 현재 필요 없는 부분을 캐시기억장치에서 제거하고 방금 읽어들인 데이터와 주소를 캐시기억장치에 저장하거나 라운드 로빈(round-robin) 방식을 이용한다.
03 캐시기억장치의 설계 집합 연관 사상(Set-associative mapping) 직접 사상의 단점을 보완한 방식으로 집합 번호는 같고 태그가 다른 두 개 이상의 단어를 저장할 수 있는 구조를 갖짐 주기억장치 블록 그룹이 하나의 캐시 집합을 공유하며, 그 집합에는 두 개 이상의 슬롯을 적재할 수 있다. 직접 사상과 연관 사상 방식을 조합한 방식이라고 할 수 있음 캐시는 v개의 집합들로 나누어지며, 각 집합들은 k개의 슬롯들로 구성된다. 캐시 슬롯의 총수 m과 주기억장치 블록이 적재될 수 있는 캐시 집합 번호 i를 구하면 다음과 같다. 여기서 주기억장치의 블록 번호는 j다. m = v x k, i = j mod v 집합 연관 사상에서의 주기억장치의 주소 형식 태그 필드와 집합 필드를 합한 (t+d)비트가 주기억장치의 2(t+d)블록들 중의 하나를 지정하게 된다.
03 캐시기억장치의 설계 두 개의 집합을 갖는 집합 연관 캐시기억장치의 구조 집합 연관 캐시기억장치는 집합 1과 집합 2, 두 개의 집합으로 구분되며 집합번호 000에 서로 다른 태그 00, 01로 구분되는 두 개의 데이터가 동시에 저장되어 있다. 동일 집합 번호와 다른 태그 번호를 가지고 캐시기억장치에 접근하는 경우, 직접 사상의 개념(동일 슬롯, 다른 태그)에서는 실패가 되었지만, 집합 연관 사상 방식에서는 적중이 된다. 그리고 각 집합내의 슬롯에 저장되는 데이터는 직접 사상이 아니고 연관 사상 방식이 적용되어 블록의 위치를 자유롭게 선택할 수 있다. 결과적으로 집합의 위치를 선택하는 것은 직접 사상 방법을 따르고 집합 내의 슬롯을 선택하는 것은 연관 사상법을 따른다.
03 캐시기억장치의 설계 집합 연관 캐시 기억장치의 동작 주기억장치의 용량이 128바이트, 블록의 크기가 4바이트, 캐시의 크기는 32바이트, 캐시 슬롯의 크기가 약 8바이트일 때 집합 연관 사상 방법의 예 캐시기억장치는 동일한 집합에 태그 값이 다른 두 종류의 데이터를 저장한다. 주소의 태그 필드 내용과 그 집합 내의 태그들을 비교하여 일치하는 것이 있으면 캐시 적중이 된다. 만약, 일치하는 것이 없다면 캐시 실패가 된다. 실패 시 주기억장치에서 블록을 인출하고, 캐시기억장치의 정해진 집합의 슬롯들 중에서 하나를 선택해서 기존 블록은 제거하고 새로운 블록을 저장. 이 과정에서 기존의 슬롯들 중에서 어느 슬롯을 선택하느냐의 교체 알고리즘이 필요하다.
03 캐시기억장치의 설계 교체 알고리즘(Replacement Algorithms) 캐시기억장치의 모든 슬롯이 데이터로 채워져 있는 상태에서 실패일 때 캐시기억장치의 특정 슬롯에서 데이터를 제거하고 주기억장치에서 새로운 데이터 블록을 가져와야 한다. 캐시기억장치의 어느 슬롯 데이터를 제거하는가를 결정하는 방식이 교체 알고리즘이다. 직접 사상 방식에서는 주기억장치의 데이터가 캐시기억장치의 동일 슬 롯에 저장되기 때문에 교체 알고리즘을 사용할 필요 없음. 연관 사상 및 집합 연관 사상 방식의 경우 교체 알고리즘이 필요함. 교체 알고리즘에는 대표적인 종류 LRU : 최소 최근 사용 알고리즘 LFU : 최소 사용 빈도 알고리즘 FIFO : 선입력 선출력 알고리즘 RANDOM : 랜덤
03 캐시기억장치의 설계 교체 알고리즘의 종류 최소 최근 사용(LRU, Least Recently Used) 알고리즘 현재까지 알려진 교체 알고리즘 중에서 가장 효과적인 교체 알고리즘으로 집합 연관 사상에서 사용되는 방식이다. CPU로의 인출이 없는 가장 오래 저장되어 있던 블록을 교체하는 방식이다. 최소 사용 빈도(LFU, Least Frequently Used) 알고리즘 적재된 블록들 중에서 인출 횟수가 가장 적은 블록을 교체하는 방식이다. 최소 최근 사용 알고리즘이 시간적으로 오랫동안 사용되지 않은 블록을 교체, 최소 사용 빈도 알고리즘은 사용된 횟수가 적은 블록을 교체하는 방식이다 선입력 선출력(FIFO, First In First Out) 알고리즘 가장 먼저 적재된 블록을 우선적으로 캐시기억장치에서 삭제하는 교체 방식 캐시기억장치에 적재된 가장 오래된 블록이 삭제되고 새로운 블록이 적재된다. 구현이 용이, 시간적으로 오래된 블록을 교체하여 효율성을 보장하지 못한다. 랜덤(Random) 캐시기억장치에서 임의의 블록을 선택하여 삭제하고 새로운 블록으로 교체하는 방식이다. 그러나 효율성을 보장하기가 어렵다.
03 캐시기억장치의 설계 쓰기 정책(Write Policy) 즉시 쓰기(Write-though) 방식 CPU가 프로그램을 실행하는 동안 연산 결과를 캐시기억장치에 기록하는 경우가 발생한다. 이때 캐시기억장치와 주기억장치에 저장된 데이터가 상이하게 존재하므로 주기억장치의 데이터를 갱신하는 절차가 필요하다. 즉시 쓰기(Write-though) 방식 CPU의 연산 결과가 기억장치에 저장하는 쓰기 동작은 캐시기억장치뿐만 아니라 주기억장치에서도 동시에 발생, 데이터의 일관성을 쉽게 보장할 수 있다. 매번 쓰기 동작이 발생할 때마다 캐시기억장치와 주기억장치간 접근이 빈번하게 일어나고 쓰기 시간이 길어지게 된다. 나중 쓰기(Write-back) 방식 새롭게 생성된 중앙처리장치의 데이터를 캐시기억장치에만 기록하고 주기억장치는 나중에 기록하는 방식이다. 1비트의 태그를 이용하여 갱신된 캐시기억장치의 블록을 표시. 새로운 블록에 의해서 캐시기억장치에서 삭제되는 교체가 이뤄지기 전에 주기억장치로 복사된다. 두 기억장치의 데이터가 서로 일치하지 않아 주기억장치가 무효상태로 존재. 이 경우에는 주기억장치의 접근은 금지되고 캐시기억장치에만 접근된다. 즉시 쓰기 방식과는 달리 주기억장치에 기록하는 동작을 최소할 수 있다.
03 캐시기억장치의 설계 쓰기 정책의 종류 즉시 쓰기 방식은 중앙처리장치(CPU)에서 생성되는 데이터를 캐시기억장치와 주기억장치에 동시에 기록한다. 나중 쓰기 방식은 캐시기억장치에 기록한 후, 기록된 블록에 대한 교체가 일어날 때 주기억장치에 기록한다.
03 캐시기억장치의 설계 블록크기와 캐시의 수 블록 크기(Block size) 캐시의 수(Number of Caches) 동시에 인출되는 정보들의 블록이 커지면 한꺼번에 많은 정보를 읽어 올 수 있지만 블록 인출시간이 길어지게 된다. 블록이 커질수록 캐시기억장치에 적재할 수 있는 블록의 수가 감소하기 때문에 블록들이 더 빈번히 교체되며, 블록이 커질수록 멀리 떨어진 단어들도 같이 읽혀오기 때문에 가까운 미래에 사용될 가능성이 낮다. 일반적인 블록의 크기는 4 ~ 8단어가 적당하다. 캐시의 수(Number of Caches) 일반적인 시스템은 오직 하나의 캐시기억장치를 가지고 있었다. 최근에는 캐시기억장치들이 계층적 구조로 설치되거나 기능별로 분리된 다수의 캐시기억장치를 사용하는 것이 보편화 되었다. 캐시기억장치를 설계할 때에는 몇 계층으로 할 것인지를 결정하여야 하며, 통합 형태와 분리 형태 중에서 어떤 형태로 구성할 것인지를 결정해야 한다. 설계과정에서 사용할 캐시의 수가 결정된다.
03 캐시기억장치의 설계 다양한 캐시기억장치의 구조 (a) 단계 : 가장 일반적인 구조로 한 개의 캐시기억장치를 사용한다. (b) 단계 : 두 개의 캐시기억장치를 이용하여 계층적으로 구성한 구조다. 여기서 캐시 1은 중앙처리장치에 내장되어 있는 경우가 일반적이다. (c) 단계 : 캐시기억장치 3개를 이용하여 계층적 구조로 설계한 것이다. (b)와 비교해서 캐시 1에 해당하는 부분이 분리된 형태의 두 개의 캐시로 발전되었다. 그래서 각 기능에 따라서 명령어 캐시와 자료 캐시로 분리되었다. 하지만 (b)와 마찬가지로 캐시 1에 해당하는 명령어 캐시와 자료 캐시는 CPU에 내장되어 있는 캐시기억장치다.
03 캐시기억장치의 설계 온-칩(On-chip) 캐시기억장치 오프-칩(Off-Chip) 캐시기억장치 또는 외부 캐시기억장치 집적회로(Integrate Circuit)의 기술 발달로 캐시기억장치를 CPU의 내부에 포함시킨 것이다. 내부 동작으로만 CPU에 접근하여 CPU의 외부 활동을 줄이고 실행 시간을 가속시켜 전체 시스템의 성능을 높여준다. 오프-칩(Off-Chip) 캐시기억장치 또는 외부 캐시기억장치 일반적인 형태로 캐시기억장치가 CPU 외부에 위치한다. 외부 버스를 사용해서 CPU에 접근한다.
04 캐시기억장치의 구조 단일 프로세서에서 캐시기억장치의 구조 계층적 캐시(Hierarchical Cache)기억장치 온-칩 캐시를 1차 캐시(L1)로 사용하고 칩 외부에 더 큰 용량의 오프-칩 캐시를 2차 캐시(L2)로 설치하는 방식이다. 온-칩 캐시기억장치 L1의 크기는 제한될 수 밖에 없다. 하지만 L2의 크기는 상대적으로 L1보다 더 많은 용량을 가질 수 있다. L2는 주기억장치의 일부 내용을 저장, L1은 L2 내용의 일부를 저장한다. 따라서 L2는 L1의 모든 정보를 포함. 이러한 관계를 슈퍼-세트(super-set)라고 한다. 계층적 캐시기억장치를 조사할 때는 먼저 L1을 검사, L1에 원하는 정보가 존재하지 않으면 L2를 검사, L2에도 원하는 정보가 존재하지 않으면 주기억장치를 조사 L1 캐시의 속도는 빠르지만 용량이 작기 때문에 적중률이 L2에 비해 낮다.
Taverage = HL1 × TL1 + (HL2 - HL1) × TL2 + (1 - HL2) × Tmain 04 캐시기억장치의 구조 계층적 캐시의 구조에서 평균 기억장치 접근시간 접근시간 Taverage를 계산하면 다음과 같다. 여기서 L1 캐시 적중률보다 L2의 적중률이 더 큼 Taverage = HL1 × TL1 + (HL2 - HL1) × TL2 + (1 - HL2) × Tmain Taverage = 평균 기억장치 접근시간 Tmain = 주기억장치 접근시간 TL1 = L1 캐시기억장치 접근시간 TL2 = L2 캐시기억장치 접근시간 HL1 = L1 캐시 적중률 HL2 = L2 캐시 적중률
04 캐시기억장치의 구조 캐시기억장치의 통합과 분리 통합 캐시 형태 분리 캐시 형태 초창기 온-칩 캐시기억장치는 데이터와 명령어를 모두 저장하는 통합 캐시 형태다. 통합 캐시는 명령어와 데이터 간의 균형을 자동적으로 유지해주기 때문에 분리 캐시보다 적중률이 더 높은 장점이 있다. 분리 캐시 형태 분리 캐시는 명령어만 저장하는 명령어 캐시와 데이터만 저장하는 데이터 캐시로 분리하여 두 개의 온-칩 캐시를 두는 형태다. 특히 여러 개의 명령어들이 동시에 실행되는 고성능 프로세서에서는 이러한 경향이 뚜렷하다. 분리 캐시의 장점은 명령어 인출과 명령어 실행 간 캐시의 충돌이 발생하지 않는다는 것이다.
04 캐시기억장치의 구조 멀티 프로세서의 캐시기억장치 구조 최신의 컴퓨터 시스템은 여러 개의 중앙처리장치(CPU)를 장착하여 처리성능을 향상시키고 있는데, 이것을 멀티 프로세서 시스템이라 한다. 시스템 버스에 온-칩 캐시의 CPU 3개가 연결된 멀티 프로세서 시스템 멀티 프로세서 시스템에서는 주기억장치와 각 중앙처리장치 내의 캐시기억장치들 사이에서 데이터의 불일치 현상이 발생한다. 데이터의 불일치 현상은 프로그램이 올바르게 동작하지 않는 원인이 된다.
04 캐시기억장치의 구조 즉시 쓰기방식에서의 데이터 불일치 상태 멀티 프로세서 시스템에 즉시 쓰기 정책 CPU 1과 CPU 2는 주기억장치에서 D라는 데이터를 읽어온다. 이렇게 되면 CPU 1, CPU 2, 주기억장치는 D라는 동일한 데이터를 갖게 된다. CPU 1이 프로그램을 실행하여 D라는 데이터를 X로 수정하게 되면 CPU 1에 속한 캐시기억장치는 데이터를 X로 변경하고 즉시 쓰기 정책에 따라 주기억장치에도 수정된 데이터인 X를 저장하게 된다. 이 경우 CPU 1에 속한 캐시기억장치와 주기억장치의 데이터는 X로 수정이 되지만 CPU 2에 속한 캐시기억장치는 D라는 데이터로 남아있게 되기 때문에 데이터의 불일치가 발생하게 된다.
04 캐시기억장치의 구조 나중 쓰기 방식에서의 데이터 불일치 상태 멀티 프로세서 시스템에 나중 쓰기 정책 주기억장치에서 D라는 데이터를 CPU 1과 CPU 2의 캐시가 읽어와서, CPU 1, CPU 2, 주기억장치는 D라는 동일한 데이터를 갖게 된다. CPU 1이 프로그램을 실행하여 D라는 데이터를 X로 수정하게 되면 나중 쓰기 정책에 의해 CPU 1에 속한 캐시기억장치는 수정된 데이터 X가 저장된다. 주기억장치와 CPU 2에 속한 캐시기억장치는 D라는 데이터로 남아있 게 되기 때문에 데이터의 불일치가 발생하게 된다.
04 캐시기억장치의 구조 캐시기억장치의 데이터 일관성 유지 방법 공유 캐시기억장치를 사용하는 방법 가장 간단한 방법으로 다수의 프로세서가 하나의 캐시기억장치만을 공유 캐시의 데이터들이 항상 일관성 있게 유지하는 장점이 있으나 다중 프로세서가 동시에 캐시에 접근하면 프로세서들 간의 충돌이 발생한다. 또한 온-칩 캐시기억장치의 경우 CPU의 외부 활동을 줄여 실행 시간을 가속시키고 전체 시스템 성능을 높이는 원칙에 위배되는 단점을 가지게 된다. . 공유 변수는 캐시기억장치에 저장하지 않는 방법 수정 가능한 데이터는 캐시기억장치에 저장하지 않는 방법이다. 수정될 데이터는 캐시에 저장하지 않고 주기억장치에 바로 저장한다. 캐시기억장치에 저장 가능한지 캐시기억장치에 저장 불가능 한지를 사용자가 선택하여 선언해 주어야 하는 단점이 있다. 버스 감시 시스템을 사용하는 방법 감시 기능을 가진 장비를 시스템 버스상에 추가로 설치하는 방법이다. 한 캐시가 데이터를 수정하면 그 정보를 다른 캐시와 주기억장치에 전단. 시스템 버스에 통신량이 증가하는 단점이 있다.
Thank You IT CookBook, 컴퓨터 구조와 원리 2.0