캐시 (Cache)?

곽지욱·2024년 7월 16일

OS

목록 보기
2/2
post-thumbnail

운영체제 캐시(Cache)


캐시란??

  • CPU 캐시에 대해 알아보기 전에 캐시 라는 개념에 대해 먼저 알아보자

  • 캐시는 자주 사용하는 데이터를 미리 복사해 놓는 임시 저장 장소를 말한다. 이러한 캐시는 원본 데이터에 접근하는 시간을 절약하기 위해 사용된다. 즉 데이터 검색 속도를 높이기 위함이다.

CPU cache

image

위 이미지는 CPU 캐시의 구조를 소프트웨어 관점으로 보여주는 이미지이다

  • CPU가 자주 사용할 만한 데이터를 메인 메모리에서 꺼내와 복사 저장해 놓는 임시 저장 장소를 말한다.

image

위 이미지는 CPU 캐시의 구조를 하드웨어 관점으로 보여주는 이미지이다


데이터 지역성이란?

  • 데이터 지역성은 캐시의 적중률(hit)을 높여 메모리 접근 패턴을 최적화 하여 프로그램 성능을 향상 시키는 데에 중요한 역할을 하는 개념이다.

  • 데이터 지역성은 자주 쓰이는 데이터가 시간적으로나 공간적으로 한 곳에 몰려있을 가능성이 높다는 원리를 말한다.

1. 시간지역성 : 시간 지역성은 특정 데이터가 한 번 접근되면, 가가운 미래에 그 데이터가 다시 접근될 가능성이 높다는 것을 의미한다. CPU 캐시가 시간 지역성을 활용하는 방법은 다음과 같습니다.

  • LRU(Lease Recently Used) 알고리즘 : 자주 사용되는 데이터를 캐시에 남겨두기 위해 LRU 알고리즘을 사용하여 덜 자주 사용되는 데이터를 제거하고, 최근에 사용된 데이터를 유지합니다.

  • 예를 들어, 반복문에서 같은 변수를 여러 번 읽고 쓰는 경우가 있습니다. 이 경우 시간 지역성 때문에 해당 변수는 캐시에 남아 있어 반복문을 빠르게 실행할 수 있는 것.


2. 공간 지역성 : 공간 지역성은 특정 데이터가 접근되면, 그 데이터와 인접한 주소에 있는 데이터도 곧 접근될 가능성이 높다는 것을 의미한다.

  • CPU 캐시가 공간 지역성을 활용하는 방법은 다음과 같다.

  • 캐시 라인 : 캐시 메모리는 보통 캐시 라인이라는 단위로 데이터를 저장하며, 캐시 라인을 일반적으로 여러 바이트의 데이터를 포함하고 하나의 캐시 라인에 연속된 메모리 주소의 데이터가 저장된다.

  • 예를 들어, 배열의 요소를 순차적으로 접근하려는 경우에 공간 지역성 때문에 배열의 연속된 요소들이 캐시에 로드되어 배열 접근이 빠르게 이루어질 수 있음.

캐시 동작 방식

  • 캐시 공간은 O(1)O(1) 등 낮은 시간복잡도로 접근 가능한 곳을 주료 사용한다.

  • 캐시에 원하는 데이터가 없거나 (Cache Miss) 너무 오래 되어 최신성을 잃었을 때 (Expiration)

    • 원본 데이터가 있는 곳에 접근해 데이터를 가져옴
    • 이 때 데이터를 가져오며 캐시에도 해당 데이터를 복사하거나 갱신한다.
  • 캐시에 원하는 데이터가 있을 때 (Cache Hit)

    • 원본 데이터가 있는 공간에 접근하지 않고 바로 해당 데이터를 제공한다.
  • 캐시 공간은 작기 때문에 공간이 모자랄 경우 안쓰는 데이터부터 삭제하여 공간을 확보한다 (Eviction


캐시 활용 예시

CDN (Content Delivery Network)
  • 세계 각지에 캐시 서버를 두어 전송속도를 높이고 부하를 분산하는 시스템을 말한다.

  • Google 은 각 통신사마다 Google Global Cache를 두어 인기있는 YouTube 영상은 미국서버까지 접속할 필요 없이 국내 서버에서 처리하도록 설계하였다.

  • 가격이 비싼 국제 회선 비용이 절감되고 버퍼링이 감소한다는 장점을 가짐

image

웹 캐시
  • 네트워크를 통해 데이터를 가져오는 것은 때때로 하드디스크에서 가져오는 것 보다 느릴때가 있다.

  • 브라우저 캐시 : 브라우저는 웹 페이지에 접속할 때 HTML,CSS,JS, 이미지 등을 하드 디스크나 메모리에 캐싱해뒀다가 다음번에 다시 접속할 때 이를 재활용하는 것을 말한다.

  • 응답캐시 : 웹 서버 또한 상당수의 경우 동적 웹 페이지라 할지라도 매번 내용이 바뀌지 않는 경우가 더 많기 때문에 서버에서 생성한 HTML을 캐싱해뒀다가 다음번 요청에 이를 재활용 하는 것을 말한다.

0개의 댓글