I/O 連接埠和實體連接埠有差別嗎?

I/O 連接埠和實體連接埠有差別嗎?

AFAIK,以下定義適用:

  • I/O 連接埠有記憶體位址用作與外部設備(例如印表機)通訊的介面。
  • 實體連接埠(即連接器)是您插入裝置的實體介面。

正如您從這個定義中看到的,它們是兩個不同的東西。然而,這(我的定義)正確嗎?或者這實際上是一回事,物理連接埠有一個記憶體位址?

我從一本關於電腦體系結構的書中解釋了前一個定義,但現在我讀得更多,我慢慢地感到困惑。我認為我的定義可能是錯的,我誤解了這本書。

如果答案能簡要解釋一下 I/O 端口是如何使用的,我將非常感激......我只是不明白。

答案1

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 GB)和 64 位元(18 千萬億!),並且不需要共用開銷。

現在使用的32位元和64位元處理器,記憶體和I/O都是直接定址的,I/O裝置被映射到不同的位址區域。這種方法稱為記憶體映射 I/O。

對於實體端口,I/O 端口和內存映射 I/O 都連接到硬件,該硬體進一步緩衝和格式化(即 RS-232)信號,該信號發送到電腦背面的連接器。

答案3

I/O 空間/連接埠是 x86 特定的遺留建立。回到古老的說法,有多個不同的位址空間(您可能已經看到最近共享記憶體位址空間的趨勢,以更好地共享CPU/GPU 資源,例如在PlayStation 4 和Xbox One 中)用於尋址記憶體和定址“輸入/輸出外圍設備”。

I/O 空間用於與「真實」硬體週邊通訊,例如序列埠或並列埠。依照慣例,系統上的第一個序列埠將位於 I/O 空間位址 0x3F8 處。若要與該裝置通信,您可以發出 I/O 存取指令,而不是使用傳統的記憶體存取指令;例如,在 Linux 上,您可以使用 outb()、outl() 或 outw(),這取決於您打算使用的寬度。再次,這是一個完全不同的記憶體空間比系統記憶體映射。

隨著 PC 和 x86 的成熟(閱讀:我們現在可以本地尋址 32 位元記憶體等等),記憶體映射I/O 變得更加普遍。現在,系統記憶體映射中的任意記憶體位置(例如從 0 到 0xFFFFFFFF)可以動態映射到特定裝置。 PCI 裝置將具有需要一定量記憶體或 I/O 空間的 BAR(基底位址暫存器)。因此,簡單的讀取/寫入(例如記憶體位址 0x80000000)實際上可能會對應到實體 PCI 設備,當您向該位置寫入「1」時,該設備會翻轉 LED。這是一種嚴重的過度簡化,忽略了虛擬記憶體/每個進程位址空間甚至使用者與核心空間位址的存在。

所以為了總結,在我看來,作為一名電氣/計算機工程師,“IO 端口”指的是 x86 架構中的一個位置IO記憶體映射到某些特定設備的空間。實體連接埠是計算設備上的一些真實、有形的連接器,可以是 USB、序列埠等。

舉一個有趣的例子,如果您記得玩過舊的 DOS 遊戲,例如《星際大戰:黑暗力量》,您會記得設定您的 SoundBlaster Pro。您將設定連接埠 220、IRQ 5、DMA 1 等參數。兩個Intel 8259)和DMA 通道1。

答案4

我不同意你的說法。期限港口與實體介面相關聯,例如 USB 連接埠、db-25 (SR-232) 連接器等。輸入/輸出埠也常被解釋為“物理性的”輸入/輸出引腳

然而,這些確實是事實輸入/輸出埠,或一組引腳,有關聯輸入/輸出暫存器,因此人們可以粗略地考慮輸入/輸出埠確實是一個記憶體位址

如下圖所示,大家可以看到4 個 I/O 端口,您可以連接電纜。每個連接埠都有關聯的輸入/輸出暫存器。例如,引腳PB0邏輯電平(圖中的第一個引腳)將取決於暫存器(DDRBPINBPORTB)選擇的邏輯電平如何在該引腳處組合。一個輸入/輸出暫存器,例如DDRB,有一個關聯的記憶體位址您可以透過程式碼存取它並更改其邏輯值。

在此輸入影像描述

[圖片連結]

相關內容