2016-12-26 5 views
1

CPU命令がメモリから何かを読み出すと、CPUとMMUに特別な回路があり、命令が実行されると、そのアドレスがMMUに送られ、BUSを介してメモリから読み出し、その情報を宛先レジスタに入れる。私はまた、通常RAMに対応するいくつかのアドレスがいくつかのデバイスにマップされていることを学びました。だから私は最初に、いくつかのデバイスが私にマッピングされるアドレスを教えてくれる方法があると思います。その後、プロセッサはメモリアドレスからの読み取りを欺くことになり、回路によってはデバイスの読み込みが終了します。バスをメモリにマッピングするのはどの命令ですか?

どこでより良い説明がありますか?特にPCIとよりよく知られているデバイスを扱うx86アーキテクチャに適しています。

+0

質問を明確にする必要があります。タイトルの質問の答えには、I/Oポートの読み取り/書き込み、メモリの読み取り/書き込み、なし(ハードワイヤードまたはBIOS /チップセットなどによって設定されたもの)の3つが含まれます。あなたは本当にCPUを「だます」わけではありません。 CPUとメモリ/デバイス/バス間でデータをルーティングする物理メモリアドレスのデコードがあります。一部のアドレスは固定配線されている場合もあれば、変更可能な場合もあります。 –

答えて

1

メモリへのデバイスのマッピングを担当する指示はありません。です。

完全な答えは広すぎるかもしれませんが、例を1つまたは2つ作ることができます。
まず最初に、どのデバイスにリッスンするかを単に伝えるだけで、デバイスを構成できることを自分自身に納得させます。ハードウェアレベルでは、これは何も比較ではありません。

  1. 一部のデバイスには固定アドレスがあります。
    これらは、システムの最初の起動時に存在し、他の競合他社や後続互換性のために逐次的に複製されるレガシーデバイスです。

  2. 設定可能なデバイス。
    これらのデバイスには、待機するアドレス範囲を選択するためのジャンパ/スイッチがあります。競合を回避し、ソフトウェアを適切に構成することは、ユーザーの作業でした。

  3. Plug and playデバイス。
    最も有名なPnPバスはPCIですが、ISAとMCAではPnPもあります(ISAはPnPの「並べ替え」でした)。
    これらのデバイスは上記のようなものですが、ソフトウェアで構成可能であり、必要なリソース(IRQ、DMA、MMIO)は、ファームウェアとOSが競合することなく割り当てられるように列挙できます。

ここで、どのようにオプション3を達成できるのだろうか。答えは簡単です:メタアドレススペース。例えばPCIの場合

、アドレス0cf8h及び装置、デバイスconfiguration space上のレジスタを選択し、読み出しまたはそのレジスタを書き込むために使用0cfch
コンフィギュレーションスペースのレジスタを使用してデバイスをリベースすることができます。

のは、レジスタ10Hは、デバイスが耳を傾けるアドレスを保持していると仮定しますが、この擬似コードは、88888888h

uint32_t* select = MAKE_POINTER(0xCF8); 
uint32_t* data = MAKE_POINTER(0xCFC); 

*select = MAKE_SELECT(0, 1, 31, 0x10); //Bus 0, Device 1, Function 31, Register 0x10 
*data = 0x88888888;      //Set reg 0x10 to 0x88888888 

あなたが見ることができるようにデバイスをマップし、ポインタをdeferencingはメモリ位置への書き込みを生成し、 0cf8hと0cfchですが、これらの場所はハードウェアによってメインメモリにルーティングされるのではなく、Host-to-PCIブリッジコントローラに送られ、関心のあるデバイスがピックアップするPCIコンフィギュレーションスペースアクセスに変換します。以降、88888888hへのアクセスが行われると、

、これは再びメインメモリなるようにルーティングが、構成デバイスがリッスンしている(通常subtractive decodingの結果として)PCIバスにされていません。ない特別に細工されたCPU命令が存在するという意味で


。すべてが何らかの命令が実行された結果であるため、ある意味では、マップされているデバイスには「責任を負う」必要があります。この回答の残りの部分については、MMIOの仕組みを知りたいと思います。

IOアドレス空間ではx86のみですが、これで気をそらさないようにしてください。

ハードウェアは、ソフトウェアが実際にメモリがあるデバイスをマップする場合、後者が優先され、デバイスへのアクセスは行われません。