ROMSPEED und virtuelle Speicherverwaltung: Zusammenarbeit ist Trumpf

In der Regel ist es nicht möglich, daß mehrere Programme die integrierte PMMU des 68030-Prozessors gleichzeitig nutzen. Dem muß aber nicht so sein. Entscheidend ist, daß solche Programme voneinander wissen und dementsprechend reagieren.

Das Programm ROMSPEED wurde in [1] vorgestellt. Es nutzt die MMU dazu, das komplette ROM des TT im schnellen TT-RAM ablaufen zu lassen und so einen Geschwindigkeitsvorteil zu erzielen. Wünschenswert wäre es, ROMSPEED in Verbindung mit dem Programm OUTSIDE einzusetzen, das eine virtuelle Speicherverwaltung auf dem TT ermöglicht [2]. (Bei diesem Verfahren wird eine Festplatte quasi als Speichererweiterung mißbraucht, so daß man ohne zusätzliche Hardware mit bis zu 128 MByte TT-RAM arbeiten kann.) Bisher war dies aus einem leicht einsichtigen Grund nicht möglich: Es darf nicht passieren, daß Teile des TOS auf Platte ausgelagert werden. Ein Absturz ist so geradezu vorprogrammiert. Zwar läßt sich ROMSPEED auch im ST-RAM, das nicht virtuell verwaltet werden kann, installieren, aber so wäre der Geschwindigkeitsgewinn dahin.

Ausweg

OUTSIDE erlaubt es, einzelne Speicherseiten des TT-RAMs gegen das Auslagem auf Platte zu schützen. Welche Programme können von dieser Möglichkeit profitieren?

In erster Linie wird es sich hierbei um resetfeste Programme handeln, die sich im TT-RAM verankern. Nach einem Reset darf es nicht Vorkommen, daß sich ein resetfestes Programm aufgrund der virtuellen Speicherverwaltung nicht im Hauptspeicher, sondern auf der Festplatte befindet. Versucht die Reset-Routine, ein solches Programm aufzurufen, springt der Prozessor mit ziemlicher Sicherheit ins Leere.

Eine weitere Kategorie von Programmen, die tunlichst nicht von der virtuellen Verwaltung des TT-RAM erfaßt werden darf, sind einige residente Programme, die ständig im Speicher anwesend sein müssen. OUTSIDE selber zählt mit dazu, falls es ins schnelle RAM geladen wurde.

Nun ist ROMSPEED zwar weder reset-fest, noch ist das eigentliche Programm resident, es hinterläßt aber Daten, die ständig im Speicher anwesend sein müssen. Hierbei handelt es sich um die RAM-Kopie des Betriebssystems. Es ist unbedingt notwendig, das Auslagern dieser Informationen zu verhindern. Kümmert man sich nicht darum, wird man die Erfahrung machen, daß sich mit einem Rechner ohne Betriebssystem nicht gut arbeiten läßt. Ein Systemabsturz wird nicht lange auf sich warten lassen.

Bitte ein Bit

Jede von ROMSPEED für die Kopie des TOS reservierte Speicherseite wird über einen Seiten-Deskriptor beschrieben. Die Abbildung verdeutlicht noch einmal den Aufbau eines solchen Deskriptors.

Die meisten Deskriptor-Bits werden von der PMMU des 68030 verwendet. Beträgt die Größe eine Speicherseite 32 kByte, so sind die Bits 16 bis 23 der physikalischen Seitenadresse jedoch unbelegt und stehen für eigene Anwendungen zur Verfügung. OUTSIDE reserviert sich die unteren sieben dieser Bits. Das achte Bit steht für andere Programme zur Verfügung.

Entscheidend für uns ist Bit 16. Dieses Bit teilt OUTSIDE mit, ob die Speicherseite, die durch den entsprechenden Deskriptor beschrieben wird, ausgelagert werden darf. Ist das Bit gesetzt, verbleibt die Seite im Speicher, wird also nicht in die virtuelle Speicherverwaltung eingebunden. ROMSPEED nutzt in der neuen Version dieses Bit, um sich fest im Speicher des TT zu verankern.

RAM-Einsparung

