본문 바로가기
CS

[CS] 캐시 메모리

by seonggu 2023. 3. 2.

 

CPU는 프로그램을 실행하는 과정에서 메모리에 저장된 데이터를 빈번하게 사용한다.

하지만 CPU가 메모리에 접근하는 시간은 CPU의 연산속도보다 느리다. CPU가 연산을 빨리한다 해도 메모리에 접근하는 시간이 느리면 CPU의 빠른 연산속도는 무의미하다. 이를 위한 장치가 캐시 메모리이다.

 

먼저 저장 장치 계층 구조에 대해서 알아보자.

 

1️⃣ 저장 장치 계층 구조

모든 사용자들은 빠르고 동시에 용량이 큰 저장 장치를 원한다. 하지만 '빠른 저장 장치'와 '용량이 큰 저장 장치'는 양립하기 어렵다. 일반적으로 저장 장치는 아래의 명제를 따른다.

 

1) CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.
2) 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다.

CPU와 가장 가까운 레지스터는 일반적으로 RAM보다 용량은 적지만,  접근 시간이 압도적으로 빠르고 가격이 비싸다.

그리고 USB 메모리 보다 더 가까운 RAM은 접근 시간이 훨씬 빠르지만, 같은 용량이라 할지라도 가격이 더 비싸다.

 

이 말은 낮은 가격대의 대용량 저장 장치를 원한다면 느린 속도는 감수하고, 

빠른 메모리를 원한다면 작은 용량과 비싼 가격은 감수해야 한다. 이렇게 저장 장치들의 장단점이 명확하기에 일반적으로 컴퓨터는 다양한 저장 장치를 사용한다.

 

컴퓨터가 사용하는 저장 장치들은 'CPU에 얼마나 가까운가'를 기준으로 계층적으로 나타낼 수 있다.

이를 저장 장치 계층 구조(Memory hierarchy)라고 한다.

 

✅  저장 장치 계층 구조를 영문으로 나타내면 memory hierarchy, 메모리 계층 구조를 의미한다. 여기서 '메모리'라는 용어는 RAM이 아닌 일반적인 저장 장치를 의미한다. 

 

2️⃣ 캐시 메모리

CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 느리다. 그럼에도 불구하고 CPU는 프로그램을 실행하는 과정에서 메모리에 빈번하게 접근해야만 한다. CPU 연산  속도가 메모리에 접근하는 속도보다 느리기에 앞서 언급했듯 캐시 메모리가 필요하다.

 

캐시 메모리(cache memory)는 CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치이다. 

CPU가 매번 메모리에 왔다 갔다 하는 것은 시간이 오래 걸린다. 하여 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가져와서 활용하자는 것이다.

 

🆙 예를 들어 CPU를 집, 메모리에 접근하는 행위를 물건을 사러 가는 것으로 비유하자.

메모리는 '물건은 많지만 집과는 멀리 떨어져 있어 왕복이 오래 걸리는 대형 마트',

캐시 메모리는 '물건이 많지는 않아도 집과 가까이 있는 편의점'과 같다.

 

위와 같이 되어 있다고 비유하면 캐시 메모리에 CPU가 필요로 하는 데이터가 있다면 필요로 한 데이터로의 접근 시간을 줄일 수 있다.

 

캐시 메모리까지 반영한 저장 장치 계층 구조는 위와 같다.

우리가 사용하는 컴퓨터 내부에는 여러 개의 캐시 메모리가 있다. 그리고 이 캐시 메모리들은 CPU(코어)와 가까운 순서대로 계층을 구성한다. 코어와 가장 가까운 캐시 메모리를 L1(level 1) 캐시, 그다음 가까운 캐시 메모리를 L2(level 2) 캐시, 그다음 가까운 캐시 메모리를 L3(level 3) 캐시라고 부른다.

 

✅ 일반적으로 L1 캐시와 L2 캐시는 코어 내부에, L3 캐시는 코어 외부에 위치해 있다.

캐시 메모리의 용량은 L1, L2, L3 순으로 커지고, 속도는 L3, L2, L1 순으로 빨라진다. 가격은 일반적으로 L3, L2, L1 순으로 비싸진다. CPU가 메모리 내에 데이터가 필요하다고 판단하면 우선 L1 캐시에 해당 데이터가 있는지를 알아보고, 없다면 L2, L3 캐시 순으로 데이터를 검색한다.

분리형 캐시 : 코어와 가장 가까운 L1캐시는 조금이라도

접근 속도를 빠르게 만들기 위해 명령어 만들 저장하는 L1캐시인 L1l 캐시와

데이터만을 저장하는 L1D 캐시로 분리하는 경우도 있다. 이를 분리형 캐시(split cache)라고 한다.

3️⃣ 참조 지역성 원리

