I/O ポートと物理ポートには違いがありますか?

I/O ポートと物理ポートには違いがありますか?

私の知る限り、以下の定義が適用されます。

  • I/Oポートはメモリアドレスプリンタなどの外部デバイスと通信するためのインターフェースとして使用されます。
  • 物理ポート (つまりコネクタ) は、デバイスを接続する物理インターフェースです。

この定義からわかるように、これらは 2 つの異なるものです。しかし、これ (私の定義) は正しいのでしょうか? それとも、これは実際には 1 つのものであり、物理ポートにはメモリ アドレスがあるのでしょうか?

以前の定義は、私が読んでいるコンピューター アーキテクチャに関する本から解釈したものですが、さらに読み進めるうちにだんだん混乱してきてます。私の定義が間違っている可能性があり、本を誤解しているのではないかと思います。

回答で I/O ポートの使用方法も簡単に説明していただければ幸いです... まったく理解できません。

答え1

I/O ポートと物理ポートには違いがありますか?

以下の定義が適用されます。

  • I/O ポートは、プリンターなどの外部デバイスと通信するためのインターフェースとして使用されるメモリ アドレスです。
  • 物理ポート (コネクタ) は、デバイスを接続する物理インターフェイスです。

あなたの定義は基本的に正しいです。

I/Oポートは、ソフトウェア(デバイス)ドライバー物理デバイス(物理ポートに接続されたデバイス)を使用します。

見るI/O システムより詳細な概要については、こちらをご覧ください。

答え2

「I/O ポート」は実際にはソフトウェア ドメインに属し、これは Intel x86 ハードウェアの従来の設計が原因で、メモリと I/O ポートの間に実際の違いがありました。両方のデバイスをアドレス バス上に配置して、メモリと通信したいときは、I/O ポートを「オフ」にし、メモリを「オン」にする信号をアサートし、I/O と通信したいときはその逆を行います。メモリと I/O には異なるアドレス指定スキームがあるため、ソフトウェアはそれを追跡する必要もありました。

メモリと I/O がデータ バスを共有する必要があったのは、16 ビット CPU (64k) で利用できるアドレス空間の量が限られていたためです。CPU が進化するにつれて、データ バスは 32 ビット (4 ギガ) や 64 ビット (18 京!) に拡大し、共有のオーバーヘッドは不要になりました。

現在使用されている 32 ビットおよび 64 ビット プロセッサでは、メモリと I/O の両方が直接アドレス指定され、I/O デバイスは別のアドレス領域にマップされます。この方法は、メモリ マップ I/O と呼ばれます。

物理ポートに関しては、I/O ポートとメモリ マップ I/O の両方が、コンピューターの背面にあるコネクタに送られる信号をさらにバッファリングしてフォーマットするハードウェア (RS-232 など) に接続されています。

答え3

I/O 空間 / ポートは、x86 固有のレガシー作成物です。昔は、メモリのアドレス指定と「I/O 周辺機器」のアドレス指定に複数の異なるアドレス空間がありました (PlayStation 4 や Xbox One など、CPU/GPU リソースをより適切に共有するために共有メモリ アドレス空間を使用する最近の傾向をご覧になったことがあるかもしれません)。

I/O 空間は、シリアル ポートやパラレル ポートなどの「実際の」ハードウェア周辺機器と通信するために使用されました。従来、I/O 空間アドレス 0x3F8 には、システム上の最初のシリアル ポートが配置されていました。このデバイスと通信するには、従来のメモリ アクセス命令を使用する代わりに、I/O アクセス命令を発行します。たとえば、Linux では、使用する幅に応じて、outb()、outl()、または outw() を使用します。繰り返しますが、これは全く異なるメモリ空間ですシステム メモリ マップよりも大きい。

PCとx86が成熟するにつれて(つまり、32ビット以上のメモリをネイティブにアドレス指定できるようになった)、メモリマップI/O はより一般的になっています。現在、システム メモリ マップ内の任意のメモリ位置 (0 から 0xFFFFFFFF まで) を特定のデバイスに動的にマップできます。PCI デバイスには、一定量のメモリまたは I/O スペースを必要とする BAR (ベース アドレス レジスタ) があります。したがって、たとえばメモリ アドレス 0x80000000 への単純な読み取り/書き込みは、実際にはその位置に '1' を書き込むと LED が点灯する物理 PCI デバイスにマップされる可能性があります。これは、仮想メモリ/プロセスごとのアドレス空間、さらにはユーザー空間とカーネル空間のアドレスの存在を無視した、極端に単純化された考え方です。

する要約する電気/コンピュータエンジニアとしての私の意見と見解では、「IOポート」はx86アーキテクチャ内の場所を指します。IOメモリ特定のデバイスにマップされるスペース。物理ポートは、USB、シリアルなど、コンピューティング デバイス上の実際の実体のあるコネクタになります。

面白い例として、Star Wars: Dark Forces のような古い DOS ゲームをプレイしたことを覚えているなら、SoundBlaster Pro の設定を思い出すでしょう。ポート 220、IRQ 5、DMA 1 などのパラメータを設定します。これは、サウンドカードが 0x220 の I/O 空間にあり、IRQ チャネル 5 (この時点ではハイエンド APIC はなく、おそらく Intel 8259 が 1 つか 2 つあったことを思い出してください) と DMA チャネル 1 を使用していることをゲームに伝えます。

答え4

私はあなたの意見には同意できません。ポートUSBポート、db-25(SR-232)コネクタなどの物理インターフェースに関連付けられています。予想どおり、I/Oポート「物理的な」と解釈されることも多いI/Oピン

しかし、これらのI/Oポート、またはピンのセットは、関連付けられていますI/Oレジスタ、大まかに言えば、I/Oポート確かにメモリアドレス

下の図を見ると、4つのI/Oポートケーブルを接続するポートです。各ポートには、I/Oレジスタたとえば、ピンのPB0ロジックレベル(図の最初のピン)は、レジスタ( 、 )の選択されたロジックレベルがそのピンでどのように組み合わされるかによって異なりDDRBます。PINBPORTBI/Oレジスタなどのには、DDRB関連するメモリアドレスコードを通じてアクセスし、そのロジック値を変更できます。

ここに画像の説明を入力してください

[画像リンク]

関連情報