Von der Unterstützung der virtuellen Speicherverwaltung abgesehen, wurde ROMSPEED in einem zusätzlichen Punkt erweitert. Das Programm legt nun nicht mehr den gesamten ROM-Bereich ins RAM, sondern nur noch den Teil, der tatsächlich mit Code belegt ist. Obwohl der TT bis zu 512 kByte ROM ansprechen kann, sind momentan nämlich nur ca. 260 kByte genutzt. Die restlichen Bytes sind leer und brauchen nicht ins RAM kopiert zu werden. Somit werden deutlich weniger als 512 kByte RAM von ROMSPEED verschlungen. Daß noch viel Leerraum in den TT-ROMs vorhanden ist, kann für die Zukunft sehr interessant sein. Sollte Atari das TT-TOS einmal gründlich erweitern wollen, wird es keine Platzprobleme geben.

Was das vorgestellte Programm betrifft, ist neben dem Assembler-Quelltext ein entsprechendes BASIC-Listing abgedruckt, das auch den Lesern, die keinen Assembler besitzen, die Nutzung von ROMSPEED ermöglicht.

Zu beachten ist, daß OUTSIDE stets vor ROMSPEED gestartet werden muß. Im nachhinein kann ROMSPEED schließlich nicht mehr verhindern, daß die Speicherseiten, die das Betriebssystem enthalten, ausgelagert werden.

Vorsicht vor System-Programmierung

Wie man sieht, kann es schnell zu Kollisionen kommen, wenn Programme sich auf unterster Ebene ins System einklinken. Die MMU-Programmierung ist in diesem Zusammenhang besonders kritisch, da es für den TT hierzu keinerlei Richtlinien gibt. Auf anderen Systemen bleibt die Nutzung der MMU eigentlich dem Betriebssystem Vorbehalten und ist nicht Sache des Anwenders. Aus diesem Grund sollte man es sich zweimal überlegen, bevor man sich daran macht, systemnahe Komponenten des TT am Betriebssystem vorbei zu programmieren. Die Wahrscheinlichkeit, daß solche Programme auf einem eventuellen TT-Nachfolger nicht mehr funktionieren, ist äußerst groß.

US

Literatur:

[1] „TT-Tuning - Speed without the price ", ST-Computer 3/91

[2] „Virtuelle Speicherverwaltung - Eine Fallstudie", ST-Computer 7,8191


