캐시(Cache)

캐시란 자주 사용하는 데이터나 값을 미리 복사해놓는 임시장소를 의미한다.

 

위로 갈수록 저장용량이 작고 빠르지만 비싸다

조금더 쉽게 설명하자면 가게에서 자주 나가는 조그만 사은품이 있을경우 창고에 보관하는게 아닌 금방 꺼내주기 쉬운 카운터 밑에다 거치해두는데 이것을 컴퓨터에 적용하면 다음과 같다.

 

자주 나가는(출력이 잦은) 조그만(작은크기의) 사은품(데이터)가 있을경우 창고(RAM)에 보관하는게 아닌 금방 꺼내주기 쉬운 카운터 밑(캐시메모리)에 뒀다가 전달해주는것이다. 

 

캐시의 저장방식

OS는 프로세스를 페이지 단위로 구분한다 -> 프로세스마다 자주 사용하는 부분이 있고 그렇지 않은 부분이 있기에 페이지로 나누는것

그리고 OS나 CPU는 자주 쓰이는 데이터를 메모리에서 캐시로 읽어온다.

메모리 계층 구조에서 초기에 디스크에 있는 값은 메모리 -> 캐시메모리 -> 레지스터까지 의 과정을 거치는데 이때 메모리를 지나가는 시점에 저장된다. (상단의 사진 참조)

여기서 자주 쓰이는 기준은 지역성으로 판단하며 지역성은 시간지역성, 공간지역성으로 나뉜다.

(프레임 - 물리주소공간이 일정한 크기로 균일하게 나눈것 / 페이지 - 논리주소공간이 일정한 크기로 균일하게 나눈것

 

시간지역성 (Temporal Locality) - 단시간에 계속 접근하는경우 (for, loop등으로 같은곳을 계속 참조 할경우)

공간지역성 (Spatial Locality) - 최근 접근한 데이터 주변공간에 재접근하는 경향 (연속된 배열) 

페이징 - 프로세스가 차지하는 물리적 메모리 공간이 비연속적으로 되도록 허용하는 메모리 관리기법

//공간지역성 코드 (else만 볼것)
(A)
if (test) {
	//......
}
else {
	//.....
}

(B)
if (test) {
	//......
}
else {
	call_function_test();
}

상단의 코드는 (A)와 (B)는 else에서 직접 코드를 작성했는지, 호출했는지의 차이가 있다.

최상단의 사진을 참조하면 L1에서 L3로 갈수록 저장할수 있는 용량이 커지는데 (A)의 경우 직접 코드를 썻기에 사용시 캐시 메모리가 기억할 크기가 크지만 (B)의경우 함수를 호출하는 방식이기에 캐시의 크기가 작아지며 이는 곧 공간지역성에서도 이점을 갖게된다.

 

캐시가 삭제되는 방식

캐시의 저장을 진행했으나 만일 캐시가 꽉찬경우 캐시교체 알고리즘이 실행되는데 FIFO, LFU, LRU 3가지가 가장 범용적이다.

1. FIFO - 가장 먼저(시간상 제일 마지막)에 들어간 데이터를 교체 -> 가장 간단하나 성능이 떨어진다.

2. LFU(Least Frequently Used) - 가장 사용량이 적은 데이터를 교체 -> 최근에 들어가 사용량이 적은 데이터의 삭제 우려

3. LRU(Least Recently Used) - 가장 오랫동안 사용되지 않은 데이터를 교체 -> 가장 고성능이나 사용시기를 기억해야 하기에 오버헤드가 크다.

 

캐시무효화

객체가 캐시된경우 객체가 기간만료 또는 삭제 알고리즘이 되기 전까진 메모리 한 구석에 존재하는데 만일 강제로 캐시를 삭제해야할경우는 어찌해야할까? (웹의경우 캐시의 만료시간은 HTTP 헤더에 의해 제어)

이때 진행하는것이 캐시 무효화이다.

 

캐시블록

캐시는 블록으로 구성되어 있으며 각 블록은 데이터를 갖고있고 주소값을 키로 활용한다.

각각의 캐시블록은 데이터를 담고있으며

캐시메모리는 캐시블록 + 캐시태그와 더불어 캐시엔트리를 구성한다.

캐시태그 - 캐시블록의 고유 식별값 주소값의 일부를 Tag로 사용한다. CPU를 통해 

 

캐시의 특징

1  L1,L2, L3로 나뉘며 가격이 비싸지만 전송속도가 빠르다.

2. 캐시에 데이터가 잇으면 Cache hit, 없으면 Cache miss라 표현한다.

3. 캐시의 성능을 측정할때 지연시간(Hit Latency, Miss Latency)을 요점으로 본다

  • Hit Latency - 현재 캐시계층에 존재하여 가져올때 소요되는 시간
  • Miss Latency - 현재 게층에 존재하지 않아 상위캐시에서 가져올때 소요되는 시간

 

L1 캐시 - 프로세서와 가장 가까운 캐시로 속도향상을 위해 L1캐시는 1$ D$로 이루어져있다.

  • Instruction Cache(I$): 메모리의 TEXT 영역 데이터를 다루는 캐시
  • Data Cache(D$): TEXT 영역을 제외한 모든 데이터를 다루는 캐시

L2 캐시 - 용량이 큰 캐시 (L1처럼 캐시를 나누지 않는다)

L3 캐시 - 멀티코어 시스템에서 여러 코어가 공유하는 캐시(공간)

'CS' 카테고리의 다른 글

인라이닝  (0) 2023.04.20
메모리 단편화  (0) 2023.04.08
교착상태(Dead Lock)  (0) 2023.04.02
시스템콜  (0) 2023.04.01
링킹과 오브젝트파일  (0) 2023.03.30

+ Recent posts