컴퓨터구조 - 캐시기억장치

캐시기억장치

주기억장치에 저장되어 있는 일부 명령어와 데이터를 임시적으로 캐시기억장치에 복사해서 저장해두는 이유는 데이터를 저장하고 인출하는 속도가 주기억장치보다 빠르기 때문이다.

그래서 중앙처리장치가 주기억장치에서 데이터를 처리하는 것보다 캐시기억장치에서 데이터를 처리하는 속도가 더 빠르다.

캐시기억장치는 중앙처리장치와 주기억장치 간의 데이터 처리 속도 차이를 완화시켜줌으로써 전체적인 데이터 처리 속도를 증가시켜준다.

이런 이유로 캐시기억장치는 고속완충기억장치라고도 한다.

캐시기억장치는 주기억장치보다 5배에서 10배정도 빠른 데이터 처리 속도를 가지고 있는데, 주기억장치에서 자주 사용되는 명령어들을 가지고 있다가 중앙처리장치로 빠르게 전달한다.

캐시기억장치의 용량에 따라 CPU의 가격이 결정되며, 캐시기억장치의 용량이 클수록 데이터 처리 속도가 빨라진다.

중앙처리장치은 프로그램을 실행영역의 90%는 해당 프로그램의 10%밖에 안된다.

따라서 기억장치를 참조할 때도 10%의 영역만 사용한다. 이를 참조의 지역성이라고 한다.

SRAM(static Random Access Memory) : 집적도가 높아 소용량의 기억장치에 사용된다.

SRAM은 DRAM보다 5~10배정도 처리속도가 빨라서  캐시기억장치에 주로 사용된다.

SRAM의 기억소자들을 격자 구조로 배열하면 많은 비트를 저장할 수 있다.

캐시기억장치의 원리

중앙처리장치가 데이터를 처리할 때, 저장장치는 처리할 데이터를 인출하거나, 처리된 데이터를 저장한다.

중앙처리장치는 고속이므로, 저장장치가 읽기와 쓰기가 끝날때까지 기다려야 한다. 이런 문제를 극복하려면 중앙처리장치만큼 빠른 저장장치가 필요하다

고속의 저장장치인 레지스터를 중앙처리장치의 내장 저장장치로 사용하여 각종 처리결과를 저장한다. 주기억장치는 보조기억장치의 데이터를 가져와 저장하는데, 중앙처리장치와 보조기억장치 간의 속도차이를 해결하기 위해 사용된다.

주기억장치는 보조기억장치보다는 빠르지만, 중앙처리장치에 비해 매우 느리기때문에 속도차이를 해결할 수 있는 캐시기억장치를 사용하게 되었다.

캐시기억장치는 5~100ns의 빠른 접근속도를 갖고있는데, 주기억장치에서 명령어나 피연산자를 불러와 저장하고 있다가 중앙처리장치로 빠르게 전송할 수 있다.

캐시기억장치의 동작

캐시기억장치가 없는 컴퓨터에서는 중앙처리장치가 직접 주기억장치에서 필요한 명령어나 피연산자를 인출해야 한다.

1.중앙처리장치가 필요한 명령어나 데이터를 인출하기 위해 주기억장치에 접근한다.

2.주기억장치에서 필요한 데이터를 인출한 후 중앙처리장치에 있는 레지스터에 저장한다.

캐시기억장치가 있는 컴퓨터 시스템의 경우에는, 중앙처리장치가 필요한 데이터를 가져오기 위해 먼저 캐시기억장치에 접근해서 해당 데이터가 있는지 조사한다. 중앙처리장치가 원하는 데이터가 캐시기억장치에 있을 경우, 적중이라 하고, 없으면 실패라고 한다.

중앙처리장치는 캐시기억장치에서 원하는 데이터가 있는지 조사하고, 없으면 캐시기억장치는 주기억장치로부터 블록단위로 데이터를 가져온다. 그리고 다시 캐시기억장치는 워드 단위로 중앙처리장치로 데이터를 전송한다.

중앙처리장치가 원하는 데이터가 캐시기억장치에 있을 경우 빠른 속도로 해당 데이터를 중앙처리장치로 전송한다. 이를 적중이라 한다.

