멀티코어와 동기화

MESI 프로토콜에서 코어 0이 Modified(M) 상태로 가지고 있는 라인을 코어 1이 읽으려 할 때의 일반적인 동작은?

  1. A코어 0이 최신 값을 write-back하거나 코어 1에 직접 전달하고, 두 라인 모두 Shared(S) 상태가 된다
  2. B코어 1은 주기억장치의 오래된 값을 읽고, 코어 0은 M 상태로 남는다
  3. C코어 1의 읽기는 코어 0이 라인을 교체할 때까지 계속 대기한다
정답과 해설 보기

정답: A. 코어 0이 최신 값을 write-back하거나 코어 1에 직접 전달하고, 두 라인 모두 Shared(S) 상태가 된다

코어 1의 읽기 요청을 알게 된 코어 0은 자신이 최신 값을 가지고 있음을 알고 있으므로, 그 값을 주기억장치에 write-back하거나 코어 1에 직접 전달합니다. 그 후에는 두 코어가 같은 내용을 가지므로 둘 다 S 상태가 됩니다. 주기억장치의 오래된 값을 읽게 하지 않는 것이 중요합니다. 직접 전달하는 방식은 주기억장치를 거치는 것보다 빠르게 값을 전달할 수 있습니다.

  • A. 맞습니다. 최신 값이 공유됩니다.
  • B. 그렇게 하면 일관성이 유지되지 않습니다.
  • C. 교체를 기다리지 않고 즉시 대응합니다.
이 분야 연습하기 분야로 돌아가기

멀티코어와 동기화의 다른 문제

  1. 캐시 일관성의 스누핑(snooping) 방식에 대한 설명으로 올바른 것은?
  2. 코어 수가 많은 시스템에서 스누핑 방식 대신 디렉터리 방식의 일관성이 사용되는 이유로 올바른 것은?
  3. 일관성 프로토콜에는 무효화형과 갱신형이 있다. 많은 CPU가 무효화형을 채택하는 이유로 가장 적절한 것은?
  4. 멀티스레드 프로그램에서 일어나는 거짓 공유(false sharing)에 대한 설명으로 올바른 것은?
  5. 스레드별 카운터를 「long cnt[8];」처럼 나란히 둔 배열에서 거짓 공유가 발생하고 있다. 대책으로 가장 적절한 것은?

이 분야의 비교