Gibt es einen Unterschied zwischen einem E/A-Port und einem physischen Port?

Gibt es einen Unterschied zwischen einem E/A-Port und einem physischen Port?

Soweit ich weiß, gelten die folgenden Definitionen:

  • E/A-Ports sindSpeicheradressenWird als Schnittstelle zur Kommunikation mit externen Geräten, z. B. einem Drucker, verwendet.
  • Ein physischer Port (d. h. ein Anschluss) ist die physische Schnittstelle, an die Sie das Gerät anschließen.

Wie Sie an dieser Definition sehen können, handelt es sich um zwei verschiedene Dinge. Ist diese (meine Definition) jedoch korrekt? Oder ist dies tatsächlich eine Sache und der physische Port hat eine Speicheradresse?

Ich habe die frühere Definition aus einem Buch über Computerarchitektur übernommen, das ich gerade lese, aber je mehr ich davon lese, desto mehr werde ich verwirrt. Ich glaube, meine Definitionen sind vielleicht falsch und ich habe das Buch falsch interpretiert.

Ich wäre sehr dankbar, wenn in der Antwort auch kurz erklärt werden könnte, wie die E/A-Ports verwendet werden … ich verstehe es einfach nicht.

Antwort1

Gibt es einen Unterschied zwischen E/A-Port und physischem Port?

Es gelten die folgenden Definitionen:

  • I/O-Ports sind Speicheradressen, die als Schnittstelle zur Kommunikation mit externen Geräten, zB einem Drucker, verwendet werden.
  • Ein physischer Port (Anschluss) ist die physische Schnittstelle, an die Sie das Gerät anschließen.

Ihre Definitionen sind im Wesentlichen richtig.

Ein I/O-Port kommuniziert über einenSoftware-(Gerätetreiber)mit einem physischen Gerät (einem Gerät, das an einen physischen Port angeschlossen ist).

SehenI/O-Systemefür einen detaillierteren Überblick.

Antwort2

Ein „E/A-Port“ ist eigentlich eher im Softwarebereich angesiedelt, und das begann mit dem Legacy-Design der Intel x86-Hardware, bei dem es einen tatsächlichen Unterschied zwischen Speicher- und E/A-Ports gab. Man konnte beide Geräte auf dem Adressbus haben, und wenn man mit dem Speicher kommunizieren wollte, setzte man ein Signal, das die E/A-Ports „ausschaltete“ und den Speicher „einschaltete“ und umgekehrt, wenn man mit E/A kommunizieren wollte. Es gab ein unterschiedliches Adressierungsschema für Speicher und E/A, also musste die Software das auch im Auge behalten.

Der Grund, warum Speicher und E/A den Datenbus gemeinsam nutzen mussten, war der begrenzte Adressraum, der auf einer 16-Bit-CPU (64 KB) verfügbar war. Mit der Weiterentwicklung der CPUs wuchs der Datenbus auf 32 Bit (4 GB) und 64 Bit (18 Trillionen!) und der gemeinsame Overhead war nicht mehr nötig.

Bei den heute verwendeten 32-Bit- und 64-Bit-Prozessoren werden sowohl Speicher als auch I/O direkt angesprochen, die I/O-Geräte werden dabei einem anderen Adressbereich zugeordnet. Diese Methode nennt sich Memory Mapped I/O.

In Bezug auf physische Ports sind sowohl E/A-Ports als auch speicherzugeordnete E/A mit Hardware verbunden, die das Signal, das an einen Anschluss auf der Rückseite des Computers geht, zusätzlich puffert und formatiert (d. h. RS-232).

Antwort3

I/O-Speicherplatz/Ports sind eine x86-spezifische Legacy-Erstellung. In den guten alten Zeiten gab es mehrere verschiedene Adressräume (vielleicht haben Sie den jüngsten Trend zu gemeinsam genutzten Speicheradressräumen bemerkt, um CPU-/GPU-Ressourcen besser gemeinsam zu nutzen, wie beispielsweise bei der PlayStation 4 und Xbox One) zum Adressieren von Speicher und Adressieren von „I/O-Peripheriegeräten“.