캐시기억장치는 중앙처리장치가 필요로 하는 명령어와 데이터를 가지고 있다가 필요할 때 전송하여 신속하게 처리하는데, 이는 내장형 컴퓨터의 특성인 참조의 지역성 때문에 가능하다.

참조의 지역성:짧은 시간동안 중앙처리장치가 주기억장치를 참조할때, 제한 영역에서만 참조가 이루어지는 것을 의미한다.

중앙처리장치가 원하는 데이터를 얻기 위해 캐시기억장치를 조사하는데, 해당 데이터가 있으면 적중이라고 하고, 없으면 실패라고 한다. 

적중률이 높을수록 속도가 향상된다.적중률=적중 수/전체 메모리 참조 횟수

평균 기억장치 접근시간=적중률*캐시기억장치 접근시간+(1-적중률)*주기억장치 접근시간

캐시기억장치의 설계

캐시기억장치는 중앙처리장치가 데이터를 빠르게 전송받을 수 있도록 하기 위해 사용된다. 캐시기억장치의 목표는 필요한 명령어와 데이터가 캐시기억장치에 있을 확률을 높여 적중률을 높이는 것이다. 이를 통해 주기억장치에서 명령어나 데이터를 읽어오는 시간을 줄일 수 있다.주기억장치와 캐시기억장치는 동일한 명령어나 데이터를 가지고 있으므로 한 쪽에서 변경이 일어나면 다른 한 쪽에서도 변경을 해주어야 한다. 주기억장치와 캐시기억장치간의 일관성을 유지시켜야 한다.

이를 위한 캐시기억장치 설계요소는 다음과 같다.

1.캐시기억장치의 크기

2.인출 방식

3.사상 함수

4.교체 알고리즘

5.쓰기 정책

6.블록 크기

7.캐시기억장치의 수

설계요소를 효율적으로 정하면 캐시기억장치의 성능이 향상된다.

캐시기억장치의 크기

캐시기억장치의 용량이 커지면 주기억장치의 명령어와 데이터를 더 많이 저장할 수 있으므로 적중률이 높아진다. 하지만 용량이 커질수록 주소를 계산하거나 데이터를 인출하는데 더 복잡한 회로를 구성하기 때문에 접근시간이 더 길어진다.

즉, 용량이 증가한 만큼 속도가 더 높아지지는 않는다.

따라서 캐시기억장치의 용량과 주변회로의 복잡도 관계를 파악하여 적중률이 향상되면서 접근시간이 길어지지 않도록 용량을 정해야 한다.

또한 캐시기억장치의 용량과 비용을 적절히 조절해야한다.

연구결과에 의하면 1k~128k 워드가 최적이라고 알려져있다.

 

인출방식

주기억장치에서 캐시기억장치로 명령어나 데이터를 인출하는 방식에 따라 적중률이 크게 변한다.인출하는 방법은 요구인출방식과 선인출방식이 있다.

1.요구인출방식

중앙처리장치는 필요할 때마다 주기억장치에서 명령어나 데이터를 블록단위로 인출하는 방식이다.

2.선인출방식

선인출 방식은 중앙처리장치가 현재 필요한 정보 외에도 앞으로 필요할 것으로 예상되는 정보 또한 미리 인출하여 캐시기억장치에 저장하는 방식이다.

주기억장치에서 필요한 정보를 인출할때, 해당 정보 근처에 위치한 정보들도 함께 인출하여 캐시기억장치에 저장해둔다. 중앙처리장치가 주기억장치에게 요구하는 데이터가 일정 구간에 집중되어 있을 경우 효과적이다.

그러나 중앙처리장치가 주기억장치에게 요구하는 데이터가 넓은 구간에 분포되어있을 경우 이 방법을 사용하면 오히려 효과가 떨어진다.

블록이 커질수록 캐시기억장치에 저장되는 블록의 수는 감소하기 때문에 더욱 빈번하게 교체되며, 블록이 커질수록 멀리 떨어진 워드들도 함께 가져오기 때문에 가까운 미래에 사용될 확률은 낮아진다. 일반적인 블록의 크기는 4~8단어가 적당하다.

