| |
AppDisk v0.6ß, Copyright © 1997,1998 Jens Brüggemann 14.01.98
--- Allgemeines ---
AppDisk ist eine dynamische Ramdisk für MagiC (bzw. Mag!X) ab Version 2.0.
Es handelt sich dabei um eine normale BIOS-Ramdisk, also auch mit normalem
GEMDOS-Dateisystem, also Dateinamen "8.3", großgeschrieben usw. Auch die
meisten FAT-Tools, Sektor-Editoren und Defragmentierer funktionieren
problemlos, z.B. ChkDisk3, Correct, FAT-Map. Gut für allerlei Tests. :-)
Um die genannten GEMDOS-Einschränkungen aufzuheben, kann die Ramdisk unter
entsprechenden MagiC-Versionen auch als VFAT-Laufwerk konfiguriert werden,
auch permanent bereits in der MAGX.INF.
AppDisk wird als normale Applikation gestartet oder kann auch für den App-
Autostart-Ordner konfiguriert werden. Die Sicherheit der Daten auf dieser
Ramdisk ist relativ gering, insbesondere ist dies keine resetfeste Ramdisk,
sondern tatsächlich nur eine normale Applikation, die man dafür auch
jederzeit wieder vollständig aus dem System entfernen kann.
Ist die Ramdisk erst installiert, kann der zugehörige Kontrolldialog durch
eine VA_START-Nachricht aktiviert werden (z.B. Klick in AppLine), alternativ
auch durch erneutes Starten des Programms vom Desktop.
Beendet wird AppDisk durch die Dialogoption "Entfernen" oder eine AP_TERM-
Nachricht (Shutdown, Auflösungswechsel, "beenden" in AppLine) oder mit
Gewalt (MagiC-Taskmanager, "rauswerfen" in AppLine, Absturz). Die Lösung
"mit Gewalt" ist natürlich weniger zu empfehlen.
--- Bedienung ---
Die fünf speicherbaren Optionen des Hauptdialogs:
- Laufwerkskennung von A: bis Z: (bei Mag!X 2 nur bis P:)
Es muß natürlich eine noch unbelegte Kennung gewählt werden.
- Maximale Größe von 72 bis 16383 kB. Diese Größe kann unabhängig vom
freien Speicher gewählt werden, allerdings macht es keinen Sinn, eine
größere Ramdisk zu wählen, als man maximal freien Speicher hat, denn die
Verwaltungsdaten - und damit der permanente Speicherverbrauch - nehmen
mit wachsender Ramdiskgröße ebenfalls zu.
- RAM freilassen von 0 bis 9999 kB. Soviel Speicher wird bei der Installa-
tion und beim Schreiben auf die Ramdisk auf jeden Fall in einem Stück
freigehalten.
- Schalter, ob die Ramdisk beim Programmstart sofort installiert werden
soll. Falls ja, werden die Einstellungen aus der Inf-Datei genommen und
der Startdialog übergangen (für den Autostart-Ordner).
- Schalter, ob die Nachfrage beim Shutdown unterdrückt werden soll. Falls
beim Shutdown oder Auflösungswechsel noch Daten auf der Ramdisk gespei-
chert sind, wird normalerweise nachgefragt, ob die Daten verworfen werden
sollen. Diese Nachfrage kann man abstellen, dann sind die Daten ggf.
sofort verloren!
Ist die Ramdisk erst installiert, wird die weitere Option "Schreibschutz"
im Kontrolldialog freigegeben. Falls es gerade erlaubt ist, den Schreib-
schutz umzuschalten, wird das getan. Sonst gibt es eine Fehlermeldung.
Der Button "Status" öffnet eine Dialogbox mit diversen Kenndaten und
aktuellen Werten über die Ramdisk. Falls noch Aufräumarbeiten (s.u.)
anstehen, wird noch einen Moment gewartet und diese dann sofort vollständig
erledigt, bevor der Dialog angezeigt wird.
--- Das Aufräumen ---
Regelmäßig versucht die AppDisk-Applikation, auf der Ramdisk verstreute
Daten zusammenzusuchen und anschließend nicht mehr benötigte Speicherblöcke
- beginnend bei hohen Speicheradressen - freizugeben. Je nach Datenmengen
kann das etwas dauern, auch wenn man das in der Praxis nicht oder nur kaum
merkt. Dabei wird natürlich versucht, möglichst wenige unnötige Aktionen in
der Richtung zu unternehmen und die (im wesentlichen unbekannten) Eigen-
schaften des WBDAEMON zu berücksichtigen.
Die Strategie ist derzeit wie folgt: Alle 1/2 Sekunde schaut die AppDisk
nach, ob Ramdisk-Sektoren zum Aufräumen vorhanden sein könnten. Das wird
frühestens 1 Sekunde nach der letzten Schreiboperation und frühestens
2 Sekunden nach dem letzten Freigeben eines Datensektors bejaht. Dann wird
eben aufgeräumt. Falls das recht lange dauern sollte, will AppDisk andere
Programme nicht all zu sehr behindern und unterbricht das Aufräumen nach
etwas über 1/10 Sekunde, um nach der üblichen 1/2 Sekunde fortzufahren.
Die kleinen Aufräumpausen lassen sich übrigens mit einem parallelen BOXES
o.ä. sichtbar machen.
--- Das Defragmentieren ---
Obwohl durch das Aufräumen die Anzahl der benötigten Speicherblöcke immer
minimiert wird, gibt es einen weiteren Effekt, den es zu korrigieren gilt.
Angenommen, es wird zunächst ein größeres Programm gestartet und danach
etwas auf die Ramdisk kopiert, dann sieht die Speicherbelegung etwa so aus:
+----------+------------+-----------+--------------------------------------+
| System | Programm | Ramdisk | |
+----------+------------+-----------+--------------------------------------+
Wird nun das Programm beendet, ändert sich der zur Verfügung stehende größte
freie Speicherblock dadurch nicht, in den das nächste Programm geladen wird:
+----------+------------+-----------+--------------------------------------+
| System | | Ramdisk | |
+----------+------------+-----------+--------------------------------------+
Durch mehrere Programmstarts und -Beendigungen sowie zwischenzeitliche
Benutzung der Ramdisk kann der Speicher auf diese Weise stark zerstückelt
werden.
Deshalb versucht die AppDisk-Applikation von Zeit zu Zeit, Speicherblöcke
mit niedrigeren Adressen vom System zu bekommen, die diejenigen Blöcke mit
höheren Adressen ersetzen können. Das braucht zwar - wie das Aufräumen -
auch seine Zeit, ist in der Praxis aber ebenfalls kaum zu bemerken. Der
Effekt ist dagegen sehr wohl zu bemerken: Der größte zur Verfügung stehende
Speicherblock wird trotz intensiver Benutzung der Ramdisk nicht unnötig
eingeschränkt.
--- Gegenanzeigen ---
Der für andere Programme sichtbare freie Speicher auf der Ramdisk ergibt
sich ausschließlich aus deren maximaler Größe und der aktuellen Belegung,
nicht jedoch aus dem aktuell verfügbaren Hauptspeicher.
Hat man z.B. nur 4 MB Speicher, kann man zwar durchaus eine AppDisk mit
10 MB einrichten, diese jedoch mit 10 MB Daten zu füllen, wird natürlich
nicht klappen. Ist beim Schreiben irgendwann (bis auf den konfigurierten
Restspeicher) kein Speicher mehr da, wird die aktuelle Schreibanforderung
mit einem Fehlercode quittiert. Daraus folgt, daß Programme, die vor dem
Speichern die freie Kapazität prüfen und danach davon ausgehen, daß das
Speichern schon klappen wird, auf die Nase fallen. Aber dieses Vorgehen kann
unter Multitasking sowieso in die Hose gehen.
Keine Regel ohne Ausnahme: Programme wie Kobold sperren das Ziellaufwerk im
schnellen Modus und dürfen deshalb davon ausgehen, daß das Speichern vom
Platz her klappen wird. Von der AppDisk gibt es ggf. trotzdem einen Schreib-
fehler, wenn kein freier Speicher mehr da ist. Da Kobold außerdem die zu
schreibenden Daten komplett im Speicher zusammensetzt, benötigt man schon
mehr als das doppelte der zu kopierenden Daten an freiem Speicher.
Ähnliche Probleme kann es beim Nutzen der AppDisk als temporäres Laufwerk
z.B. für CatPutz geben. CatPutz puffert möglichst viel im RAM. Wenn dann
noch auf die AppDisk geschrieben werden soll, wird schnell der Speicher
knapp. Also Vorsicht bei solchen Anwendungen.
Sollten einmal Sektoren auf die Ramdisk geschrieben werden, ohne die FAT
dabei zu berücksichtigen (also am GEMDOS vorbei), so kann es vorkommen, daß
eigentlich freie Sektoren auf der Ramdisk gespeichert sind (sichtbar im
Status-Dialog) und somit mindestens einen dynamischen Block erfordern. Ein
Kandidat für diesen Effekt ist das Programm CHANGES (von Ease), das mit
einem probeweisen BIOS-Schreibzugriff den Schreibschutz-Status ermittelt.
Dabei ist dann immer mindestens ein Sektor gespeichert. Naja, dafür gibt's
keinen Workaround - wer CHANGES benutzt, ist eh selbst schuld...
Während ein Programm im Single-Mode läuft, werden andere Applikationen
eingefroren, also auch die AppDisk-Applikation. Die Ramdisk kann von der
Single-Applikation normal benutzt werden, allerdings findet keine der oben
beschriebenen Aufräumaktionen statt. Speicherblöcke, die die Ramdisk einmal
nötig hatte, bleiben also bis zum Ende des Single-Programms belegt.
AppDisk nutzt die Tatsache aus, daß die Betriebssystem-Aufrufe unter MagiC
reentrant sind. Demzufolge dürfen keine Systemerweiterungen installiert
sein, die sich in GEMDOS- oder BIOS-Aufrufe einklinken, aber ihrerseits
nicht reentrant sind!
Außerdem müssen solche Programme zum Einklinken unbedingt das XBRA-Verfahren
verwenden, anderenfalls könnte es passieren, daß die AppDisk sich nicht
vollständig deinstallieren kann. Notfalls kann man auch dafür sorgen, daß
AppDisk erst nach solchen Programmen gestartet wird.
--- Sonstiges ---
Beim Schreibschutz wird ein Fehler sichtbar, der vermutlich mindestens in
MagiC 5.03 (evtl. WBDAEMON) steckt, man kann nämlich offenbar sehr kleine
Dateien (kleiner als 512 Bytes) auf die schreibgeschützte Ramdisk kopieren,
ohne eine Fehlermeldung zu erhalten (unabhängig vom benutzten Desktop). Nach
ESC ist die Datei allerdings dann doch nicht da. Ebenso ist es beim Löschen
von Dateien, wo der Desktop offensichtlich ebenfalls keine Meldung erhält.
Debugging: Falls irgendwann einmal (asynchron) ein Ping und die Meldung
"AppDisk: Not all high sectors copied down!" auf dem Bildschirm erscheinen
sollte, dann liegt ein übler Programmierfehler vor!
Technisches: Die üblichen Vektoren für BIOS-Ramdisks werden verbogen und es
wird ein Termination-Handler installiert. Die XBRA-Kennung ist 'AppD'.
Vor kritischen Aktionen (Schreibschutz-Flag ändern, Beenden) wird geprüft,
ob das Laufwerk gerade frei ist und anschließend ein Mediachange ausgelöst.
Das geht ab MagiC 3 per GEMDOS, bei Mag!X 2 sollte man CHK_OFLS installiert
haben.
Folgende Fehlercodes werden an Programme geliefert, die das virtuelle
Laufwerk benutzen (im wesentlichen also wohl an das GEMDOS, das diese Codes
aber meistens durchreicht):
Vom Ramdisk-Interface:
-5: Ungültiger Befehl (Bad request)
negative bzw. zu große Sektoranzahl
-8: Sektor nicht gefunden
ungültige Sektornummer
-13: Schreibschutz
bei Schreibzugriffen während Schreibschutz gesetzt ist
-14: Medium wurde gewechselt
nach virtuellem Medienwechsel (z.B. zum Setzen des Schreibschutzes)
Vom Virtual-Modul:
-1: Allgemeiner Fehler
keine MagiC-Speicherverwaltung vorgefunden
-10: Schreibfehler
zuwenig Speicher beim Schreiben
Das Programm wurde auf einem Macintosh Performa 5200 unter MagiCMac 2.0.4
mit MagiC 5.03 sowie auf einem Atari 1040 ST unter Mag!X 2.0 getestet.
Ramdisk -> Speicherverbrauch netto (Ramdisk leer)
72 kB 39.8 kB
2048 kB 71,8 kB
4096 kB 103,7 kB
16383 kB 295,2 kB
Jeweils bis zu 127 kB Daten belegen einen Block von 127,5 kB Speicher, der
letzte benötigte Speicherblock bei voller Ramdisk kann auch kleiner sein.
|