멀티코어와 동기화

하드웨어 트랜잭셔널 메모리(hardware transactional memory)의 개념으로 올바른 것은?

  1. A임계 구역을 투기적으로 실행하고, 다른 스레드와 충돌이 없으면 한꺼번에 확정(commit)하며, 충돌하면 취소하고 재시도한다
  2. B모든 메모리 읽기·쓰기를 은행 거래처럼 디스크에 기록한다
  3. C메모리 쓰기를 금지하고 읽기만 허용한다
정답과 해설 보기

정답: A. 임계 구역을 투기적으로 실행하고, 다른 스레드와 충돌이 없으면 한꺼번에 확정(commit)하며, 충돌하면 취소하고 재시도한다

트랜잭셔널 메모리에서는 임계 구역을 트랜잭션으로 실행하고, 그동안의 쓰기는 임시적인 것으로서 다른 곳에 보이지 않게 합니다. 다른 스레드가 같은 데이터에 접근하지 않았다면 마지막에 모든 쓰기를 한 번에 확정하고, 충돌이 있으면 전부 취소하고 재시도하거나 일반 락으로 전환합니다. 충돌이 적으면 거친 단위 락 그대로도 세밀한 단위 락에 가까운 병렬성을 얻을 수 있습니다.

  • A. 맞습니다. 락을 잡지 않고 병렬로 실행할 수 있는 경우가 있습니다.
  • B. 디스크 기록과는 관계없습니다.
  • C. 쓰기도 수행합니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 조건 변수(condition variable)로 「큐가 비어 있지 않게 될 때까지 기다린다」고 할 때, 대기에서 깨어난 뒤 조건을 if문이 아니라 while문으로 다시 확인하는 이유로 올바른 것은?
  2. 두 코어가 각자의 캐시에 변수 x의 복사본을 가지고 있다. 코어 0이 x에 쓴 뒤 코어 1이 x를 읽을 때, 캐시 일관성(cache coherency) 메커니즘이 없다면 일어날 수 있는 문제는 무엇인가?
  3. 캐시 일관성 프로토콜인 MESI의 네 가지 상태 조합으로 올바른 것은?
  4. MESI 프로토콜에서 캐시 라인이 Modified(M) 상태일 때의 의미로 올바른 것은?
  5. MESI 프로토콜에서 Exclusive(E) 상태의 라인에 해당 코어가 쓸 때의 동작으로 올바른 것은?

이 분야의 비교