キャッシュコヒーレンスとは
キャッシュの一貫性は、システムのデータセットが複数のエージェントによってアクセスおよび変更されたときに発生する自然な問題です。 これが問題となるコンピューターアーキテクチャの主要な領域は、マルチプロセッサコンピューターです。 マルチプロセッサコンピュータの各プロセッサには、ランダムアクセスメモリ(RAM)から情報を読み込んで格納する独自のキャッシュがあります。 2つのプロセッサがメモリの同じ領域にアクセスしている場合、特定の予防措置を講じないと、キャッシュの一貫性が失われます。
キャッシュの一貫性がなければ、マルチプロセッサシステムは機能できません。 この問題に対処し、潜在的な問題を回避するために開発されたいくつかの方法があります。 キャッシュベースの一貫性の損失を防ぐために使用される3つの方法は、ディレクトリベースの一貫性、スヌーピング、およびスナーフィングです。
ディレクトリベースの一貫性は、一貫性を確保するためのフィルターとして機能します。 データは、すべてのプロセッサがアクセスできるメモリの一部に配置されます。 メモリのその領域内に格納されている情報が変更されると、システムはキャッシュを更新するか、キャッシュを無効にします。
スヌーピングでは、キャッシュされたメモリロケーションへのすべてのアクセスをプロセッサが監視する必要があります。 これにより、プロセッサは書き込み操作がいつ発生したかを知ることができます。 書き込み操作がいつ発生するかを知ることにより、プロセッサはキャッシュを更新できます。
スナーフィングは、スヌーピングに非常に似ています。 スナーフィングには、キャッシュされたメモリ位置へのアクセスの監視だけでなく、メモリに保存されている実際の情報の監視も含まれます。 メモリの書き込みが発生すると、キャッシュを新しい情報で更新できます。
ディレクトリベースのコヒーレンスシステムは、待ち時間が比較的長いため、処理が遅くなります。 より低い帯域幅要件により、ディレクトリベースのコヒーレンスシステムは、キャッシュコヒーレンスの大規模アプリケーションで実用的になります。 システムが使用するプロセッサが多いほど、ディレクトリベースのコヒーレンスシステムを使用することで得られる利点が増えます。
スヌーピングははるかに高速な方法です。 この方法では、ディレクトリベースのアプローチよりも多くの帯域幅が必要です。 この方法は、プロセッサが比較的少ないシステムで効果的に使用できます。
スナフィングは通常、キャッシュの一貫性を維持する方法としては使用されません。 これは主に、スヌーピングとディレクトリベースの方法の両方と比較して、スナーフィングにはより多くのリソースを使用する必要があるためです。 スナフシステムが機能するためには、メモリアドレスとメモリのこれらの領域に格納されているデータの両方を追跡する必要があります。 この方法で使用される帯域幅と処理の量は、キャッシュの一貫性を維持するほとんどのアプリケーションにとって望ましくありません。