******************************* * * * ROMSPEED V1.2 * * * * verlegt ROM ins TT-RAM, * * * * unterstützt virtuelle * * * * Speicherverwaltung OUTSIDE * * * * (C) Juli 1991 by Uwe Seimet * ******************************* LOCKED = 0 GEMDOS = 1 CCONWS = 9 PTERMRES = 49 XBIOS = 14 SUPEXEC =38 _p_cookies = $5a0 ;Pointer auf ;cookie-jar text pea super(pc) move #SUPEXEC,-(sp) trap #XBIOS addq.l #6,sp lea ttonly,a3 tst.b stfig ;Atari ST? bne.b error ;ja- lea mmuerr,a3 tst.b mmuflg ;MMU bereits aktiv? beq nommu :nein- tst.b swapflg ;OUTSIDE? beq.b error ;nein- nommu: pea message move #CCONWS,-(sp) trap #GEMDOS ;Meldung ausgeben addq.l #6,sp tst.b ramflg ;bereits ;installiert? bne.b quit ;33- move.l rompnt,a1 ;neue ;ROM-Startadresse sub.l #mem,a1 add.l romlen,a1 ;512K Speicher ;reservieren move.l 4(sp),a0 ;Basepage-Adresse add.l 12(a0),a1 ;TEXT-Segment lea $100(a1),a1 ;Basepage-Länge clr -(sp) pea (a1) move #PTERMRES,-(sp) ;Programm trap #GEMDOS ;resident halten error: pea (a3) ;Fehlermeldung move #CCONWS,-(sp) trap #GEMDOS addq.l #6,sp quit: pea notinst move #CCONWS,-(sp) trap #GEMDOS addq.l #6, sp clr -(sp) trap #GEMDOS super: move.l _p_cookies,d0 ;cookie jar ;vorhanden? seq stflg beq exit ;nein- move.l d0,a0 loop: movem.l (a0)+,d0-d1 tst.l d0 ;Ende der Liste? beq.b cend ;ja- cmp.l #"_MCH",d0 ;cookie für Computertyp ? bne nomch ;nein- cmp.l #$00020000,d1 ;TT oder neuer? scs stflg bra loop nomch: cmp.l #"_CPU",d0 bne nocpu cmp #30,d1 ;68030? bne exit ;nein- bra loop nocpu: cmp.l #"SWAP",d0 ;OUTSIDE? bne notout ;nein- st swapflg bra loop notout: cmp.l #"PMMU",d0 ;sonstiges MMU-Programm? bne loop ;nein- st mmuflg bra loop cend: tst.b stflg bne exit tst.b swapflg bne outside tst.b mmuflg bne exit outside:cmp #$00e0,$7f8 ;ROMSPEED bereits ;installiert? sne ramflg bne exit ;ja- move.l #mem+32768,d1 and #$8000,d1 ;neue ROM-Adresse ;auf Pagegrenze ;ausrichten move.l d1,rompnt ;und merken move.l d1,a0 ;Prüfsummen lea $00e80000-8,a1 ;überspringen getlen: cmp.l #$ffffffff,-(a1) ;Leerbytes beq getlen ;überspringen sub.l #$00dffffc,a1 move.l a1,romlen move.l a1,d0 lsr.l #2,d0 lea $00e00000,a1 ;ROM-Adresse copy: move.l (a1)+,(a0)+ ;ins RAM kopieren subq.l #1,d0 bpl copy or #5,d1 ;Page-Deskriptor ;markieren und ;schreibschützen move.l d1,$7f8 ;in Deskriptor- ;Tabelle eintragen pflusha ;DC.L $F0002400 tst.b swapflg ;OUTSIDE ;installiert? beq.b exit ;nein- move.l rompnt,a1 move.l a1,d0 add.l romlen,d0 lock: ptestr #7,(a1),#7,a0 ;Deskriptoradresse ;ermitteln ;DC.L $F0119F17 bset #LOCKED,2(a0) ;Systemkopie gegen lea ($8000,a1),a1 ;Auslagern sperren cmp.l a1, d0 bcc lock exit: rts data message:dc b $0d,$0a dc.b "ROMSPEED V1.2 installiert",$0d,$0a dc.b "by Uwe Seimet",$0d,$0a, $00 notinst:dc.b $0d,$0a dc.b "ROMSPEED V1.2 nicht " dc.b "installiert! ",$0d,$0a,$00 ttonly: dc.b $0d,$0a dc.b "ROMSPEED läuft nur " dc.b "auf dem Atari TT" dc.b $0d,$0a,$00 mmuerr: dc.b $0d,$0a dc.b "Es ist bereits ein " dc.b "MMU-Programm aktiv'" dc.b $0d,$0a,$00 bss mem: ds.b 557056 ;512K + 32K rompnt: ds.l 1 ;Pointer auf ROM-Kopie romlen: ds.l 1 ;Größe des ROM swapflg:ds.b 1 ;Flag für OUTSIDE ramflg: ds.b 1 ;Flag für Zweitinstallation stflg ds.b 1 ;Flag für Atari ST mmuflg: ds.b 1 ;Flag für aktives MMU- Programm

