ここ からメモリマップI/Oについて勉強しています。私は以下を読みました:
CPUから見ると、I/Oデバイスは、次の3つの一般的なタイプの特殊用途レジスタのセットとして表示されます。
- ステータスレジスタは、I/Oデバイスに関するステータス情報をCPUに提供します。これらのレジスタは多くの場合読み取り専用です。つまり、CPUはビットを読み取ることしかできず、変更することはできません。
- 構成/制御レジスタは、デバイスを構成および制御するためにCPUによって使用されます。これらの構成レジスタのビットは書き込み専用である可能性があるため、CPUはビットを変更できますが、読み戻すことはできません。コントロールレジスタのほとんどのビットは、読み取りと書き込みの両方が可能です。
- データレジスタは、I/Oデバイスからのデータの読み取りまたはI/Oデバイスへのデータの送信に使用されます。
この画像(リンクしたページから)はレジスタを示しています。
しかし、私が理解していないのは、それらのレジスターがデバイス自体の一部であるのか(たとえば、プリンターの一部であるのか)、またはコンピューターの一部なのか?
コンピューター、コントローラー、およびデバイスは、広くファジーな概念です。これは、非常に多くの異なる説明がある理由を説明しています。
ハードウェアコントローラーとは何ですか?
controller は異なる意味を持ちます。例えば:
経験則として、コンピューターとデバイスの間にケーブルがいくつかある場合、ケーブルの両側に少なくとも1つのコントローラーがあることに間違いはありません。
コントローラはコンピュータにありますか?
これは、コンピューターに設定した境界によって異なります。
ただし、コントローラーがコンピューター側にあるという事実は、デバイス側に(非表示の)コントローラーがあることを排除するものではありません。
今すぐDMAに!
コントローラーがバスに直接接続されている場合(前のレイドコントローラーの例を参照)、またはコントローラーがマザーボード上にあり、バスに接続されている場合があります。
バスを介してI/Oを行うには、プロセッサがデバイスをバイト単位またはワード単位でアドレス指定し、メモリにコピーする必要があります。この単純なコピータスクはCPUをビジー状態に保つため、これは非常に非効率的です。
したがって、DMAがあります。プロセッサは、DMAコントローラーにジョブを実行するように指示し、DMAコントローラーはデバイスをアドレス指定して、取得したバイトをCPUを解放して、より興味深いタスクを実行できるようにします。
それらはデバイスの一部です。
それらはメモリの一部であるかのように扱われます。これは、メモリとデバイスが同じバスに接続されているために機能します。あなたは彼らと同じように話します。
カードをマザーボードに接続したことがある場合は、デバイスをバスに接続したことがあるでしょう。
コンピュータに接続されているすべてのデバイスはプラグアンドソケットで接続され、ソケットはデバイスコントローラに接続されます。デバイスコントローラーは、バイナリコードとデジタルコードを使用します。各デバイスコントローラーには、ローカルバッファーとコマンドレジスタがあります。割り込みによりCPUと通信します。デバイスのコントローラーは、そのデバイスの操作において重要な役割を果たします。デバイスとオペレーティングシステム間のブリッジとして機能します。
コントローラーをデバイスの一部と考えるのはなぜですか?なぜなら、デバイスのプラグを抜くと、通常、コントローラーがそれに対応するからです。
2つの実装があります。コントローラが「サウスブリッジ」と一緒に配置されている場合、DMA(ダイレクトメモリアクセス)のアーキテクチャについて説明できます。
最新のアーキテクチャでは、コントローラはデバイスに配置できます。これは、中断を処理するための非常に単純な例です。
一般に、コンピューターエンジニアリングの最新の進歩により、オンボードのデバイスの独自の「システムリソース」を見つけることができるため、コントローラーはデバイスの一部と考えることができます。デバイスが「システムリソース」を所有していない場合、デバイスはコンピューターのシステムリソースを使用します。もちろん、この場合、コントローラーはコンピューターのマザーボードに配置されます。
ここに非常に明確な説明があります: https://eleccompengineering.files.wordpress.com/2014/07/structured_computer_organization_5th_edition_801_pages_2007_.pdf また、第6版はより強力です。