캐시메모리
CPU는 프로그램 실행 중 메모리에 자주 접근해야 한다. 하지만 메모리 접근 속도는 레지스터 접근 속도보다 느리다. 이로 인해 CPU의 연산 속도가 아무리 빠르더라도, 메모리 접근 속도가 성능의 병목으로 작용할 수밖에 없다.
그래서 등장한 저장장치가 바로 캐시 메모리이다.
캐시 메모리(cache memory)는 CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위해 탄생한 저장장치로, CPU와 메모리에 사이에 위치해있고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장장치이다. 메모리가 캐시 메모리보단 용량이 크므로 다 가져올 수는 없다. 그러므로 CPU에서 사용할 법한 정보를 미리 가져와 활용한다.
여러 단계의 캐시 메모리
컴퓨터 내부에는 여러 종류의 캐시 메모리가 있다.
- L1(Level 1) 캐시 메모리
- L2(Level 2) 캐시 메모리
- L3(Level 3) 캐시 메모리
이 중 코어와 가장 가까운 메모리가 L1, 그 다음이 L2, L3 순으로 나타낸다. 일반적적으로 L1, L2는 코어안에 위치하며 L3는 코어 외부에 위치하게 된다.
캐시 메모리의 용량은 L1 < L2 < L3 순이며, 속도는 L3 < L2 < L1 순이다. CPU는 메모리 내에 데이터가 필요하다고 판단하게 되면 우선 L1을 알아보고, 없다면 L2, L3 캐시 메모리 순으로 데이터를 검색하게 된다.
멀티코어 프로세서의 경우 아래 이미지와 같이 L1, L2 캐시 메모리에 경우 코어마다 할당되며, L3 캐시 메모리는 여러 코어가 공유하는 형태로 구현된다,
여기서 또 L1를 분리하여 관리하는 분리형 캐시도 있다. 분리형 캐시의 경우 명령어만을 저장하는 L1캐시인 L1l 캐시와 데이터만을 저장하는 L1캐시인 L1D 캐시로 구분하기도 한다.
캐시 히트와 캐시 미스
캐시 메모리는 CPU가 사용할 법한 것을 저장한다. 캐시 메모리가 예측하여 저장한 데이터가 CPU에 의해 실제로 사용되는 경우를 캐시 히트(cache hit)라고 하며, 반대로 자주 사용될 것으로 예측하여 캐시 메모리에 저장했지만 틀린 예측으로 인해 CPU가 메모리로 부터 필요한 데이터를 직접 가야 와야 하는 경우를 캐시 미스(cache miss)라고 한다.
캐시 히트율 (캐시가 히트되는 비율)
= 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 획수)
참조 지역성의 원리
캐시 메모리의 이점을 제대로 활용하기 위해선 결국 CPU가 사용할 법한 데이터를 예측하는 것이 중요하다. 캐시 메모리는 참조 지역성의 원리라는 원칙에 따라 메모리로부터 가져올 데이터를 결정한다.
- 시간 지역성 : CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
- 공간 지역성 : CPU는 접근한 메모리 공간 근처에 접근하려는 경향이 있다.
시간 지역성을 가장 잘 나타내는 사례는 프로그래밍 언어의 변수이다. 변수에 저장된 값은 여러 번 사용되는 경우가 많다. 그렇기 때문에 CPU는 최근에 접근했던 메모리 공간(변수기 저장된)에 여러 번 다시 접근할 수 있다.
공간 지역성은 프로그램 실행 시, 특정 메모리 위치를 접근하면 그 근처의 메모리 위치를 접근할 가능성이 높다는 특성을 의미한다. 그림에서 메모리에 적재된 워드 프로세서, 웹 브라우저, 게임은 각각의 기능이 근처에 배치되어 있다.
예를 들어, CPU가 워드 프로세서의 "자동 저장" 기능을 실행하면, 이후 "입력 기능"이나 "출력 기능"을 바로 사용할 가능성이 높다. 이는 근접한 메모리 공간에 기능이 배치되어 있기 때문이다.
배열도 공간 지역성을 잘 보여주는 구조이다. 배열은 연속된 메모리 공간에 데이터가 배치되므로, CPU가 배열의 특정 원소를 접근한 후, 그 근처의 원소를 바로 읽거나 쓸 가능성이 크다. 따라서 배열의 구조와 메모리 접근 패턴은 공간 지역성의 핵심 개념과 맞닿아 있다.
캐시 메모리의 쓰기 정책의 일관성
캐시 메모리에 데이터를 쓰는 경우에 대해 알아볼 필요가 있다. CPU가 캐시 메모리에 데이터를 쓸 때는 캐시 메모리에 새롭게 쓰이던 데이터와 메모리 상의 데이터가 일관성되게 유지돼야 한다.
캐시 메모리가 일관성을 유지하는 방법은 두 가지가 있다.
- 즉시 쓰기(write-though)
- 지연 쓰기(write-back)
즉시 쓰기
즉시 쓰기란 캐시 메모리와 메모리에 동시에 쓰는 방법이다. 즉시 쓰기는 메모리를 항상 최근 상태로 유지하여 캐시 메모리와 메모리 간의 일관성이 깨지는 상황을 방지할 수 있다.
하지만 데이터를 쓸 때마다 메모리를 참조해야 하므로 버스의 사용 시간과 쓰기 시간이 늘어나는 단점이 있다. 캐시 메모리 자체가 메모리 접근을 줄이기 위해 만들어졌는데 이러한 경우 캐시 메모리의 효율은 떨어지게 된다.
지연 쓰기
지연 쓰기란 캐시 메모리에만 값을 써 두었다가 추후 수정된 데이터를 한 번에 메모리에 반영하는 방법이다. 메모리 접근 횟수가 줄어드니 속도는 더 빠르지만, 메모리와 캐시 메모리 간의 일관성이 깨질 수 있다는 위험이 있다.
캐시 메모리를 사용한다는 것
캐시 메모리와 메모리 사이 불일치에 대한 부분을 설명하였지만, 그 외에도 다른 코어가 사용하는 캐시 메모리와의 불일치 등도 발생할 수 있다.
그렇기 때문에 캐시 메모리를 사용한다는 것, 나아가 캐싱을 한다는 것은 데이터의 접근에 있어 어느 정도의 빠른 성능을 보장하지만 캐싱을 할 때는 언제나 캐시 된 데이터와 원본 데이터 간의 불일치와 데이터의 일관성을 고려해야 한다.
출처
이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접
현실 세상의 컴퓨터공학 지식 with 30가지 실무 시나리오 초격차 패키지 Online.
'Knowledge > 컴퓨터구조&운영체제' 카테고리의 다른 글
[컴퓨터구조] 입출력장치 - 장치 컨트롤러, 드라이버, DMA (0) | 2024.12.02 |
---|---|
[컴퓨터구조] 보조기억장치와 RAID (0) | 2024.12.02 |
[컴퓨터구조] 메모리의 논리주소와 물리주소 (1) | 2024.11.30 |
[컴퓨터구조] 빅 엔디안과 리틀 엔디안 (메모리에 바이트를 밀어 넣는 순서) (0) | 2024.11.30 |
[컴퓨터구조] 메모리 - RAM (1) | 2024.11.27 |