Bibbidi Bobbidi Boo
article thumbnail
Published 2023. 5. 27. 01:49
[TIL/개념] 캐시(cache) CS/OS

* TIL/개념: 최대한 공식 문서 & 책을 기반으로 배운 내용을 정리

* 현재 취준생으로 풋내기 개발자가 쓰는 글입니다.

* 그러니 조언과 지적 및 훈수는 언제나 환영입니다! 댓글로 많이 달아주세요!

 

부캠에서 정리했던 글 좀 더 정리해서 재업로드


캐시(Cache)란 무엇인가?

캐시의 효과를 극대화하기 위한 기법은 어떤 것이 있는가?



캐시


등장 배경: 병목 현상 해결

먼저 캐시가 무엇인지에 대해 알아보자.

일반적으로 CPU는 속도가 빠르고, RAM은 속도가 느리다.

CPU는 1초에 100개의 데이터를 처리하되,

RAM은 1초에 1개의 데이터만을 처리한다고 가정해보자.

 

여기서 CPU가 RAM에게 100개의 데이터를 요청한다고 했을 때,

RAM이 바로 줄 수 있을까? 없다.

 

아무리 빠른 CPU라도 RAM 때문에 100초가 걸리게 된다.

이런 병목 현상 때문에 나오게 된 아이디어가 바로 캐시다.


캐시는 임시 저장소

캐시(cache: 캐쉬, 고속완충기, 고속완충기억기)는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.(출처: 위키백과)

캐시는 한마디로, 데이터나 값을 미리 복사해 놓는 임시 저장소다.

 

예를 들어 컴퓨터가 프로그램을 동작시키면,

RAM에서 로딩 후에 CPU는 해당 데이터를 캐시에 미리 저장해둔다.

 

나중에 저장해 놓은 값을 요청하게 되면

추가 시간없이 캐시에서 바로 꺼내서 주게 된다.

결국, 속도가 빨라지게 된다.

 

그러나 대부분 캐시는 비용이 비싸며, 메모리 공간이 상대적으로 작다는 단점이 있다.


캐싱 기법과 사용 예시


캐싱(Caching)

Caching == Cache + ing == 캐시를 사용하는 것

사용하게 될 데이터를 캐시에 저장해둠으로서 시간과 비용을 절약하는 것 캐싱 기법이라고 한다.

 

반복적으로 동일한 결과를 주거나,

혹은 데이터의 접근 시간이 오래 걸리는 경우에 캐싱 기법을 사용할 수 있다.

 

이런 캐싱 기법은 위에서 언급한 CPU 캐시 외에도 디스크 캐시, 데이터베이스, 웹 브라우저 등에서 쓰인다.


예시 1 - CPU의 캐시 메모리

CPU가 메인 메모리와 통신할 때 구조. 오른쪽으로 갈수록 느리지만 용량이 크다.

(위에서 간략하게 나마 설명했으나 한 번 더 짚고 넘어간다.)

우리가 프로그램을 실행하면 하드 드라이브에 있는 프로그램이 메모리에 올라오고,

메모리에 올라와서 프로그램이 실행되는 구조가 된다.

프로그램을 실행하는 주체인 CPU는 필요한 데이터를 메모리와 통신하는 구조다.

 

이 때 레지스터와 메인 메모리 간의 병목 현상을 해결하기 위해 CPU 캐시라는 게 존재한다.

CPU 안에 있는 CPU 캐시, 즉 캐시 메모리가 데이터를 저장해두면

레지스터는 먼저 캐시 메모리에서 데이터가 있는지 확인한 후 있으면 가져오고,

없으면 Main Memory에 접근해서 가져오게 된다.


예시 2 - 데이터베이스

데이터베이스 또한 SQL 요청 시에 캐싱 기법을 사용할 수 있다.

처음 SQL 요청에 대한 결과를 캐시에 저장해 둔 후

동일한 요청이 있을 때 저장된 결과를 제공하는 방식이다. 

 

해당 방식은 같은 SQL 요청을 자주 하거나, 테이블의 변경이 적을 때 유용하다.


예시 3 - 웹 캐시

크롬 등의 웹 브라우저에서도 리소스를 요청할 때 또한 캐시 기법이 사용된다.

 

사용자, 즉 클라이언트가 웹 사이트에 접속할 때 서버에서 요청을 하게 된다.

이 때 이미지, .js, 혹은 .css 와 같은 리소스 파일은 서버에서 매번 요청하지 않고, 첫 요청 시에 캐시에 저장해둔다.

그 후 같은 사이트에 재접속했을 때 캐시에서 가져와서 불러오므로 접속 시간이 훨씬 적게 소요된다.


캐시 관련 용어 정리

밑밑에서 캐시를 설계할 때 방식에 대해 소개할 건데,

이 때 알아야 하는 용어 몇 가지만 소개한다.


캐시의 적중(Hit)과 부재(Miss)

캐시에 특정 데이터를 요청했을 때,

