이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.
CPU가 메모리에 접근하는 시간은 CPU의 연산 속도보다 느리다. CPU가 연산을 빨리 한다 해도 메모리에 접근하는 시간이 느리기 때문에 빠른 연산 속도는 무용지물이 된다. 이를 극복하기 위한 저장 장치가 캐시메모리이다.
저장 장치 계층 구조
빠른 저장 장치와 용량이 큰 저장 장치는 양립하기가 힘들다. 양립할 수 있다 해도 비용이 매우 비쌀 것이다.
저장 장치는 일반적으로 아래와 같은 명제를 따른다.
- CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.
- 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다.
낮은 가격대의 대용량 저장 장치를 원한다면 느린 속도는 감수해야 하고, 빠른 메모리를 원한다면 작은 용량과 비싼 가격을 감수해야 한다는 뜻이다.
이렇게 저장 장치들의 장단점이 명확한데, 어느 하나의 저장 장치만 사용하는 것은 매우 비효율적일 것이다.
그래서 컴퓨터는 다양한 저장 장치를 모두 사용한다.
컴퓨터가 사용하는 저장 장치들은 'CPU에 얼마나 가까운가'를 가준으로 계층적으로 나타낼 수 있다.
이를 저장 장치 계층 구조라고 한다.
위와 같은 계층 구조에서 속도와 가격은 위로 올라갈수록 높아지는 경향이 있고, 반대로 용량은 위로 올라갈수록 낮아지는 경향이 있다.
캐시 메모리
CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 느리다.
CPU 연산 속도가 아무리 빨라도 메모리에 접근하는 속도가 따라가지 못한다면 빠른 CPU의 연산속도는 무용지물이 된다.
병목현상
두 장치에서 하나의 장치 속도는 빠른데 다른 장치가 느림으로 인해 전체적인 성능이 저하되는 것을 병목현상이라고 한다.
그래서 등장한 저장 장치가 캐시 메모리이다. 캐시 메모리는 CPU와 메인 메모리 사이에 위치하고, 레지스터 보다 용량이 크고, 메모리 보다 빠른 SRAM기반의 저장 장치이다.
CPU가 매번 메모리에 왔다 갔다 하는 것은 시간이 오래 걸리니까 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가지고 와서 활용하는 것이다.
우리가 일반적으로 사용하는 컴퓨터 내부에는 여러 개의 캐시 메모리가 있다. 그리고 이 캐시 메모리들은 CPU(코어)와 가까운 순서대로 계층을 구성한다. 코어와 가장 가까운 캐시를 L1(Level 1)캐시, 그다음 가까운 캐시 메모리를 L2(Level 2)캐시, 그다음 가까운 캐시 메모리를 L3(level 3)캐시라고 부른다.
캐시 메모리에서 일반적으로 용량은 L1 < L2 < L3, 속도는 L3 < L2 < L1, 가격은 L3 < L2 < L1이다.
CPU가 메모리 내에 데이터가 필요하다고 판단하면 먼저 L1 캐시에 해당 데이터가 있는지를 알아보고, 없다면 L2, L3 캐시 순으로 데이터를 검색한다.
멀티 코어 프로세서에서 L1-L2-L3 캐시는 일반적으로 다음과 같이 구현된다. L1 캐시와 L2 캐시는 코어마다 고유한 캐시 메모리로 할당되고, L3 캐시는 여러 코어가 공유하는 형태로 사용된다.
참조 지역성의 원리
캐시 메모리는 메인 메모리보다 용량이 작다. 당연하게도 캐시 메모리는 메인 메모리에 있는 모든 내용을 가져다 저장할 수 없다.
캐시 메모리는 CPU가 사용할 법한 대상을 예측하여 저장한다. 이때 자주 사용될 것으로 예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에 활용될 경우를 캐시 히트(cache hit)라고 한다.
반대로 자주 사용될 것으로 예측하여 캐시 메모리에 저장했지만, 예측이 틀려 메모리에서 필요한 데이터를 직접 가져와야 하는 경우를 캐시 미스(cache miss)라고 한다. 캐시 미스가 발생하면 CPU가 필요한 데이터를 메모리에서 직접 가져와야 하기 때문에 캐시 메모리의 이점을 활용할 수 없다. 당연히 캐시 미스가 자주 발생하면 성능이 떨어진다.
캐시 적중률(= 캐시가 히트되는 비율)
캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
우리가 사용하는 컴퓨터의 캐시 적중률은 대략 85 ~ 95% 이상이다.
캐시 메모리는 한 가지 원칙에 따라 메모리로부터 가져올 데이터를 결정한다.
그 원칙은 바로 참조 지역성의 원리이다. 참조 지역성의 원리란 CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리이다.
- 시간(temporal) 지역성 : CPU가 최근에 접근했던 메모리 공간을 가까운 미래에 다시 접근하려는 경향
- 공간(spatial) 지역성 : CPU가 접근한 메모리 공간 근처의 데이터들이 연속적으로 접근될 가능성이 높아지는 경향
순차(sequential) 지역성 : 분기가 발생하지 않는한 명령어들은 기억장치에 저장된 순서대로 인출되어 실행
시간 지역성
예를 들어, 프로그래밍 언어에서 변수에 값을 저장하고 나면 언제든 변수에 다시 접근하여 변수에 저장된 값을 사용할 수 있다. 또한 변수에 저장된 값은 일반적으로 한 번만 사용되지 않고 프로그램이 실행되는 동안 여러 번 사용된다. 즉, CPU는 최근에 접근했던 메모리 공간을 여러 번 다시 접근할 수 있다.
ex)반복루프 프로그램, 서브 루틴들은 반복적으로 호출되며 공통 변수들도 빈번히 액세스
공간 지역성
CPU가 실행하려는 프로그램들은 보통 관련 데이터들끼리 한데 모여있다. 가령 메모리 내에 워드 프로세서 프로그램, 웹 브라우저 프로그램, 게임 프로그램이 있다고 가정하면. 이 세 프로그램은 서로 관련 있는 데이터끼리 모여서 저장된다. 그리고 프로그램 내에서도 관련 있는 데이터들은 모여서 저장된다. 워드 프로세서 프로그램에 자동 저장 기능, 입력 기능, 출력기능이 있다고 했을 때 각각의 기능과 관련한 데이터는 모여 저장된다.
ex)표, 배열 데이터
'컴퓨터 구조 & 운영체제 > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] RAID의 정의와 종류 (0) | 2023.06.20 |
---|---|
[컴퓨터 구조] 보조기억장치(하드 디스크, 플래시 메모리) (0) | 2023.06.19 |
[컴퓨터 구조] 메모리의 주소 공간 (0) | 2023.05.11 |
[컴퓨터 구조] RAM의 특징과 종류 (1) | 2023.05.10 |
[컴퓨터 구조] CISC와 RISC (0) | 2023.04.12 |