캐시 메모리
CPU와 주기억장치의 속도차이를 보완하기 위하여 그 사이에 설치하는 반도체 기억장치.
용어 정리
CPU가 원하는 데이터가 이미 캐시에 적재되어 있는 상태를 캐시 적중(cache hit)이라고 한다.
반대로, CPU가 원하는 데이터가 캐시에 없는 상태를 캐시 미스(cahce miss)라고 한다.
기억장체 엑세스들 중에서 캐시에 적중되는 비율을 나타내는 캐시 적중률(cache hit ratio) H는 다음과 같다.
$$ H = \frac{캐시에 적중되는 횟수}{전체 기억장치 액세스 횟수} $$
캐시 적중률은 CPU가 원하는 데이터가 캐시에 있을 확률이라고 말할 수 있다.
따라서 캐시에 없을 확률인 미스율은 1-H가 된다.
캐시아 사용되는 시스템에서 평균 기억장치 액세스 시간 Ta는 다음 식을 이용하여 계산할 수 있다.
$$ T_a = H * T_c + (1-H) * T_m $$
Tc는 캐시 액세스 시간이고, Tm은 주기억장치 액세스 시간을 나타낸다.
그런데 주기억장치로부터 인출된 데이터는 일단 캐시에 적재된 다음에 다시 인출되어 CPU로 전송되기 때문에, 캐시 인출 시간을 별도로 고려한다면 위 식에서 두 번째 항이 (1-H) x (Tm + Tc)로 표현되어야 한다.
그러나 Tm이 Tc에 비하여 상대적으로 큰 값이므로, Tm에 그 시간도 모두 포함된 것으로 간주하여 일반적으로 위 식처럼 표현한다.
기억장치 법칙
- 엑세스 속도가 높아질수록 비트당 가격도 높아진다.
- 용량이 커질수록, 비트당 가격은 낮아진다.
- 용량이 커질수록, 엑세스 속도는 낮아진다.
CPU내부에 레지스터, L1캐시, L2캐시, L3캐시가 존재한다.
우리가 아는 RAM이 메인 메모리이다.
우리가 아는 삼성SSD, HDD를 하드 디스크라고 한다.
캐시라는 용어의 개념이 혼동될 수 있다.
레지스터는 CPU의 캐시이다. (CPU는 L1캐시의 내용을 임시저장하기 위해서 레지스터를 캐시로 사용한다.)
L1캐시는 레지스터의 캐시이다.
...
메인 메모리는 L3의 캐시이다.
특정 계층에서 데이터를 반복적으로 사용하기 위해 임시로 저장해 두는 장소를 캐시라고 할 수 있다.
위와 같은 계층 구조를 사용하는 이유는 `지역성의 원리`(principle of locality) 때문이다.
CPU가 엑세스 하는 데이터의 위치는 한정적이다. CPU는 계속 비슷한 곳에 있는 데이터를 요청하게 되고 이를 빠른 저장 장치에 옮겨둔다면 데이터를 매우 효율적으로 읽을 수 있을 것이다.
이를 지역성의 원리라고 하고, 캐시라는 개념이 생기게 된 이유이다.
지역성은 그 특성에 따라 3가지로 분류될 수 있다.
- 시간적 지역성(temporal locality) : 최근에 엑세스된 프로그램 코드나 데이터가 가까운 미래에 다시 엑세스될 가능성이 높아지는 특성이다. 예를 들어 반복 루프 프로그램이나 서브루틴들은 반복적으로 호출되며, 공통 변수들도 빈번히 엑세스 된다.
- 공간적 지역성(spatial locality) : 기억장치 내에 서로 인접하여 저장되어 있는 데이터들이 연속적으로 엑세스될 가능성이 높아지는 특성을 말한다. 예를 들어, 표나 배열 데이터들이 저장되어 있는 기억장치 영역은 그들에 대한 연산이 수행되는 동안에 집중적으로 엑세스된다.
- 순차적 지역성(sequential locality) : 분기가 발생하지 않는 한, 명령어들은 기억장치에 저장된 순서대로 인출되어 실행된다. 일반적인 프로그램에서는 순차적 실행과 비순차적 실행의 비율이 대략 5:1 정도인 것으로 알려져 있다.
프로그램이 수행되는 동안에 실제로 이러한 지역성들 때문에 캐시에 적재되어 있는 정보들이 그 후에 CPU에 의해서 다시 사용되는 경우가 많다.
캐시의 사용 목적은 평균 기억장치 엑세스 시간을 단축하는 것이다.
따라서 캐시의 적중률을 최대한 높여야 한다.
그러나 지역성은 프로그램의 특성에 따라 달라지기 때문에 한계가 있다. 따라서 캐시의 적중률을 높이는 것 외에도 캐시 설계 과정에서 여러 가지 사항들을 고려해야 한다.
캐시 설계의 공통적인 목표
- 캐시 적중률의 극대화 : CPU가 원하는 정보가 캐시에 있을 확률을 높여야 한다.
- 캐시 액세스 시간의 최소화 : 캐시 적중 시에 캐시로부터 CPU로 정보를 인출해오는데 걸리는 시간을 가능한 한 단축시켜야 한다.
- 캐시 실패에 따른 지연시간의 최소화 : 캐시 미스가 발생한 경우에 주기억장치로부터 캐시로 정보를 읽어오는데 걸리는 시간을 최소화시켜야한다.
- 주기억장치와 캐시간의 데이터 일관성 유지 및 그에 따른 오버헤드의 최소화 : CPU가 캐시의 내용을 변경하였을 때, 주기억장치에 그 내용을 갱신하는 절차 때문에 발생하는 지연시간을 최소화시켜야 한다.
캐시 설계에 고려되는 사항들
캐시 용량
캐시의 용량이 커질수록 적중률이 높아진다.
그러나 비용도 같이 비율로 상승하고, 주소 해독 및 정보 인출을 위한 주변회로가 복잡해지기 때문에,
캐시의 용량은 적절히 결정해야한다.
인출 방식
주기억장치로부터 정보를 인출해오는 방식도 캐시 적중률에 많은 영향을 준다.
- 요구인출(demand fetch) : 필요한 정보만 인출해온다.
- 선인출(prefetch) : 필요한 정보 외에 앞으로 필요할 것으로 에측되는 정보도 미리 인출해오는 방식이다.
즉, CPU가 원하는 정보를 인출할 때 그 정보와 근접한 위치에 있는 정보들을 함께 인출하여 캐시에 적재한다.
이 방식을 사용하는 이유는 인출되는 정보와 인접한 것들이 공간 지역성에 의해 연속적으로 액세스될 가능성이 많기 때문이다.
이와 같이 주기적장치를 액세스할 때 함께 인출되는 정보들의 그룹을 블록(block)이라고 한다.
블록이 커지면 더 많은 정보들을 한 번에 읽어올 수 있지만, 인출 시간이 그만큼 더 길어진다.
따라서 선인출 방식은 지역성이 높은 경우에는 효과가 있지만, 인출 시간이 그만큼 더 길어진다.
캐시메모리의 구성 및 매핑 방식
'CS > Computer Architecture' 카테고리의 다른 글
[컴퓨터 구조] 다중 프로세서 시스템 #1 (0) | 2022.01.21 |
---|---|
[컴퓨터 구조] 인터럽트와 DMA를 이용한 I/O (0) | 2022.01.13 |
[컴퓨터 구조] 기억장치 모듈 설계 (0) | 2022.01.05 |
[컴퓨터 구조] RAM & ROM (0) | 2021.12.30 |
[컴퓨터 구조] 기억 장치 기본 (0) | 2021.12.29 |