Frage:
Was genau bedeutet es, wenn jemand "Memory Mapping", "IO Mapping", "Memory Mapped IO" und "Port Mapped IO" sagt?
MaNyYaCk
2016-12-30 09:14:54 UTC
view on stackexchange narkive permalink

All diese Wörter werden für mich etwas verwirrend, da ich ein Neuling bin.Ich verstehe, dass ein Mikrocontroller im Grunde genommen Prozessor + Speicher zum Speichern von Daten (RAM) + Datenspeicher ist ODER von wo aus die Anweisungen ausgeführt werden (ROM / Flash) + Peripheriegeräte.

  1. Wie soll ich das Mapping visualisieren?
  2. Wird das Mapping im RAM durchgeführt?
  3. Wenn ja, ist es nicht die Erinnerung selbst?Woher weiß der Prozessor davon?
  4. Wird diese Zuordnung beim Einschalten des Controllers durchgeführt oder von der Person / Firma, die den Controller hergestellt hat?
  5. ol>

    Wenn es wirklich eine dumme oder eine breite Frage ist, lassen Sie es mich wissen.Ich würde versuchen, mich einzugrenzen.

Sie verwechseln den Speicheradressraum mit dem Speicher selbst.
Welche Art von Literatur oder Lehrbüchern zur Computerarchitektur haben Sie verdaut, bevor Sie diese Frage gestellt haben?
Für terminologische Fragen oder Fragen wie "Was ist das?"Beziehen Sie sich immer zuerst auf Wikipedia, z.https://en.wikipedia.org/wiki/Memory-mapped_I/O.Früher wurden die meisten Aspekte der Frage behandelt.Wenn dann etwas unklar ist oder Sie ein echtes Problem haben, stellen Sie eine Frage zu dem Problem oder diesem sehr spezifischen Aspekt.Auf diese Weise sparen Sie Zeit und haben Informationen strukturierter.
@IgnacioVazquez-Abrams schwöre, ich habe es getan
@AliChen 8085 Architekturbücher und einige Antworten auf dieser Site, die mich verwirrt haben.Ich hatte wirklich Probleme zu verstehen, wie die Festplatten des PCs das Betriebssystem / die ausführbaren Programme in den RAM stellen.Ich obwohl Speicheradresse der Festplatte auf den RAM abgebildet sind
Ein Laufwerk (Festplatte, Diskette oder optisch) ist ein E / A-Gerät - es verfügt über einige Steuerungs- und Datenregister, die einige Speicher- oder E / A-Speicherplätze belegen.Das Programm gibt Befehle an den Disc-Controller aus, z. B. "Geben Sie mir einen Datenblock ab Spur X Sektor Y", und der Disc-Controller liest diese Daten von der Disc und legt sie in einem Datenregister ab, in dem das Programm sie sehen kann.Sie können ein Programm nicht direkt von der Disc ausführen.
"Wie die Festplatten des PCs das Betriebssystem / die ausführbaren Programme in den RAM stellen" - das ist eine andere Frage.Festplatten haben normalerweise eine viel größere Speicherkapazität als RAM, sodass sie nicht direkt dem direkten Speicherplatz zugeordnet werden können.Es können nur einige kleine Teile (Programme) übertragen und zur Ausführung in den RAM geladen werden.
Vier antworten:
Peter Bennett
2016-12-30 09:57:08 UTC
view on stackexchange narkive permalink

Ich denke, diese Begriffe werden hauptsächlich mit Mikroprozessoren und nicht mit Mikrocontrollern verwendet.

"Speicherzugeordnete" E / A-Geräte werden nur als normale Speicherorte angezeigt und können durch Anweisungen gelesen oder geschrieben werden, die normalen Datenspeicher lesen oder schreiben können.Speicherabgebildete E / A können von jedem Mikroprozessor verwendet werden.

Einige Mikroprozessoren (Intel 8085 und Verwandte) verfügen über einen separaten Adressraum für die Verwendung von E / A-Geräten, der nicht Teil des normalen Speicherbereichs ist, und eine begrenzte Anzahl von Anweisungen zum Lesen oder Schreiben in diesen Adressraum.E / A-Geräte, die diesen Speicherplatz verwenden, sind "E / A-zugeordnet".

Interessant.Und wie definieren Sie den Unterschied in der Zuordnung zwischen "einem Mikrocontroller" und "einem Mikroprozessor"?Anders als im ersten Fall wird das Mapping häufig vom IC-Hersteller vordefiniert (festgelegt), während im zweiten Fall das Mapping vom Systemdesigner selbst ausgewählt werden muss.IMO, das Konzept des Mappings ist das gleiche.
Bei einem Mikrocontroller sind die Adress- und Datenbusse normalerweise nicht extern verfügbar, sodass der Benutzer keine andere Wahl hat, als wie vom Hersteller beabsichtigt auf die E / A-Ports zuzugreifen. Daher ist es wenig sinnvoll, über E / A-Zugriffsmodi mit Mikrocontrollern zu sprechen.Bei Mikroprozessoren sind die Adress- und Datenbusse sowie die erforderlichen Steuerleitungen für den Benutzer zugänglich, sodass er auswählen kann, wie E / A implementiert werden soll (einige Mikrocontroller verfügen jedoch nicht über einen bestimmten E / A-Bereich und Anweisungen, sodass Sie nicht weiterkommenmit speicherabgebildeter E / A).
Ian Bland
2016-12-30 12:47:14 UTC
view on stackexchange narkive permalink

Niemand scheint dies direkt gesagt zu haben, also werde ich es tun; Dies bedeutet im Grunde, dass die beiden Arten der Zuordnung unterschiedliche Steuerleitungen haben. Betrachten Sie die beliebte (zumindest von mir, heh) Z80-Architektur, die über separate E / A und Speicher verfügt.

