2017-06-03 14 views
5

メモリマップされたI/Oデバイスがあり、アドレス0x16D34にあるこのデバイスのレジスタに書き込む場合、0x16D34アドレスは実際には仮想アドレスであり、CPUは物理アドレスに変換します、物理アドレスにデータを書き込んでください。ポートマップされたI/Oを使用しているときに仮想メモリが使用されていますか?

しかし、ポートマッピングされたI/Oデバイス(たとえば、シリアルポート)はどうでしょうか。したがって、アドレス0x3F8にあるシリアルポートのレジスタに書き込む場合は、0x3F8の物理アドレスまたは仮想アドレス?


編集:私はx86アーキテクチャにしています。

+2

x86のように見えますが、メモリマップされた周辺機器ではありません。この特定の質問は、理解するのに役立つものではありません。あなたは全体像を得る必要があります。 PCアーキテクチャに関する良い本が良い読書になるでしょう。そして、あなたは何について尋ねますか?仮想メモリ/メモリマッピング**または** devicceドライバ?彼らは2つの非常に異なるアプローチです! – Olaf

+0

@Olaf周辺機器のように見えないのは、アドレス「0x16D34」ですか?それは私が与えたほんの数例であり、何も指摘していません。 – Steve

+0

IOポートはメモリアドレスではないため、物理ポートか仮想ポートかを尋ねることはできません。 – harold

答えて

3

x86/x86-64(ほとんどの他の最新のアーキテクチャではそれをサポートしていない)でのポートマップI/Oは、完全に別のアドレス空間で行われます。このアドレス空間はメモリマッピングの対象ではないため、仮想ポートアドレスは存在せず、物理ポートアドレスは存在しません。特別なinおよびout命令を使用してポートI/Oを実行する必要があります。単純なメモリアクセス(たとえばmov)はこの別のアドレス空間にアクセスできません。特権レベルに基づくアクセス保護が可能です。ほとんどの最新のOSは、デフォルトでユーザ空間プロセスがI/Oポートにアクセスするのを防ぎます。

たとえば、インテルの「インテル®64およびIA-32アーキテクチャー開発者用マニュアル:第1巻」(chapter 18 as of this writing)の「入出力」の章を調べることができます。

x86の初期段階では、ISAアドインカードを含む各デバイスでポートアドレスが固定されていたことに注意してください。あなたが運が良ければ、カードはデバイス間の範囲の衝突を避けるために、デバイスの可能なポート範囲の限定されたセットの1つを選択するために、jumpersのセットを持っていました。その後、Plug & Playが導入され、システムの起動時に選択を動的に行いました。 PCIはこれをさらに洗練し、I/Oバーは、オペレーティングシステムやファームウェアによって0x0000-0xffffアドレス空間内のどこにでもマッピングすることができます。多くの固有の制限のために、新しいハードウェアを設計する際には、ポートマップI/Oが強く推奨されていません。

+0

x86 CPUには、アドレスがバス上にあるときにメモリまたはI/Oのいずれかを選択するピンが含まれていますか?これは私が物事を覚えている方法ですが、大学は何年も前から私のためにありました([Memory-Mapped I/O](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/IO/mapped)。 html)):* "INとOUTとの間の唯一の違いはメモリからのロードと格納ですが、CPU上の出力は1つのピンです。このピンは、アドレスバス上のアドレスがメモリアドレスそのアドレスがI/Oアドレスであれば "1"を出力する。 – jww

+0

@jww今日のCPUにはメモリコントローラが内蔵されているため、メモリモジュールに直接接続されているピンが多いため、I/Oアドレッシングの必要はありません。彼らはまた、直接PCI Expressレーンを持っています。 PCIeは、差動シグナリングを使用するために(各方向の)単一組のワイヤでシリアルに送信されるメッセージ(アドレスとペイロードデータを含む)を使用する非常に少数のピンを使用します。たぶん、いくつかのレガシー周辺機器にとっては、おそらくサウスブリッジにあるでしょう。 – pmdj

0

あなたの質問はメモリマップI/OとポートマップIOの違いでしょう。通常、メモリマップまたはポートマップI/Oである外部デバイスを接続するプロセッサには、2つの方法があります。

メモリマップドI/O

メモリマップドI/Oは、メモリとI/Oデバイスの両方に対処するために同じアドレス空間を使用します。したがって、CPUがアドレスにアクセスするとき、物理RAMの一部を参照することもありますが、I/Oデバイスのメモリを参照することもできます(Memory-mapped I/O on Wikiベース)。

最初の例の値0x16D34は仮想メモリで、物理メモリにマップされます。 I/Oデバイスは同じ物理メモリを参照してCPUからのアクセスを許可します。

ポートI/O

をマッピングポートは、I/Oは、独立した専用のアドレス空間を使用し、マイクロプロセッサ命令の専用セットを介してアクセスされるマップされました。 2番目の例の0x3F8については、メモリとI/Oデバイスに固有のアドレスのアドレスです。これは、メモリマップI/Oで前述したように、メモリとI/Oデバイス間で共有されるアドレスではありません。Memory-mapped IO vs Port-mapped IO

関連する問題