TOM VMEM Version 1.1 Virtuelle Speicherverwaltung unter AmigaDOS von Thomas Globisch 26.7.92 !! Bitte unbedingt VMEM.BUGS lesen !! I. Distribution Dieses Programm ist FREEWARE. Es ist also völlig kostenlos, egal ob und wieviel das Programm benutzt wird :-> Weiterhin darf es auch wie wild durch die Gegend kopiert werden, wenn das Archiv KOMPLETT weitergegeben wird. Wird dieses Programm auf Diskette weiterverbreitet. darf eine Kopiergebühr von max 2.- DM ohne Disk und 5.- DM mit Disk erhoben werden. Alles, was diese Angaben üBERSTEIGT wird vom Autor als PROFESSIONELLES VERKAUFEN angesehen und entsprechend geahndet !! Das Copyright liegt weiterhin beim Autor. Anfragen bezüglich PDs, Erfahrungsaustausch, Programmieraufträge, Amiga 3000 Geschenke, Flug nach California oder was weiß ich ... sind auch immer willkommen. Files im Archiv : 3 VMEM VMEM.dok VMEM.bugs II. Allgemeines Dieses Programm dient dazu, unter AmigaDOS virtuellen Speicher zu verwalten, ähnlich wie es auch unter UNIX oder Windows benutzt wird. Als virtuellen Speicher bezeichnet man ein "Stück" Ram, das nicht physikalisch vorhanden ist, sondern als File auf der Harddisk liegt und im Bedarfsfall Stück für Stück nachgeladen wird. Dabei wird das virtuelle Ram transparent in das System eingebunden, ohne das einzelne Programme überhaupt merken, daß der zusätzliche Speicher gar nicht physikalisch existiert. Dabei passiert folgendes : Ein Block echtes Ram wird als "Fenster" für ein größeres Stück virtuelles Ram benutzt. So kann man beispielsweise mit 1 MB echtem Ram 16 MB physikalisches Ram erzeugen. Wenn man also eine 2 MB Ram- erweiterung besitzt, kann man mit 1 MB echtem Ram max. 16 MB virtuelles Ram erzeugen, also hat dann als Systemspeicher das normale CHIP-MEM + 1 MB physik. Ram (Rest von den 2 MB) + 16 MB virtuelles Ram, also 18 MB Ram. VMEM unterstützt dabei generell Disk-IO, und sollte sowohl unter AmigaDOS 1.2, 1.3 und 2.0 laufen. Das Swapfile darf dabei auf einer beliebigen Plattenpartition liegen, auf diese Partition darf natürlich auch DiskIO gemacht werden. Dabei werden generell keine Plattenparameter verändert. VMEM benutzt nur die MMU, Prozessor-Caches oder der Copyback-Modus werden weder benutzt noch verändert. II.a Hardwarevoraussetzungen Grundsätzlich ist es mit einem Motorola MC 68000 Prozessor, der in einem standard-Amiga 500/600/1000/2000 zu finden ist, nicht möglich, virtuellen Speicher zu benutzen. Dieses liegt nicht am Amiga, sondern gilt für jeden Rechner, der als Prozessor den MC 68000 benutzt. Deshalb wurde von Motorola der MC 68010 entwickelt, der die erste Voraussetzung dafür mitbringt. Allerdings ist auf diesem Prozessor virtuelles Ram nur mit einem hohen Aufwand realisierbar, do daß es auf einem MC 68010 mit 7 MHZ Takt- frequenz schon fast nicht mehr sinnvoll ist. Dieses Programm benötigt deshalb UNBEDINGT einen MC 68020 + MMU (68851) oder einen 68030 Prozessor mit PMMU ( Standard MC 68030, NICHT MC 68EC030, bei dieser "Sparversion" wurde auf die MMU verzichtet) oder einen MC 68040 Prozessor. Nebenbei währen so 1-2 MB 32-Bit RAM auch nicht schlecht, sollten aber bei jeder 68020 / 030 - Karte sowieso vorhanden sein. II.b Grundsätzliche Funktionsweise VMEM verwendet die MMU, um außerhalb des 24-BIT Adressraumes ein bis zu 1 GB großen Speicherbereich als virtuelles Ram zu erzeugen. Deshalb darf die MMU nicht von anderen Programmen benutzt werden, wenn VMEM gestartet wird. Dabei wird das virtuelle Ram auf ein physikalisch vorhandenes Ram abgebildet, das physik. Ram ist also eine Art "Fenster" des virt. Rams. III. Anleitung Aufruf vom CLI : VMEM [?] | [-f] [-p<#phys pages>] [-v] Optionen : ? : gibt Informationen über die Benutzung und Defaultwerte von VMEM aus. Dabei Gilt als default : Swapfile : DH0:.VMEM_PAGES Physik. Seiten : 32 = 1 MB Virt. Seiten : 256 = 8 MB -fNAME : legt das Swapfile fest. Das Swapfile enthält alle Informationen des Virtuellen Speichers, ist deshalb auch immer genauso groß wie die Größe des virtuellen Speichers. Wenn man also 8 MB virtuelles Ram anmeldet, benötigt man auch 8 MB Platz auf der Festplatte. Dabei muß der Platz zu beginn zur Verfügung stehen. -p#pages : Legt die Anzahl der physikalischen, d.h. als echtes Ram vorhandenen Seiten fest. Eine Speicherseite hat dabei die feste Länge von 32 KB. -p32 entspricht also 32 * 32 KB = 1 MB echtem Ram. Grundsätzlich muß man eine gewisse Menge von echtem Ram zur Verfügung stellen, um überhaupt virtuelles Ram erzeugen zu können. Das echte Ram ist also praktisch ein "Fenster", das über dem virtuellen Ram hin und hergeschoben wird, und alles, was außerhalb dieses Fensters liegt, muß auf die Festplatte ausgelagert werden. Damit aber überhaupt eine sinnvolle Funktion gewährleistet werden kann, benötigt man eine gewisse Menge echtes Ram. So sind 10 Seiten = 327680 Bytes echtes Ram das Minimum, um noch vernünftig arbeiten zu können. -v#pages : Legt die Anzahl der virtuellen Seiten Fest. Dabei kann man bis 32768 virtuelle Seiten <> 1 GB Ram erzeugen. Wird VMEM gestartet, so wird das Swapfile angelegt, der Speicher angemeldet und ein kleines Statuswindow geöffnet. Dabei gilt für Status : Warte - Alles in Ordnung, VMEM überwacht das System Aging - Seiten werden gealtert (Sieht man nur am Flackern von "Warte") Warte auf DiskIO - während ein Progr. versucht etwas nachzuladen, benötigt ein anderes Programm eine ausgelagerte Seite. Diese kann aber erst nachgeladen werden, wenn das 1. Programm mit seinem DiskIO fertig ist. Programm 2 muß also warten. Swapping - Es wird gerade eine oder mehrere Seiten nachgeladen. Dabei wird die Speicheradresse angegeben. Während eines DiskIO's kann es passieren, daß der zu ladende Block nicht mehr ganz passt und deshalb einige Seiten nachgeladen werden müssen. Dann erscheint im Statusfenster eine Adresse, während der Status selber noch auf Warte steht. Das liegt daran, daß eine eigene Laderoutine verwendet wird, die von sich aus schon Seiten nachladen kann. IV. Detailierte Funktionsweise VMEM benutzt die MMU, um ein Stück echtes Ram auf eine Adresse außerhalb des 24-Bit-Adressraumes umzulegen (ähnlich wie CPU FASTROM den Kickstart vom ROM ins Ram kopiert und danach in den Adressraum über das Rom legt). Deshalb darf die MMU nicht von anderen Programmen benutzt werden, also ggf. vorher CPU NOFASTROM !!. Sollte die MMU doch belegt sein, wird ein MMU-RESET ausgelöst. Bestenfalls passiert dabei gar nichts, wenn CPU FASTROM vorher aktiv war, hat man jetzt eine 0.5 MB große "Leiche" im Ram liegen. Dabei wird bei der Seitenverwaltung das Prinzip der "alternden Seiten" verwendet. Jede Seite (8 KB) bekommt ein Wert zugewiesen, der als ihr Alter dient. Dabei wird 3 Mal pro Sekunde das Alter um 1 erhöht. Wird auf eine Seite lesend oder schreibend zugegriffen, halbiert sich ihr Alter. Muß jetzt eine Seite von Disk neu geladen werden, so wird die älteste Seite ausgelagert und die neue Seite bekommt das Alter 0. VMEM meldet sein Ram mit der Basisadresse 0x1000000 und Priorität -9 an, also außerhalb des 24-Bit-Adressraumes. Normalerweise sollte es so sein, daß zuerst alles physikalisch vorhandene Ram benutzt wird, danach das virtuelle Ram, und zuletzt das Chip-Ram. VMEM patcht DOS-Read und DOS-Write, da sichergestellt werden muß, daß nur jewails 1 Task Disk-IO macht und auch nur auf eine Seite zugreift. Das Wars. Dieses Programm ist von: Thomas Globisch Emilstr. 36 5600 Wuppertal 2 TH_GLOBISCH@AWORLD.ZER Z-Netz thg@uni-paderborn.de E-Mail V. History Version 1.0 - Erste funktionstüchtige Version, die auch Disk-IO unterstützt. Version 1.1 - Seitengröße auf 32KB geändert, dadurch wird effizienter geswappt. - Maximaler virtueller Speicher auf 1 Gigabyte erweitert.