freecrac hat geschrieben:wobo hat geschrieben:Himem.sys zum Zugriff auf das XMS läßt sich im Übrigen nicht mit 4G kunterbunt vermischen. Ich vermute, dass Himem.sys nach jedem Aufruf der Kopierfunktion alle Segmentregister (auch FS und GS) wieder auf 64k-Größe stellt.
Das widerspricht aber meinen Erfahrungen.
Denn ich habe neben einer RAM-Disk(SRDXMS.SYS von Marko Kohtala) die auf angeforderten XMS-Speicher von Himem.sys basiert schon erfolgreich von dort aus eine Anwendung die in den Unralmode schaltet
mehrmals hintereinander starten und beenden können, wobei die Anwendung zur Laufzeit selber Daten von der Ramdisk einläd und auch Daten darauf abspeichert, ganz ohne das dadurch der Unrealmode ausgeschaltet wurde.
Wobo schreibt gemutmaßten Mist. Freecrac hat Recht!
Ich dachte all' die Jahre, die Behauptung, himem.sys schalte in den 4G, sei ein Gerücht. Schließlich wollte MS ja Windows verkaufen, da werden die sich doch nicht selbst so ein Ei legen. Als dann diese Behauptung (4G) immer öfter kam, habe ich einfach gedacht: himem.sys schaltet in den 4G, kopiert die Daten ins LowMem und schaltet dann wieder alle Register auf 64k - und das bei jedem Aufruf der XMS-Kopierfunktion Nr. 11.
Das wäre für mich die einzige Erklärung dafür gewesen, wenn man als Betriebssystemhersteller den verteufelten 4G-Mode dennoch benutzt, aber nicht will, dass er populär wird. Im Übrigen war dies für mich die einzige Erkärung, warum XMS so langsam ist, obwohl er doch 4G benutzt.
Dem ist aber wohl nicht so (gilt nur, wenn emm386 nicht geladen ist):
Offensichtlich schaltet himem.sys - sobald die Kopierfunktion Nr. 11 aufgerufen wird (das bloße Treiberinitialisieren oder Aufrufe anderer XMS-Funktionen genügen noch nicht) - die beiden Segmentregister DS und ES auf 4G und setzt diese nicht zurück.
Ich konnte, sobald ich mit irgendeinem Programm die XMS-Kopierfunktion aufgerufen habe, ohne Systemabsturz Befehle wie
mov ebx, 00010008h
mov ax, es:[ebx]
mov bx, ds:[ebx]
ausführen - ohne dass ich selbst den 4G eingeschaltet habe. Habe ich die Segmentregister FS oder GS benutzt, kam es zum Systemabsturz. Ebenso auch, wenn vorher (d.h. seit dem letzten Booten) die Kopierfunktion des XMS nicht aufgerufen wurde. Dann kam es bei jedem Segmentregister zum Absturz.
Ich habe wirklich vor jedem Versuch neu gebootet. Dabei konnte ich immer dann über DS und ES mit Offsets>64k auf Speicherstellen zugreifen, wenn
- himem.sys geladen war,
- emm386.exe (o.ä.) nicht geladen war,
- und wenigstens irgendwann zuvor einmal die xms-Kopierfunktion (Nr.11) aufgerufen war.
Testkonfiguration: intel386sx16, 6 MB, MS-Dos 6.20, XMS 3.0, TASM 2.0, TP 7.0
(Ich hatte auch immer die IDE von TP verlassen, bevor ich einen Probelauf gestartet habe. Nicht dass die mir die Segment-register verändert...)
Wieso hatte ich dann jahrzehntelang Probleme in der Kombination 4G mit himem.sys? Wahrscheinlich hatte nicht ich die Probleme, sondern himem.sys. Mein 4G ging nämlich immer, nur der Zugriff auf XMS über himem.sys klappte dann nicht mehr jedesmal. Grund (wahrscheinlich): Meine Enable4G-Routine hat nur GS in den 4G geschaltet, und alle anderen Segm.Register (DS, ES, FS) auf 64k - und das um möglichst kompatibel zu sein! Schießlich empfiehlt das Zurücksetzen der Segm.Reg. auf 64k meiner Erinnerung nach auch die Intel-Doku ganz offiziell für die Rückkehr vom PMode in den Realmode.
Das hat natürlich dem himem.sys nicht gefallen, wenn der erste Aufruf seiner XMS-Kopierfunktion zufällig vor meiner Enable4G-Routine erfolgt war. Der setzt wahrscheinlich ein internes Flag, wenn er einmal DS und ES auf 4G gestellt hat, und vertraut dann darauf, dass bis zum nächsten Booten niemand mehr an "seinen" DS und ES - Registern rumfummelt. Knallkopf!
Derart fahrlässiges und regelwidriges Verhalten hätte ich keinem Betriebssystemhersteller zugetraut. Entweder stellt man die Regel auf, dass unter DOS alle Segmente 64k haben und hält sich daran (und macht höchstens ganz heimlich davon Gebrauch und schaltet danach sofort wieder zurück, so dass es fast keiner merkt). Oder man stellt die Regel auf: wenn himem.sys verwendet ist, sind DS und ES (ggf. unter bestimmten Bedingungen) auf 4G gestellt.
Ach, was reg' ich mich denn auf.... ...bringt ja alles nix.
freecrac hat geschrieben:
wobo hat geschrieben:PS: Ich versuche auch, nur Sachen zu benutzen, die ich - soweit mir möglich - verstanden habe. Bei mir führt das leider zur produktiven Stagnation...
Nur nicht den Kopf hängen lassen. Alles kann man eben nicht lernen. Aber das was wir uns aus eigener Kraft beibringen können, ist eben die beste Möglichkeit, unseren Fähigkeiten entspechend, das zu nutzen, was wir haben.
Damit haben wir unsere Verantwortung, mit unseren Fähigkeiten vernünftig umzugehen, erfüllt.
Dirk
Muß ich mir jetzt Sorgen machen? Ich meine, ich schreibe, was bei mir alles nicht klappt und Du sagst, das passt schon, solange ich dabei nur meine Fähigkeiten ausschöpfe..
)
Aber gute Weisheit. Auf jeden Fall etwas zum Nachdenken (PS: habe noch ein paar Kommas in Dein Zitat einfügen dürfen - und beim Editieren auch noch in meinem Geschreibsel...).
Grüße
wobo