본문 바로가기

CS

[컴퓨터구조] 캐시 메모리

캐시 메모리란?

  • 속도가 빠른 장치 ↔️ 느린 장치 간 속도 차이에 의한 병목 현상을 줄이기 위한 메모리

Cache의 장단점

  • 장점
    1. 속도가 매우 빠름
  • 단점
    1. 용량이 적음
    2. 비용이 비쌈 ( SRAM 가격이 비싸기 때문)

L1, L2, L3, 디스크 캐시 메모리

각 캐시의 위치

L1 : CPU 내부 ( 속도가 가장 빠르고, 용량이 가장 작음 )

L2 : CPU ↔️ RAM 사이

L3 : 메인보드

디스크 캐시 : 주기억장치(ROM, RAM)와 보조기억장치(하드디스크) 사이

  • CPU에 "L1", "L2", "L3" 캐시 메모리가 위치
  • L1, L2, L3는 속도와 크기에 따라 분류된 것으로 일반적으로 L1 캐시부터 사용 (L1에서 데이터를 찾지 못하면 L2, L3 순서로 참조)
  • 만약 L1 캐시가 128KB면, 64KB + 64KB로 나누어, 한쪽에는 명령어 처리 직전의 명령어를 임시 저장하고, 나머지 한쪽에는 실행 후 명령어를 임시저장.
듀얼 코어 프로세서?
L1 : 각 코어마다 독립된 L1 캐시 메모리 소유
L2 : 각 코어가 공유하는 L2 캐시 메모리 소유

작동 순서

  1. CPU가 주기억 장치(RAM, ROM)에서 데이터를 가져올 때, 자주 사용하는 데이터는 캐시 메모리에 저장
  2. 이후 해당 데이터를 다시 사용할 때, 주기억장치가 아닌 캐시 메모리에서 데이터를 가져옴

🔥캐시 메모리의 작동 이론🔥

  • 🔥시간 지역성🔥 (Least Recently Used , LRU)
    • for / while 같은 반복문의 증감 변수같은 데이터는 다시 참조될 가능성이 높다.
  • 🔥공간 지역성🔥 (Least Frequently Used, LFU)
    • A[0], A[1]과 같은 배열의 데이터 접근 시, 참조된 데이터 근처의 데이터가 잠시 후 사용될 가능성이 높다.
    • 이러한 공간 지역성을 바탕으로 옆에 위치한 데이터도 같이 가져와 미래에 쓰일 것을 대비

Cache Hit : 요청한 데이터가 캐시에 존재

Cache Miss : 요청한 데이터가 없음 ➡️ DRAM에서 가져옴

Cache Miss의 3가지 케이스

  1. Cold Miss (초기 저장)
    해당 메모리 주소를 처음 불러오는 경우
  2. Conflict Miss (중복)
    캐시 메모리에 A와 B를 저장해야 하는데, A와 B가 같은 캐시 메모리 주소에 할당되어 있는 경우
    (Direct Mapped Cache에서 많이 발생)
  3. Capacity Miss (용량 부족)
    캐리 메모리의 공간이 부족한 경우
    ➡️ 캐시의 용량을 키우면 접근속도가 느려지고, 파워를 많이 먹는 단점이 발생

캐시 메모리의 종류별 구조 및 작동 방식

1. Direct Mapped Cache 

  • 가장 기본적인 구조
  • DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되는 다대일 방식
  • 인덱스 필드 + 태그 필드 + 데이터 필드로 구성

장점

  • 간단하고 빠르다.

단점

  • Conflict Miss가 발생 ( DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되기 때문)

Fully Associative Cache

  • 캐시 메모리의 빈 공간에 마음대로 주소를 저장하는 방식
  • 조건이나 규칙이 없다 ➡️ 특정 캐시 Set 안에 있는 모든 블럭을 한번에 찾아 원하는 데이터를 검색
  • CAM이라는 특수 메모리 구조를 사용 ( CAM의 비용이 비싸다)
  • 저장할 때는 간단 (장) ↔️ 찾을 때는 복잡 (단)

Set Associative Cache

  • Direct + Fully
  • 특정 행을 저장(Direct) ➡️ 그 행의 어떤 열이든 비어있으면 저장하는 방식(Fully)

Direct 보다 검색 속도는 느리고, 저장은 빠름

Fully 보다 검색 속도는 빠르고, 저장은 느림 

  Direct Mapped Set Associate Fully Associate
검색 속도 빠름 (1) 중간 (2) 느림 (3)
저장 느림 (3) 중간 (2) 빠름 (1)

참고 출처

https://gyoogle.dev/blog/computer-science/computer-architecture/%EC%BA%90%EC%8B%9C%20%EB%A9%94%EB%AA%A8%EB%A6%AC.html