Beide Arten der Zuordnung verwenden dieselbe Adresse (16 Zeilen) und denselben Datenbus (8 Zeilen). Um der externen Logik mitzuteilen, ob Sie Speicher oder E / A adressieren, verfügt der Prozessor über zwei Pins. einer heißt MREQ und der andere ist IORQ. Wenn der Prozessor MREQ auf niedrig zieht, wird die externe Logik so konfiguriert, dass sie erkennt, dass dies eine Speicheradresse auf dem Adressbus ist, und den Speicher nach dem Decodieren des Adressbusses mit dem Datenbus verbindet, um Daten zu lesen oder zu schreiben (die vom RD gesteuert werden) (Lese-) und WR- (Schreib-) Pins, von denen einer für die Lese- oder Schreiboperation niedrig wird.

Wenn der Prozessor IORQ niedrig hält, erkennt Ihre externe Logik dies als E / A-Anforderung und verbindet nach dem Decodieren des Adressbusses ein externes Gerät mit dem Datenbus. Der Speicher bleibt nicht verbunden. In der Praxis führen die meisten Speicherchips die Adressdecodierung und das Verbinden / Trennen mithilfe der internen Steuerlogik durch.

Wenn der Prozessor gleichzeitig MREQ und IORQ auf niedrig zieht, ist er defekt. Wirf es weg. Was es niedrig hält, hängt von bestimmten Anweisungen im Befehlssatz ab, die vom Programmierer verwendet werden.

Es kommt also darauf an, ob der Prozessor über Steuerleitungen verfügt, um mehr als einen Modus für die Busse zu unterscheiden. Der Vorteil besteht darin, dass Sie den gesamten Adressraum für den Speicher nutzen können und dennoch die Möglichkeit haben, eine Verbindung zu externen Geräten herzustellen, die zur Erleichterung der Schnittstelle viele Adresspositionen verwenden können, da möglicherweise 64 KB verfügbar sind (mit 16 Bit) Bus).

Eine merkwürdige Kuriosität beim Z80 ist, dass seine Spezifikation behauptet, dass er nur 8 Bits des Adressbusses für E / A verwendet, die vom C-Register gesteuert werden, aber tatsächlich alle 16 unter Verwendung des Paares BC (in und aus) codiert Anleitung). Welches ist schön.

Krunal Desai
2016-12-30 11:31:01 UTC
view on stackexchange narkive permalink

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:

  • Speicherzuordnung
  • 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.

    Das scheint ganz auf den Punkt zu kommen
    Ale..chenski
    2016-12-30 14:24:35 UTC
    view on stackexchange narkive permalink

    Dies ist eine interessante Übung. Lassen Sie mich meine Variante anbieten.

    1) Wie soll ich das Mapping visualisieren? - genau wie eine Karte einer Straße mit Speichereinheiten (Speicher speichert Daten!), wobei jede Einheit eine eindeutige Straßenadresse hat. Der Speicher kann in "Seiten" organisiert werden. Dies ist wie dieselbe Straßenkarte mit demselben Adressbereich, nur in einer anderen Stadt mit unterschiedlicher Postleitzahl (Seitenauswahl).

    2) Wird das Mapping im RAM durchgeführt? - nicht sicher, was Sie "im RAM" meinen, aber das Mapping erfolgt über eine spezielle Logikeinheit namens "Adressdecoder". Es ist wie bei einem Postamt. Die CPU gibt eine Nummer (Speicheradresse) aus und der Decoder "öffnet" die entsprechende "Speichereinheit". Die CPU kann dann einige Daten speichern oder gespeicherte Daten abrufen.

    3) Wenn ja, ist es nicht der Speicher selbst? - nein, siehe (2) oben. Jemand ("Adressdecoder") muss die Nummer (angeforderte Adresse) überprüfen, die Karte nachschlagen und den richtigen Speicherort ("Tür") für einen Lese- / Schreibvorgang öffnen.

    3a) Woher weiß der Prozessor davon? - das weiß er nicht. Der Speichercontroller liefert nur die Daten gemäß der "Karte". Der Softwareprogrammierer muss jedoch wissen, welcher Bereich zugeordnet ist und welche "Speichereinheit" verwendet werden soll.

    4) Wird diese Zuordnung beim Einschalten des Controllers oder von der Person / Firma durchgeführt, die den Controller hergestellt hat? - es kommt darauf an. Bei kleineren Mikrocontrollern ist die Karte in der Hardware fest codiert. Größere Prozessoren mit vom Benutzer installierbarem Speicher (wie DIMMs im PC) müssen die Besonderheiten der installierten Speicher ermitteln und den Speichercontroller (Festlegen von Adressdecoderbereichen und anderen Parametern als Zugriffszeit usw.) während der Initialisierung durch das BIOS konfigurieren.

    Bitte beachten Sie, dass Speicher normalerweise als interne Speichereinheiten gedacht sind und normalerweise keiner externen (peripheren) Welt ausgesetzt sind.Die Peripheriegeräte interagieren mit Prozessor-Interna über einige dedizierte E / A-Register oder GPIO - Allzweck-Eingabe-Ausgabe-Register.Bei einigen Prozessorarchitekturen wird dieses GPIO derselben Adresszuordnung einer separaten Remote- "Unterteilung" zugeordnet.Einige Architekturen verfügen über einen dedizierten E / A-Bereich und dedizierte E / A-Anweisungen.Die Auswahl verschiedener GPIOs folgt der gleichen Idee - der Adressdecoder wählt vordefinierte "Türen" aus.

    Es gibt andere Bereiche wie "Konfigurationsbereich", die einen speziellen eingeschränkten Zugriffsmodus haben können.Es kann auch in den Speicheradressraum abgebildet werden.



    Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
    Loading...