Können Bereiche im Speicherraum und im I/O-Raum kolliedieren? Speziell interessiert mich das für Bausteine am ISA-Bus unter x86, aber auch generell, für andere Plattformen.
Es gibt Milliarden verschiedener Systeme, irgendeines wird schon kollidieren....
>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.
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.
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).
Ich glaube du mixt da Harvard und von Neumann Architektur.
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.
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.
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!
>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.
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.