Die Zuordnung erfolgt im Allgemeinen mit dedizierter Hardware in Silizium, normalerweise unter der Schirmherrschaft der CPU. Schauen wir uns Ihre vier Sätze sehr schnell an:
IO-Mapping
Speicherzugeordnete E / A
Port Mapped IO
Meiner Meinung nach beruht Ihre Verwendung von Speicherzuordnung und E / A-Zuordnung auf den doppelten Speicherbereichen eines x86-basierten Systems - den 64 KB E / A-Speicherplatz, der im Wesentlichen veraltet ist, und dem viel größeren Speicherbereich, den ich habe think reicht jetzt mit 64-Bit-Computern in die Exabyte.
EDIT: Ich werde diesen Absatz zu meiner Antwort hinzufügen und vermuten, dass das, was Sie fragen, stärker auf Mikrocontroller (PIC, AVR usw.) ausgerichtet ist. Ich habe das ein wenig angesprochen, um Ihre Frage Nummer vier zu beantworten. Die Zuordnung / Adressen hier werden im Wesentlichen von den Chip-Architekten festgelegt, und im Allgemeinen gibt es eine Adressdecoder- / Speicherverwaltungseinheit (nicht im strengen MMU-Sinne), die Daten an die richtige Stelle auf dem internen Bus sendet. Wenn Sie in ein UART-Steuerregister schreiben, wirkt sich dies auf die Flip-Flops aus, die physisch für diese Bits verantwortlich sind. Wenn Sie von einer SRAM-Adresse lesen, werden die Daten direkt von diesem zurückgegeben.
In beiden Fällen ist das Mapping dieselbe allgemeine Aufgabe - nehmen Sie eine bestimmte Adresse und geben Sie ihr eine besondere Bedeutung / leiten Sie sie irgendwohin. Auf einer x86-Plattform zeigt die E / A-Speicheradresse 0x3F8 beispielsweise auf das Register für die serielle Schnittstelle des Systems. Wenn Sie an diese Adresse (outb () / inb ()) schreiben oder von dieser lesen, ändern Sie physisch den Status von 8 Bits (wahrscheinlich als SRAM oder Flip-Flops implementiert), die Daten an dieser seriellen Schnittstelle enthalten.
Ebenso haben Sie für speicherabgebildete E / A möglicherweise ein PCI-Gerät, das eine gewisse Speichermenge anfordert. Ich könnte ein Gerät entwerfen, bei dem, wenn Sie ein Byte an eine bestimmte Adresse schreiben, der Status von 8 LEDs geändert wird - 0x00, alle aus, 0xFF, alle ein. Ihre MMU (Memory Management Unit) ist dafür verantwortlich zu erkennen, dass die von Ihnen geschriebene Speicheradresse für etwas auf dem PCI-Bus bestimmt ist.
Ich werde hier nicht in den virtuellen Speicher eintauchen - in modernen Betriebssystemen ist es im Allgemeinen nur Kernel-Code / privilegierter Code, der die Möglichkeit hat, direkt von physischen Speicheradressen zu lesen / schreiben. Es sind Infrastruktur- / Abstraktionsschichten integriert, um diesen Zugriff für Benutzeranwendungen zu steuern. Sie können beispielsweise Seitentabellen nachlesen.
Also zurück zu Ihren Fragen -
1) Wie soll ich das Mapping visualisieren?
Genau das - eine Zuordnung. Auf dieser Karte erfahren Sie, wie Sie von Ihrem Start (z. B. 0xE0000000) zum Ziel (möglicherweise ein PCI-Gerät, möglicherweise ein bestimmter Speicherort im physischen RAM) gelangen.
2) Wird die Zuordnung im RAM durchgeführt?
Nein. Der physische RAM - beispielsweise auf der untersten Ebene ein einzelner Kondensator, der ein einzelnes Bit im DRAM darstellt - ist eines der vielen Ziele, die ebenfalls abgebildet werden könnten. Jede einzelne Speicheradresse entspricht nicht unbedingt einem physischen Bit, das irgendwo gespeichert ist.
Wenn Sie einen Prozessor haben, der über einen externen Adress- / Datenbus (oder einen anderen großen parallelen Bus) verfügt, werden Lese- / Schreibvorgänge direkt in den Datenverkehr auf dieser Schnittstelle übersetzt. Die meisten Benutzer verwenden heutzutage SPI / I2C / andere serielle Protokolle, aber es war nicht ungewöhnlich, große eingebettete Systeme zu haben, bei denen parallele SRAMs über eine 8- oder 16-Bit-Parallelschnittstelle (AD0-AD15) angeschlossen wurden.
3) Wenn ja, ist es nicht die Erinnerung selbst? Woher weiß der Prozessor davon?
Auf x86-Systemen wird der größte Teil der Verwaltung der Systemspeicherzuordnung auf niedriger Ebene, die mehr als 20 Jahre alt ist, von Ihrer BIOS-Firmware und anschließend von der Betriebssysteminitialisierung durchgeführt.
4) Wird diese Zuordnung beim Einschalten des Controllers oder von der Person / Firma durchgeführt, die den Controller hergestellt hat?
Es gibt feste Zuordnungen in Silizium (sehr zutreffend für eingebettete Mikrocontroller), bei denen Sie das Datenblatt lesen und feste Adressen für Steuerregister, Peripheriegeräte usw. erhalten können. Die Architekten des Chips haben eine Speicherzuordnung entworfen, die für sie sinnvoll ist. und hinterlässt normalerweise Bestimmungen für verschiedene Modelle mit unterschiedlichen Peripheriegeräten / Speichermengen (dh ein 32-KB- und 64-KB-Modell desselben Chips kann alle Register / Peripheriegeräte an denselben Positionen haben, und nur die Speicheradresse für den RAM ist unterschiedlich).
Bei anspruchsvolleren Systemen, bei denen sich Dinge bewegen können (wie PCI-Plug-and-Play), ist die Speicheradresszuweisung dynamisch und wird von der Software ausgeführt.