인출되는 블록의 크기가 커지면 한번에 많은 정보를 불러올 수 있지만, 블록의 인출시간이 길어진다.블록이 커질수록 캐시기억장치에 저장할 수 있는 블록의 수가 감소하기 때문에 블록이 더욱 빈번하게 교체된다. 그리고 블록이 커지면 멀리있는 데이터도 가져오기 때문에 가까운 미래에 사용될 확률이 낮아진다.

 

사상함수

주기억장치는 한번에 저장되는 데이터의 단위가 워드이다. 워드의 길이는 컴퓨터 마다 다르다.이런 워드가 여러개 모여서 블록이 되며, 캐시기억장치로 인출되는 데이터 그룹이다.만약 주기억장치의 용량이 2^n개의 워드라 가정하고 블록이 K개의 워드로 구성되어 있다고 하면 블록의 개수는 다음과 같다.

2^n/K=블록의 수

캐시기억장치에서 슬롯은 한 블록이 저장되는 장소이다.블록은 캐시기억장치의 각 슬롯에 저장되는 데이터의 길이가 된다.

캐시기억장치는 슬롯에 블록이 저장된다.

프로그램을 실행할때, 중앙처리장치가 캐시기억장치에서 필됴한 명령어 인출을 모두 끝났거나, 필요한 명령어가 캐시기억장치에 없을 경우, 캐시기억장치의 일부분이 주기억장치로 이동하고, 주기억장치에서 필요한 데이터를 캐시기억장치로 이동시키는 과정이 이루어진다. 이렇게 캐시기억장치와 주기억장치간의 데이터를 교환하는 동작을 사상이라고 한다.

캐시기억장치의 대표적인 세가지 사상방법

1.직접 사상

2.연관사상

3.집합 연관 사상

 

직접사상

주기억장치의 블록이 캐시기억장치의 특정 슬롯에만 적재될 수 있기 때문에, 중앙처리장치가 필요한 블록을 조사할 때 해당 슬롯만 검사하면 된다.

직접 사상은 한번만 검사하면 되기때문에 간단하고 작은 용량의 RAM을 캐시기억장치로 사용하기때문에 비용이 저렴한 장점이 있다. 하지만 캐시기억장치의 특정 라인을 참조하는 두 블록이 빈번하게 요구되는 경우 계속 캐시 실패가 발생해서 실패율이 현격하게 높아질 수 있다.

 

직접 사상은 주기억장치의 주소 형식이 세 개의 필드로 구성된다. 태그 필드는 태그 번호를 나타낸다.슬롯번호는 캐시기억장치의 총 슬롯의 수m=2^s개 중에서 하나를 지정하는 번호이다.마지막으로 단어 필드는 각 블록내의 2^w개의 단어들 중에 하나를 선택한다.

캐시 슬롯은 주기억장츼 블록을 공유하여 저장한다.

이때 같은 슬롯을 공유하는 블록은 서로 다른 태그를 가진다.

 

연관사상

연관사상은 직접사상의 단점을 보완한 것으로, 캐시기억장치의 어느 라인이든 적재할 수 있다. 그러나 적중 검사가 모든 라인에 걸쳐 이루어지므로 검사 시간이 길어진다. 주기억장치의 주소 형식은 두개의 필드만 존재한다. 태그 필드가 주기억장치의 블록 번호를 나타내고, 캐시기억장치의 정해진 슬롯 번호에 저장되는 것이 아니라 임의로 저장 될 수있다.슬롯 번호를 위한 필드는 존재하지 않는다. 중앙처리장치가 원하는 데이터를 얻기 위해 우선 캐시기억장치를 조사한다. 그런데 원하는 데이터가 없을 경우 캐시 실패가 발생한다. 

집합연관사상

직접 사상의 경우 주기억장치의 슬롯번호와 캐시기억장치의 슬롯번호가 일치해야만 데이터와 태그를 입력할 수 있다. 따라서 태그가 다르고 같은 슬롯번호인 워드는 동시에 사용할 수 없었다. 

 

교체알고리즘