' ROMSPEED.PRG Lader filename$= "ROMSPEED.PRG" OPEN "O",1,Filename$ READ Wert REPEAT PRINT #1, CHR$(Wert); Summe=Summe+Wert READ Wert UNTIL Wert=-1 READ Pruefsumme IF Pruefsumme<>Summe THEN PRINT "Fehler In Datas" ENDIF CLOSE(1) Data 96, 26, 0, 0, 1, 138, 0, 0, 0, 172 Data 0, 8, 160, 12, 0, 0, 0, 0, 0, 0 Data 0, 0, 0, 0, 0, 7, 0, 0, 72, 122 Data 0, 136, 63, 60, 0, 38, 78, 78, 92, 143 Data 71, 249, 0, 0, 1, 227, 74, 57, 0, 8 Data 130, 64, 102, 84, 71, 249, 0, 0, 2, 11 Data 74, 57, 0, 8, 130, 65, 103, 8, 74, 57 Data 0, 8, 130, 62, 103, 62, 72, 121, 0, 0 Data 1, 138, 63, 60, 0, 9, 78, 65, 92, 143 Data 74, 57, 0, 8, 130, 63, 102, 50, 34, 121 Data 0, 8, 130, 54, 147, 252, 0, 0, 2, 54 Data 211, 249, 0, 8, 130, 58, 32, 111, 0, 4 Data 211, 232, 0, 12, 67, 233, 1, 0, 66, 103 Data 72, 81, 63, 60, 0, 49, 78, 65, 72, 83 Data 63, 60, 0, 9, 78, 65, 92, 143, 72, 121 Data 0, 0, 1, 190, 63, 60, 0, 9, 78, 65 Data 92, 143, 66, 103, 78, 65, 32, 56, 5, 160 Data 87, 249, 0, 8, 130, 64, 103, 0, 0, 242 Data 32, 64, 76, 216, 0, 3, 74, 128, 103, 72 Data 176, 188, 95, 77, 67, 72, 102, 14, 178, 188 Data 0, 2, 0, 0, 85, 249, 0, 8, 130, 64 Data 96, 226, 176, 188, 95, 67, 80, 85, 102, 10 Data 178, 124, 0, 30, 102, 0, 0, 194, 96, 208 Data 176, 188, 83, 87, 65, 80, 102, 8, 80, 249 Data 0, 8, 130, 62, 96, 192, 176, 188, 80, 77 Data 77, 85, 102, 184, 80, 249, 0, 8, 130, 65 Data 96, 176, 74, 57, 0, 8, 130, 64, 102, 0 Data 0, 150, 74, 57, 0, 8, 130, 62, 102, 10 Data 74, 57, 0, 8, 130, 65, 102, 0, 0, 132 Data 12, 120, 0, 224, 7, 248, 86, 249, 0, 8 Data 130, 63, 102, 116, 34, 60, 0, 0, 130, 54 Data 194, 124, 128, 0, 35, 193, 0, 8, 130, 54 Data 32, 65, 67, 249, 0, 231, 255, 248, 12, 161 Data 255, 255, 255, 255, 103, 248 147, 252, 0, 223 Data 255, 252, 35, 201, 0, 8, 130, 58, 32, 9 Data 228, 136, 67, 249, 0, 224, 0, 0, 32, 217 Data 83, 128, 106, 250, 130, 124, 0, 5, 33, 193 Data 7, 248, 240, 0, 36, 0, 74, 57, 0, 8 Data 130, 62, 103, 36, 34, 121, 0, 8, 130, 54 Data 32, 9, 208, 185, 0, 8, 130, 58, 240, 17 Data 159, 23, 8, 232, 0, 0, 0, 2, 67, 241 Data 1, 112, 0, 0, 128, 0, 176, 137, 100, 234 Data 78, 117, 13, 10, 82, 79, 77, 83, 80, 69 Data 69, 68, 32, 86, 49, 46, 50, 32, 105, 110 Data 115, 116, 97, 108,, 108, 105, 101, 114, 116, 13 Data 10, 189, 32, 49, 57, 57, 49, 32, 98, 121 Data 32, 85, 119, 101, 32, 83, 101, 105, 109, 101 Data 116, 13, 10, 0, 13, 10, 82, 79, 77, 83 Data 80, 69, 69, 68, 32, 86, 49, 46, 50, 32 Data 110, 105, 99, 104, 116, 32, 105, 110, 115, 116 Data 97, 108, 108, 105, 101, 114, 116, 33, 13, 10 Data 0, 13, 10, 82, 79, 77, 83, 80, 69, 69 Data 68, 32, 108, 132, 117, 102, 116, 32, 110, 117 Data 114, 32, 97, 117, 102, 32, 100, 101, 109, 32 Data 65, 116, 97, 114, 105, 32, 84, 84, 13, 10 Data 0, 13, 10, 69, 115, 32, 105, 115, 116, 32 Data 98, 101, 114, 101, 105, 116, 115, 32, 101, 105 Data 110, 32, 77, 77, 85, 45, 80, 114, 111, 103 Data 114, 97, 109, 109, 32, 97, 107, 116, 105, 118 Data 33, 13, 10, 0, 0, 0, 0, 14, 6, 8 Data 6, 8, 8, 14, 8, 6, 6, 38, 22, 34 Data 34, 16, 8, 10, 8, 16, 8, 10, 28, 34 Data 8, 8, 0 Data -1 Data 47209

Uwe Seimet
Aus:ST-Computer 09 /1991, Seite

Links

Copyright-Bestimmungen: siehe Über diese Seite