---
description: 캐시 메모리
---

# Cache memory

**캐시 메모리**는 속도가 빠른 장치와 느린 장치 사이의 병목현상을 줄이기 위한 메모리입니다.

메인메모리(RAM)와 CPU사이에서 자주 사용되는 데이터를 캐시에 저장해서 사용해서 **속도를 향상**시킵니다.

대신 **용량이 작고** **비싸다**는 단점이 있습니다.

<details>

<summary>역할과 목적</summary>

캐시 메모리의 주요 목적은 주 메모리로부터 데이터를 빠르게 읽고 쓰는 것입니다. 주 메모리에 비해 캐시 메모리는 더 빠른 액세스 시간을 가지며, 프로세서가 빈번하게 사용하는 데이터와 명령어를 저장합니다. 이를 통해 프로세서가 더 빠른 실행 속도를 제공하고 주 메모리에 대한 액세스 지연 시간을 줄입니다.

</details>

<details>

<summary>구조와 계층 구조</summary>

* 캐시 메모리는 주로 세 가지 유형으로 나뉩니다.
  * **레벨 1 캐시 (L1 Cache)**: L1 캐시는 프로세서와 가장 가깝게 위치하며 작고 빠른 캐시입니다. 주로 명령어와 데이터를 분리하여 저장하며, 프로세서 코어마다 하나씩 있을 수 있습니다.
  * **레벨 2 캐시 (L2 Cache)**: L2 캐시는 L1 캐시보다 크고 상대적으로 느린 캐시로, 여러 코어에서 공유하거나 각 코어에 별도로 제공될 수 있습니다. 레벨 2 캐시는 주로 데이터를 저장하며 L1 캐시보다 큰 용량을 가집니다.
  * **레벨 3 캐시 (L3 Cache):** 다단계 캐시 메모리 구조에서 가장 높은 계층의 캐시로, 주로 멀티코어 프로세서와 다중 코어 프로세서 시스템에서 사용됩니다. L3 캐시는 프로세서의 성능을 향상시키고 캐시 계층 구조의 효율성을 개선하는 데 기여합니다.

</details>

<details>

<summary>작동 원리</summary>

캐시 메모리는 주 메모리에서 데이터를 읽어와 **캐시 라인(Cache Line)**&#xC5D0; 저장합니다. 캐시 라인은 작은 블록 단위로 분할되며, 프로세서가 액세스한 데이터 주변의 데이터도 함께 저장됩니다.

프로세서가 데이터를 요청할 때, 캐시 메모리에 그 데이터가 이미 존재하는지 확인합니다. 만약 데이터가 캐시에 있으면 (캐시 히트(Cache Hit)), 주 메모리로 가는 대신 캐시에서 데이터를 읽어옵니다. 데이터가 캐시에 없는 경우(캐시 미스(Cache Miss)), 데이터를 주 메모리에서 가져와 캐시에 쓰고 나서 프로세서에 전달합니다.

</details>

{% hint style="info" %}
**캐시 라인**

캐시 라인(Cache Line)은 캐시 메모리의 작은 저장 단위입니다. 캐시 메모리는 데이터 및 명령어를 효율적으로 관리하기 위해 주 메모리로부터 데이터를 블록 단위로 가져와 저장



특징

* 고정크기
* 블록 단위 저장
{% endhint %}

<details>

<summary>캐시 정책</summary>

캐시 메모리에서 데이터를 관리하기 위한 다양한 정책이 존재합니다. 이러한 정책에는 LRU(Least Recently Used, 시간참조성과 연관해서 얘기하면 좋을것 같음), FIFO(First-In, First-Out), 랜덤 폐기(Random Replacement) 등이 포함됩니다. 이러한 정책은 캐시의 효율성과 성능에 영향을 미칩니다.

</details>

<details>

<summary>캐시 일관성</summary>

다중 코어 또는 다중 프로세서 시스템에서는 캐시 일관성이 중요합니다. 캐시 일관성은 여러 캐시 간에 데이터 일관성을 유지하고 갱신하는 메커니즘을 의미합니다.

</details>

{% hint style="info" %}
**캐시 미스**

캐시 미스란 가져오려는 데이터가 캐시메모리에 없는 경우를 의미합니다.

캐시 미스의 종류는 **Cold miss**, **Conflict miss**, **Capacity miss**가 있습니다.

**Cold miss**는 해당 데이터를 처음 호출해서 없는 경우를 의미합니다.

**Conflict miss**는 여러개의 명령어 주소가 같은 캐시메모리 주소에 저장되어있는 경우 발생합니다.

**Capacity miss**는 캐시메모리의 공간이 부족해서 발생합니다.
{% endhint %}

{% hint style="info" %}
**캐시 매핑**

캐시에 데이터 주소를 저장하는 방식을 의미합니다.

직접(direct),연관(associate),집합 연관(set associate) 맵핑이있습니다.

*   **직접 사상**

    직접 사상은 캐시와 메모리를 같은 크기로 나누어서 순서대로 매핑하는 것을 말합니다.

    블럭단위로 저장하기 때문에 캐시의 공간활용을 제대로 할수 없다는 단점이있습니다.
*   **연관 사상**

    연관 사상은 비어있는 캐시 메모리 공간이 있으면 저장하는 방식입니다.

    적중률이 높다는 장점이 있고 저장할때는 간단하다는 장점이 있습니다.

    하지만 데이터를 규칙이 없어서 검색할때 시간이 오래걸립니다.
*   **세트 연관 사상**

    세트 연관 사상은 직접사상과 연관사상의 장점을 합친 사상방법입니다.

    캐시 메모리는 **세트로 구분**되고 **세트내에 2개 이상의 슬롯**을 가집니다.

    만약 세트가 n개있고 세트당 슬롯이 1개라면 직접 연관사상입니다.

    세트가 1개있고 세트당 슬롯이 n개라면 연관사상입니다.

    따라서 세트번호로 먼저 탐색해서 탐색 수를 줄이고 무작위로 배치해서 직접사상의 단점을 보완하였습니다.
{% endhint %}
