← 질문 목록
#318깊이 0
코어마다 캐시가 따로인데 값이 어긋나지 않는 이유는?
캐시 줄마다 상태를 달아 두고 남이 같은 자리를 건드리면 내 것의 상태를 바꾸기 때문이다. 서로 엿듣기도 하고, 코어가 많으면 관리하는 자리를 따로 두고 거기서 알리기도 한다.
Exclusive
Shared
다른 코어가 같은 줄을 읽어 간다
Shared
Modified
내가 그 줄에 쓴다. 남의 것은 무효가 된다
Invalid
남이 그 줄에 썼다
Modified
Shared (앞의 상태로 돌아갑니다)
남이 읽으려 해서 내려 주고 함께 쓴다
Modified나 Exclusive 상태에서는 그 캐시 라인을 혼자 쓴다. Shared였다면 다른 코어의 사본을 먼저 무효로 만들고 써야 한다.
그래서 여러 코어가 같은 줄을 번갈아 쓰면 값이 계속 오간다. 서로 다른 변수인데 한 줄에 붙어 있어도 그렇다.
이것을 거짓 공유라 부른다. 변수 사이를 벌려 다른 줄에 놓으면 사라진다.
캐시 일관성은 하드웨어가 유지한다. 코드로 맞추는 것이 아니라 값이 어긋나지 않게 이미 지켜진다. 프로그래머가 다루는 것은 순서와 가시성 쪽이다.