캐시기억장치
- 주기억장치에 저장되어 있는 명령어와 데이터 중의 일부를 임시적으로 복사해서 저장하는 장치
- 캐시는 데이터를 저장하고 인출하는 속도가 주기억장치보다 빠름
- CPU가 캐시기억장치에 저장된 명령어와 데이터를 처리할 경우, 주기억장치보다 더 빠르게 처리할 수 있음
- 결과적으로 캐시기억장치는 느리게 동작하는 주기억장치와 빠르게 동작하는 CPU 사이에서 속도 차이를 줄여줘 CPU에서의 데이터와 명령어 처리속도를 향상시킴
- 고속완충기억장치
컴퓨터의 기억장치 구성
Low ▼ 용량 ▼ High |
CPU 내의 레지스터 | High ▲ 속도 & 가격 ▲ Low |
캐시기억장치 SRAM | ||
주기억장치 DRAM | ||
보조기억장치 |
- CPU 내부
- CPU의 처리속도와 비슷한 접근속도를 가진 레지스터들이 포함
- 레지스터 기억장치는 높은 가격 때문에 많은 용량으로 구성하기 어려움
- 캐시기억장치
- 주기억장치에 비해 5~10배 정도 접근속도가 빠름
- 자주 사용되는 명령들을 저장하고 있다가 CPU에 빠른 속도로 제공
- 캐시기억장치의 용량에 의해 CPU의 가격이 결정됨
- 참조의 지역성(locality of reference) 특성 이용
- 지역성 때문에 캐시기억장치에 이런 특정 영역을 미리 가져다 놓아 CPU가 빠르게 참조할 수 있도록 하여 처리 속도의 향상을 이룸
참조의 지역성
- CPU는 프로그램 실행의 90%를 해당 프로그램의 10%에서만 반복 실행
- 기억장치 참조 시에도 10%에 해당하는 특정 영역만 주로 참조
SRAM
- Static Random Access Memory
- 플립플롭을 기억소자로 구성하여 집적 밀도가 높아 소용량의 기억장치에 사용
- DRAM보다 처리속도가 5배 정도 빨라서 캐시메모리에 주로 사용
- 선택입력 S가 0이면 기억소자가 선택되지 않았으므로 읽기와 쓰기 동작은 일어나지 않음
- S가 1일 때, 본격적인 동작
- S = 1, R/W' = 0: 쓰기 동작, 입력 단자에 입력된 데이터가 플립플롭에 저장되고 데이터의 출력은 없음
- S = 1, R/W' = 1: 읽기 동작, 플립플롭에 저장되어 있던 데이터 비트를 데이터 출력 단자를 통해 출력
S·I·R/W' = 1·0·0 | S·I·R/W' = 1·0·1 | S·I·R/W' = 1·1·0 | S·I·R/W' = 1·1·1 | |
플립플롭 R 입력 (G₁의 출력) |
1×1×1 = 1 | 1×1×0 = 0 | 1×0×1 = 0 | 1×0×0 = 0 |
플립플롭 R 입력 (G₂의 출력) |
1×1×0 = 0 | 1×1×1 = 1 | 1×0×0 = 0 | 1×0×1 = 0 |
플립플롭 출력 Q | 0 | 1 | Q | Q |
데이터 출력 (G₃의 출력) |
0×0 = 0 | 1×0 = 0 | Q×1 = Q | Q×1 = Q |
동작 결과 | 쓰기 동작: 입력 I가 플립플롭 출력 Q로 저장되고 데이터 출력은 없음 | 읽기 동작: 데이터 출력이 과거 상태 Q를 출력 |
- SRAM의 기억소자들을 격자 구조로 배열하면 많은 비트를 저장할 수 있는 진정한 SRAM이 됨
캐시기억장치의 원리
- CPU는 그 속도가 저장장치에 비해서 고속이므로 저장장치의 읽기와 쓰기 동작과정 동안 기다려야 함
- 주기억장치는 보조기억장치보다 처리속도가 빠르지만, CPU의 처리속도와 비교하면 그 차이는 큼
- 캐시기억장치는 5~100ns 정도의 빠른 접근시간을 제공하는 기억장치로 수행할 명령어나 피연산자를 주기억장치로부터 가져와 저장하고 있다가 빠른 속도로 CPU에 제공
- CPU ←[워드 전송]→ 캐시기억장치 ←[블록전송]→ 주기억장치
캐시기억장치의 동작
- 캐시기억장치가 없는 컴퓨터 시스템의 기억장치 접근
- CPU가 명령어와 데이터를 인출하기 위해 주기억장치에 접근
- 주기억장치에서 명령어나 필요한 정보를 획득하여 CPU내의 명령어 레지스터 등에 저장
- 캐시기억장치를 포함하고 있는 컴퓨터 시스템의 기억장치 접근
- CPU가 명령어 또는 데이터를 인출하기 위해 주기억장치보다 캐시기억장치를 먼저 조사
- CPU가 명령어를 인출하기 위해 캐시기억장치에 접근하여 그 명령어를 찾았을 때를 적중(hit)이라고 함
- 명령어가 존재하지 않아 찾지 못하였을 경우를 실패(miss)라고 함
캐시기억장치의 실패
- CPU가 1000번지의 워드가 필요할 경우, 캐시기억장치가 1000번지의 워드를 저장하고 있는지를 검사하고 1000번지의 워드가 캐시기억장치 내에 존재하지 않는다면 실패
- 실패인 경우에 원하는 정보를 찾아 CPU로 전달하는 과정
- 주기억장치에서 필요한 정보를 획득하여 캐시기억장치에 전송
- 캐시기억장치는 얻어진 정보를 다시 CPU로 전송
캐시기억장치의 적중
- CPU가 1002번지의 워드가 필요할 경우, 캐시기억장치가 1002번지의 워드를 저장하고 있는지를 검사하고, 1002번지 워드가 캐시기억장치 내에 존재한다면 적중
- 캐시기억장치에서 얻어진 정보를 CPU로 직접 전송하면 주기억장치를 거치는 것보다 훨씬 빠른 속도로 원하는 정보를 획득할 수 있음
- 캐시기억장치의 동작은 기억장치 참조의 지역성에 의해 가능
- CPU의 주기억장치 참조는 제한된 영역에서만 이루어지는 현상
- 짧은 시간 동안 CPU가 접근하는 범위는 지역적으로 제한됨
참조의 지역성 | |
시간적 지역성 (Temporal Locality) |
공간적 지역성 (Spatial Locality) |
최근에 액세스된 프로그램이나 데이터가 가까운 미래에 다시 액세스될 가능성이 높음 | 기억장치 내에 인접하여 저장되어 있는 데이터들이 연속ㅈ적으로 액세스될 가능성이 높음 |
서브 프로그램, 스택 | 배열 |
적중률
- Hit Ratio
- 적중률은 캐시기억장치를 가진 컴퓨터의 성능을 나타내는 척도로써 적중률이 높을수록 컴퓨터의 처리 속도가 향상됨
- 적중률이 0.95~0.99 정도이면 컴퓨터의 처리 속도가 우수하다고 함
- 프로그램 수행 중 기억장치에 접근한 총 횟수(적중한 횟수 + 실패한 횟수)를 적중한 횟수(캐시에 원하는 정보가 있는 경우)로 나눈 것
- 적중률 = (적중수/전체메모리참조횟수)
평균 기억장치 접근시간
- 주기억장치와 캐시기억장치에서 데이터를 인출하는데 소요되는 시간
- 평균기억장치접근시간 = 적중률 × 캐시기억장치접근시간 + (1 - 적중률) × 주기억장치접근시간
- 캐시기억장치 접근시간에 대한 평균과 주기억장치 접근시간에 대한 평균을 합한 것이 평균 기억장치 접근시간
- 캐시기억장치의 적중률이 높아질수록 평균 기억장치 접근시간은 캐시기억장치 접근시간에 근접하게 되어 컴퓨터의 처리 속도의 성능 향상을 가져옴
캐시기억장치의 설계
- 사용 목적: CPU가 빠르게 명령어와 데이터를 입력받을 수 있도록 하기 위해 사용
- 목표: 명령이나 데이터가 캐시기억장치에 있을 확률은 높여 캐시기억장치의 적중률을 극대화해 주기억장치에서 데이터를 읽어오는 시간을 줄임
주기억장치와 캐시기억장치 간의 정보 공유
- 주기억장치에 저장된 데이터의 일부가 블록단위로 캐시기억장치에 복사됨
- CPU가 적중된 데이터들을 워드 단위로 캐시기억장치에서 읽어옴
- 일반적으로 블록의 크기는 1~16 워드 정도
설계 시 고려 사항
- 캐시기억장치의 크기
- 인출방식 (Fetch Algorithm)
- 사상함수 (Mapping Function)
- 교체 알고리즘 (Replacement Algorithm)
- 쓰기 정책 (Write Policy)
- 블록 크기
- 캐시기억장치의 수
캐시기억장치의 크기
- 캐시기억장치의 용량이 크면 주기억장치의 많은 블록을 복사해 저장할 수 있으므로 적중률이 높아짐
- 용량이 커질수록 주소 해독 및 정보 인출을 위한 주변 회로가 더 복잡해지기 때문에 접근시간이 더 길어짐
- 용량이 증가한 만큼의 속도 향상을 가져오지는 못함
- 캐시기억장치는 주기억장치보다는 비용이 고가이므로 용량의 증가는 비용의 증가로 이어짐
- 결과적으로 캐시기억장치의 용량과 주변회로 간의 복잡도 관계를 최적화하여 적중률을 향상시키고 접근시간에 대한 저하를 막는 용량을 결정해야 함
- 캐시기억장치의 크기와 비용 간 조정을 통해 적절한 용량·비용을 결정해야 함
- 연구 결과에 의하면 1k~128k 워드가 최적이라고 알려져 있음
인출방식
- 주기억장치에서 캐시기억장치로 명령이나 데이터 블록을 인출해 오는 방식에 따라서 캐시기억장치의 적중률은 많이 변함
- 요구인출 방식
- Demand Fetch
- CPU가 현재 필요한 정보만을 주기억장치에서 블록 단위로 인출해 오는 방식
- 경우에 따라서 매번 주기억장치에서 인출을 수행하므로 실패율이 높아져서 캐시기억장치의 효과를 얻지 못할 때도 있음
- 선인출 방식
- Prefetch
- CPU가 현재 필요한 정보 외에도 앞으로 필요할 것으로 예측되는 정보를 미리 인출하여 캐시기억장치에 저장하는 방식
- 주기억장치에서 명령이나 데이터를 인출할 때 필요한 정보와 이웃한 위치에 있는 정보들을 함께 인출하여 캐시에 적재하는 방식으로 지역성이 높은 경우에 효과가 높음
블록 크기
- 동시에 인출되는 정보들의 블록이 커지면 한꺼번에 많은 정보를 읽어올 수 있지만 블록 인출시간이 길어지게 됨
- 블록이 커질수록 캐시기억장치에 적재할 수 있는 블록의 수가 감소하기 때문에 블록들이 더 빈번히 교체됨
- 블록이 커질수록 멀리 떨어진 워드들도 같이 읽혀오기 때문에 가까운 미래에 사용될 가능성이 낮음
- 일반적인 블록의 크기는 4~8 워드가 적당
캐시기억장치의 수
- 일반적인 시스템은 오직 하나의 캐시기억장치를 가지고 있었음
- 최근에는 캐시기억장치들이 계층적 구조로 설치되거나 기능별로 분리된 다수의 캐시기억장치를 사용하는 것이 보편화되었음
- 캐시기억장치를 설계할 때에는 몇 계층으로 할 것인지를 결정해야 하며, 통합 형태와 분리 형태 중에서 어떤 형태로 구성할 것인지를 결정해야 함
- 설계 과정에서 사용할 캐시의 수가 결정됨
사상함수
- 사상: 주기억장치와 캐시기억장치 사이에서 정보를 옮기는 것
- 사상의 개념을 이해하려면 주기억장치와 캐시기억장치의 구조를 먼저 이해해야 함
- 워드: 주기억장치에서 하나의 번지에 저장되는 데이터 단위
- 블록: 워드가 여러 개 모인, 캐시기억장치로 인출되는 정보의 그룹
- 만약 주기억장치의 용량이 2ⁿ개의 워드이고 블록이 K개의 워드로 구성된다면, 블록의 수 = 2ⁿ/K
주기억장치와 캐시기억장치의 구조
- 슬롯: 한 블록이 저장되는 장소, 블록은 캐시기억장치 각 슬롯에 저장되는 데이터의 길이가 됨
- 태그: 슬롯에 적재된 블록을 구분해 주는 정보
사상
- 캐시기억장치에서의 인출이 실패하게 되면 캐시기억장치의 일부분은 주기억장치로 옮기고 주기억장치에서 필요한 정보를 캐시기억장치에 기억시키는 정보 교환이 이루어짐
- 주기억장치와 캐시기억장치에서 정보를 옮기는 것을 사상(Mapping)이라고 함
직접 사상
- Direct Mapping
- 주기억장치의 블록이 캐시기억장치의 특정 라인에만 적재될 수 있기 때문에 캐시의 적중 여부는 그 블록이 적재될 수 있는 라인만 검사
- 사상 과정이 간단하고 작은 용량의 RAM을 캐시기억장치로 사용하기 때문에 비용이 저렴한 장점
- 프로그램이 동일한 라인에 적재되는 두 블록을 반복적으로 접근하는 경우 계속 캐시 실패가 발생해서 실패율이 현격하게 높아질 수 있음
- 직접 사상에서 주기억장치의 주소 형식: 태그 필드(t) / 슬롯 필드(s) / 워드 필드(w)
- 태그 필드는 태그 번호를 나타냄
- 슬롯 번호는 캐시기억장치에서 총 슬롯의 수 m = 2ˢ개 중에서 하나를 지정하는 번호
- 워 필드는 각 블록 내의 2ʷ개 워드들 중의 하나를 선택
- CPU가 요구하는 주기억장치의 주소 중 태그 필드와 슬롯 필드에 해당되는 캐시영역에서의 슬롯 필드와 태그 필드를 비교하여 동일하면 적중함
- 동일 슬롯 번호를 가지고 있지만 태그가 다른 두 개 이상의 워드가 반복하여 접근되면 적중률이 상당히 떨어지는 단점이 발생함
- 주기억장치의 블록 j가 적재될 수 있는 캐시 슬롯의 번호 i는 모듈로(modulo) 연산에 의해서 결정
- i = j mod m
- m은 캐시 슬롯의 전체 수
- 주기억장치의 각 블록을 한 개의 캐시 슬롯으로만 사상함
장점 | 단점 |
간단함 | 어떤 블록이 들어갈 수 있는 캐시 위치가 고정되어 있다는 것 |
저렴한 비용 | 만약 어느 프로그램이 같은 슬롯에 사상되는 두 개의 블록으로부터 워드들을 읽어와야 한다면, 그 블록들은 캐시에서 반복적으로 교체(swap)되고 결과적으로 적중률이 낮아짐 |
연관 사상
- Associative Mapping
- 직접 사상의 단점을 보완한 것으로 주기억장치의 블록을 캐시기억장치의 어느 라인(슬롯)에든 적재할 수 있음
- 가장 빠르고 융통성 있는 구조
- 적중 검사가 모든 라인에 대해 이루어지므로 검사 시간이 길어짐
- 모든 캐시 슬롯의 태그 번호들을 고속으로 검색하기 위해서는 복잡한 회로가 필요
- 태그의 필드가 주기억장치의 블록 번호를 나타내고 캐시기억장치의 정해진 슬롯 번호에 저장되는 것이 아니라 임의적으로 저장될 수 있음
- 슬롯 번호를 위한 필드는 존재하지 않으며, 워드 필드는 블록 내에 존재하는 워드를 선택하는 데 사용
- 연관 사상에서 주기억장치의 주소 형식: 태그 필드(t) / 워드 필드(w)
- 만약 블록 내에 하나의 워드만 존재하면 워드 필드의 모든 비트는 0이 됨
- 그 이상의 워드 번호가 존재할 필요가 없기 때문
- 워드 필드만으로 주기억장치의 블록을 구분
- 그 블록이 캐시에 있는지 확인하기 위해 캐시 제어 논리는 태그가 일치하는지 모든 슬롯들과 동시에 비교해야 함
- 주소에는 슬롯 번호에 대응되는 필드가 없으며, 따라서 캐시의 슬롯 번호가 주소 형식에 의하여 결정되지 않음
장점 | 단점 |
연관 사상에서는 새로운 블록이 캐시로 읽혀질 때 블록을 교체하는데 있어서 융통성이 있음 | 캐시 슬롯들의 태그들을 병렬로 검사하기 위한 복잡한 회로(연관 메모리)가 필요 |
적중률을 최대화할 수 있도록 설계됨 | 높은 가격 |
- 연관 사상에서는 주기억장치의 주소 태그와 워드 데이터가 캐시기억장치에 저장되므로 캐시 워드의 크기는 주기억장치 주소 태그 t와 워드당 데이터 비트 수의 합이 됨
- CPU에서 나온 주기억장치의 주소는 레지스터에서 태그 부분만 비교하여 캐시가 적중이면 해당 주소 번지의 데이터를 읽어 CPU로 전송
- 태그 필드와 워드 필드로 구성된 캐시기억장치와 주기억장치의 주소, 태그 필드와 워드 필드가 저장되어 있는 인수 레지스터를 통해 태그 부분만을 비교해서 원하는 번지의 데이터를 찾음
- 캐시기억장치가 꽉 차 있는 경우 현재 필요 없는 부분을 캐시기억장치에서 제거하고 방금 읽어 들인 데이터와 주소를 캐시기억장치에 저장하거나 라운드 로빈(Round-robin) 방식을 이용함
집합 연관 사상
- Set-associative Mapping
- 직접 사상의 단점을 보완한 방식으로 집합 번호는 같고 태그가 다른 두 개 이상의 워드를 저장할 수 있는 구조를 가짐
- 주기억장치 블록 그룹이 하나의 캐시 집합을 공유하며, 그 집합에는 두 개 이상의 슬롯을 적재할 수 있음
- 직접 사상과 연관 사상 방식을 조합한 방식
- 캐시는 v개의 집합들로 나누어지며, 각 집합들은 k개의 슬롯들로 구성 캐시 슬롯의 총 수 m과 주기억장치 블록이 적재될 수 있는 캐시 집합 번호 i를 구하면 m = v × k, i = j mod v
- 집합 연관 사상에서 주기억장치의 주소 형식: 태그 필드(t) / 집합 필드(d) / 워드 필드(w)
- 태그 필드와 집합 필드를 합한 (t+d) 비트가 주기억장치의 2⁽ᵗ⁺ᵈ⁾ 블록들 중의 하나를 지정하게 됨
교체 알고리즘
- 캐시기억장치의 어느 슬롯 데이터를 제거하는가를 결정하는 방식
- 캐시기억장치의 모든 슬롯이 데이터로 채워져 있는 상태에서 실패일 때, 캐시기억장치의 특정 슬롯에서 데이터를 제거하고 주기억장치에서 새로운 데이터 블록을 가져와야 함
- 직접 사상 방식에서는 주기억장치의 데이터가 캐시기억장치의 동일 슬롯에 저장되기 때문에 교체 알고리즘을 사용할 필요 없음
- 연관 사상 및 집합 연관 사상 방식의 경우 교체 알고리즘이 필요함
최소 최근 사용 알고리즘
- LRU, Least Recently Used
- 현재까지 알려진 교체 알고리즘 중에서 가장 효과적인 교체 알고리즘으로 집합 연관 사상에서 사용되는 방식
- CPU로의 인출이 없는 가장 오래 저장되어 있던 블록을 교체하는 방식
최소 사용 빈도 알고리즘
- LFU, Least Frequantly Used
- 적재된 블록들 중에서 인출 횟수가 가장 적은 블록을 교체하는 방식
- 최소 최근 사용 알고리즘이 시간적으로 오랫동안 사용되지 않은 블록을 교체(사용된 횟수가 적은 블록을 교체하는 방식)
선입력 선출력 알고리즘
- FIFO, First In First Out
- 가장 먼저 적재된 블록을 우선적으로 캐시기억장치에서 삭제하는 교체 방식
- 캐시기억장치에 적재된 가장 오래된 블록이 삭제되고 새로운 블록이 적재
- 구현이 용이, 시간적으로 오래된 블록을 교체하여 효율성을 보장하지 못함
랜덤
- 캐시기억장치에서 임의의 블록을 선택하여 삭제하고 새로운 블록으로 교체하는 방식
- 효율성을 보장하기가 어려움
캐시 교체 알고리즘
- 캐시에서의 교체 알고리즘은 주로 LRU 방식을 많이 사용, 구현을 위해 각각의 라인에 추가적인 비트를 두고 각 라인에 대한 데이터 참조 시 그 발생하는 시점을 기록함으로써 이 방식을 실현
- 일반적으로 경험법칙에 따르면 캐시의 용량이 두 배 증가하면 적중률은 30% 정도 좋아지는 것으로 알려져 있음
쓰기 정책
- CPU가 프로그램을 실행하는 동안 연산 결과를 캐시기억장치에 기록하는 경우가 발생함
- 이때 캐시기억장치와 주기억장치에 저장된 데이터가 상이하게 존재하므로 주기억장치의 데이터를 갱신하는 절차가 필요함
즉시 쓰기 방식
- Write-through
- CPU의 연산 결과가 기억장치에 저장하는 쓰기 동작은 캐시기억장치뿐만 아니라 주기억장치에서도 동시에 발생
- 주기억장치의 내용들이 항상 유효하도록 보장
- 데이터의 일관성을 쉽게 보장할 수 있음
- 매번 쓰기 동작이 발생할 때마다 캐시기억장치와 주기억장치 간 접근이 빈번하게 일어나고 쓰기 시간이 길어지게 됨
- 기억장치 사용량이 많아져서 병목 현상을 야기할 수 있음
- 많은 트래픽으로 쓰기가 느려짐
나중 쓰기 방식
- Write-back
- 새롭게 생성된 CPU의 데이터를 캐시기억장치에만 기록하고 주기억장치는 나중에 기록하는 방식
- 데이터의 갱신이 캐시에서만 일어남
- 1비트의 태그를 이용하여 갱신된 캐시기억장치의 블록을 표시, 새로운 블록에 의해서 캐시기억장치에서 삭제되는 교체가 이뤄지기 전에 주기억장치로 복사
- 갱신 동작이 일어날 때, 그 라인의 더티 비트 혹은 사용 비트가 세트 됨
- 나중에 그 블록이 교체될 때, 더티 비트가 세트 된 경우에만 주기억장치에 갱신된 후에 교체됨
- 두 기억장치의 데이터가 서로 일치하지 않아 주기억장치가 무효상태로 존재할 경우에는 주기억장치의 접근은 금지되고 캐시기억장치에만 접근됨
- 주기억장치에 대한 쓰기 동작을 최소화시켜 줌
- 즉시 쓰기 방식과는 달리 주기억장치에 기록하는 동작을 최소화할 수 있음
- 주기억장치의 일부분이 무효화 상태에 있어서 결과적으로 회로가 복잡해짐
On-Chip / Off-Chip
- 온-칩 캐시기억장치
- 집적회로의 기술 발달로 캐시기억장치를 CPU의 내부에 포함시킨 것
- 내부 동작으로만 CPU에 접근하여 CPU의 외부 활동을 줄이고 실행 시간을 가속시켜 전체 시스템의 성능을 높여줌
- 오프-칩 캐시기억장치
- 일번적인 형태로 캐시기억장치가 CPU 외부에 위치
- 외부 버스를 사용해서 CPU에 접근
캐시기억장치의 구조
단일 프로세서
계층적 캐시기억장치
- Hierarchical Cache
- 온-칩 캐시를 1차 캐시(L1)로 사용하고 칩 외부에 더 큰 용량의 오프-칩 캐시를 2차 캐시(L2)로 설치하는 방식
- L1의 크기는 제한될 수 밖에 없지만 L2의 크기는 상대적으로 더 많은 용량을 가질 수 있음
- L2는 주기억장치의 일부 내용을 저장, L1은 L2 내용의 일부를 저장함
- 따라서 L2는 L1의 모든 정보를 포함, 이러한 관계를 슈퍼-세트(Super-set)라고 함
- 계층적 캐시기억장치를 조사할 때는 먼저 L1을 검사, L1에 원하는 정보가 존재하지 않으면 L2를 검사, L2에도 존재하지 않으면 주기억장치를 조사
- L1의 속도는 빠르지만 용량이 작기 때문에 적중률이 L2에 비해 낮음
- 계층적 캐시의 구조에서 평균 기억장치 접근 시간 = H₁ × T₁ + (H₂ - H₁) × T₂ + (1 - H₂) × Tₘ
- H₁: L1 캐시 적중률
- T₁: L1 캐시기억장치 접근 시간
- H₂: L2 캐시 적중률
- T₂: L2 캐시기억장치 접근 시간
- Tₘ: 주기억장치 접근 시간
캐시기억장치의 통합과 분리
- 통합 캐시 형태
- 초창기 온-칩 캐시기억장치는 데이터와 명령어를 모두 저장하는 통합 캐시 형태
- 명령어와 데이터 간의 균형을 자동적으로 유지해주기 때문에 분리 캐시보다 적중률이 더 높은 장점이 있음
- 분리 캐시 형태
- 명령어만 저장하는 명령어 캐시와 데이터만 저장하는 데이터 캐시로 분리하여 두 개의 온-칩 캐시를 두는 형태
- 여러 개의 명령어들이 동시에 실행되는 고성능 프로세서에서는 이러한 경향이 뚜렷함
- 장점은 명령어 인출과 명령어 실행 간 캐시의 충돌이 발생하지 않는다는 것
멀티 프로세서
- 멀티 프로세서 시스템: 여러 개의 CPU를 장착하여 처리 성능을 향상시킨 시스템
- 멀티 프로세서 시스템에서는 주기억장치와 각 CPU 내의 캐시기억장치들 사이에서 데이터의 불일치 현상이 발생 가능
- 데이터의 불일치 현상은 프로그램이 올바르게 동작하지 않는 원인이 됨
캐시기억장치의 데이터 일관성 유지 방법
- 공유 캐시기억장치를 사용하는 방법
- 가장 간단한 방법으로 다수의 프로세서가 하나의 캐시기억장치만을 공유
- 캐시의 데이터들이 항상 일관성 있게 유지하는 장점이 있으나 다중 프로세서가 동시에 캐시에 접근하면 프로세서들 간의 충돌이 발생
- 온-칩 캐시기억장치의 경우 CPU의 외부 활동을 줄여 실행 시간을 가속시키고 전체 시스템 성능을 높이는 원칙에 위배되는 단점
- 공유 변수는 캐시기억장치에 저장하지 않는 방법
- 수정 가능한 데이터는 캐시기억장치에 저장하지 않는 방법
- 수정될 데이터는 캐시에 저장하지 않고 주기억장치에 바로 저장
- 캐시기억장치에 저장 가능한지 캐시기억장치에 저장 불가능한지를 사용자가 선택하여 선언해 주어야 하는 단점
- 버스 감시 시스템을 사용하는 방법
- 감시 기능을 가진 장비를 시스템 버스상에 추가로 설치하는 방법
- 한 캐시가 데이터를 수정하면 그 정보를 다른 캐시와 주기억장치에 전달
- 시스템 버스에 통신량이 증가하는 단점