Warum hat man die Hardware im Upper Memory Block eingeblendet?



  • Der Adressraum oberhalb der Speicheradresse 0xA0000 (entspricht 640 KB) ist unter DOS für Zusatzhardware (Grafikkarten, SCSI-Controller und ähnliches) und für das BIOS reserviert.

    http://de.wikipedia.org/wiki/Upper_Memory_Block

    Was ich bis heute nicht verstehe, wieso hat man die HW im oberen Bereich von 640 KB abgebildet?

    Wieso hat man den Speicher nicht einfach linear adressiert und z.B. in der untersten Adresse die Adresse gespeichert, ab der, der Speicher für Programme frei ist?

    Dann hätte das OS die erste freie Adresse in der untersten Adresse speichern können und für ein Programm, dass starten wollte, hätte man dann nur noch diese Adresse aus der 0. Adresse abfragen müssen und dann das Programm an die entsprechende Adresse laden können.

    Die HW hätte man also z.B. ab Adresse 8 legen können, dann darüber DOS und dann wäre der Speicher nach oben hin linear frei geworden.

    Wieso hat man sich also mit der 640 KB Grenze so nen Bock geschossen, dass man ab 640 KB quasi ne Mauer hat, über der man nicht so einfach drüberspringen kann?

    So ein Designfehler hätte einem doch schon damals auffallen müssen und ich schätze mal, dass dies bei anderen Computern und Betriebssystemen besser gelöst wurde.



  • Mir ist beim Lesen deines Postings nicht so richtig klar geworden, ob du weißt, dass die eigentliche Grenze bei 1 MB liegt. Du scheinst zu glauben, dass wenn nicht bei 640kB willkürlich Schluss gemacht worden wäre, der Weg nach oben unbegrenzt frei ist. Ist das so?



  • Bashar schrieb:

    Mir ist beim Lesen deines Postings nicht so richtig klar geworden, ob du weißt, dass die eigentliche Grenze bei 1 MB liegt. Du scheinst zu glauben, dass wenn nicht bei 640kB willkürlich Schluss gemacht worden wäre, der Weg nach oben unbegrenzt frei ist. Ist das so?

    Nein, denn dass der 8088 nur 20 Adressleitungen hat und somit nur 2^20 Bytes verfügbar sind, das weiß ich auch.

    Es geht darum, dass man das Hardwarezeugs mitten in den Weg gestellt hat, also direkt mitten im Speicher ab 640KByte.

    Nehemn wir mal an, das Hardwarezeugs braucht je nach Rechner 0-300 Kybte,
    dann hätte man das ab dem ersten Kybte bei z.B. Adresse 8 einblenden können und wenn der Rechner dann tatsächlich z.B: für das HW Zeugs nur 162 Kbyte braucht,
    dann wäre der Speicher ab Adresse 162k+8+1 frei gewesen und diese Adresse hätte man dann in Adresse 0 Spechern können.

    Wenn nun das OS selbst z.B. 122 Kbyte braucht, dann hätte man es in ab Adresse 162k+8+1 speichern können und dann den Zeiger an Adresse 0 auf nun Adresse 162k+122k+8+1 zeigen lassen können und von dieser Adresse wäre dann alles frei bis nach oben hin.



  • Ich denke mal, das Problem ist, dass man Hardware nicht per se beliebig umkonfigurieren kann bzw. damals konnte. Die Grafikkarte hat halt nur auf 0xA0000+ gehorcht. Vielleicht war da teilweise was mit DIP-Schaltern machbar, aber sonst nichts.



  • Bashar schrieb:

    Ich denke mal, das Problem ist, dass man Hardware nicht per se beliebig umkonfigurieren kann bzw. damals konnte. Die Grafikkarte hat halt nur auf 0xA0000+ gehorcht. Vielleicht war da teilweise was mit DIP-Schaltern machbar, aber sonst nichts.

    Wenn dem so wäre, wie war es dann möglich, HW beliebig zusammenzustecken?

    Man konnte ja z.B. schon damals 2-4 ISA Netzwerkkarten in den Rechner stecken.
    Wenn die alle die gleiche Adresse wollen, dann hätte dies doch sicher zu einem Problem geführt.

    Außerdem konnte man schon bei der Soundkarte oder dem SCSI Controller die Adresse per Jumper einstellen. Z.b. 220h, anstatt 330h.



  • PS:

    Und Prinzipiell hat man das HW Adress Problem damit ja nur in den oberen Adressbereich verlagert.

    Es hätte also keinen unterschied gemacht, wenn man die Grafikkartenadresse unten bei z.B. 9h hingesetzt hätte.



  • 640kbyte Grenze schrieb:

    Wenn dem so wäre, wie war es dann möglich, HW beliebig zusammenzustecken?

    War es meines Wissens nicht.

    Man konnte ja z.B. schon damals 2-4 ISA Netzwerkkarten in den Rechner stecken.

    Gab es sowas 1980 schon?

    Es hätte also keinen unterschied gemacht, wenn man die Grafikkartenadresse unten bei z.B. 9h hingesetzt hätte

    Doch, warum hätte man das tun sollen? Der erste PC hatte 64kB RAM, warum sollte man da eine krumme Adresse nehmen statt etwas schön rundem am oberen Ende des Speichers, wo man eh so schnell nicht hinkommt?



  • Bashar schrieb:

    640kbyte Grenze schrieb:

    Wenn dem so wäre, wie war es dann möglich, HW beliebig zusammenzustecken?

    War es meines Wissens nicht.

    Genau dafür war aber der ISA Bus mit seinen vielen Slots da.

    Damit man beliebige Erweiterungskarten an den Rechner anschließen konnte.

    Man konnte ja z.B. schon damals 2-4 ISA Netzwerkkarten in den Rechner stecken.

    Gab es sowas 1980 schon?

    Der IBM PC kam ende Augst 1981 auf dem Markt und Erweiterungskarten folgten dann.

    Irgendwelche Netzwerkkarten folgten dann danach und das muss nicht gleich Ethernet gewesen sein.
    Kann auch Token Ring oder irgendwas propritäres sein.

    Ich habe jedenfalls eine ISA Ethernetkarte für meinen 486er.

    Es hätte also keinen unterschied gemacht, wenn man die Grafikkartenadresse unten bei z.B. 9h hingesetzt hätte

    Doch, warum hätte man das tun sollen? Der erste PC hatte 64kB RAM, warum sollte man da eine krumme Adresse nehmen statt etwas schön rundem am oberen Ende des Speichers, wo man eh so schnell nicht hinkommt?

    Weil man die 64Kb RAM auch oben einblenden hätte können, denn dadurch hätte man das RAM beliebig erweitern können, bis halt der Adressbus nicht mehr ausreicht.

    Außerdem, wie haben das denn die anderen Computer, wie z.B. der Amiga, Macintosh oder Atari ST gelöst?
    Auch diese konnte man mit HW erweitern und auch diese mußten sicher die Adressen der HW irgendwo einblenden.

    Aber so Probleme wie die 640 KB Grenze kenne ich nur vom x86 PC.



  • Hat geschichtliche Ursachen.
    IBM ist damals davon ausgegangen, das die 10 mal 64kB für Programme locker für lange Zeit ausreichten. Da bleiben in der Realität je nach DOS-Version weniger als 640kB, da ja noch Treiber und sonstiges da mit hinein kommt.

    Der Speicher von 640kB bis 1MB war für Grafikkarten Axxxx oder/und Bxxxx und die oberen ein oder zwei Blöcke fürs BIOS reserviert. Dazwischen fand man noch die Infos anderer Erweiterungen. Wenn da noch Platz war, konnte man bei den letzten DOSen den noch für Treiber und eventuell anderes nutzen.

    Das ohne Gewähr, ist schon länger her. 😉

    Diese Speicherverwaltung Geschichte war eine speziellen Geschichte des 8080 und seiner Nachkommen. Den 8080 gab es schon in den 70ern. Warum IBM den und keine der CPU der Mitbewerber bevorzugt hat. 😕

    Ist heute ja nur noch von historischem Interesse. Der 286 hielt sich ja noch bis auf ein paar spezielle Varianten dieser CPU daran. Ab dem 386er wurden auch andere Speicherverwaltungen möglich.

    MfG f.-th.



  • Hat darauf jemand eine Antwort:

    640kbyte Grenze schrieb:

    Außerdem, wie haben das denn die anderen Computer, wie z.B. der Amiga, Macintosh oder Atari ST gelöst?
    Auch diese konnte man mit HW erweitern und auch diese mußten sicher die Adressen der HW irgendwo einblenden.



  • 640kbyte Grenze schrieb:

    Bashar schrieb:

    640kbyte Grenze schrieb:

    Wenn dem so wäre, wie war es dann möglich, HW beliebig zusammenzustecken?

    War es meines Wissens nicht.

    Genau dafür war aber der ISA Bus mit seinen vielen Slots da.

    Damit man beliebige Erweiterungskarten an den Rechner anschließen konnte.

    Die Slots sind pure Hardware. Es war jede Karte selbst dafür verantwortlich, auf welche Adressen sie horcht. Wenn man es nicht konfigurieren konnte, hatte man halt Pech gehabt.

    Man konnte ja z.B. schon damals 2-4 ISA Netzwerkkarten in den Rechner stecken.

    Gab es sowas 1980 schon?

    Der IBM PC kam ende Augst 1981 auf dem Markt und Erweiterungskarten folgten dann.

    Ja klar, aber nicht "2-4 ISA Netzwerkkarten". Vielleicht eine.

    Ich habe jedenfalls eine ISA Ethernetkarte für meinen 486er.

    Hatten 1993 sicher viele.

    Es hätte also keinen unterschied gemacht, wenn man die Grafikkartenadresse unten bei z.B. 9h hingesetzt hätte

    Doch, warum hätte man das tun sollen? Der erste PC hatte 64kB RAM, warum sollte man da eine krumme Adresse nehmen statt etwas schön rundem am oberen Ende des Speichers, wo man eh so schnell nicht hinkommt?

    Weil man die 64Kb RAM auch oben einblenden hätte können, denn dadurch hätte man das RAM beliebig erweitern können, bis halt der Adressbus nicht mehr ausreicht.

    Ich verstehe die Antwort nicht. Weil man den RAM oben einblenden könnte, kann der Grafikspeicher bei 9 beginnen? Müsstest du erklären.



  • Bashar schrieb:

    Ich verstehe die Antwort nicht. Weil man den RAM oben einblenden könnte, kann der Grafikspeicher bei 9 beginnen? Müsstest du erklären.

    Es ist ja nur eine Adresse.

    Das ROM der Grafikkarte wird in einen Adressbereich eingeblendet.
    Wenn man ROM an eine bestimmte Adresse einblenden kann, dann geht das auch mit RAM.

    Wenn mans geschickt macht, dann könnte man das RAM auch virtuell aufteilen.
    Damit wären z.B. ein kleiner RAM Block von wenigen Bytes für Adresse 0 bis x möglich, dann ab x+1 das ROM und nach dem ROM+1 wieder der Rest des RAMs.

    Wenn man's geschickt macht, dann könnte man es auch so machen, dass die HW dem Rechner medlet wieviel ROM sie einblenden möchte und die HW bzw. das OS blendet das ROM dann an der passenden Stelle ein und legt das restliche RAM oben drüber.

    Ziel des ganzen ist also, den größten Teil des RAMs weiterhin linear ansprechen zu können.
    Und beim IBM PC hat man damals bei DOS einfach hierzu nichts gedacht, außer dass man in der Lebenszeit des IBM PC davon ausgegangen ist, dass man eh nie mehr als 10* 64 Kbyte benötigt, wo dann die Adressen für das HW ROM gelandet ist.



  • Ich weiß nicht, ob das damals ging, einfach irgendwas beliebig irgendwo "einzublenden". Technisch notwendig ist das nicht, und deshalb glaube ich nicht, dass der Ur-PC das schon konnte.

    Im einfachsten Fall hast du nämlich eine Karte, die liegt am Adressbus mit ein paar simplen Logikgattern, die eine Enable-Leitung einschalten, wenn eine zu dieser Karte passende Adresse anliegt.



  • Das Hauptproblem liegt wohl heute auch darin, dass wenn sich die Hardware im untersten MB komplett einblenden würde, das dann gar kein Platz im untersten Megabyte mehr für ein RealMode-OS verfügbar ist und mit dem Realmode es nicht möglich ist mehr als 1 MB+(64KB -1 Byte) zu adressieren. Es sind ja nicht nur 160 KB die an Platz benötigt werden, sondern je nach verwendeten Komponennten auch schon mal 1 GB an Speicher der von der Hardware über das Bios belegt wird und dann nicht als freier Ram benutzt werden kann.

    Ich vermute beim Atari und Amiga gab es noch nicht so viele verschiedene Hardwarekomponenten.

    Dirk



  • Ist schon Technik aus früher PC-Zeit.

    @ 640kbyte Grenze

    Programmiere auf deiner 486er Kiste mal die Grafikkarte direkt und in Farbe mit verschiedenen Farbtiefen und Bildschirmauflösungen, also ohne Interrupt oder Herstellertreiber. Wo du die Infos zur Adressierung her bekommst 😕 Bei einigen gängigen Grafikkarten konnte man die im Netz finden. Je nach Auslöung oder Modus war das nicht einheitlich umgesetzt. Deswegen waren die Grafiken damals nicht so schnell wie möglich, sondern es wurde vorrangig Wert auf Kompatibilität gesetzt. Okay, immer hatte das nicht gepasst. 😉

    Wenn du wirklich die alten Geschichten wissen willst, besorge dir die Infos zu den alten CPU und ihrer Adressierung. Wer hat sich den vor etwa 30 Jahren da in Rechnern fürs Volk versucht? 😉
    8080 von Intel: PC
    Z80 von Zilog: Amstrat
    9900 von TI: TI
    6800 von Motorola: Appel
    Das sind die, die mir spontan einfallen. Bis auf den TI, der schon 16 bit hatte, waren das damals 8bit. Auf 16 oder 32bit hat man die erst später gebracht.

    Ohne Gewähr, war zu bequem zur Quellensuche. Ob die Marken richtig geschrieben sind?
    Mitbewerber gab es, mit Ausnahme der TI CPU 😕 Die TI hatte aber damals einige spezielle Vorteile, die man zum Teil Jahre später auch z.B. bei Intel auch finden konnte.

    Viel Spass bei der Technik-Geschichte und ihrer Vermarktung 😉

    P.S.:Aktuelle Mainboards können zum Teil gar kein altes DOS mehr. Steht jedenfalls so in der Bedienungsanleitung. Da könnt ihr nur noch neuere Betriebssysteme darauf los lassen.



  • f.-th. schrieb:

    P.S.:Aktuelle Mainboards können zum Teil gar kein altes DOS mehr. Steht jedenfalls so in der Bedienungsanleitung. Da könnt ihr nur noch neuere Betriebssysteme darauf los lassen.

    Ich dachte jedes x86-Board mit (U)EFI bringt immer noch ein Kompatibilätsmode mit, wo ein 16Bit-Bios verwendet wird und womit auch ein DOS gebootet werden kann.

    Nit welchem Board geht das denn nicht mehr?

    Dirk



  • 640kbyte Grenze schrieb:

    Wenn man's geschickt macht, dann könnte man es auch so machen, dass die HW dem Rechner medlet wieviel ROM sie einblenden möchte und die HW bzw. das OS blendet das ROM dann an der passenden Stelle ein und legt das restliche RAM oben drüber.

    Ziel des ganzen ist also, den größten Teil des RAMs weiterhin linear ansprechen zu können.
    Und beim IBM PC hat man damals bei DOS einfach hierzu nichts gedacht, außer dass man in der Lebenszeit des IBM PC davon ausgegangen ist, dass man eh nie mehr als 10* 64 Kbyte benötigt, wo dann die Adressen für das HW ROM gelandet ist.

    Warum hätte man sich denn damals den Kopf darüber zerbrechen sollen? Ich schätze mal, für die damaligen Entwickler waren 640KB Lichtjahre vom denkbaren Speicherausbau entfernt. Heute macht sich auch kaum jemand darüber Gedanken, wie seine Programme mit 128GB Speicherausbau laufen.
    Ausserdem wurde das damalige Design wohl für 1MB Speicherausbau gemacht. Wenn man dann natürlich Jahre später doch mehr Speicher will und das Design das dann nicht hergibt (weil es keine Vorgabe war mehr herzugeben), kann man IMHO nicht sagen, dass die Entwickler damals nicht nachgedacht hätten. Ich entwickele auch meine Programme anhand der aktuellen Vorgaben und nicht für jede Eventualität der Zukunft. Letztendlich kostet Eventualitäten abzudecken auch Geld.



  • Morle schrieb:

    ... kann man IMHO nicht sagen, dass die Entwickler damals nicht nachgedacht hätten.

    Wie weit vorausschauend bei der Entwicklung nachgedacht wurde lässt sich andererseits ja auch schon am 2K-Bug gut erkennen. 😃

    Dirk



  • freecrac schrieb:

    Das Hauptproblem liegt wohl heute auch darin, dass wenn sich die Hardware im untersten MB komplett einblenden würde, das dann gar kein Platz im untersten Megabyte mehr für ein RealMode-OS verfügbar ist und mit dem Realmode es nicht möglich ist mehr als 1 MB+(64KB -1 Byte) zu adressieren. Es sind ja nicht nur 160 KB die an Platz benötigt werden, sondern je nach verwendeten Komponennten auch schon mal 1 GB an Speicher der von der Hardware über das Bios belegt wird und dann nicht als freier Ram benutzt werden kann.

    Unfug, Programm die im Real Mode unter einem Protected Mode OS laufen,
    landen seit dem Intel 386er im sogenannten Virtual 8086 Mode und für denn kann der Speicher überall liegen. Das Real Mode Programm merkt davon nichts, deswegen hat man den Virtual 8086 Mode mit dem 386er eingeführt.



  • Real Mode! schrieb:

    freecrac schrieb:

    Das Hauptproblem liegt wohl heute auch darin, dass wenn sich die Hardware im untersten MB komplett einblenden würde, das dann gar kein Platz im untersten Megabyte mehr für ein RealMode-OS verfügbar ist und mit dem Realmode es nicht möglich ist mehr als 1 MB+(64KB -1 Byte) zu adressieren. Es sind ja nicht nur 160 KB die an Platz benötigt werden, sondern je nach verwendeten Komponennten auch schon mal 1 GB an Speicher der von der Hardware über das Bios belegt wird und dann nicht als freier Ram benutzt werden kann.

    Unfug, Programm die im Real Mode unter einem Protected Mode OS laufen,
    landen seit dem Intel 386er im sogenannten Virtual 8086 Mode und für denn kann der Speicher überall liegen.

    Das Bios schaltet aber selber gar nicht in den V86-Mode und ist dafür auch gar nicht ausgelegt.

    Das Real Mode Programm merkt davon nichts, deswegen hat man den Virtual 8086 Mode mit dem 386er eingeführt.

    Vor dem Booten ist es aber irrelevant ob danach der Speicher auch anders verwendet werden kann und so weit sind wir ja noch gar nicht das wir booten können, wenn im untersten MB gar kein Bios mehr arbeiten kann.

    Dirk


Log in to reply