캐시 메모리 존재 이유
CPU가 메모리에 접근하는 시간은 CPU 연산 속도 보다 매우 느리다.
CPU는 i7 CPU의 경우 1초에 평균 2.5억개의 명령어를 처리하고, 메모리에 접근하는 시간은 10⁻⁶ ~ 10⁻³으로 1초에 약 백만 ~ 1000개의 명령을 가져올 수 있다. 그래서 CPU와 메모리 중간의 저장 장치가 필요해 진 것이다. 이제부터 캐시에 대해 알아보자
저장 장치 계층 구조 (Memoty Hierachy)
저장 장치는 다음과 같은 명제가 있다.
- CPU와 가장 가까운 저장 장치는 빠르고, 멀리 있는 장치는 느리다.
- 속도가 빠른 장치일 수록 저장 용량이 작고, 비싸다.
메인 메모리, 레지스터, 보조 기억 장치와 같은 저장 장치 들은 'CPU에 얼마나 가까운가'를 기준으로 계층적으로 나타낼 수 있다.
레지스터 -> 캐시 -> 메모리 -> 보조기억 장치 순이다.
캐시 메모리
- CPU와 메모리 사이에 위치한, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치
- CPU의 연산 속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해 탄생
계층적 캐시 메모리
캐시 메모리는 계층 관계로 구성되어 있다. 보통 L1, L2, L3 3개의 캐시가 있고 계층구조를 가진다.
멀티 코어로 구성된 현대의 CPU에서는 코어 별로 L1 캐시와 L2캐시를 두고, 모든 코어들이 공유하는 L3캐시를 두고 있다. L1/L2 캐시는 CPU 패키지 안에 두지만 ,L3 캐시는 CPU 외부의 컴퓨터 보드 상에 두거나 CPU 내부에 두기도 한다.
메모리 계층 구조의 특성
CPU 레지스터 | L1/L2 캐시 | L3 캐시 | 메인 메모리 | 보조 기억 장치 | |
용도 | 몇 개의 명령과 데이터 저장 | 한 코어에서 실행되는 명령과 데이터 저장 | 멀티 코어들에 의해 공유. 명령과 데이터 저장 | 실행 중인 전체 프로세스들의 코드와 데이터, 입출력 중인 파일 블록들을 저장 | 파일이나 데이터 베이스, 그리고 메모리에 적재된 프로세스의 코드와 데이터의 일시 저장 |
용량 | 바이트단위. 8~30개 정도. 1KB 미만 |
KB 단위 (Core i7의 경우 32KB/ 256KB) |
MB 단위 (Core i7의 경우 8MB) |
GB 단위 | TB 단위 |
타입 | SRAM | SRAM | DRAM | 마그네틱 필드나 플래시 메모리 | |
속도 | <1ns | <5ns | <5ns | <50ns | <20ns |
프로그램의 실행과 메모리 계층 구조
계층화된 메모리 구조에 따른 프로그램 실행 과정을 알아보자.
- 보조 기억 장치에 저장된 실행 파일을 메인 메모리에 적재한다.
- 메인 메모리에 적재된 코드와 데이터 중 실행할 일부의 코드와 실행에 필요한 데이터가 L3 캐시로 복사된다
- L3 캐시에서 당장 실행할 코드와 데이터의 일부분이 L1/L2 캐시로 복사된다.
- CPU 코어는 L1/L2 캐시에서 현재 실행할 명령과 데이터를 레지스터로 읽어 들인 후 연산을 실행한다.
캐시는 컴퓨터에 시스템에 따라 선택사항이지만, 캐시가 있는 컴퓨터에서는 CPU가 캐시로부터만 프로그램 데이터를 읽고 실행한다.
메모리 계층화의 성공 이유 : 참조의 지역성
캐시메모리는 크기가 작기 때문에 당장 실행할 프로그램의 코드와 데이터를 일부분밖에 둘 수 없다. 하지만 메모리 계층 구조는 실보다 득이 많다. 그 이유는 참조의 지역성이라는 일반적인 프로그램의 특성에 있다.
참조의 지역성(locality of reference)
코드나 데이터, 자원 등이 아주 짧은 시간 내에 다시 사용되는 프로그램의 특성이다.
예를 들어 for문을 실행하는 경우, 같은 코드를 계속 반복적으로 사용한다. 이때 캐시에 적재된 코드와 데이터를 액세스 하기 때문에, 캐시를 사용함으로써 얻는 이득이 높다. 프로그램의 경우 반복문이 많이 사용되기 때문에 캐시의 유용성이 매우 높아진다.
'CS > 컴퓨터 구조' 카테고리의 다른 글
컴퓨터 구조 #13 - 메모리 주소 공간 - 물리 주소와 논리 주소 (0) | 2024.02.01 |
---|---|
컴퓨터 구조 #12 - RAM의 특성과 종류 (1) | 2024.01.30 |
컴퓨터 구조 #11 - 명렁어 집합 구조, CISC와 RISC (1) | 2024.01.30 |
컴퓨터 구조 #10 - 명령어 병렬 처리 기법(파이프 라인, 비순차적 명령어 처리) (0) | 2024.01.29 |
컴퓨터 구조 #9 - 빠른 CPU를 위한 설계 기법 (0) | 2024.01.29 |