質問: デバイスのメモリにアクセスするようにpci / pcie barはどのように構成されていますか? 以前の 質問 で、pci/pcieデバイスが使用するメモリアドレスをシステムramにマップする必要はなく、「デバイス上の」メモリを参照することもできることを確認しました。 ramまたはレジスタ。しかし、この場合、barはどのように設定されますか?それは単にケースですか(構成中の場合): デバイスは、たとえば16mbのメモリを公開したいことをアドバタイズします。 barにはベースアドレスが割り当てられます。 その後、デバイスはオフセットを内部メモリにマッピングしますか? これは、デバイスが16mbのシステムメモリにアクセスしたい場合とどのように異なりますか(つまり、デバイスに独自のメモリがありませんか?)ありがとう!編集:アドレス指定は次の間でどのように異なりますか? a:デバイスには独自のメモリがありません。共有メモリを使用するビデオアダプタ。 b:デバイスにはメモリがあり、システムと共有します(たとえば、ramバッファを備えた架空のhddアダプタ)。どちらの場合も、barはosによって割り当てられ、アドレス可能なメモリを占有しますか?この区別は、ramで完全に占有されているシステムでは重要です(たとえば、4 gb ramがインストールされている32ビットシステムは、2gbの共有ram [状況(a)]。しかし、同じシステムには、オンボード2 gb ramキャッシュを備えた架空のhddアダプター用のアドレススペースが残っていません[状況(b)]?
回答: bar設定の解釈は正しいです。では、それはどのように異なりますか。デバイスのオンボードメモリ/レジスタは通常、特別なramであり、バイポートramの場合があります(各セルに2つのポートがある場合、1つはホストバスに接続され、もう1つはデバイスの内部バスに接続されます。両側からのより高速で同時アクセス)、それはレジスタ、またはデバイスのロジックを制御するfpgaの入力または出力である可能性があります フィールドプログラマブルゲートアレイ 。デバイスがramを使用してアクセスできるメインシステムdmaは、ほとんどの場合、まったく異なる指定になっています。最も一般的なケースでは、デバイスのデータソースまたはデータ宛先として使用されます。たとえば、ディスクドライブの場合、デバイスはそのメモリにアクセスして、データを読み込んだり、このデータをメディアに書き込んだりします。このような送信元と宛先の場所は、システムバッファによって制限されません。たとえば、ページング(仮想メモリへのスワップインと仮想メモリからのスワップアウト)は、問題のページの物理ページアドレスとの間で直接実行されます。dmaアクセスの他の可能な種類は、デバイスがシステムから自身のニーズのためにメモリ領域を要求する場合です。例の1つは、画面に表示する画像のバイナリ表現を保持するための独自のramが通常ない統合ビデオアダプタです。ただし、この場合はディスク書き込み操作と非常によく似ています。唯一の違いは、それが連続的であるということです。