エンベデッドシステムスペシャリスト 2020年 午前2 問04
問題文
マルチコアプロセッサで用いられるスヌープキャッシュの説明として、適切なものはどれか。
選択肢
ア:各コアがそれぞれ独立のメモリ空間とキャッシュをもつことによって、コヒーレンシを保つ。
イ:各コアが一つのキャッシュを共有することによって、コヒーレンシを保つ。
ウ:共有バスを介して、各コアのキャッシュが他コアのキャッシュの更新状態を管理し、コヒーレンシを保つ。(正解)
エ:全てのキャッシュブロックを一元管理するディレクトリを用いて、キャッシュのコヒーレンシを保つ。
🔒 解説は解答すると表示されます
スヌープキャッシュ【午前2解説】
正解の理由
マルチコアプロセッサでは、複数のコアが同じメモリ上のデータをそれぞれのキャッシュに保持することがあります。一つのコアがデータを書き換えたとき、ほかのコアのキャッシュに古いデータが残ると、キャッシュ間の整合性(コヒーレンシ)が崩れてしまいます。
スヌープキャッシュ方式では、各コアのキャッシュコントローラが共有バス上の通信を監視(snoop)します。他のコアによるデータの更新や無効化を検知し、自分のキャッシュの状態を適切に変更することで、コヒーレンシを保ちます。
この仕組みを説明しているのは、共有バスを介して各コアのキャッシュが他のキャッシュの更新状態を管理するというウです。
解法ステップ
- 問われているのは、スヌープキャッシュの整合性維持の仕組みだと確認します。
- 「スヌープ」は「監視する」という意味だと押さえます。
- 共有バス上の通信を各キャッシュが監視し、他のキャッシュの更新を検知する選択肢を選びます。
選択肢別の誤答解説
- ア:各コアが独立したメモリ空間とキャッシュを持つことは、スヌープによるコヒーレンシ維持の説明ではありません。メモリ空間が独立しているだけで、共有データの整合性が自動的に保たれるわけでもありません。
- イ:一つのキャッシュを共有する方式の説明です。キャッシュを共有すれば整合性の問題を避けやすくなりますが、各コアのキャッシュがバスを監視するスヌープ方式とは異なります。
- ウ:各キャッシュが共有バス上の通信を監視し、他のキャッシュの更新に応じて状態を調整する方式です。スヌープキャッシュの説明として適切です。
- エ:ディレクトリで各キャッシュブロックの状態や保持者を管理する方式です。これはディレクトリ方式の説明であり、共有バスを監視するスヌープ方式とは異なります。
よくある誤解
- キャッシュを共有する方式と、スヌープ方式を混同する
どちらもコヒーレンシを実現する方法ですが、共有キャッシュは「キャッシュを共有する」方式、スヌープ方式は「各キャッシュが通信を監視する」方式です。 - ディレクトリ方式をスヌープ方式と混同する
ディレクトリ方式では、ディレクトリがキャッシュブロックの状態を記録して管理します。一方、スヌープ方式では各キャッシュがバス上の通信を監視します。 - スヌープがデータ本体を常に監視すると思う
主に監視するのは共有バス上の要求や更新などの通信です。その情報を基に、キャッシュの状態を調整します。
補足コラム
スヌープ方式は、共有バスで各キャッシュが通信を観察できる構成と相性がよい方式です。ただし、コア数が増えるとバス上の通信量が増え、監視に伴う負荷も大きくなります。そのため、多数のコアを持つシステムでは、ディレクトリ方式が使われることがあります。
FAQ
Q. スヌープ方式では、キャッシュ間でデータを直接確認するのですか?
A. 基本的には共有バス上の通信を監視し、他のコアからの更新要求などを検知します。その結果に応じて、自分のキャッシュのデータを無効化したり、状態を変更したりします。
A. 基本的には共有バス上の通信を監視し、他のコアからの更新要求などを検知します。その結果に応じて、自分のキャッシュのデータを無効化したり、状態を変更したりします。
Q. スヌープ方式とディレクトリ方式の違いは何ですか?
A. スヌープ方式は各キャッシュがバス上の通信を監視する方式です。ディレクトリ方式は、専用のディレクトリがキャッシュブロックの状態や保持者を管理する方式です。
A. スヌープ方式は各キャッシュがバス上の通信を監視する方式です。ディレクトリ方式は、専用のディレクトリがキャッシュブロックの状態や保持者を管理する方式です。
関連キーワード: キャッシュコヒーレンシ、共有バス、キャッシュコントローラ、ディレクトリ方式

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

