컴퓨터 구조를 공부하며 중요하지만 자주 까먹는것들을
나의 시선에서 보고 기록하며 까먹을때 다시 보기 위하여
또한 컴퓨터구조 수행평가를 겸사 겸사 하기 위해서
적은 글이므로 공부하기 위해서 찾아 보는것이라면 보지 않는것을 추천한다.
캐시 메모리란 컴퓨터가 작동 하는 과정에서
컴퓨터가 느려지는것을 막으며 컴퓨터의 성능을 향상시키기 위해 사용되는 캐시 전용 메모리이다.
간단하게 "캐시 데이터를 저장하기위한 전용 메모리" 라고 기억하면 떠올리기 편하다.
↑ 1990년대 까지 사용되어 왔던 스틱형 캐시 메모리 ↑
캐시 메모리의 필요성은 캐시메모리가 등장하게된 배경과
직접적으로 연결된다.
예전부터 컴퓨터의 프로세서의 클럭속도는 매우 빨라지는데
그에 반해 메인 메모리의 데이터 제공속도는 그만큼 빨라지지 못하여서
프로세서와 메인 메모리간의 속도차이가 점점 커지고
이는 클럭 속도를 아무리 올려도 전체 시스템 성능이 증가하기 어려워 지는것을 뜻하기 때문에 이를 해결하고자 캐시 메모리가 등장 하게 되었다.
위의 등장배경을 가지고 등장한 캐시 메모리는
CPU가 주기억장치로 부터 데이터를 읽어오는 속도차이를 극복하는데 도움을 주어
프로세서의 성능을 향상시키는 것이다.
캐시 메모리가 없으면 컴퓨터는 간단히 말해서 느려지기 때문에 답답한것을 참지 못하는 한국인인 나로써는 굉장히 중요한 부품이라고 할수있다.
1. 고속 접근 속도
캐시메모리는 고속의 정적 RAM(SRAM)으로 구성되어 있어 매운 빠른 속도로 데이터에 엑세스 할수있고 이로 인해서 메인 메모리 보다 빠른 속도를 낸다.
2. 용량 제한
캐시 메모리는 높은 속도를 위해 고가의 SRAM을 사용하기 때문에
큰 용량을 가지게 되면 비용과 전력 소모가 증가함으로 써 제한된
용량을 가지고 있다는 특징이 있다.
3. 임시 저장소
캐시 메모리는 주로 CPU 가 자주 사용하는 데이터를 저장하는
임시 저장소로 사용된다.
프로그램이 지역성을 가지고 동작하는 특성을 이용하여, CPU가 자주 사용하는 데이터를 개시에 미리 저장함으로써 빠른 엑세스를 가능하게 한다.
캐시 메모리는 다양한 종류와 레벨로 나뉘어진다.
↑ 저장 장치 계층 구조 ↑
저장 장치 계층 구조란 컴퓨터가 사용하는 저장장치들을
'CPU에 얼마나 가까운가' 라는 기준으로 계층적으로 나타낸것이다.
레벨 1캐시(L1 Cashe)
L1 캐시는 CPU 코어에 내장 되어있으며 가장 작고 빠른 캐시 메모리이다.
L1 캐시의 구성으로는 데이터 캐시와 명령 캐시로 나뉘며
데이터 캐시는 프로세서가 읽거나 쓰는 데이터를 임시로 저장하고,
명령 캐시는 프로세서가 실행할 명령을 임시로 저장한다.
L1캐시의 용량은 매우 작으며 주로 몇 KB 에서 몇십 KB 정도로 제한된다
하지만 작은만큼 빠른 속도를 가져 주로 사용되는 데이터와 명령을 빠르게 검색할수있다.
레벨 2캐시(L2 Cashe)
L2 캐시는 주로 CPU코어 간에 위치하며 모든 코어가 공유하는 경우와
각코어에 별도로 위치하는 경우가 있다.
공유하는 L2캐시는 여러 코어간의 데이터 공유를 원할하고 용이하게 한다.
L2 캐시는 주로 데이터 캐시로 사용되며 주로 데이터를 저장하고 검색하는데에 사용된다.
L2 캐시의 용량을 주로 몇십 KB 에서 몇 MB로 제한된다.
L2 캐시의 용량은 L1캐시에 비해 더 많은 데이터를 저장할수 있어 높은 적중률을 유지하여 메인 메모리와의 데이터 주고받음을 줄일 수 있다.
L2 캐시는 L1 캐시보다 많은 용량을 가지는 만큼 L1캐시보다는 느리지만 메인 메모리 보다는 훨씬 빠르게 엑세스 할수 있을 정도의 속도를 지녔다.
레벨 3캐시(L3 Cashe)
L3 캐시는 주로 멀티코어 프로세서에서 여러 CPU 코어간에 공유되는 고속 캐시 메모리이다.
주료 다수의 코어에서 공유되기 때문에 데이터 및 명령의 공유와 효율적인 데이터 엑세스를 제공하는 역할을 한다.
L3 캐시는 주로 데이터 캐시로 사용된다.
일부 프로세서에서는 각 코어에 별도로 할당되는 L3 캐시도 존재한다.
L3 캐시는 최대 몇십 MB에 달하는 큰용량을 지닌다.
큰용량으로 인해 여러 코어간의 데이터 공유와 메모리와의 주고받음을 최적화하는데 큰 기여를 한다.
L1,L2 보다는 느리지만 L3 캐시도 여전히 빠른 엑세스 속도를 지니고 있다.
다수의 코어가 공유되는 만큼 빠른 데이터 공유 및 접근이 가능하게 설계되어있다.
↑ L1, L2, L3 의 위치를 나타낸 사진↑
참조 지역성의 원리란?
CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리이다.
참조 지역성의 원리를 설명하기전 간단하게
캐시 히트 및 캐시 미스에 대해서 알아보고 가겠다.
캐시 메모리는 CPU가 사용할 법한 대상을 예측하여 데이터를 저장한다.
이때 자주 사용될 것으로 예측한 데이터를 저장하였는데
그것이 필요한 데이터라서 캐시 메모리 내에 데이터가 CPU에 활용 된것을 캐시 히트 라고 한다.
그의 반대로 예측한 데이터를 사용하지 못하고 CPU가 직접 데이터를 가져와야 되는 경우를 캐시 미스라고 한다.
↑ 캐시 히트 및 캐시 미스를 나타낸 사진 ↑
다시 원래의 내용으로 돌아오자면
캐시 메모리는 한가지 원칙에 따라 메모리로부터 데이터를 예측해서 가져온다.
그 원칙이 바로 "참조 지역성의 원리" 인것이다.
참조 지역성의 원리에는 두가지의 규칙이 있다.
1.CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경형이 있다.
2.CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.
첫번째 "최근에 접근했던 메모리 공간에 다시 접근하려는 경향" 에 대해서 알아보자
여러분으 '변수'가 무엇인지 알고 있을것이다.
변수에는 값을 저장하고 나면 언제든지 변수에 접근하여 저장된 값을 불러올수 있다.
이는 다르게 말하면 CPU는 변수가 저장된 메모리에 언제든지 참조 할수있는다는것을 말한다.
간단한 코드와 함께 설명해보겠다.
#include <stdio.h>
int main()
{
int i,num =2;
for (i=1;i<=9;i++){
printf("%d X %d = %d\n", num,i,num*i);
}
return 0;
}
위 코드는 2의 곱셉을 출력하는 코드이다.
위 코드에서는 num과 i 이렇게 두개의 변수를 사용했다.
하지만 코드가 실행되는 와중 이 변수들을 여러 번 사용되었다.
이렇게 '최근에 접근했던 메모리 공간에 다시 접근하려는 경향' 을 시간 지역성이라고 한다.
두번째로 "접근한 메모리 공간 근처를 접근하려는 경향" 에 대해서 알아보자
보통의 경우에 CPU가 실행하는 프로그램은 관련되어있는 데이터들 끼리 모여있다.
예를 들면 게임 프로그램 내부에서도
캐릭터 조작 기능,저장 기능,조작 기능의 여러가지 기능이 있겠지만
각각의 기능과 관련된 데이터들 끼리 모여서 저장된다는 것이다.
예를 들면 게임을 실행하였을때
실행한 게임과 관련된 메모리 공간에 접근한뒤
게임 프로그램과 관련된 데이터들이 모여있는 공간 근처를
집중적으로 접근 할것이다.
이와 같이 '접근한 메모리 공간 근처를 접근 하려는 경향'을 공간 지역성이라고 한다.
캐시 메모리는 위 참조 지역성의 원리에 의하여 CPU가 사용할 법한 데이터를 예측하여 저장한다.
이글을 쓰면서 캐시 메모리와 관련된 여러 자료를 찾아보고
관련 서적도 읽어보았는데 캐시 메모리와 관련된 내용은 더 많지만
이해 못한것들도 많고 쉽게 설명할 수 있는 능력이 되지않아 다 다루지 못한것이 아쉽다.
언젠간 다시 한번더 정리하면서 다룰 수 있었으면 좋겠다.