マシン ワード サイズ (またはそれ以下) の書き込みはシリアル化されますか? レジスタの内容を RAM にコピーするために必要なネイティブ オペコードは 1 つだけです。
6 に答える
RAM へのデータの書き込みはアトミックです。2 つの CPU が同時に同じ場所に書き込もうとすると、メモリ コントローラが書き込みの順序を決定します。1 つの CPU がメモリに書き込みを行っている間、もう 1 つの CPU は、最初の書き込みが完了するまで、必要な数のサイクルの間ストールします。その後、その値を上書きします。これは、競合状態と呼ばれるものです。
ネイティブ ワード サイズより小さい書き込みはアトミックではありません。その場合、CPU は古いメモリ値をレジスタに読み取り、新しいバイトをレジスタに書き込み、その新しい値をメモリに書き戻す必要があります。
これに依存するコードを持つべきではありません。複数の CPU が同じメモリ位置に同時に書き込もうとしている場合は、何か問題があります。
もう 1 つの重要な考慮事項は、キャッシュの一貫性の問題です。各 CPU には独自のキャッシュがあります。CPU がキャッシュにデータを書き込む場合、他の CPU がそのデータ値を読み取る場合は、そのデータ値の変更を認識する必要があります。
低レベルでこれを行うことを妨げるものは何もありません。ただし、RAM 書き込みはアトミックであるため、メモリ コントローラーはコアから 2 つの一見シミュレートされた書き込みを順次実行します。
そのネイティブオペコードは、RAMに直接書き込むよりもCPU上のキャッシュに書き込む可能性が高いのではないでしょうか。
彼らは試すことができますが、ハードウェアが最終的な決定要因となります。
2 つの CPU が同時にコマンドを発行する場合がありますが、RAM コントローラーは受信した各コマンドを個別に処理する必要はありませんか? したがって、CPU にとっては同時かもしれませんが、RAM コントローラーは、誰のコマンドが最初に処理されるかを決定します。
異なる値が書き込まれた場合、結果の RAM コンテンツが指定されないため、それらはすべきではありません。