내 이해는 두 방법의 주요 차이점은 "쓰기"방법에서는 데이터가 캐시를 통해 주 메모리에 즉시 기록되는 반면 "후기 입"에서는 데이터가 "지연 시간"에 기록된다는 것입니다.
우리는 여전히 "후기"에 메모리를 기다려야하므로 "기입"의 이점은 무엇입니까?
내 이해는 두 방법의 주요 차이점은 "쓰기"방법에서는 데이터가 캐시를 통해 주 메모리에 즉시 기록되는 반면 "후기 입"에서는 데이터가 "지연 시간"에 기록된다는 것입니다.
우리는 여전히 "후기"에 메모리를 기다려야하므로 "기입"의 이점은 무엇입니까?
write back
메인 메모리에 쓰는 것이 CPU 캐시에 쓰는 것보다 훨씬 느리고 데이터가 짧을 수 있기 때문에 성능이 더 좋습니다. 복잡하지만 더 정교하며 현대 CPU의 대부분의 메모리는이 정책을 사용합니다.
답변:
주 메모리에 대한 연속 기입의 이점은 컴퓨터 시스템의 설계를 단순화한다는 것입니다. 연속 기입을 사용하면 주 메모리에 항상 최신 행 복사본이 있습니다. 따라서 읽기가 완료되면 주 메모리는 항상 요청 된 데이터로 응답 할 수 있습니다.
후기 입이 사용되는 경우 최신 데이터가 프로세서 캐시에 있고 때로는 주 메모리에 있습니다. 데이터가 프로세서 캐시에있는 경우 주 메모리에 오래된 데이터 복사본이있을 수 있으므로 해당 프로세서는 주 메모리가 읽기 요청에 응답하는 것을 중지해야합니다. 이것은 연속 기입보다 더 복잡합니다.
또한 Write-through는 수정 상태 가 필요하지 않기 때문에 캐시 일관성 프로토콜을 단순화 할 수 있습니다 . 수정 이 무효화 또는 라인을 축출하기 전에 캐시는 캐시 라인을 다시 작성해야한다는 국가 기록합니다. write-through에서 캐시 라인은 메모리에 이미 라인의 최신 사본이 있으므로 다시 쓰지 않고 항상 무효화 될 수 있습니다.
한 가지 더-메모리 매핑 된 I / O 레지스터에 쓰는 후기 입 아키텍처 소프트웨어에서는 쓰기가 캐시에서 즉시 전송되도록 추가 단계를 거쳐야합니다. 그렇지 않으면 다른 프로세서에서 라인을 읽거나 라인이 제거 될 때까지 코어 외부에서 쓰기가 표시되지 않습니다.
예를 들어 이것을 살펴 보겠습니다. 직접 매핑 된 캐시가 있고 쓰기 정책이 사용된다고 가정합니다. 따라서 캐시 라인에 유효한 비트, 더티 비트, 태그 및 데이터 필드가 있습니다. 연산이 있다고 가정합니다 : write A (여기서 A는 캐시의 첫 번째 줄에 매핑 됨).
프로세서의 데이터 (A)가 캐시의 첫 번째 줄에 기록됩니다. 유효한 비트 및 태그 비트가 설정됩니다. 더티 비트는 1로 설정됩니다.
더티 비트는 단순히 캐시에 마지막으로 가져온 이후 기록 된 캐시 라인임을 나타냅니다!
이제 다른 작업이 수행되었다고 가정합니다. 읽기 E (E도 첫 번째 캐시 라인에 매핑 됨)
직접 매핑 된 캐시가 있으므로 첫 번째 줄은 메모리에서 가져올 E 블록으로 간단히 대체 할 수 있습니다. 그러나 라인에 마지막으로 기록 된 블록 (블록 A)이 아직 메모리 (더티 비트로 표시됨)에 기록되지 않았으므로 캐시 컨트롤러는 먼저 메모리에 다시 쓰기 를 실행하여 블록 A를 메모리로 전송 한 다음 메모리에 읽기 작업을 실행하여 라인을 블록 E로 대체합니다. 더티 비트는 이제 0으로 설정됩니다.
따라서 쓰기 정책은 블록이 메모리 및 관련 캐시 라인에서 동일하다는 것을 보장하지 않습니다. 그러나 라인이 교체 될 때마다 처음에 쓰기가 수행됩니다.
쓰기 정책은 그 반대입니다. 이에 따르면 메모리에는 항상 최신 데이터가 있습니다. 즉, 캐시 블록이 기록되면 그에 따라 메모리도 기록됩니다. (더티 비트 사용 안함)
이 기사가 여기에 링크하는 데 도움이 될 수 있습니다 .
연속 기입 : 쓰기는 캐시와 백업 저장소 모두에 동 기적으로 수행됩니다.
Write-back (또는 Write-behind) : 쓰기는 캐시에만 수행됩니다. 수정 된 캐시 블록은 교체되기 직전에 저장소에 다시 기록됩니다.
Write-through : 데이터가 업데이트되면 캐시와 백엔드 스토리지 모두에 기록됩니다. 이 모드는 작동하기 쉽지만 캐시와 스토리지 모두에 데이터를 써야하기 때문에 데이터 쓰기 속도가 느립니다.
후기 입 : 데이터가 업데이트되면 캐시에만 기록됩니다. 수정 된 데이터는 캐시에서 데이터가 제거 된 경우에만 백엔드 스토리지에 기록됩니다. 이 모드는 데이터 쓰기 속도가 빠르지 만 업데이트 된 데이터가 스토리지에 기록되기 전에 정전이 발생하면 데이터가 손실됩니다.
Write-back 및 write-through는 쓰기 적중이 발생할 때, 즉 캐시에 요청 된 정보가있을 때 정책을 설명 합니다. 이 예에서는 단일 프로세서가 캐시를 사용하여 주 메모리에 쓰고 있다고 가정합니다.
Write-through : 정보가 캐시와 메모리에 기록되고 둘 다 완료되면 쓰기가 완료됩니다. 이것은 구현이 더 간단하다는 장점이 있으며 주 메모리는 항상 캐시 (단일 프로세서의 경우-다른 장치가 주 메모리를 수정하는 경우이 정책이 충분하지 않음)와 일관되며 읽기 실패 주 메모리에 쓰지 않습니다. 명백한 단점은 모든 쓰기 적중이 두 번의 쓰기를 수행해야한다는 것입니다. 그 중 하나는 더 느린 주 메모리에 액세스합니다.
후기 입 : 정보가 캐시의 블록에 기록됩니다. 수정 된 캐시 블록은 교체 될 때만 메모리에 기록됩니다 (실제로는 지연 쓰기 ). 각 캐시 블록의 특수 비트 인 더티 비트 는 캐시 블록이 캐시에있는 동안 수정되었는지 여부를 표시합니다. 더티 비트가 설정되지 않은 경우 캐시 블록은 "깨끗한"상태가되고 쓰기 미스로 인해 블록을 메모리에 쓸 필요가 없습니다.
장점은 쓰기가 캐시 속도로 발생할 수 있으며 동일한 블록 내에서 쓰기를 수행하는 경우 주 메모리에 한 번만 쓰기 만하면된다는 것입니다 (이전 블록이 교체 될 때). 단점은이 프로토콜을 구현하기가 더 어렵고, 주 메모리가 캐시와 일치하지 않을 수 있으며 (동기화되지 않을 수 있으며) 교체로 이어지는 읽기로 인해 더티 블록이 주 메모리에 기록 될 수 있다는 것입니다.
쓰기 누락 에 대한 정책은 첫 번째 링크에 자세히 설명되어 있습니다.
이러한 프로토콜은 최신 프로세서에서 일반적으로 사용되는 것처럼 다중 프로세서 및 다중 캐시가있는 경우를 처리하지 않습니다. 이를 위해서는보다 복잡한 캐시 일관성 메커니즘이 필요합니다. 연속 기입 캐시는 캐시에 대한 쓰기가 메모리에 즉시 반영되므로 프로토콜이 더 간단합니다.
좋은 자원 :
Write-Back은 더 복잡하고 복잡한 MOESI (Cache Coherence Protocol)가 필요하지만 시스템을 빠르고 효율적으로 만들기 때문에 그만한 가치가 있습니다.
Write-Through의 유일한 이점은 구현이 매우 간단하고 복잡한 캐시 일관성 프로토콜이 필요하지 않다는 것입니다.
write back
이 더 나은 성능 을 의미한다고 생각 합니까?