<본 카테고리는 "혼자 공부하는 컴퓨터구조 + 운영체제" 책과 강의를 기반으로 작성하였습니다>
메모리 계층 구조와 캐시 메모리
저장 장치 계층 구조
메모리 계층 구조(Memory Hierarchy)는 시스템 성능 최적화를 위해 다양한 유형의 메모리 저장소를 계층적으로 구성하는 방식을 의미한다. 이 계층 구조는 데이터의 속도, 용량, 비용 등의 요소를 고려하여, CPU로부터 얼마나 가까운 위치에 있는지를 기준으로 구성된다.
- CPU와 가까운 저장 장치는 빠르고, 멀리 있는 장치는 느리다
- 속도가 빠른 저장 장치는 저장 용량이 적고, 가격이 비싸다
계층 구조의 상위에 위치하는 메모리는 하위 계층의 메모리보다 빠르지만, 용량은 적고 가격이 비싸다. 반대로 하위 계층의 메모리는 상위 계층의 메모리보다 느리지만, 용량이 크고 가격이 싸다. 컴퓨터 시스템은 이러한 계층 구조 내의 모든 메모리를 활용하여 최적의 성능을 추구한다.
캐시 메모리
캐시 메모리(Cache Memory)는 CPU와 메인 메모리 사이에 위치하는 빠른 SRAM 기반의 저장장치로, 용량은 레지스터보다 크면서도 메모리보다 더 빠른 속도를 가지고 있다. 메모리 계층 구조에서 캐시 메모리는 CPU와 주 메모리 사이의 속도 차이를 해결하기 위한 중요한 요소다. CPU는 매우 빠른 속도로 작동하는 반면, RAM은 이에 비해 상대적으로 느리기 때문에, CPU가 데이터를 처리하는 동안 주 메모리로부터 데이터를 가져오는데 상당한 시간이 소요된다. 이런 시간 지연을 최소화하기 위해, 빠른 접근 시간을 가진 캐시 메모리가 CPU와 RAM 사이에 배치되어, CPU의 데이터 접근 속도를 크게 향상한다.
캐시 메모리는 일반적으로 코어와의 거리를 기준으로 나누어져 있다. CPU에 가장 가까운 캐시 메모리를 L1 캐시라 부르고, 그다음 가까운 캐시를 L2 캐시, 그리고 더 멀리 있는 캐시를 L3 캐시라고 부른다. 이들 각각은 코어와의 거리에 따라 속도, 용량, 가격이 다르며, 일반적으로 L1, L2 캐시는 코어 내부에, L3 캐시는 코어 외부에 위치한다.
- 이때 코어와 가장 가까운 L1 캐시는 조금이라도 접근 속도를 빠르게 만들기 위해 명령어만을 저장하는 L1l(L1 Instruction) 캐시와 데이터만을 저장하는 L1D(L1 Data) 캐시로 분리하는 분리형 캐시(Split Cache)도 있다.
멀티 코어 프로세서의 경우, 각 코어는 고유한 L1, L2 캐시를 가지며, L3 캐시는 모든 코어가 공유하는 형태를 띠게 된다. 이렇게 구성된 캐시 시스템은 CPU가 데이터를 빠르게 가져올 수 있도록 돕고, 전체적인 시스템 성능을 향상한다.
따라서 저장 장치 계층 구조에 캐시 메모리를 추가하면 다음과 같은 구조를 띄게 된다.
참조 지역성 원리
캐시 메모리는 한정된 용량 때문에 모든 메모리 내용을 저장하지 못하고, 일부만 복사하여 저장한다. 따라서 CPU가 주로 사용할 것으로 예상되는 일부 데이터만을 다루는데, 자주 사용될 것으로 예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에 활용되는 것을 캐시 히트(Cache Hit)라고 하며, 반대의 경우는 캐시 미스(Cache Miss)라고 한다. 참고로 캐시가 히트되는 비율을 캐시 적중률(Cache Hit Ratio)라고 하며, 다음과 같이 계산된다
캐시 적중률 = 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
캐시 메모리의 이점을 제대로 활용하기 위해선 이러한 캐시 적중률을 높여야 한다. 이를 위해 캐시 메모리는 참조 지역성의 원리(principle of locality)라는 한 가지 원칙에 따라 메모리로부터 가져올 데이터를 결정한다. 이는 CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리다. 이는 시간 지역성과 공간 지역성의 두 가지 형태로 나타낸다.
먼저 시간 지역성(Temporal locality)은 최근에 접근했던 메모리 공간에 다시 접근하려는 경향을 의미한다. 즉, 한 번 참조된 데이터는 근시에 다시 참조될 가능성이 높다는 것을 의미한다. 예를 들어, 루프에서 반복적으로 사용되는 변수나 배열, 함수 등이 이 원리에 해당한다. 이 원리에 따라, 한 번 참조된 데이터는 캐시에 유지되어야 한다.
// 시간 지역성 예시
// 선언된 변수 num은 자주 참조되어 사용하고 있음
#include <iostream>
using namespace std;
int main()
{
int num = 2;
for(int i = 1; i <= 9; ++i)
cout << num << " x " << i << " = " << num * i << "\n";
return 0;
}
공간 지역성(Spatial Locality)은 접근한 메모리 공간 근처를 접근하려는 경향을 의미한다. 즉, 데이터가 한 번 참조될 때, 그 데이터의 주변 데이터가 곧 참조될 가능성이 높다는 것을 의미한다. 이는 CPU가 실행하려는 프로그램은 보통 관련 데이터들끼리 한 곳에 모이는 것에서 기인한다. 예를 들어, 연속된 메모리 위치에 저장된 배열의 요소에 순차적으로 접근하는 경우, 한 번 참조된 배열 요소의 주변 요소가 다음에 참조될 가능성이 높다. 이 원리에 따라, 한 번 참조된 데이터의 주변 데이터도 캐시로 로드되어야 하며, 이를 통해 이웃하는 데이터 참조에 대한 빠른 접근을 가능하게 한다.
요약
캐시 메모리
1. 정의: CPU와 RAM 사이에 위치하여 데이터 접근 시간을 줄이는 임시 저장 공간
2. 특징
a. 빠른 접근 속도, 작은 용량, 고비용.
b. CPU가 가장 먼저 접근하는 메모리
c. 캐시 히트와 캐시 미스를 이용한 캐시 적중률을 통해 성능 평가
3. 종류
- L1, L2, L3 캐시
4. 원리
- 참조 지역성 원리: 공간 지역성 + 시간 지역성
'CS > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] 보조기억장치(하드, 플래시 메모리) (0) | 2023.07.03 |
---|---|
[컴퓨터구조] 메모리 (0) | 2023.06.22 |
[컴퓨터구조] CPU 설계 기법 (2) (0) | 2023.06.13 |
[컴퓨터구조] CPU 설계 기법 (1) (0) | 2023.06.12 |
[컴퓨터구조] CPU의 작동 원리 (2) (0) | 2023.06.11 |