캐시에 데이터가 있으면 캐시 적중(Cache Hit),

캐시에 데이터가 없으면 캐시 부재(Cache Miss)라고 한다.

 

이 같은 용어는 캐시 적중률(Hit Rate)이나 AMAT(Average Memory Access Time)과 같은 성능 지표에서 사용된다.

  • 캐시 적중률: 캐시 기억장치가 있는 컴퓨터의 성능을 나타내는 척도
    • Cache Hit Rate = 적중 횟수 / 총 참조 횟수
  • AMAT: 평균 메모리 접근 시간. 컴퓨터의 메모리의 성능을 나타내는 척도
    • AMAT = Hit time + Miss rate * Miss penalty
      • Hit time: 캐시에 있는 정보를 가져올 때 걸리는 시간
      • Miss rate: 캐시에서 메모리로 접근하는 비율
      • Miss panalty: 캐시에서 메인 메모리에 있는 데이터를 가져오는 데 걸리는 시간

캐시 적중률이 높고, 접근 시간은 낮아야 성능이 좋다고 볼 수 있다.


데이터 지역성

캐시 적중률은 다시 사용될 가능성이 높은 데이터를 캐시에 저장해야 높아진다.

캐시의 적중률을 높이기 위해 나온 개념이 데이터 지역성이다.

 

데이터 지역성은 한번 사용한 데이터를 잠시 후에 다시, 혹은 그 주변 데이터를 다시 사용할 가능성이 높다는 특성이다.

 

데이터 지역성은 시간 지역성과 공간 지역성으로 나눌 수 있다.

시간 지역성 한번 사용한 데이터를 다시 사용할 가능성이 높다는 성질이며,

공간 지역성 주변 데이터를 다시 사용할 가능성이 높다는 성질이다.

 

보통 시간 지역성은 for나 while 과 같은 반복문에서 사용하는 조건 변수 같은 경우를 예로 들며,

공간 지역성은 A라는 배열에서 A[0] 데이터 주변에 있는 A[1], A[2]와 같은 경우를 예로 들어서 설명한다.


캐시 설계에 고려되는 사항

캐시의 적중률과 접근 시간과 같이 캐시의 효과를 극대화 하기 위해서 설계 시에 다음과 같은 사항이 고려된다.

  • 캐시 기억 장치의 크기
  • 인출 방식
  • 캐시 교체 알고리즘
  • 캐시 라인
  • 캐시 사상 기법
  • 일관성 유지 기법
  • 캐시의 갯수
  • 캐시 간의 공유 및 협력 등

밑에는 내가 자주 언급된다고 생각하는 것만 적어두었다.

 

절대적으로 무조건 이게 훨씬 좋다!기보다 캐시가 사용되는 환경(웹 브라우저 등)에 따라서 내용이 달라질 수 있다.


캐시 기억 장치의 크기

캐시 메모리가 클 경우 저장할 수 있는 데이터가 많으므로 적중률(Hit Rate)은 높아지지만, 

반대로 용량이 커져 주소를 계산하는 데 시간이 소요되어 Hit time이 커지고, 결과적으로 접근 시간(AMAT)는 커질 것이다.

 

때문에 적중률은 높으면서 접근 시간이 낮아지도록 적절하게 크기를 정해야 한다.


인출 방식

주 기억 장치에서 캐시로 가져올 때 사용하는 방식으로

현재 필요한 정보만 인출하면 요구 인출(Demand Fetch),

현재 필요한 정보 외에도 필요할 것이라 예측되는 정보도 미리 인출하는 것사전 인출(Prefetch)라고 한다.


Cache Line

만약 A라는 데이터가 필요해서 메모리에서 가져와서 캐시에 넣는다고 가정하자.

이 때 필요한 데이터는 A이지만, 실제로는 A 주변에 있는 데이터까지 같이 가져와서 넣게 된다.

그리고 이 때 가져오는 데이터의 크기캐시 라인(Cache Line)이라고 한다.

 

캐시 라인은 위에서 언급한 공간 지역성을 사용해서 메모리 접근 횟수를 줄이기 위해 사용된다.


캐시 교체 알고리즘

캐시의 크기는 제한적이기 때문에 때에 따라서 교체가 필요하다.

 

어떠한 객체를 캐시에 보관하고 어떠한 객체를 캐시에서 삭제할 지 결정하는 것,

그것이 바로 캐시 교체 알고리즘이다.

 

대표적으로 다음과 같은 알고리즘이 언급된다.

  • OPT - Optimal: 앞으로 가장 오랫동안 사용되지 않을 캐시 교체
  • FIFO(First in First Out): 가장 먼저 들어간 캐시를 교체
  • LFU(Least Frequently Used): 사용 횟수가 가장 적은 캐시를 교체
  • LRU(Least Recently Used): 가장 오랫동안 사용되지 않은 캐시를 교체

위 알고리즘들은 페이지 교체 알고리즘과 버퍼캐싱 등에서도 사용된다.


