Ist eine Kollision zwischen I/O-Bereich und Speicherbereich möglich?

Gast #4303921
>Speziell interessiert mich das für Bausteine am ISA-Bus unter x86
ISA hat extra Leitungen für IO Operationen: /IOR /IOW
Für Speicher hat es /MEMR und /MEMW
Da kann nichts kollidieren außer man will es und baut seine ISA Karte 
halt so, daß der Adressdecoder bestimmte bereiche überlappen läßt.
#4303939
Und selbst die CPU hat dafür extra Befehle um halt gezielt einen I/O 
oder Speicherzugriff zu machen. Zumindest bei x86

Es gibt dann ja noch die Virtualisierung und das Speichermapping von I/O 
Ports, aber das kam wimre erst mit dem PCI Bus.
OP (Firma: G.) #4303991
Aha, danke für die Antworten.
Bei vielen Mikrocontrollern gilt ja Speicherraum = I/O-Raum; da liegen 
Speicheradressbereiche und Portbereiche nebeneinander.

Nun bin ich bei der Fehlersuche zu einem PC/104-Board, bei dem einiges 
am ISA-Bus im gleichen Bereich ist wie ein "PCI Express Root Complex" in 
der Memory MAP (im Manual zu dem Board).
Gast #4304644
Die Intel-PC-Linie hat schon von Anfang an eigene Select-Leitungen für 
Speicher- und Peripheriezugriffe.

Schon zu Zeiten von 8080 oder Z80 und früher war das Usus. Ist ja auch 
logisch, da diese im Allgemeinen auch andere Zugriffsregeln und Zeiten 
haben. Am Anfang ging es darum den Speicher maximal schnell 
anzusprechen, wobei die externen Bausteine schon bald nicht mehr 
mithalten konnten. Schon sehr bald wurde das feiner Graduiert, um ja 
nach Adresse unterschiedliche Zugriffszeiten etablieren zu können. Am 
Anfang waren das RAM (schnell) und EPROM (langsam).

Natürlich hatten beide auch "eigene" Adressräume. Also widersprachen 
sich die Speicheradresse 0 und die Peripherieadresse 0 nicht.
#4304652
Max D. schrieb:
> Es gibt Milliarden verschiedener Systeme, irgendeines wird schon
> kollidieren....

OT aber lustig:
Ein Aldi-PC von ~08 wurde mir mit der Fehlerbeschreibung "Keine Töne" 
überantwortet. Als letztes wurde "nichts gemacht" - außer einem 
RAM-Upgrade, wie ich später erfuhr.

RAM voll (4 GB): Soundchip nicht ansprechbar. Mit drei oder zwei GB 
gings.
Ich tippte hier zumindest auf ein Addressierungsproblem.

Ich habe (zu meiner Schande gestanden) eine ganze Weile gesucht.
Gast #4304729
Augenblick mal -- unter ISA war das doch ein furchtbares Kuddelmuddel.

Die Karten hatten doch für Daten, und auch Befehle, Speicher in den 
Bereich A0000 - FFFFF eingeblendet. Daneben gab es Programme, die in den 
ungenutzten ISA-Bereich Hauptspeicher für TSRs einblendeten. Ergebniss 
waren abstruse Fehler, bei denen die Daten nur im Prozessorcache, aber 
nicht auf der Karte landeten...

Wenn du dich damit wieder beschäftigen musst... Mein herzliches Beileid!
Gast #4304739
>RAM voll (4 GB): Soundchip nicht ansprechbar. Mit drei oder zwei GB
>gings.
>Ich tippte hier zumindest auf ein Addressierungsproblem.

Wahrscheinlich wurde eine ältere Karte verwendet, die, als sie gebaut 
wurde, niemals von 4GByte geträumt hatte. Um die schnellen 
Speicherzugriffsmöglichkeiten zu nutzen - schneller als I/O - hat diese 
ihren eigenen Speicher, für den Treiber sichtbar, in den damals 
"ungenutzten" Speicherbereich, oberhalb von 3GByte, eingeblendet.
Aus diesem Grunde gehe ich auch nicht von einer Speicher <-> 
I/O-Kollision aus, sondern von einer Speicher <-> 
Speicher-Doppelbelegung.
Gast #4304820
Rolf F. schrieb:
> Nun bin ich bei der Fehlersuche zu einem PC/104-Board, bei dem einiges
> am ISA-Bus im gleichen Bereich ist wie ein "PCI Express Root Complex" in
> der Memory MAP (im Manual zu dem Board).

Kann man da nicht im BIOS bestimmte Bereiche ausblenden?
Was für ein BS läuft da?
Mindestens unter DOS/W98 konnte das per Initialisierung gemacht werden.
#4304874
Aber 2008 gab es schon laaaange das Plug&Play-Konzept, das mit PCI 
eingeführt wurde. Da wird die Startadresse der PCI-Karten erst vom Bios 
anhand aller benötigten MemIO-Bereiche ausgewürfelt und der Karte via 
Config-Space in den Basis-Adress-Registern (BAR*) mitgeteilt. 
Normalerweise ändert sich dieses Mapping bei unveränderter Peripherie 
auch nicht, wenn sich die RAM-Grösse ändert. Das Bios versucht schon 
generell, das "von hinten" her aufzubauen, sodass immer möglichst viel 
RAM übrigbleibt.

Ich habe eher den Verdacht, dass der Treiber ein Problem damit hat, dass 
die DMA-Adressen >2GB sein können. Wenn der Programmierer gepennt hat, 
wird das als negativ und damit evtl. als Fehler bei der 
DMA-Bereich-Allozierung interpretiert.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.