중앙처리장치에서 필요로 하는 데이터가 캐시기억장치에 존재하지 않을 경우 캐시기억장치는 특정 슬롯에서 데이터를 제거하고 주기억장치에서 해당 블록을 가져와야 한다. 이러한 경우 캐시기억장치의 어느 슬롯을 제거할지 결정하는 방식이 교체 알고리즘이다.직접 사상 방식에서는 주기억장치의 데이터가 같은 슬롯에서 교체되기 때문에 교체 알고리즘이 필요없다.

최소 최근 사용 알고리즘(LRU)은 현재까지 알려진 알고리즘 중에서 가장 효율적인 알고리즘으로 집합 연관사상에서 사용되는 방식이다.

이 방식은 캐시기억장치에서 중앙처리장치로의 인출이 없는 데이터 중에 가장 오래 저장되어 있는 데이터를 제거하는 방식이다.

 

최소 사용 빈도 알고리즘LFU은 캐시기억장치에 적재된 데이터 중에 가장 적게 인출된 블록을 제거하는 알고리즘이다.

 

선입력 선출력알고리즘(FIFO)는 캐시기억장치에 가장 먼저 적재된 블록을 제거하는 알고리즘이다.

 

랜덤

쓰기정책

중앙처리장치가 프로그램을 실행하는 도중에 연산 결과를 캐시기억장치에 저장하는 경우가 있는데, 이 때 주기억장치와 캐시기억장치의 데이터가 다르게 된다. 따라서 주기억장치의 데이터를 갱신해주는 작업이 필요한데 이를 쓰기정책이라 한다. 쓰기 정책의 방법에는 즉시쓰기(write though)와 나중쓰기(write back)방식으로 분류한다.

 

즉시쓰기 방식 중앙처리장치의 연산결과를 캐시기억장치 뿐만 아니라 주기억장치에도 저장하는 방식이다. 이는 쓰기 동작이 발생할 때마다 주기억장치에 빈번하게 접근하기 때문에 쓰기시간이 길어진다.

 

나중쓰기방식는 중앙처리장치의 연산결과를 캐시기억장치에만 저장하고 주기억장치는 나중에 쓰는 방식이다. 1비트의 태그가 캐시기억장치에 표시되고 새로운 블록에 의해 해당 데이터가 삭제되기 전에 주기억장치에 쓰는 방식이다. 이 기간동안 주기억장치와 캐시기억장치 간의 데이터가 일치하지 않을 수 있다. 이를 무효 상태라 한다. 이 경우에는 다른 입출력 장치에서 주기억장치로 접근이 불가능하고 캐시기억장치로만 접근이 가능하다.

 

캐시기억장치의 수

캐시기억장치가 처음 소개되었을 때, 하나의 컴퓨터 시스템에는 오직 하나의 캐시기억장치가 존재했다. 최근에는 캐시기억장치가 계층적으로 분리되거나 기능별로 분리된 다수의 캐시기억장치를 사용하는 것이 보편화 되었다.

 

캐시기억장치의 구조

집적회로 기술을 발달로 캐시기억장치를 중앙처리장치에 내장할 수 있게 되었는데 이를 온칩캐시기억장치라 한다. 캐시기억장치가 CPU 외부에 존재하면 외부캐시기억장치라고 한다. 온칩캐시기억장치는 내부 동작으로만 CPU에 접근하기 때문에 실행 시간이 짧아지고 성능이 높아진다.

계층적 캐시기억장치는 온칩캐시기억장치를 1차 캐시기억장치로 사용하고 칩 외부에 더큰 용량의 캐시기억장치를 2차 캐시기억장치로 설치하는 방식을 계층적 캐시기억장치라고 한다.

 

중앙처리장치 내부에 수많은 부품들이 존재하기때문에 온칩캐시기억장치 L1의 크기는 한정적일 수 밖에 없다. 하지만 중앙처리장치 외부에 외치한 오프캐시기억장치는 L1보다 더 많은 용량을 가진다.

 

L2에는 주기억장치의 데이터 일부가 저장되고, L1에는 L2의 데이터 일부가 저장된다. L2는 L1의 모든 정보가 저장되어 있는데 이러한 관계를 슈퍼-세트 라고 한다.계층적 캐시기억장치 구조에서 평균 기억장치 접근 시간 

캐시기억장치의 통합과 분리

