RAM[CacheMemory]
Cache
CPU는 프로그램을 실행하는 과정에서 메모리에 저장된 데이터를 빈번하게 사용합니다.
하지만 CPU가 메모리에 접근하는 시간은 CPU의 연산 속도보다 느립니다.
이를 극복하기 위한 저장장치가 바로 캐시메모리입니다.
캐시 메모리에 대해 알아보기전에 저장 장치 계층 구조에 대해 알아보고 가겠습니다.
저장 장치 계층 구조
[사진]
위로 올라갈수록 속도가 빠른대신 용량이 적고, 가격이 비싸집니다.
반면에 아래로 내려갈수록 속도가 느리지만, 용량이 크고 가격이 저렴합니다.
이처럼 저장 장치 계층 구조는 CPU에 얼마나 가까운가를 기준으로 계층적으로 표현할 수 있습니다.
Cache Memory
[사진] CPU는 프로그램을 실행하는 과정에서 메모리에 빈번히 접근을 해야만 합니다.
하지만, CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 느립니다.
그래서 CPU의 연산 속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해 등장한 저장 장치가 바로 캐시 메모리입니다.
Cache Memory는 CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장장치입니다.
Cache Memory는 메모리에서 CPU가 사용할 일부 데이터를 미리 예측 하여 캐시 메모리에 가지고와서 활용하는 것 입니다.
컴퓨터에는 여러가지의 캐시메모리가 존재합니다.
L1, L2 캐시는 코어마다 고유한 캐시 메모리로 할당이 됩니다.
L3 캐시는 여러 코어가 공유하는 형태로 사용됩니다.
동작과정
CPU가 메모리 내에 데이터가 필요하다고 판단하면 L1에 데이터가 있는지 확인하고 없으면 L2, L3순으로 데이터를 검색합니다.
참고로 L1,L2,L3도 속도,가격,용량 또한 L3,L2,L1순으로 비싸지고, 속도또한 이순으로 빨라집니다.
용량은 L1,L2,L3순입니다.
참조 지역성 원리
캐시 메모리는 메모리에서 CPU가 사용할 법한 대상을 예측하여 저장하는 기억장치입니다.
여기서 예측한 데이터가 실제로 들어맞아 CPU에서 활용될 경우를 캐시 히트라고 합니다.
반대로 예측이 틀려 메모리에서 필요한 데이터를 직접 가져와야 하는 경우를 캐시 미스라고 합니다.
캐시 메모리의 이점을 높이기 위해 한 가지의 원칙을 따르고 있습니다.
이 원칙이 참조 지역성의 원리입니다.
즉, 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리입니다.
1. CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있습니다.
1
2
3
4
5
6
int num = 3;
for(int i = 1; i <= 3; i++>){
System.out.println(i * 3);
}
위의 간단한 코드를 보면 위는 구구단중 3단을 표현하는 코드입니다.
보면 변수는 num과 i입니다.
하지만 이 변수들은 여러 번 사용되고 있는걸 볼 수 있습니다.
이렇게 최근에 접근했던 메모리 공간에 다시 접근하려는 경향을 시간 지역성이라고 합니다.
2. CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있습니다.
CPU가 실행하려는 프로그램은 보통 관련 데이터들끼리 한 군데 모여 있습니다.
예를 들어서 메모리 내에 메모장, 프로세서 프로그램, 게임프로그램이 있다고 가정해보겠습니다. [사진] 이 세 프로그램은 서로 관련 있는 데이터끼리 모여서 저장됩니다.
메모장은 메모장 관련 데이터, 프로세서는 프로세서 관련 데이터, 게임은 게임 관련 데이터들이 모여 저장됩니다.
가령 메모장 프로그램에는 저장 기능, 입력 기능이 있다고 했을 때, 각각의 기능과 관련한 데이터는 모여 저장됩니다.
이렇게 되면 CPU는 메모장 프로그램을 실행할 적에는 메모장 프로그램이 모여 있는 공간 근처를 집중적으로 접근할 것이고, 사용자가 입력 할 적에는 입력 기능이 있는 공간근처를 집중적으로 접근을 할 것입니다.
이렇게 접근한 메모리 공간 근처를 접근하려는 경향을 공간지역성 이라고 합니다.
이렇듯 캐시 메모리는 참조 지역성의 원리에 입각해 CPU가 사용할 법한 데이터를 예측합니다.