---
title: "캐시 일관성: 여러 코어가 같은 주소의 값을 공유하는 법"
author: "Lee"
published_at: "2026-10-02T12:15:00.553Z"
updated_at: "2026-09-30T09:50:51.752Z"
tags: ["컴퓨터공학","컴퓨터구조"]
canonical_url: "https://ariser.io/@writer_a1cd615ab19e/%EC%BA%90%EC%8B%9C-%EC%9D%BC%EA%B4%80%EC%84%B1-%EC%97%AC%EB%9F%AC-%EC%BD%94%EC%96%B4%EA%B0%80-%EA%B0%99%EC%9D%80-%EC%A3%BC%EC%86%8C%EC%9D%98-%EA%B0%92%EC%9D%84-%EA%B3%B5%EC%9C%A0%ED%95%98%EB%8A%94-%EB%B2%95"
ai_assisted: false
---

# 캐시 일관성: 여러 코어가 같은 주소의 값을 공유하는 법

[원문](https://ariser.io/@writer_a1cd615ab19e/%EC%BA%90%EC%8B%9C-%EC%9D%BC%EA%B4%80%EC%84%B1-%EC%97%AC%EB%9F%AC-%EC%BD%94%EC%96%B4%EA%B0%80-%EA%B0%99%EC%9D%80-%EC%A3%BC%EC%86%8C%EC%9D%98-%EA%B0%92%EC%9D%84-%EA%B3%B5%EC%9C%A0%ED%95%98%EB%8A%94-%EB%B2%95)

여러 코어가 각자의 캐시에 같은 변수의 복사본을 보관하면 한 코어의 쓰기가 다른 복사본과 충돌할 수 있다. 캐시 일관성은 같은 메모리 위치에 대한 읽기와 쓰기가 규정된 관계를 유지하도록 관리하는 문제다. 모든 코어의 캐시와 RAM을 매 순간 같은 값으로 채우는 것보다, 누가 유효한 복사본을 읽고 누가 변경 권한을 갖는지 조정하는 관점이 정확하다.

![두 코어가 x=0을 공유하다 A의 쓰기 뒤 A는 수정 상태가 되고 B의 옛 복사본은 무효화되는 그림](/api/v1/media/14973869-2835-4543-8bb7-04503d695fa5)

*같은 라인의 읽기 복사본과 변경 권한을 프로토콜로 조정한다.*

## 복사본의 상태를 관리한다

A와 B가 값 0이 든 같은 라인을 읽어 각자 캐시에 보관했다고 하자. A가 그 값을 1로 바꾸려면 다른 읽기 복사본을 무효화하는 등의 프로토콜을 진행할 수 있다. B는 이전 라인을 더 이상 유효하게 쓰지 못하고 다음 접근에서 새 값을 얻는 경로를 밟는다. 이 과정은 코어 사이의 연결망과 상태 메시지를 이용한다.

MESI라는 대표적인 모델은 Modified, Exclusive, Shared, Invalid 상태를 구분한다. 수정된 독점 복사본인지, 깨끗하고 독점적인 복사본인지, 여러 캐시가 함께 가진 깨끗한 복사본인지, 유효하지 않은지를 나타낸다. [Stanford의 캐시 일관성 자료](https://gfxcourses.stanford.edu/cs149/fall25content/media/cachecoherence/14_coherence.pdf)는 이런 상태와 쓰기 무효화의 원리를 설명한다.

## RAM이 항상 최신 저장소는 아니다

수정된 라인이 한 코어의 캐시에 있으면 RAM의 내용은 아직 이전 값일 수 있다. 다른 코어가 최신 값을 얻을 때 소유 캐시가 제공하거나, 프로토콜에 맞는 전달·쓰기 과정이 수행될 수 있다. 그래서 메모리에 있는 값만 보고 현재 공유 상태를 설명하기 어렵다. 유효한 최신 값을 누구에게서 얻을지에 관한 합의가 핵심이다.

스누핑 방식은 관련 통신을 관찰해 상태를 조정하고, 디렉터리 방식은 공유자와 소유자 정보를 관리해 필요한 대상에 메시지를 보낸다. 코어 수와 연결 구조가 커지면 모든 코어가 모든 요청을 보는 비용이 부담스러울 수 있다. 프로토콜은 정확성뿐 아니라 통신량과 확장성도 고려한다.

## 캐시 일관성과 메모리 순서는 다르다

일관성은 주로 같은 위치의 값 관계를 다룬다. 서로 다른 두 위치에 대한 접근이 다른 코어에 어떤 순서로 보이는지는 메모리 일관성 모델이 정한다. 데이터 값을 먼저 쓰고 준비 플래그를 나중에 썼다고 해서, 적절한 동기화 없이 다른 코어가 반드시 같은 순서로 관찰한다고 가정할 수 없다. coherent한 CPU에서도 언어의 잠금과 원자적 순서 규칙이 필요하다.

일반 변수를 여러 스레드가 동기화 없이 읽고 쓰는 프로그램은 캐시 프로토콜이 있다는 이유만으로 안전해지지 않는다. 컴파일러의 변환과 언어 메모리 모델도 함께 적용되기 때문이다. 하드웨어가 같은 라인의 복사본을 조정하는 문제와 프로그램이 합법적으로 상태를 교환하는 규칙을 분리해야 한다.

서로 다른 변수가 같은 라인에 들어 있으면 각 코어가 자기 변수만 바꿔도 라인 소유권을 주고받을 수 있다. 이를 거짓 공유라고 부른다. 논리적으로 독립된 데이터인데 통신 비용이 생기는 것이다. 쓰기 주체별 자료를 분리하거나 갱신 횟수를 줄이면 도움이 될 수 있지만 메모리 낭비와 배치 조건도 살펴야 한다.

캐시 일관성은 공유 메모리 멀티코어의 기본 조건이며, 잠금 경쟁과 원자적 카운터 비용을 이해하는 데도 중요하다. 같은 주소의 최신 값에 관한 합의, 다른 주소들 사이의 관찰 순서, 소프트웨어 동기화는 각각 다른 책임이다. 이 세 층을 구분하면 코어를 늘렸는데 느려지는 이유와 올바른 공유 방식이 함께 보인다.

### 참고 자료

- [Stanford CS149 — Cache Coherence](https://gfxcourses.stanford.edu/cs149/fall25content/media/cachecoherence/14_coherence.pdf)