통합캐시기억장치는 데이터와 명령어 비율을 자동으로 맞춰주기 때문에 적중률이 높다.분리 캐시기억장치는 데이터 캐시기억장치와 명령어 캐시기억장치로 분리를 하였다.분리 캐시기억장치의 장점은 명령어 인출과 명령어 실행 간 캐시기억장치의 충돌이 발생하지 않는다는 것이다.

멀티프로세서의 캐시기억장치 구조

최신 컴퓨터 시스템은 중앙처리장치를 여러개 장착하여 성능을 향상시키고 있는데 이러한 방식을 멀티 프로세서 시스템이라고 한다.

즉시 쓰기 방식에서의 데이터 불일치 상태

멀티 프로세서에서 CPU1의 값이 바뀌면 주기억장치의 값이 즉시바뀌지만 CPU2의 값은 바뀌지 않는다. 데이터 불일치 가 발생한다.

나중쓰기방식에서도 CPU1과 CPU2간의 데이터 불일치가 발생한다.

 

데이터 일관성을 유지하는 방법

1.공유 캐시기억장치를 이용하는 방법

다수의 프로세서가 하나의 캐시기억장치를 공유하는 것이다. 하지만 다수의 프로세서가 동시에 캐시기억장치에 접근하다가 충돌할 수도 있다.

2.공유 변수를 캐시기억장치에 저장하지 않는 방법

수정 가능한 데이터를 캐시기억장치에 저장하지 않는 방법이다.

3.버스 감시 시스템을 사용하는 방법

감시 기능을 가진 시스템 버스에 추가로 설치하는 방법이다.

 

캐시기억장치

주기억장치에 있는 데이터와 명령어 일부를 인출해서 저장하고 있다가 중앙처리장치가 필요로 할 때 신속하게 제공할 수 있는 장치

주기억장치와 중앙처리장치간의 데이터 처리 속도 차이를 완화시키기 위해 캐시기억장치를 사용한다. 캐시기억장치를 사용하면 컴퓨터의 처리 속도가 향상된다

 

캐시기억장치는 주기억장치보다 5배에서 10배정도 빠르다

참조의 지역성은 실행되는 프로그램 시간의 90%는 해당 프로그램 영역의 10%에서만 사용된다. 

SRAM은 DRAM보다 5배 빠르다

 

중앙처리장치는 기억장치보다 빠르기 때문에 기억장치가 읽거나 쓰기를 완료할때까지 기다려야 한다.

캐시기억장치는 5~100ns의 접근시간을 가진다. 

중앙처리장치가 원하는 데이터와 명령어를 얻기 위해 먼저 캐시기억장치에 접근해서 해당 정보가 있는지 조사를 한다. 그리고 정보가 있으면 신속하게 가져오면 되고, 없으면 캐시기억장치는 주기억장치에서 해당 정보를 가져온 후에, 다시 중앙처리장치로 전송한다.

캐시기억장치에서 원하는 정보를 찾았을 때 적중이라 하고, 찾지 못했을 경우 실패라고 한다.

적중률은 적중 횟수 나누기 전체 참조 횟수이다.

평균 기억장치 접근시간은 적중률*캐시기억장치 접근 시간+(1-적중률)*주기억장치 접근시간

캐시기억장치의 목표는 중앙처리장치가 필요로 하는 명령어와 데이터가 존재할 확률을 높이는 것이다.

캐시기억장치의 크기

캐시기억장치의 용량이 클수록 주기억장치의 블록을 더 많이 가져올 수 있기때문에 적중률이 높아진다. 하지만, 용량이 커질수록 주소를 계산하고 정보를 인출하는 회로가 더욱 복잡해지기 때문에 접근시간이 더 길어진다.또한 캐시기억장치는 고가이기 때문에 용량이 커질수록 비용도 높아진다. 결과적으로 캐시기억장치의 용량을 높여 적중률을 증가시키면서 접근시간은 낮추는 방향으로 용량을 정해야한다. 연구결과에 의해 1k~128k 단어가 최적이라고 알려져있다.

인출방식

요구인출방식

선인출방식

 

요구인출방식은 중앙처리장치가 현재 필요한 정보를 주기억장치에서 블록 단위로 가져오는 방식이다.

 