요약

  • 캐시와 캐싱 기법
    • 캐시: 데이터나 값을 미리 복사해 놓는 임시 저장소
      • 캐시 사용 시 데이터 요청 시에 속도가 빨라진다.
      • 그러나 캐시의 용량은 작으며, 비싸다.
    • 캐싱 기법: 사용하게 될 데이터를 캐시에 저장해둠으로서 시간과 비용을 절약하는 것
    • CPU 캐시, 디스크 캐시, 데이터베이스, 웹 브라우저 등에서 사용
      • CPU 캐시: 레지스터와 메인 메모리 간의 병목 현상을 해결하기 위해 CPU 안에 있는 CPU 캐시를 사용
      • 데이터베이스: SQL 요청에 대한 결과를 캐시에 저장하여 동일한 요청이 있을 때 저장한 결과를 제공
      • 웹 캐시: 웹 브라우저에서 클라이언트가 사이트에 접속할 때 리소스 파일은 캐시에 저장
  • Cache Hit와 Cache Miss
    • Cache Hit: 캐시에 데이터가 있을 때
    • Cache Miss: 캐시에 데이터가 없을 때
  • 성능 지표
    • 캐시 적중률: 캐시 기억 장치가 있는 컴퓨터의 성능을 나타내는 척도
      • 캐시 적중률 = 적중 횟수 / 총 참조 횟수
    • AMAT: 평균 메모리 접근 시간, 컴퓨터의 메모리 성능을 나타내는 척도
      • AMAT = Hit time + Miss rate * Miss panalty
  • 데이터 지역성: 한번 사용한 데이터를 잠시 후에 다시, 혹은 그 주변 데이터를 다시 사용할 가능성이 높다는 특성
    • 시간 지역성: 한 번 사용한 데이터는 다시 사용할 가능성이 높다.
    • 공간 지역성: 주변 데이터를 다시 사용할 가능성이 높다.
  • 캐시 설계 시 고려사항
    • 캐시 기억 장치의 크기
      • 캐시 메모리가 크면 적중률은 높으나 접근 시간은 커짐
    • 인출 방식
      • 요구 인출: 현재 필요한 정보만 인출
      • 사전 인출: 필요할 것이이라 예측되는 정보도 미리 인출
    • Cache Line
      • 주 기억장치에서 주변에 있는 데이터까지 같이 들고 올 때 가져오는 데이터의 크기
      • 공간 지역성을 사용해 메모리 접근 횟수를 줄임
    • 캐시 교체 알고리즘: 어떠한 객체를 캐시에 보관하고 어떠한 객체를 캐시에서 삭제할 것인가 결정
      • 대표적인 알고리즘: OPT, FIFO, LFU, LRU
    • 그 외에도 캐시 사상 기법, 일관성 유지 기법, 캐시의 갯수, 캐시 간의 공유 및 협력 등이 고려

참고 자료

https://opentutorials.org/course/697/3839

 

Caching - 생활코딩

Caching 캐슁이란 저장한다는 뜻이다. 컴퓨팅에서 캐슁이란 오랜시간이 걸리는 작업의 결과를 저장해서 시간과 비용을 필요로 회피하는 기법을 의미한다. 캐슁은 고성능 에플리케이션을 만드는

opentutorials.org

[개발자 면접 질문] 운영체제 - CPU 캐시 - YouTube

 

CPU 캐시 이해하기 | 아이단은 어디갔을까 (aidanbae.github.io)

 

CPU 캐시 이해하기

CPU 캐시 이해하기 - 아이단의 블로그

aidanbae.github.io

 

[5] 캐시 기억장치 (tistory.com)

 

[5] 캐시 기억장치

1. 캐시 기억장치란? - 중앙처리장치(CPU)에 명령어와 데이터를 빠르게 제공하기 위해 주기억장치에 저장되어 있는 명령어와 데이터 일부를 복사해서 임시로 저장하는 장치 - 주기억장치보다 명

too-march.tistory.com

[컴퓨터구조]캐시메모리 -2 캐시메모리 설계시 고려사항(캐시크기, 알고리즘, 인출방식, 사상함수, 블록크기, 캐시숫자 등) : 네이버 블로그 (naver.com)

 

[컴퓨터구조]캐시메모리 -2 캐시메모리 설계시 고려사항(캐시크기, 알고리즘, 인출방식, 사상함

안녕하세요 오늘은 캐시메모리에 대해서 더 자세하게 알아볼게요! 캐시메모리가 아직 잘 모르겠다 하신분은...

blog.naver.com


마치며

정리할 때, 여기저기 막 파보면서 부스트캠프 때는 조금 얕게 공부했다는 느낌이 들었다..

별로 정리할 게 없는데...? 싶다가 계속 파보니 공부할 게 끊임없이 나와서 ㄷㄷ 하면서 정리한 듯.

'CS > OS' 카테고리의 다른 글

[OS] 프로세스 메모리 주소 영역  (1) 2023.06.06
profile

Bibbidi Bobbidi Boo

@비비디

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!