ハードウェアポートをメモリアドレスにマッピングする実際のプラットフォームは何ですか?

StackOverflow https://stackoverflow.com/questions/4333849

質問

一部のプラットフォームでは、次のCまたはC ++コードがあるという声明を見ることがあります。

int* ptr;
*ptr = 0;

ハードウェアの入出力ポートに書面で書くことができます ptr そのポートがマップされているアドレスを保存するためにたまたま。通常、それらは「埋め込まれたプラットフォーム」と呼ばれます。

そのようなプラットフォームの本当の例は何ですか?

役に立ちましたか?

解決

私の経験のほとんどのシステムは、メモリマップI/Oを使用しています。 X86プラットフォームには、別のメモリマップされていないI/Oアドレススペースがあります( in/out プロセッサOp-Codesファミリ)。ただし、PCアーキテクチャは、より大きなアドレススペース、より速いアクセス(一般)、およびより簡単なプログラミング(一般)のデバイスI/Oの標準メモリアドレススペースも広範囲に使用しています。

プロセッサのメモリアドレススペースが非常に限られている場合があり、デバイスアクセスにその一部を使用することはほとんど意味がなかったため、最初に個別のI/Oアドレススペースが使用されたと思います。メモリアドレススペースがメガバイト以上まで開かれると、その理由はメモリアドレスからI/Oアドレスを分離する理由がそれほど重要ではなくなりました。

X86のように、個別のI/Oアドレス空間を提供するプロセッサの数がわかりません。 X86アーキテクチャが32ビットの領域に移動したとき、個別のI/Oアドレス空間がどのように好まれなくなったかを示すこととして、I/Oアドレススペースを64kbから増やすために何も行われませんでした(ただし、能力を追加しましたが1つの命令で32ビットのデータのチャンクを移動します)。 x86が64リアルムに移動したとき、I/Oアドレススペースは64kbのままで、64ビットユニットでデータを移動する機能を追加しませんでした...

また、最新のデスクトッププラットフォームとサーバープラットフォーム(または仮想メモリを使用する他のシステム)は、一般に、メモリマップであろうとなかろうと、アプリケーションがI/Oポートにアクセスすることを許可しないことに注意してください。そのアクセスはデバイスドライバーに制限されており、デバイスドライバーでさえ、物理アドレスの仮想メモリマッピングやDMAアクセスをセットアップするためのOSインターフェイスがあります。

組み込みシステムなどの小さなシステムでは、I/Oアドレスがアプリケーションによって直接アクセスされることがよくあります。メモリマップされたアドレスを使用するシステムの場合、通常、デバイスのI/Oポートの物理アドレスでポインターを設定し、そのポインターを他のポインターと使用するだけで実行されます。ただし、アクセスが正しい順序で発生して発生することを確認するには、ポインターを指していると宣言する必要があります。 volatile 物体。

メモリマップされたI/Oポート(X86のI/Oアドレススペースなど)以外のものを使用するデバイスにアクセスするために、コンパイラは通常、そのアドレススペースを読み書きできる拡張機能を提供します。このような拡張機能がない場合は、I/Oを実行するためにアセンブリ言語関数を呼び出す必要があります。

他のヒント

これはメモリマップI/Oと呼ばれ、開始するのに適した場所は ウィキペディアの記事.

最新のオペレーティングシステムは通常、ドライバーを書いていない限り、これからあなたを保護しますが、この手法はPCアーキテクチャにも関連しています。 DOS 640kbの制限を覚えていますか?これは、640Kから1MBのメモリアドレスがI/Oに割り当てられたためです。

プレイステーション。それが、システムの低レベルのグラフィックス(およびその他の)機能への直接的な最適化アクセスを取得した方法でした。

NDIS Windowsのドライバーは例です。これはメモリマッピングI/Oと呼ばれ、これの利点はパフォーマンスです。

見る 組み込みシステム メモリマップされたI/O EG Router、ADSL-Modems、Microcontrollerなどを使用するデバイスの例については。

ほとんどの周辺機器は、メモリマッピングレジスタを介してメインCPUと通信するため、ドライバーを書き込むときに主に使用されます。

Motorola 68KシリーズとPowerPCは大きなものです。

これを最新のWindowsで行うことができます(Linuxも提供していると確信しています)。メモリマッピングファイルと呼ばれます。 Windowsのメモリにファイルをロードしてから、ポインターを操作するだけで書き込み/変更できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top