최종 수정 : 25.1.8
캐시기억장치
주기억장치는 CPU의 처리속도에 비해서 현저하게 드리다. 두 장치 사이의 속도차이를 줄이기 위한 방법으로 CPU와 주기억장치 사이에 고속의 기억장치를 설치하고 있는데 이 장치가 바로 캐시기억장치(cache memory)이다. 용량은 주기억장치에 비해 작으며, 주기억장치를 모두 캐시로 대체하면 시스템의 처리속도는 빨라지지만 가격이 비싸다.
1. 동작원리
CPU가 기억장치에서 데이터를 읽으려고 할 때 먼저 그 데이터가 캐시에 있는지 조사하기 위해서 캐시에 접근한다. 캐시에서 발견되면 데이터를 읽어서 바로 CPU로 전달되어 시간이 단추된다. 그러나 발견하지 못한 경우에는 데이터를 주기억장치에서 인출해야 한다. 주기억장치로 접근하는 경우는 시간이 많이 걸린다. 프로그램 수행이 진행되는 동안에 프로그램, 데이터는 CPU가 한 번 이상 액세스 하였던 많은 부분들이 캐시에 복사가 되어 있게 된다. 일단 캐시에 적재되어 있는 프로그램 코드나 데이터가 CPU에 의해 다시 사용될 때는 캐시에서 바로 읽어올 수 있다. CPU가 원하는 데이터가 이미 캐시에 있는 상태를 캐시 적중(cache hit)이라고 한다. CPU가 원하는 데이터가 캐시에 없는 상태를 캐시 미스(cache miss)라고 한다.
캐시 적중률은 원하는 데이터가 캐시에 있을 확률이다. 이는 프로그램과 데이터의 지역성(locality)에 크게 의존하는데, 최근에 액세스된 정보를 다시 액세스하는 시간적 지역성(temporal locality)과 기억장치 내에 서로 인접하여 저장되어 있는 정보들을 연속적으로 액세스하는 공간적 지역성(spatial locality), 분기(branch)가 일어나지 않는 한, 명령어는 기억장치에서 저장된 순서대로 인출되는 순차적 지역성(sequential licality)이 있다.
주기억장치에서 캐시로 정보를 인출해 오는 방식에는 요구인출(demand fetch) 방식과 선인출(prefetch) 방식이 있다. 요구인출 방식은 필요한 정보만 인출하는 방식이고, 선인출 방식은 필요한 정보만 인출하는 것이 아니라 필요할 것으로 예측되는 정보도 미리 인출하는 방식이다.
2. 사상(mapping) 방법
캐시기억체제의 기본적인 조건은 캐시에서 워드를 검색하여 찾는 시간이 빨라야 한다는 것이다. 주기억장치에서 캐시로 정보를 전송하는 것을 사상이라고 한다.
1) 직접사상(direct mapping)
15비트 주소필드는 6비트 태그 필드와 9비트 인덱스 필드로 구성되어 있다. 인덱스 필드 9비트가 캐시 메모리로 접근된다.
CPU가 메모리의 참조를 요청할 때 인덱스 필드는 캐시에 접근하는 주소이고 CPU번지의 태그 필드와 캐시의 태그 필드가 비교되어 일치하면 히드(hit)이며, 데이터를 찾게 되고, 그렇지 않으면 미스(miss)이다. 주기억장치에서 다시 읽어서 다시 캐시에 저장한다.
2) 연관사상(associative mapping)
가장 빠르고 융통성 있는 캐시 구조로서 기억장치 워드의 번지와 데이터를 함께 저장한다. 이는 주기억장치의 어떤 단어도 캐시의 임의의 위치에 저장할 수 있다. 만일 일치하는 주소를 찾지 못하면 주기억장치에서 찾아와서 캐시에 저장한다. 만약 캐시가 가득 차 있으면 라운드 로빈(round-robin) 방식으로 번지-데이터 쌍을 교체한다.
3) 집합연관사상(set associative mapping) 방식
CPU가 기억장치 참조를 요청하면 CPU번지의 태그 필드는 캐시의 두 태그와 비교된다. 같은 인덱스를 가지나 태그가 다른 많은 인덱스를 캐시 안에 저장할 수 있기 때문에 히트율이 증가한다. 이와 같은 반식은 캐시의 각 워드를 같은 인덱스 번지에서 2개 이상의 기억장치에 젖아함으로써 직접사상의 단점을 보완한다.
3. 쓰기정책
캐시의 블록이 변경되었을 때 그 내용을 주기억장치에 갱신하는 시기와 방법을 결정하는 것을 쓰기정책(write policy)이라 한다.
1) 즉시쓰기(write throught) 방식
캐시뿐만 아니라 주기억장치로도 동시에 기록된다. 따라서 주기억장치의 내용들은 항상 유효하다. 단점은 쓰기동작에 걸리는 시간이 길어진다는 것이다.
2) 나중쓰기(write back) 방식
캐시에서 데이터가 변경되어도 주기억장치에는 변경되지 않는다. 나중에 캐시의 내용이 제거될 때 주기억장치에 기록한다. 만약 캐시에 데이터가 변경되면 기억장치에 대한 쓰깆동작의 횟수가 줄어들고, 쓰기 동작이 캐시까지만 이루어지므로 쓰기 시간이 짧아진다.
4. 교체 알고리즘
캐시의 miss가 발생하여 기억장치에서 원하는 워드를 포함한 블록을 캐시로 불러올 때 비어 있는 블록이 없을 경우 교체하기 위한 대상의 캐시 블록을 선택하는 알고리즘이다. 연관사상이나 집합연관사상 방법에서 적용한다.
1) 선입 선출 방식(FIFO ; First In First Out) 알고리즘
캐시 메모리에서 가장 오래 남아 있던 블록을 교체한다. 간단한 방식이지만 특정 상황에서는 블록이 너무 자주 교체되는 단점이 있다.
2) 랜덤(random) 알고리즘
임의로 선택된 블록을 교체하는 방식이다.
3) 최소 최근 사용(LRU ; Least Recently Used) 알고리즘
캐시 내에서 사용되지 않은 채로 가장 오래 있었던 블록을 교체하는 방식이다.
4) 최소 사용 빈도(LFU ; Least Frequently Used)
가장 적게 사용된 블록을 교체하는 방식이다.
5. 성능개선효과
최근에는 캐시가 계층적 구조로 설치되는 것이 보편화되고 있다. 캐시가 CPU 칩 내에 존재하는 L1 캐시와 CPU 외부에 설치된 L2 캐시가 있다. 여기서 L은 레벨(Level)을 표시한다. 특히 L1 캐시를 CPU 칩 안에 존재한다고 해서 온-칩 채시(on-chip cache)라 한다. L1 캐시는 외부버스를 사용할 필요가 없기 때무네 액세스 시간이 짧아서 전체 시스템 향상에 도움이 된다. 보통 용량은 8 ~ 64KB이고 CPU가 가장 빠르게 접근하며 여기서 데이터를 찾지 못하면 L2 캐시 메모리로 넘어간다. L2캐시 메모리 용량은 64 ~ 4MB 정도이며 L1 캐시보다는 느리지만 주기억장치 RAM보다는 빠르다.
참고
독학사 교재
댓글