선인출방식

중앙처리장치가 현재 필요한 정보뿐만아니라 앞으로 필요해질 것 같은 정보 또한 블록단위로 가져와 캐시기억장치에 저장해두는 방식이다. 이는 참조의 지역성이 높을 경우 효과적이다.

블록의 크기가 크면 한번에 많은 정보를 가져올 수 있지만 인출시간이 길어지고, 공간이 작기 때문에 더욱 빈번하게 교체된다. 또한 멀리 떨어진 단어들도 같이 가져오기 때문에 해당 단어가 사용될 가능성은 낮아진다. 일반적으로 4~8단어가 적당하다

 

사상함수

직접사상

연관사상

집합연관사상

 

직접사상함수는 주기억장치에 있는 임의의 블록의 첫번째 단어가 캐시기억장치의 첫번째 슬롯에만 적재될 수 있다. 또한 두번째 단어는 캐시기억장치의 두번째 슬롯에만 적재될 수 있다. 이러한 방식은 중앙처리장치가 캐시기억장치의 적중 여부를 확인할 때 해당 라인만 검사하면 되기때문에 간단하고 용량이 작은 장점이 있다. 하지만 같은 순서에 있는 단어가 동시에 적재될 수 없기 때문에 만약 같은 순서에 있는 다른 블록의 단어를 자주 접근할 경우 적중률이 낮아진다.

 

캐시기억장치의 개념

-컴퓨터의 기억장치 구성

캐시기억장치의 원리

-캐시기억장치의 동작

-적중률

캐시기억장치의 설계

-캐시기억장치의 크기

-인출방식

-사상함수

-교체 알고리즘

-쓰기정책

-캐시기억장치의 수

캐시기억장치의 구조

-단일 프로세서의 캐시기억장치 구조

-멀티 프로세서의 캐시기억장치 구조

 

 

캐시 메모리가 뭐인가요?

-캐시 메모리는 메인메모리에 있는 명령어와 데이터 중 일부를 가져와 임시적으로 저장하여 CPU에서 필요로 할 때 해당 정보의 신속한 제공이 가능하도록 만들어진 장치입니다.

 

캐시 메모리가 왜 필요해요?

-CPU와 메인메모리 사이의 데이터 처리 속도 차이가 크기 때문에 높은 성능의 CPU를 제대로 활용하지 못하고 있습니다. 따라서 캐시 메모리를 사이에 두어 CPU와 메인메모리의 데이터 처리 속도 차이를 극복할 수 있습니다.

 

캐시메모리는 메인메모리보다 몇 배정도 빠른가요?

-캐시메모리는 메인메모리보다 약 5~10배정도 빠릅니다.

참조의 지역성이 무엇인가요?

-일반적인 컴퓨터에서 CPU는 프로그램 실행시간의 90%는 해당 프로그램 공간의 10%에서만 실행됩니다. 따라서 이 10%에 해당 하는 데이터를 캐시메모리에 적재해두면, CPU의 데이터 처리 성능이 향상됩니다.

 

캐시 메모리는 무엇으로 만드나요?

-캐시 메모리는 SRAM으로 만들 수 있습니다.

캐시 메모리의 접근 시간은 어느정도 되나요?

-캐시 메모리의 접근 시간은 5~100ns 정도입니다.

 

캐시메모리의 적중과 실패는 무엇인가요?

-CPU가 필요한 명령어나 데이터가 캐시메모리에 존재하면 적중(hit)라고 하고, 존재하지 않으면 실패(miss)라고 합니다.

 

데이터 전송 단위는 무엇인가요?

-메인메모리에서 캐시메모리로 데이터를 가져올때는 블록 단위로 가져옵니다. 그리고 캐시메모리에서 CPU로 데이터를 전송할 때는 워드 단위로 전송합니다.

 

캐시메모리의 적중률은 어떻게 구하나요?

-적중률= (적중수/전체메모리 참조 횟수) 입니다.

 

메인메모리에서 캐시메모리로 데이터를 인출하는데 소요되는 평균 메모리 접근 시간은 어떻게 구하나요?

Taverage=Hhit_rate X Tcache + (1-Hhit_ratio) X Tmain

