Was Sie in Ihrem Beitrag beschreiben, ist ein "typisches" Szenario, insbesondere wenn sich die E / A auf einem anderen Bus als der CPU befindet (PCI / PCI ist ein gutes Beispiel) oder wenn Sie mit einem Controller anstatt mit dem tatsächlichen E / A-Gerät sprechen . Die Realität ist natürlich viel unordentlicher.
Hardware kann so ausgelegt werden, dass sie auf jede Weise reagiert, die der Hardware-Designer Anforderungen von der CPU lesen / schreiben möchte.
Zum Beispiel ist es möglich:
Machen Sie den Zugriff auf eine E / A-Adresse so, dass das Gerät etwas tut (lesen oder schreiben).
Machen Sie es so, dass Lese- und Schreibvorgänge an dieselbe E / A-Adresse erfolgen, die tatsächlich auf verschiedene Register oder Funktionen des Geräts zugreifen.
Einfache Geräte benötigen möglicherweise kein Daten-, Steuer- und Statusregister. Der PC-Parallelanschluss ist ein Beispiel. Es wird von einem einzelnen Byte im E / A-Adressraum gesteuert.
Natürlich wären solche Geräte direkt von der CPU ansprechbar und nicht "hinter" einem Controller. Parallele Schnittstelle als ISA-Gerät der alten Schule. Heutzutage handelt es sich tatsächlich um den LPC-Bus, aber LPC funktioniert wie ISA.
Das Vorstehende war in der Zeit vor dem PC weitaus häufiger, und ich glaube, dass es auf Nicht-x86-Plattformen wie ARM und MIPS üblich ist.
Komplexe Controller (die meisten) benötigen einen zusätzlichen Mechanismus, mit dem Sie angeben können, mit welchem Gerät Sie mit dem Controller verbunden sind. I2C ist so.