답변:
코어가 2 개인 CPU가있는 경우 각 코어마다 자체 L1 캐시가 있습니다. Core1과 Core2가 동시에 동일한 메모리 부분을 캐시 할 수 있습니까?
예. 그렇지 않은 경우 성능이 끔찍합니다. 동일한 코드를 실행하는 두 개의 스레드를 고려하십시오. 두 L1 캐시 모두에서 해당 코드를 원합니다.
가능하다면 Core1과 Core2가 캐시에서 값을 편집 한 경우 주 메모리의 값은 얼마입니까?
이전 값은 주 메모리에 있으며 CPU가 읽지 않기 때문에 중요하지 않습니다. 캐시에서 수정 된 값을 꺼내기 전에 메모리에 기록해야합니다. 일반적으로 MESI 프로토콜 의 일부 변형 이 사용됩니다. 기존의 MESI 구현에서 한 캐시에서 값이 수정되면 같은 레벨의 다른 캐시에 전혀 존재할 수 없습니다.
그렇습니다. (두 캐시가 동일한 메모리 영역을 캐시하게 함) 실제로 발생할 수있는 문제입니다. 예를 들어 다양한 솔루션이 있습니다.
이 문제를 캐시 일관성 이라고 합니다 . 이 주제에 관한 Wikipedia 기사 에는 문제와 가능한 해결책에 대한 훌륭한 개요가 있습니다.
제목의 질문에 대답하려면 캐싱 프로토콜이 무엇인지에 따라 다릅니다. 다시 쓰기 인 경우, 캐시 제어기가 선택 공간이 없을 때만 캐시를 기본 메모리로 플러시합니다. 이미 채워진 공간에 새 캐시 블록을 넣습니다. 이전에 공간을 차지한 블록이 제거되고 해당 값이 주 메모리에 다시 기록됩니다.
다른 프로토콜은 연속 기입입니다. 이 경우, 캐시 블록이 레벨 n에 기록 될 때마다 레벨 (n + 1)의 해당 블록이 업데이트됩니다. (이것은 개념적으로 아래에 탄소 종이로 양식을 채우는 것과 유사합니다. 맨 위에 쓰는 것은 아래 시트에 복사됩니다.) 더 많은 쓰기 작업이 필요하기 때문에 속도가 느리지 만 캐시 간의 값은 더 일관됩니다. 후기 입 방식에서는 최상위 캐시 만 특정 메모리 블록에 대한 최신 값을 갖습니다.