Taverage:평균 메모리 접근 시간

Tmain=메인메모리 접근 시간

Tcache=캐시메모리 접근 시간

Thit_ratio=적중률

 

캐시메모리의 설계요소는 무엇이 있을까요?

-캐시메모리의 크기, 인출 방식,  사상 함수, 교체 알고리즘, 쓰기 정책, 블록 크기, 캐시메모리의 수 입니다.

캐시 메모리의 크기는 어떻게 설계해야 할까요?

-캐시메모리를 크게 만들면, 메인메모리에서 가져올 수 있는 블록이 많기 때문에 적중률이 높아집니다. 하지만 용량이 크면 주소를 계산하는데 많은 시간이 소요됩니다. 즉 용량이 크다고 해서 비례적으로 속도가 높아지진 않습니다. 또한 캐시메모리의 용량이 클수록 비용이 높아집니다. 결과적으로 캐시메모리의 적중률을 높이면서 접근시간이 낮아지는 것을 막하야합니다. 연구 결과에 의하면 1K~128k 워드가 적절하다고 합니다.

 

인출 방식은 어떻게 설계해야 할까요?

-요구 인출방식과 선인출 방식이 있습니다.

요구 인출 방식은 CPU가 필요한 명령어나 데이터가 있을 때마다 메인메모리에서 가져오는 방식입니다.

선인출방식은 CPU가 현재 필요한 정보뿐만 아니라 앞으로 필요해질 수 있을 것 같은 정보까지 한꺼번에 가져와서 캐시메모리에 저장해두는 방식입니다. 일반적으로 프로그램은 참조의 지역성으로 인해 현재 참조하는 데이터와 인접한 데이터를 참조할 가능성이 높기 때문에 이 경우 효과적입니다.

메인메모리에서 가져오는 블록의 크기가 크면 한번에 많은 데이터를 가져올 수 있지만 인출 시간이 길어지고, 캐시 메모리 크기에 비해 블록이 더 커졌기 때문에 블록이 빈번하게 교체됩니다. 블록이 커질수록 멀리 떨어진 워드들도 함께 가져오기 때문에 가까운 미래에 사용될 가능성이 낮아집니다. 일반적으로 블록의 크기는 4~8워드가 적절합니다.

 

사상함수는 어떻게 설계해야 할까요?

-캐시메모리에서 슬롯은 한 블록이 저장되는 장소입니다. 그리고 태그는 슬롯에 적재된 블록을 구분해주는 정보입니다. 메인메모리에서 캐시메모리로 정보를 옮기는 것을 사사이라고 합니다.

사상의 방법은 세가지가 있습니다. 직접사상, 연관사상, 집합연관사상이 있습니다.

직접사상은 메인메모리의 임의의 블록에서 첫번째 워드는 캐시메모리의 첫번째 슬롯에, 또 다른 블록에서 두번째 워드는 캐시메모리의 두번째 슬롯에만 넣을 수 있는 사상방식입니다. 따라서 서로 다른 블록의 첫번째 워드는 동시에 캐시메모리에 존재할 수 없습니다. 이 방식은 CPU에서 캐시메모리를 조사할 때 해당 라인만 검사하면 되기때문에 간단하지만, 일반적으로 적중률이 낮습니다.

연관사상은 직접사상의 단점을 보완한 방식입니다. 서로 다른 두 블록의 첫번째 워드가 동시에 캐시메모리에 있도록 하기 위해 메인메모리의 블록번호를 캐시메모리에 저장합니다. 이 방식은 CPU가 캐시메모리를 조사할때, 긴 주소길이로 인해 검사시간이 길어집니다.

집합 연관사상은 직접사상과 연관사상 방식의 장점을 취합한 방식입니다.

집합과 태그가 있는데, 집합 번호는 같고, 태그 번호가 다른 단어들을 저장할 수 있습니다. 즉 직접사상에서의 저장공간이 여러개 있다고 생각하면 됩니다. 이로 인해 적중률이 직접사상보다는 높고 연관사상보다는 낮습니다. 또한 검사시간은 연관사상보다는 빠르지만 직접사상보다는 느립니다.

 

교체 알고리즘은 무엇이 있을까요?

