Intro
CPU와 캐시메모리에 대해 알아보자
1. CPU와 캐시메모리
- CPU는 기계어로 쓰인 컴퓨터 프로그램의 명령어를 해석하여 실행하는 장치이다.
- CPU는 클럭 속도가 매우 빨라서 프로세서 밖에 있는 물리메모리와의 속도 차이가 현저하게 크다.
- 캐시메모리는 처리 속도가 빠른 CPU와 상대적으로 느린 물리메모리의 속도 차이를 보완하는 고속 버퍼로써 물리메모리에서 데이터를 블록 단위로 가져와 CPU에 워드 단위로 전달하여 속도를 높인다.
- CPU가 데이터를 요청하여 캐시메모리에 접근했을 때 캐시메모리가 해당 데이터를 가지고 있다면 이를 ‘캐시 적중(Cache Hit)’이라 부르고, 해당 데이터가 없어서 물리메모리에서 가져와야 한다면 ‘캐시 부적중(Cache Miss)’이라 부른다.
1.1 캐시메모리 구조

- 캐시메모리는 여러개의 Cache Line 으로 구성되어 있으며 하나의 Cache Line당 데이터 적재 용량은 64Byte 이다.
- 캐시는 물리메모리에 접근할 때마다 블록단위로(64Byte) 데이터를 가져와 Cache Line에 적재한다.
- 데이터를 1Byte 단위가 아닌 64Byte 단위로 크게 가져오는 이유는 물리메모리에 접근해서 데이터를 가져오는 행위의 비용이 높기 때문에 한번 접근할 때 데이터를 많이 가져오는 것이다.
2. 메모리 매핑
- 현대의 운영체제는 가상메모리 기법을 사용한다. 이로인해 캐시메모리와 물리메모리에 적재되어있는 데이터의 주소가 물리주소인것과 달리 CPU에서 수행되는 명령어에서 가리키는 데이터 주소는 가상주소이다.
- 따라서 CPU가 캐시메모리 또는 물리메모리에 데이터를 요청하기 위해서는 가상주소에 매핑되는 물리주소를 먼저 찾아야만 한다.
2.1 TLB(Translation Lookaside Buffer)
- TLB는 가상 메모리 주소를 물리적인 주소로 변환하는 속도를 높이기 위해 사용되는 캐시이다.
- TLB는 CPU와 CPU 캐시 사이, CPU 캐시와 메인 메모리 사이 등 여러 가지 다른 레벨의 캐시들 사이에서 주소를 변환하는데 사용할 수 있다.
- 현재 모든 데스크탑 및 서버용 프로세서는 하나 또는 그 이상의 TLB를 메모리 관리 하드웨어에 가지고 있다.
2.2 메모리 매핑 방법

- 현재의 x86 아키텍처에서 가상주소와 물리주소는 서로 상위 20Bit에 해당하는 Tag 만 불 일치하며 하위 12Bit 는 정확히 일치 한다.
- 이를 통해 CPU가 TLB 또는 가상메모리 테이블에서 가상주소에 매핑된 물리주소를 찾을 때 가상주소의 상위 20Bit 를 Indexing 키로 사용하여 찾아낸다.
- 또한 CPU가 Indexing 과정으로 찾아낸 물리주소를 가지고서 캐시메모리에 있는 데이터를 찾을 때는 물리주소의 하위 12Bit 를 키로 사용하여 필요한 캐시 데이터를 찾아낸다.
자세한 물리주소 구성은 아래 표와 같다.
물리주소 구성 |
설명 |
|---|---|
Tag (상위 20Bit) |
Cache 안에서의 Line 검색 키 Index와 Offset이 같더라도 Tag가 다르면 Cache Miss 이다. |
Index (하위 6~11Bit) |
Cache Line 안에서의 Block 검색 키 |
Offset (하위 0~5Bit) |
Cache Block 안에서의 데이터 검색 키 |