이글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자: 강민철) 의 인프런 강의를 참고하여 정리한 글입니다.
캐시 메모리 (Cache Memory)
캐시 메모리란?
CPU와 메모리 사이에 위치한 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치로, 데이터를 미리 복사해두는 임시 저장공간을 의미한다.
캐시 메모리를 사용하는 이유는?
CPU가 메모리에 접근하는 시간이 CPU 연산 속도보다 압도적으로 느리다. 그래서 접근 시간이 월등히 빠른 캐시 메모리 내에 데이터를 저장하여 접근하게 하고 이를 통해 CPU의 연산 속도와 메모리 접근 속도의 차이를 줄일 수 있다.
즉, CPU가 RAM에 저장된 데이터들을 읽어올 때, 자주 사용되는 데이터들을 캐시 메모리에 올려둠으로써 다음 접근 시, 데이터 접근시간이 줄어들게 되고, CPU를 효율적으로 사용할 수 있게 된다.
참조 지역성의 원리
- 캐시 메모리는 메모리보다 용량이 작다. (이유 : SRAM이 비싸다.)
- 따라서 메모리의 모든 내용을 저장할 수 없다.
- 그래서 CPU가 자주 사용할 법한 내용을 예측하여 저장해야 한다. 이때 참조 지역성의 원리가 필요하다.
- 시간적 지역성 : 최근에 액세스한 메모리 주소나 명령어가 재사용 될 가능성이 높다는 원리이다. 예를 들어, 반복문에서 동일한 변수를 반복적으로 참조하는 경우가 있다. 이러한 경우 CPU는 캐시 메모리에서 해당 변수를 읽어들이기 때문에 실행 속도가 빨라진다.
- 공간적 지역성 : 특정 메모리 주소의 인접한 주소들이 재사용될 가능성이 높다는 원리이다. 예를 들어, 배열을 순차적으로 접근하는 경우가 있다. 이 경우 CPU는 캐시 메모리에서 배열의 첫 번째 원소를 읽어들이고, 그 다음 원소들은 캐시메모리에 이미 존재하므로 프로그램 실행 속도가 빨라진다.
캐시 히트 : 예측이 들어맞을 경우 (CPU가 캐시 메모리에 저장된 값을 활용할 경우)
캐시 미스 : 예측이 틀렸을 경우 (CPU가 메모리에 접근해야 하는 경우)
- Cold miss : 해당 메모리 주소를 처음 불러서 나는 미스
- Conflict miss : 캐시 메모리에 A와 B 데이터를 저장해야 하는데, A와 B가 같은 캐시 메모리 주소에 할당되어 있어서 나는 미스
- Capacity miss : 캐시 메모리의 공간이 부족해서 나는 미스
캐시 적중률 = 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수) → 높을 수록 성능이 높다!
+ 요즘 CPU의 캐시 적중률은 못해도 80% 이상
CPU에서 캐시 메모리 구조
CPU에는 캐시 메모리가 2~3개 정도 사용된다.
L1, L2, L3 캐시 메모리라고 불리며, 속도와 크기에 따라 분류된다. 숫자가 커질수록, 속도는 느려지고 메모리 용량은 커진다. CPU는 L1 → L2 → L3 → DRAM(주기억장치 용 메모리 반도체) 순으로 데이터를 탐색한다.
- L1 : CPU 내부에 존재한다. 용량은 작지만 속도가 매우 빠르다.
- L2 : CPU와 RAM 사이에 존재한다. L1 캐시에 비해 용량이 크지만 속도는 느리다.
- L3 : 보통 메인보드에 존재한다. 용량이 제일 크지만 속도는 더욱 느리다.
+ L1을 조금이라도 더 빠르게 만들기 위해 L1을 명령어 만을 담는 L1, 데이터만을 담는 L1으로 분리하기도 한다.
캐시 메모리 작동 방식
- Direct Mapped Cache
- 블록의 주소를 캐시 메모리의 인덱스로 사용하여 캐시 라인을 선택하는 방식이다.
예를 들어, 인덱스가 2 비트인 Direct Mapped Cache 에서 블록의 주소가 0x1234일 경우, 캐시 라인의 인덱스는 0x1234의 끝 2비트인 0b01이 된다.
(0x1234를 2진수로 변환 = 0b0001 0010 0011 0100 / 0b00은 캐시 메모리 내의 블록 인덱스를 결정하는데 사용한다. 따라서 마지막 2비트는 0b01 이다.) - 구현이 간단하고 속도가 빠르지만, 특정 주소에 대한 캐시 슬롯이 항상 같기 때문에 Conflict Miss 가 발생할 수 있다는 단점이 있다.
- 블록의 주소를 캐시 메모리의 인덱스로 사용하여 캐시 라인을 선택하는 방식이다.
- Fully Associative Cache
- 주 메모리의 블록이 캐시 메모리의 비어있는 어느 슬롯에든 매핑될 수 있다.
- 캐시 메모리에서 원하는 블록을 검색할 때 모든 슬롯을 순차적으로 검색해야 하기 때문에 검색 속도가 느리다.
- Set Associative Cache
- 캐시 메모리를 여러 개의 집합(set)으로 구분하고, 각 집합 안에서는 연관 매핑 방식을 사용한다.
즉, Direct + Fully 방식이다. - 특정 행을 지정하고, 그 행 안의 어떤 열이든 비어있을 때 저장하는 방식이다.
- Direct에 비해 검색 속도는 느리지만 저장이 빠르고, Fully에 비해 저장이 느리지만 검색이 빠르다.
- 캐시 메모리를 여러 개의 집합(set)으로 구분하고, 각 집합 안에서는 연관 매핑 방식을 사용한다.
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
[CS][컴퓨터 구조] CPU의 작동 원리 (0) | 2023.05.15 |
---|---|
[CS][컴퓨터 구조] 컴퓨터의 구성 (0) | 2023.05.14 |