-CPU가 현재 필요한 정보를 캐시메모리에서 찾을 때, 해당 정보가 있으면 적중이라고 하고, 없으면 실패라고 합니다. 실패했을 경우, 메인메모리에서 해당 정보를 가져와야 하는데, 이때 캐시메모리에서도 공간마련을 위해 데이터를 제거해야 합니다.이때 어떤 데이터를 제거할지 결정하는 알고리즘이 교체 알고리즘입니다.

LRU(Least Recently Used)알고리즘은 캐시메모리에서 CPU로 인출된적이 없는  블록 중에서 가장 오래된 블록을 제거하고 새로운 블록을 저장하는 방식입니다.

LFU(Least Frequently Used) 알고리즘은 캐시메모리에 적재된 블록 중에서 가장 적게 사용된 블록을 교체하는 방식입니다.

FIFO(First In First Out)알고리즘은 가장 먼저 들어온 블록을 내보내는 방식입니다.

이외에도 랜덤 알고리즘이 있습니다.

 

쓰기 정책은 무엇이 있을까요?

-CPU가 연산 결과를 캐시메모리에 저장해두는 경우가 있습니다. 이 때 캐시메모리와 메인메모리의 데이터 값이 다르게 됩니다. 이를 위해 데이터를 갱신하는 과정이 필요한데, 즉시 쓰기(wirhte-though) 방식과 나중쓰기(write-back)방식이 존재합니다.

즉시 쓰기 방식은 CPU에서 연산결과를 캐시메모리에 저장할 경우 바로 메인메모리에도 값을 저장하는 방식입니다. 이 방식은 메인메모리와 캐시메모리의 값이 항상 동일하다는 장점이 있습니다. 하지만 쓰기 동작이 발생할 때마다 캐시메모리와 메인메모리에 쓰기 동작이 발생하기 때문에 시간이 길어집니다.

나중쓰기 방식은 CPU의 연산결과를 캐시메모리에 저장해두고 메인메모리에는 저장하지 않습니다. 변경된 캐시메모리의 블록에 1비트의 태그로 표시를 해두고 , 해당 블록이 삭제되기 전에 메인메모리에 저장하는 방식입니다.  이 방식은 메인메모리와 캐시메모리 간의 데이터가 불일치 할 수 있습니다.

슈퍼세트관계:최근의 고성능 컴퓨터는 캐시메모리가 두개 있습니다. 하나는 CPU내에 들어있는 캐시메모리로 아주 작지만 아주 빠르고, 다른 하나는 CPU외에 있는 캐시메모리로, 상대적으로 느리지만 용량은 더 큽니다.

L1은 CPU내에 있는 캐시메모리를 말하고, L2는 CPU 외에 있는 캐시메모리를 말합니다. L1은 L2보다 속도는 빠르지만 적중률이 낮습니다.

캐시메모리의 일관성을 유지하는 방법은 무엇인가요?

-첫째로, 공유 캐시메모리를 사용하는 방법입니다. 시스템에 있는 여러개의 프로세서가 하나의 공유 캐시메모리를 사용하면 데이터를 일관성있게 유지할 수 있습니다. 하지만 동시에 캐시메모리에 접근하면 충돌이 발생할 수 있습니다.

두번째로, 공유변수를 캐시메모리에 저장하지 않는 방법입니다. 이는 수정 가능한 데이터를 캐시메모리 저장하지 않는 방법입니다. 이 방법은 메인메모리에서 데이터를 읽어와 수정할 경우, 캐시메모리에 저장하지 않고 바로 메인메모리에 저장하는 방법입니다.

세번째로, 버스 감시 시스템을 이용하는 방법입니다. 데이터의 일관성 유지를 위해 감시 기능을 가진 장비를 시스템 버스에 추가설치하는 방법입니다. 이 방법은 버스의 통신량이 증가하게 됩니다.

'컴퓨터 공학' 카테고리의 다른 글

컴퓨터 그래픽스  (0) 2015.11.27
[공유] dirent 구조체  (0) 2015.11.27
데이터 통신 - 신호  (0) 2015.11.27
데이터 통신 기본 개념  (0) 2015.11.27
전화의 역사  (0) 2015.11.27