Cache란??
by AMAD
cache란??
- 캐시는 메모리와 CPU간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 장소를 말한다.
- 캐시는 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로 CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓는다.
- 이렇게 미리 가져오는 작업을 미리 가져오기(prefetch)라고 한다.
예를 들어 설명하자면
요리를 하다가 간장 10cc가 필요한 경우가 있다고 가정했을때, 장독대에 가서 간장을 10cc만 가져온다면 다음에 간장이 필요할 때 또 장독대에 가야 한다. 여기서 장독대에 가는 행위는 메모리 또는 데이터베이스에 직접 가서 데이터를 가져오는 행위와 일치한다.
하지만 50cc를 미리 가져다 놓으면 다음에 간장이 필요할 때 시간을 단축할 수 있다. 이처럼 필요하다고 생각되는 일정량의 데이터를 미리 가져와 저장해두는 곳이 캐시이다.
당연히 장독대에(메모리, DB)에 다녀오는것보다 바로 옆에 미리 가져다 놓은 그릇(캐시)에 접근하는것이 훨씬 속도가 빠르다.
CPU의 작동 flow
- 캐시는 메모리의 내용 중 일부를 미리 가져온다.
- CPU는 메모리에 접근해야 할 때 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾아본다.
- 캐시에서 원하는 데이터를 찾았다면 캐시 히트(chche hit)라고 하며, 그 데이터를 바로 사용한다.
- 원하는 데이터가 캐시에 없으면 메모리로 가서 데이터를 찾는데, 이를 캐시 미스(chche miss)라고 한다.
- 캐시 히트가 되는 비율을 캐시 적중률(cache hit ratio)이라고 하며, 일반적인 컴퓨터의 캐시 적중률은 약 90%이다.
cache 구현 방식
- 지역성(Locality)의 원리에 따라 CPU가 참조하는 데이터를 예측하여 캐시 메모리에 미리 담아둔다.
- 캐시 메모리에 있는 데이터는 주기억장치를 참조하지 않고 고속의 캐시 메모리에서 바로 가져와 실행한다.
그렇다면 어떤 정보를 cache에 담는가?
모든 데이터를 캐시에 담기에는 캐시라는 저장 공간은 작다.
그리고 캐시의 가격은 비싸다. (1MB에 만원인 캐시로 메모리 4GB를 구성하려면 약 4천만원 정도의 비용이 발생한다.)
그렇기 때문에 한정된 용량에 양질의 데이터를 저장해 두는 편을 선택하는 것이 더 효율적인 선택이 될 것이며 그러기 위해 cache hit 될 확률이 높은 데이터를 담아두는 것이 그 방법이다. 이 때 사용되는 방법이 지역성이다.
지역성이란??
캐시가 효율적으로 작동하려면, 캐시에 저장 할 데이터가 지역성을 가져야 한다.
데이터의 접근이 시간적, 공간적으로 가깝게 일어나는 것을 지역성을 가졌다고 말한다.
- 시간적 지역성
특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근 할 가능성이 높은 것을 시간적 지역성이라고 한다.
즉, 한 번 가져왔던 데이터를 또 사용할 확률이 높다는 말이다. - 공간적 지역성
특정 데이터와 가까운 주소가 순서대로 접근되었을 경우를 공간적 지역성이라고 한다. 예를 들어 현재 프로그램의 10번 행이 실행되고 있다면 다음에 11번 행이 실행될 확률이, 101번 행이 실행될 확률보다 더 높다. 따라서 현재 10번 행을 실행하는 경우 11~20번 행을 미리 가져오면 된다.
'CS' 카테고리의 다른 글
프로세스(process)란?? (0) | 2023.02.19 |
---|---|
트랜잭션(Transaction)이란?? (0) | 2023.02.19 |
쿠키와 세션 (0) | 2023.02.05 |
HTTP란? (0) | 2023.02.05 |
TCP vs UDP (0) | 2023.02.04 |
블로그의 정보
성장 하고 싶은 개발자
AMAD