Cache Memory(캐시 메모리)
캐시 메모리는 속도가 빠른 장치와 느린 장치 간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리입니다.
CPU가 처리하는 속도보다 RAM에서 데이터를 인출해오는 속도가 느리기 때문에 시간의 낭비가 발생하게 됩니다.
캐시 메모리는 사용한다면 둘 사이의 속도 차이로 인한 병목현상을 해결 할 수 있습니다.
캐시메모리는 CPU와 메모리 사이에 위치해 있으며 레지스터 보다는 용량이 크고 메모리보다는 빠른 저장 장치입니다.
캐시메모리는 CPU와 가까운 순서대로 계층을 구성합니다.
CPU와 가장 가까운 캐시 메모리를 L1 캐시, 그 다음으로 가까운 캐시를 L2 캐시, 그 다음 가까운 캐시 메모리를 L3라고
부릅니다. 캐시 메모리의 용량은 L1, L2 ,L3 순으로 커지고 속도는 L3, L2 ,L1 순으로 빨라집니다.
CPU가 필요한 데이터가 있으면 L1부터 순서대로 데이터를 검색하게 됩니다.
Locality of reference (참조 지역성 원리)
캐시 메모리는 메모리보다 용량이 적습니다. 따라서 캐시 메모리는 메모리의 일부를 복사하여 저장해야 합니다.
CPU가 필요로 하는 데이터가 캐시메모리가 있는 경우를 캐시 히트라고 합니다. 캐시는 캐시 히트가 최대한으로
해야 CPU의 처리 속도를 극대화 할 수 있습니다. 캐시 히트를 최대화 하려면 메모리에서 자주 사용할 데이터를
캐시메모리로 가져와야 합니다.
CPU가 자주 사용할 데이터를 캐시 메모리는 한 가지 원칙에 따라 결정하게 됩니다. 그것이 바로 참조 지역성의
원리입니다. 참조 지역성의 원리란 다음과 같습니다.
1. CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다. (시간 지역성)
2. CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다. (공간 지역성)
시간 지역성의 예로는 for 문이나 while문 같은 반복문을 예로 들 수 있습니다.
for문 안에 쓰이는 변수들은 루프 동안에 계속 접근할 가능성이 높기 때문에 다시 참조될 확률이 높습니다.
공간 지역성의 예로는 배열을 예로 들 수 있습니다. A[0]이라는 데이터에 접근하면 A[1]이라는 데이터에
접근할 가능성이 있습니다.
캐시 메모리는 위와 같은 원칙에 따라 자주 사용할 데이터를 메모리로 부터 가져와 담게 됩니다.
Cache Line (캐시 라인)
캐시 라인은 캐시 메모리와 메모리 간 데이터 전송을 위한 최소 단위입니다. 메모리에 가져온 데이터는 캐시 라인
의 형태인 블록 형태로 저장되게 됩니다.
CPU가 메모리의 특정 주소의 데이터 값이 필요하다면. 캐시메모리는 특정 값 뿐만 아니라 캐시라인을 가득 채울
만큼의 데이터를 가져오게 됩니다. 캐시 라인은 CPU에 따라 크기가 다른데, 32, 64, 128 byte로 구성되곤 합니다.
캐시 라인을 사용함으로써 CPU의 메모리 접근 횟수를 줄여 성능을 향상 시킬 수 있습니다.
하지만 코어가 여러개인 멀티 프로세서 환경에서는 캐시 라인이 문제를 일으킬 소지가 있습니다.
다수의 CPU가 동일한 캐시라인을 보유하고 있을 때 특정 한 CPU가 캐시 라인을 수정한다면 다른 CPU는
해당 캐시라인의 갱신을 확인할 방법이 없습니다.
이 문제를 해결하기 위해 한 CPU의 캐시라인이 수정하게 되면 다른 CPU가 들고 있는 캐시 라인을 무효화 시켜
데이터를 동기화 하게 됩니다. 이렇게 되면 다른 CPU는 다시 데이터를 가져오기 위해 메모리에서 재차 읽어야 되는
문제가 발생합니다. 이것은 멀티 프로세서 환경에서는 성능 저하의 문제가 발생하게 됩니다.
또한 캐시라인의 크기 설정도 매우 중요합니다. 캐시 라인이 크면 클수록 캐시 미스 수를 줄여 좋을것 같지만, 캐시 미스가
발생하게 될 경우 메모리로 부터 가져와야 할 데이터 양이 많아짐에 따른 미스 패널티와 메모리 대역폭 요구 사항을
증가시킬 위험이 있습니다. 반대로 캐시 라인이 너무 작게 되면 캐시 누락 횟수가 증가할 위험이 있습니다.
따라서 미스 패널티와 적중률 간의 균형을 맞추기 위해 캐시 라인 크기는 신중하게 선택해야 합니다.
'CS > 컴퓨터구조' 카테고리의 다른 글
RAID란? (0) | 2023.04.26 |
---|---|
플래시 메모리란? (0) | 2023.04.19 |
보조기억장치(하드디스크) 에 대하여 (0) | 2023.04.12 |
명령어 사이클과 인터럽트에 대하여 (0) | 2023.02.15 |
CPU 구성 요소에 대하여 (0) | 2023.02.15 |