캐시 메모리는 메모리보다 용량이 적다. 당연하게도 캐시 메모리는 메모리에 있는 모든 내용을 가져다 저장할 수 없다.

메모리가 보조기억장치의 일부를 복사하여 저장하는 것처럼 캐시 메모리는 메모리의 일부를 복사하여 저장한다.

그렇다면 캐시메모리는 무엇을 저장할까?

 

보조기억장치는 전원이 꺼져도 기억할 대상을 저장하고, 메모리는 실행 중인 대상을 저장한다면 캐시 메모리는 CPU가 사용할 법한 대상을 예측하여서 저장한다. 이때 자주 사용될 것으로 예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에서 활용될 경우를 캐시 히트(cache hit)라고 한다.

 

✅ 캐시가 히트되는 비율을 캐시 적중률(cache hit ratio)라고 하고 다음과 같이 계산한다.

캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)


반대로 자주 사용될 것으로 캐시 메모리에 저장했지만, 예측이 틀려 메모리에서 필요한 데이터를 직접 가져와야 하는 경우를 캐시 미스(cache miss)라고 한다. 캐시 미스가 발생하면 CPU가 필요한 데이터를 직접 가져와야 하기 때문에 캐시 메모리의 이점을 활용할 수 없다. 하여 성능이 떨어지게 된다.

 

우리가 사용하는 컴퓨터의 캐시 적중률은 대략 85~95 이상 된다고 한다. 캐시 메모리의 이점을 제대로 활용하려면 CPU가 사용할 법한 데이터를 제대로 예측해서 캐시 적중률을 높여야 한다.

 

 

✅ 그렇다면 CPU가 사용할 법한 데이터는 어떻게 알 수 있을까?

캐시 메모리는 한 가지 원칙에 따라 메모리로부터 가져올 데이터를 결정한다. 

이것은 참조 지역성의 원리(locality of reference, principle of locality)이다. 참조 지역성의 원리란 CPU가 메모리에 접근할 때 주된 경향을 바탕으로 만들어진 원리이다.

ⓐ CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
ⓑ CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.

 

ⓐ 최근에 접근했던 메모리 공간에 다시 접근하려는 경향?

변수는 변수에 값을 저장하고 나면 언제든 변수에 다시 접근하여 변수에 저장된 값을 사용할 수 있다. 이는 달리 말해 'CPU는 변수가 저장된 메모리 공간을 언제든 다시 참조할 수 있다'라는 것을 의미한다.

그리고 변수에 저장된 값은 일반적으로 한 번만 사용되지 않고 프로그램이 실행되는 동안 여러 번 사용된다. 이는 CPU가 최근에 접근했던 메모리 공간을 여러 번 다시 접근할 수 있다는 것을 말한다.

이렇게 '최근에 접근했던 메모리 공간에 다시 접근하려는 경향'을 시간 지역성(temporal locality)라고 한다.

 

 

ⓑ 접근한 메모리 공간 근처를 접근하려는 경향?

CPU가 실행하려는 프로그램은 보통 관련 데이터들끼리 한데 모여있다.

 

예를 들어 메모리 내에 워드 프로세서 프로그램, 웹 브라우저 프로그램, 게임 프로그램이 있다고 가정할 때,

이 세 프로그램은 서로 관련 있는 데이터끼리 모여서 저장된다. 

워드 프로세서 프로그램은 워드 프로세서 관련 데이터들이 모여 저장

웹 브라우저 프로그램은 웹 브라우저 프로그램 관련 데이터들 저장

게임 프로그램은 게임 관련 데이터들이 모여 저장

 

그리고 하나의 프로그램 내에서도 관련 있는 데이터들은 모여서 저장된다. 

워드 프로세서 프로그램에 자동 저장 기능, 입력 기능, 출력 기능이 있다고 했을 때 각각의 기능과 관련한 데이터는 모여 저장된다.

 

CPU가 워드 프로세서 프로그램을 실행할 적에는 워드 프로세서 프로그램이 모여 잇는 공간 근처를 집중적으로 접근하고, 사용자가 입력할 적에는 입력 기능이 모여 있는 공간 근처를 집중적으로 접근할 것이다.

이렇게 '접근한 메모리 공간 근처를 접근하려는 경향'을 공간 지역성(spatial locality)라고 한다.

 

이렇듯 캐시 메모리는 참조 지역성의 원리에 입각해 CPU가 사용할 법한 데이터를 예측한다.

 

 

참고자료 -

'CS' 카테고리의 다른 글

[CS] 보조기억장치(플래시 메모리편)  (0) 2023.03.09
[CS] 보조기억장치(하드 디스크편)  (2) 2023.03.07
[CS] 메모리의 주소 공간  (0) 2023.02.28
[CS] RAM의 특징과 종류  (0) 2023.02.23
[CS] CISC와 RISC  (0) 2023.02.21