1

説明を簡単にするために、実行中のスレッドは1つだけだと思います。以下は私の野蛮な憶測です。

1、CPUがメモリのアドレスからバイトを読み取る場合、同じアドレスから同じ値を繰り返し読み取ることができます。

2、CPUがポートからバイトを繰り返し読み取る場合、CPUは毎回異なる値を読み取る可能性があります。

2つの方法の違いは、ポートコントローラが各読み取り操作の後にポートの値を自動的に更新できることだと思います。

しかし、自分の発言を明確に裏付ける教科書は見つかりませんでした。

私は正しいですか?

4

1 に答える 1

5

IO命令は、ハードウェアと相互作用することになっています。したがって、IO命令は一般に、メモリセマンティクスに準拠していません(また、準拠することは想定されていません)。代わりに、セマンティクスは、通信するハードウェア(および対応するプロトコル)によって異なります。IOスペースをメモリとは考えないでください。

メモリ命令は、メモリとメモリマップドIOにアクセスできます。メモリマップドIOにアクセスすると、IO命令のように動作します。それらが実メモリにアクセスする場合にのみ、メモリセマンティクスが適用されます。これは、たとえば、メモリ位置への読み取りは、常にこの位置に書き込まれた最後の値を返すことを意味します。

CPUは、メモリマップドIOと実メモリに使用されるアドレス空間を区別することが重要です。たとえば、メモリマップドIOからのデータをキャッシュに格納したり、メモリ命令がメモリマップドIOの場所に投機的にアクセスしたりしてはなりません。このため、メモリマップドIOスペースへのアクセスは、実際のメモリへのアクセスよりも大幅に遅くなります。

メモリマップドIOと実メモリを区別するために、プロセッサは通常ページテーブルを使用しますが、メモリタイプ範囲レジスタのような他のメカニズムがあります。

最後に、メモリに書き込むことができる他のハードウェアが存在する可能性があります。例としては、複数のコアやダイレクトメモリアクセスを備えたシステムがあります。これらのシステムは、お互いを認識し、キャッシュコヒーレンシプロトコルを使用して正しいメモリセマンティクスを維持する必要があります。呪いのなかで、これにはIOマップドメモリと実メモリを区別する必要もあります。

結論は、実際のメモリもメモリのように動作し、メモリのセマンティクスに準拠しているということです。IOおよびメモリマップドIOは、任意の方法で動作できます。

于 2013-01-08T21:48:11.003 に答える