Der E/A-Bereich wurde verwendet, um mit „echten“ Hardware-Peripheriegeräten zu kommunizieren, wie z. B. Ihrem seriellen oder parallelen Port. Normalerweise befindet sich an der E/A-Bereichsadresse 0x3F8 der erste serielle Port eines Systems. Um mit diesem Gerät zu kommunizieren, verwenden Sie keine herkömmlichen Speicherzugriffsanweisungen, sondern E/A-Zugriffsanweisungen. Unter Linux verwenden Sie beispielsweise outb(), outl() oder outw(), je nachdem, welche Breite Sie verwenden möchten. Auch hier gilt:Dies ist ein völlig anderer Speicherplatzals die Systemspeicherzuordnung.

Als PCs und x86 ausgereifter wurden (sprich: wir konnten jetzt nativ 32-Bit-Speicher und mehr ansprechen),im Speicher abgebildetI/O wird immer üblicher. Jetzt kann ein beliebiger Speicherort in der Systemspeicherzuordnung (sagen wir von 0 bis 0xFFFFFFFF) dynamisch einem bestimmten Gerät zugeordnet werden. Ein PCI-Gerät verfügt über BAR (Basisadressregister), die eine bestimmte Menge an Speicher ODER I/O-Speicherplatz erfordern. Daher kann ein einfacher Lese-/Schreibvorgang beispielsweise an die Speicheradresse 0x80000000 tatsächlich einem physischen PCI-Gerät zugeordnet werden, das eine LED umschaltet, wenn Sie eine „1“ an diesen Ort schreiben. Dies ist eine grobe Vereinfachung, die die Existenz von virtuellem Speicher/Adressraum pro Prozess und sogar Benutzer- vs. Kernel-Speicherplatzadressen vernachlässigt.

Also zuzusammenfassen, meiner Meinung und Ansicht als Elektro-/Computeringenieur, bezieht sich ein "IO-Port" auf einen Ort in der x86-ArchitekturIO-SpeicherSpeicherplatz, der einem bestimmten Gerät zugeordnet ist. Ein physischer Port wäre ein echter, greifbarer Anschluss an Ihrem Computergerät, sei es USB, seriell oder was auch immer.

Ein lustiges Beispiel: Wenn Sie sich an alte DOS-Spiele wie Star Wars: Dark Forces erinnern, erinnern Sie sich vielleicht an die Einrichtung Ihrer SoundBlaster Pro. Sie legen Parameter wie Port 220, IRQ 5, DMA 1 fest. Damit teilen Sie dem Spiel mit, dass sich Ihre Soundkarte im E/A-Bereich bei 0x220 befindet und IRQ-Kanal 5 verwendet (denken Sie daran, dass Sie zu diesem Zeitpunkt noch keinen High-End-APIC hatten, sondern wahrscheinlich einen oder zwei Intel 8259) und DMA-Kanal 1.

Antwort4

Ich würde Ihrer Aussage nicht zustimmen. Der BegriffHafenist mit einer physischen Schnittstelle verbunden, wie z. B. einem USB-Anschluss, einem DB-25-Anschluss (SR-232) usw. Wie erwartet ist der BegriffE/A-Anschlusswird auch häufig als die "physische"E/A-Pins.

Es ist jedoch wahr, dass dieseE/A-Anschlüsseoder eine Reihe von Pins haben zugeordneteE/A-Register, so dass man grob von einemE/A-Anschlussin der Tat einSpeicheradresse.

In der Abbildung unten sieht man4 E/A-Anschlüsse, an die Sie Kabel anschließen können. Jeder Port hat zugeordneteE/A-Register. Beispielsweise PB0hängt der Logikpegel des Pins (erster Pin in der Abbildung) davon ab, wie die ausgewählten Logikpegel der Register ( DDRB, PINBund ) an diesem Pin kombiniert werden. EinPORTBE/A-Register, wie beispielsweise DDRB, hat eine damit verbundeneSpeicheradresseauf die Sie über Code zugreifen und dessen logische Werte ändern können.

Bildbeschreibung hier eingeben

[Bildlink]

verwandte Informationen