1

私は、2 台のコンピューターが 32 ビット PCI バスを介して同じメモリにアクセスするマルチコンピューター環境で作業しています。

最初のコンピューターは 32 ビット int にのみ書き込みます。
*int_pointer = number;

2 番目のコンピューターは、32 ビット int からのみ読み取ります。
number = *int_pointer;

OS/CPUともに32bitアーキテクチャです。
PCI 搭載のコンピュータは Intel ベースです。
PCI カード上のコンピュータはパワー PC です。

私が心配しているケースは、読み取りコンピューターが変数を読み取ると同時に書き込み専用コンピューターが変数を変更し、読み取りコンピューターに無効なデータが発生する場合です。
メモリ内の同じ位置への読み取り/書き込みの原子性が複数のコンピューターで保持されているかどうかを知りたいです。

もしそうなら、以下は競合状態を防ぎます:

number = *int_pointer;
while(*int_pointer != number) {
    number = *int_pointer;
}

書き込みは 16ms* ごとに行われ、読み取りはランダムに行われることを保証できます。

*両方のコンピューターのタイマーが異なるため、時間はずれます。

4

2 に答える 2

0

私自身の質問に答えるには:

競合状態はありません。外部 PCI デバイスのメモリ コントローラは、すべてのメモリ読み取り/書き込み操作を処理します。すべてのデータ キャリアは少なくとも 32 ビット幅であるため、これらの 32 ビット内で競合状態は発生しません。

転送は DMA コントローラを使用するため、メモリとプロセッサ間の相互作用は正常に動作します。

ダイレクト メモリ アクセス -PCIを参照してください。

于 2013-08-29T20:48:30.897 に答える