캐시
- 속도가 빠른 장치와 느린 장치 간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리다.
- 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다.
- 프로세서가 매번 메인 메모리에 접근해 데이터를 받아오면 시간이 오래 걸리기 때문에 캐시에 자주 사용하는 데이터를 담아 두고 해당 데이터가 필요할 때 프로세서가 메인 메모리 대신 캐시에 접근하도록 하여 처리속도를 높인다.
캐시의 종류
CPU 칩에는 여러 개의 캐시가 들어가며 각각의 캐시는 각자의 목적과 역할을 가지고 있다.
- L1 Cache : 프로세서와 가장 가까운 캐시, 속도를 위해 I로 나뉜다
- Instruction Cache(I$) : 메모리의 TEXT영역 데이터를 다루는 캐시
- Data Cache(D$) : TEXT영역을 제외한 모든 데이터를 다루는 캐시
- L2 Cache : 용량이 큰 캐시, L1캐시 처럼 나누지 않는다.
- L3 Cache : 멀티 코어 시스템에서 여러 코어가 공유하는 캐시
CPU에서는 L1 → L2 → L3 순으로 데이터를 탐색하게 된다.
캐시의 성능
캐시의 성능을 측정할 때는 Hit latency와 Miss latency가 중요한 요인으로 꼽힌다.
- HIT (존재) : 요청한 데이터가 캐시에 존재하는 경우이다.
히트가 발생해 캐싱된 데이터를 가져오는 시간이 hit latency이다.- Miss (비존재) : 요청한 데이터가 캐시에 존재하지 않는 경우이다.
미스가 발생해 상위 캐시나 메인메모리에서 데이터를 가져오는 시간이
miss latency이다.
평균 접근시간은 Hit latency + (Miss rate * Miss latency)가 된다.
캐시를 잘 활용하여 miss rate를 줄인다면 비용을 많이 줄일 수 있다.
따라서 CPU가 어떤 데이터를 원할지 어느정도 예측하여 캐시에 쓸모 있는 정보가 들어있도록 해야한다.
지역성 원리(Locality)
- 적중률(Hit rate)을 높이기 위해서 지역성의 원리를 사용한다.
- 지역성(Locality)이란 기억 장치 내의 정보를 균일하게 Access하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 성질이 있다는 이론이다.
- 시간 지역성 (Temporal Locality): 최근에 참조된 주소의 내용은 곧 다음에 다시 참조되는 특성이다.
for, while 같은 반복문을 예로 들 수 있다. 특정 부분을 반복해서 접근하기 때문에 다시 참조할 확률이 높다.- 공간 지역성 (Spatial Locality): 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성이다.
배열을 예로 들 수 있다. A[0], A[1]과 같은 연속 접근의 경우 그다음 원소들에 접근할 가능성이 높다.
캐싱라인(Caching Line)
- 캐시가 아무리 CPU에 가깝게 위치하더라도, 데이터가 캐시 내의 어느 곳에 저장되어 있는지 찾기가 어려워 모든 데이터를 순회해야 한다면 캐시의 장점을 잃기 때문에 쉽게 찾을 수 있는 구조가 필요하다.
- 따라서, 캐시에 데이터를 저장할 때 특정 자료구조를 사용하여 묶음으로 저장하는데, 이를 캐싱 라인(Caching Line)이라고 한다.
- 캐시에 저장하는 데이터에는 데이터의 주소 등을 기록해둔 태그를 달아둘 필요가 있다. 이러한 태그들의 묶음을 의미한다.
- 매핑 방법
- Direct Mapping
직접 매핑으로, 메인 메모리를 일정한 크기의 블록으로 나누어 각각의 블록을 캐시의 정해진 위치에 매핑하는 방식이다.
가장 간단하고 구현도 쉽다.
하지만 적중률(Hit rate)이 낮아질 수 있다. 또 동일한 캐시 메모리에 할당된 여러 데이터를 사용할 때 충돌이 발생하게 되는 단점이 있다.
- Full Associative Mapping
캐시 메모리의 빈 공간에 마음대로 주소를 저장하는 방식이다.
저장하는 것은 매우 간단하지만, 원하는 데이터가 있는지 찾기 위해서는 모든 태그를 병렬적으로 검사해야 하기 때문에 복잡하고 비용이 높다는 단점이 있다.
- Set Associative Mapping
주로 사용하는 방식으로 Direct Mapping과 Full Associative Mapping의 장점을 결합한 방식이다.
빈 공간에 마음대로 주소를 저장하되, 미리 정해둔 특정 행에만 저장하는 방식이다. Direct에 비해 검색 속도는 느리지만 저장이 빠르고 Full에 비해 저장이 느리지만 검색은 빠르다.
🙇 참고 사이트 🙇
https://rebro.kr/180 https://velog.io/@klloo/os-memory-cache https://alreadyusedadress.tistory.com/266