Mikroprozessortechnik 03/87 |
In Arbeitsplatz-, Personal- und Bürocomputern
sowie in Entwicklungssystemen werden als Hintergrundspeicher
vorrangig Diskettenspeicher eingesetzt. Durch weitere Verringerung der
Abmessungen und Verbesserung der
technischen Parameter gilt dies zunehmend auch für Heim- und
Kleincomputer und darüber hinaus für intelligente
Meßgeräte und Prüfsysteme wie etwa Digitaltester,
Meßtechnikcontroller oder Funktionsmeßplätze.
Nachteilig ist
jedoch die niedrige Transfergeschwindigkeit der Floppy-Laufwerke.
Dadurch wird die Effektivität des Bedieners
bei üblichen Programmierarbeiten wie Laden, Editieren,
Assemblieren, Compilieren, Linken von Programmen sowie
beim Arbeiten mit Datenbank und Textverarbeitungssystemen deutlich
reduziert. Ganz besonders gilt das für
Rechner und Geräte, die unter dem weit verbreiteten Betriebssystem
CP/M bzw. dem dazu kompatiblen SCP arbeiten.
Diese Betriebssysteme sind durch ihr streng
hintergrundspeicherorientiertes Entwurfsprinzip, durch die angewandte
Overlaytechnik ihrer Dienstprogramme sowie regelmäßige
Warmstarts und damit sehr häufige Um- und Nachladeprozesse
von bzw. zum Diskettenspeicher charakterisiert.
Davon ausgehend und unter Berücksichtigung des rasch steigenden
Integrationsgrades sowie stark fallender Preise
bei dynamischen Halbleiterspeichern (DRAM) werden in zunehmendem
Maße sogenannte RAM-Floppies (RAM-Disk, virtuelle Disk)
zur Geschwindigkeitssteigerung eingesetzt. Dies sind vollelektronische
Zusatzspeicher, meist in mehreren Speicherbänken
zu je 64 KByte organisiert, die sich aus der Sicht des Bedieners wie
normale Diskettenspeicher verhalten, mit einem
Unterschied: Sie sind um den Faktor 3 ... 10 schneller /1, 2, 3/.
RAM-Floppies sind vor ihrem Gebrauch wie physische
Disketten entsprechend den im jeweiligen Betriebssystem gültigen
Konventionen zu initialisieren. Danach sind sie
betriebsbereit und können mit häufig benutzten
Dienstprogrammen geladen werden. Soll zum Beispiel ein Anwenderprogramm
auf Assemblerniveau erstellt werden, so wird man den Editor oder ein
Textverarbeitungsprogramm kopieren, ferner
den Assembler. Linker und ggf. - für anschließendes Testen -
einen geeigneten Debugger. Damit sind alle für
Programmierung und Test benötigten Dienstprogramme auf der
RAM-Floppy verfügbar, und alle Diskettenoperationen
verlaufen mit einer um den oben genannten Faktor höheren
Geschwindigkeit.
Nach Abschluß der Arbeiten, beispielsweise nach dem Ausdrucken
des in der RAM-Floppy stehenden Listings, muß als
Besonderheit beachtet werden, daß die erstellten Daten für
spätere Verfügbarkeit auf eine physische Diskette
auszulagern sind, ansonsten gehen sie beim Ausschalten des Rechners
verloren.
Es gibt zwei prinzipielle Möglichkeiten, um eine RAM-Floppy in ein bestehendes System zu integrieren:
Hierbei wird die aus einer oder mehreren Seiten bestehende RAM-Floppy über hard- oder softwaregesteuerte, bitserielle oder bitparallele I/O-Ports an das Grundsystem angeschlossen. Damit ist die RAM-Floppy ein echter vollelektronischer Zusatzspeicher, der nicht im Adreßraum des Hauptspeichers, sondern in dem des I/O-Raumes liegt. Der Datentransfer wird durch Blockein-/ausgabebefehle - beim U880 ist das die Gruppe der INIR/OTIR-Befehle - realisiert. Das bedeutet bei 8-Bit-Rechnern, daß nur maximal 128 Byte lange Sektoren in einem Zug transferiert werden können. Darüber hinaus muß bei dieser Lösung das Problem des zyklischen Refresh der DRAM-Speicher beachtet werden. In /1/ ist eine Schaltung für eine halbintelligente Diskettenstation mit einer RAM-Floppy beschrieben, die aus Geschwindigkeitsgründen bitparallel und rein hardwaregesteuert über einen IEC-Controller arbeitet. Eine andere, in /4/ erläuterte Variante basiert hingegen auf einfachen richtungsgesteuerten Datentreibern und einer fünfstufigen, im Bereich von 0...FFFF beliebig einstellbaren Zählkette, die das Speichersegment adressiert, auf das zugegriffen werden soll.
Bei diesem Prinzip wird die RAM-Floppy im
allgemeinen in Bänken zu je 64 KByte mit dem Hauptspeicher
"gemappt",
das heißt, sie liegt voll in seinem Adreßraum. Zur
Vermeidung von Adressenkonflikten ist deshalb eine Seitenschaltung
erforderlich, die die zur aktuellen physischen Diskettenadresse (DRIVE,
TRACK, SECTOR) gehörende Speicherseite an
die Stelle der weggeschalteten Grundseite des Hauptspeichers. Über
Speichersperr-/-freigabe Signale (wie z.B. MEMDI,
MEMDI1, MEMDI2 beim Rechner K1520) einblendet. Der Datentransfer wird
programmseitig mit Blocktransferbefehlen,
wie z.B. LDIR, realisiert. Damit können maximal 64 KByte lange
Sektoren in einem Zug kopiert werden. Ein Beispiel
für das Memory-Mapping-Prinzip ist in /2/
beschrieben, wobei 32
KByte lange Halbseiten in den Adreßbereich
4000...BFFF der Grundseite eingeblendet werden. Die Variante nutzt die
nicht für alle Betriebssysteme geltende
Eigenschaft von CP/M, daß jeder Datenaustausch sektorweise
zwischen Grundseite und Diskettenspeicher über einen
globalen DMA-Puffer außerhalb des ausblendbaren Bereiches
4000...BFFF erfolgt. Damit ist ein Diskettenzugriff in
zwei voneinander unabhängigen Schritten realisierbar:
beispielsweise beim Lesen der Diskette zuerst Transfer eines
Sektors zwischen Diskette und BIOS-internem DMA-Puffer und danach
Transfer zwischen diesem DMA-Puffer und dem
adressierten Segment im Bereich 4000...BFFF. Wird vor dem zweiten
Schritt durch die Seitensteuerung eine der
Halbseiten einer RAM-Floppy eingeblendet, so ist dies ein Kopiervorgang
von einer physischen Diskette auf die RAM-Floppy. Die Voraussetzung
einer Zwischenpufferung der zu transferierenden Daten in einem
DMA-Puffer ist jedoch für
8-Bit-Betriebssysteme nicht allgemein üblich, so zum Beispiel
nicht bei dem Betriebssystem UDOS bzw. dem dazu
kompatiblen RIO.
Die erläuterten Hardware-Erweiterungen für eine RAM-Floppy
müssen außerdem softwareseitig unterstützt werden:
Im folgenden wird ein Beispiel zur Implementierung einer RAM-Floppy in den Bürocomputer A5120 nach dem Memory-Mapping-Prinzip erläutert. Dabei umfaßt die RAM-Floppy 4 Seiten zu je 64K = 256 KByte. Sie repräsentiert damit die 1,6fache Kapazität der derzeit üblichen 5,25"-Minidisketten doppelter Dichte mit 40 Spuren zu je 4 KByte. Bild 2 zeigt die Organisation einer solchen Diskette unter SCP. Demzufolge ist bei jedem Zugriff auf das virtuelle Floppy-Laufwerk durch den zugehörigen RAM-Floppy-Treiber über die Seitenschaltung folgende Adressenkonvertierung zwischen physischer Diskadresse und RAM-Diskadresse zu realisieren:
physische Diskette |
RAM-Floppy |
|
|
Spur 0 ... 15 | 00000 ... 0FFFF (Seite 1) |
Spur 16 ... 31 |
10000 ... 1FFFF (Seite 2) |
Spur 32 ... 47 |
20000 ... 2FFFF (Seite 3) |
Spur 48 ... 63 |
30000 ... 3FFFF (Seite 4) |
Die zusätzlich erforderlichen Adreßbits zur Adressierung des
Speichers der RAM-Floppy werden hierbei über vier Pagingbits
PB1...4 eines Ports in der Seitenschaltung simuliert. So ist
beispielsweise bei einem Sektortransfer
im Bereich von Spur 16...31 durch den RAM-Floppy-Treiber vor dem
Blocktransferbefehl LDIR als statische Bedingung
für die Seitensteuerung das Bit PB2 zu setzen.
Darüber hinaus ist noch die Richtung des Datentransfers von bzw.
zur virtuellen Diskette festzulegen
(RAM-Floppy-Lesen/Schreiben). Dies geschieht durch zwei
Richtungssteuerbits RB0 und RB1, die ebenfalls über Port
im entsprechenden READ- bzw. WRITE-Ruf des SCP statisch einzustellen
sind.
Die eigentliche Seitenumschaltung erfolgt jedoch
dynamisch erst während der Abarbeitung des LDIR-Befehls und nur
für die Dauer eines READ- bzw. WRITE-Zyklus. Das bedeutet, z.B.
beim RAM-Floppy-Schreiben, daß das nächste Datenbyte
im DMA-Puffer während des MR-Zyklus des LDIR-Befehls noch bei
aktiver Grundseite gelesen wird. Erst mit der fallenden
Flanke von /MREQ im MW-Zyklus wird die Grundseite aus- und dafür
die addressierte RAM-Floppy-Seite eingeblendet,
und somit das Byte in die RAM-Floppy geschrieben. Anschließend,
das heißt, mit der aufsteigenden Flanke von /MREQ,
erfolgt die Wiedereinschaltung der Grundseite. Die RAM-Floppy-Seite ist
folglich nur für die Dauer von /MREQ = 0
eingeblendet. Bild 3 verdeutlicht die
Verhältnisse.
In Bild 4 ist das Prinzip der Seitenschaltung
dargestellt. Die
einwandfreie Funktion der Schaltung ist an eine
programmtechnische Besonderheit gebunden. In der Programmpassage des
RAM-FIoppy-Treibers dürfen nach dem Setzen
eines der beiden Richtungssteuerbits RB0, RB1 unmittelbar vor dem
LDIR-Befehl bis zu ihrem Rücksetzen unmittelbar
nach dem LDIR-Befehl nur Befehle mit M1-Zyklen auftreten, mit Ausnahme
des LDIR selbst. Ansonsten treten
Fehlschaltungen der Seitensteuerung durch unbeabsichtigte MR- bzw.
MW-Zyklen auf. Das in Bild 5 angegebene
Programm DISKRW genügt diesen Bedingungen.
Die dynamische Umschaltung der Seiten nur im jeweils aktiven RD- bzw.
WR-Zyklus des Blocktransferbefehls hat
folgende Vorzüge:
Wie schon erwähnt, ist zur Abwicklung der
Diskettenarbeit mit der RAM-Floppy ähnlich wie bei physischen
Disketten ein RAM-Floppy-Treiber erforderlich. Er enthält u.a.:
- einen Drive-Multiplexer als Weiche zwischen physischen und
RAM-Floppy-Zugriffen (bei SCP erfordert dies eine
Änderung der Rufe READ und WRITE im BIOS).
- ein Konvertierungsprogramm zur Umrechnung der physischen Diskadresse
(in SCP definiert durch die
BIOS-Schnittstelle DRIVE, TRACK, SECTOR) in die zugehörige
RAM-Floppy-Adresse.
- den eigentlichen "Treiber" zur Realisierung des sektorweisen
Datentransfers in Verbindung mit der
erläuterten statischen bzw. dynamischen Seitensteuerung.
- Fehlerbehandlung und Realisierung von Sonderfunktionen (z.B.
Read-after-Write-Funktion zur Erkennung
von fehlerhaften Schreiboperationen auf der RAM-Floppy).
Er ist in das jeweilige Betriebssystem einzubinden. und darüber
hinaus sind die Diskettenbeschreibungstabellen
zu modifizieren. Unter SCP bedeutet dies die Eröffnung eines
Diskparameterblockes für die RAM-Floppy.
Dieser beschreibt dann das Format der RAM-Floppy, die hinsichtlich
Speicherkapazitäten, Anzahl der Systemspuren
usw. nicht notwendigerweise mit dem Format der physischen Diskette
Übereinstimmen muß.
Nach dem vorgegebenen Prinzip wurde eine
256-K-RAM-Floppy, bestehend aus dem eigentlichen RAM-Floppy-Treiber
und einem 256-K-DRAM-Speicher mit 4 Bänken zu je 64 KByte,
realisiert und im Bürocomputer A5120 eingebaut.
Das Betriebssystem SCP wurde in einer in seinen Grundkomponenten CCP,
BDOS und BIOS entsprechend modifizierten
und erweiterten Version SCPNET V1.2 implementiert. Die aus der
Literatur und theoretischen Betrachtungen
erwartete Verkürzung der Reaktionszeiten hat sich in jeder
Hinsicht bestätigt. Die bei typischen
Programmieraktivitäten gemessene Geschwindigkeitssteigerung bewegt
sich im Verhältnis 1:3 bis 1:10,
das heißt, die unangenehmen Wartezeiten haben sich drastisch
verringert (Tafel 3). Die
Geschwindigkeitsvorteile äußern sich speziell beim
iterativen Prozeß der Programmerstellung von
Mikrorechnersoftware auf Grund des notwendigen häufigen
Programmwechsels, aber auch bei der Arbeit mit
Datenbanksystemen und bei der Textverarbeitung in einem deutlichen
Effektivitätszuwachs des Programmierers.
Darüber hinaus wird das Arbeiten mit der RAM-Floppy durch die in
vielen Fällen augenblickliche Reaktion des
Systems und den damit verbundenen Tempogewinn auch subjektiv als sehr
angenehm empfunden.
Für die praktische Arbeit mit der RAM-Floppy sind noch einige
Sonderfunktionen von Bedeutung:
Das System ist gleichzeitig für den
Anschluß an eine Festplatte über ein lokales Netz mit
Lichtwellenleiterkopplungen vorbereitet. Dazu enthält das
Betriebssystem SCPNET für die Arbeit mit
virtuellen Disketten über die virtuellen Laufwerke D...I
softwareseitige Erweiterungen.
Das System ist ab sofort nachnutzbar.
[1] | Eisenack, G.; Fingberg, H.: "RAM-Floppy"-Laufwerk beschleunigt den Zugriff. Elektronik (1985)24, S.85-90 |
[2] | Gassner, S.: Meier, R.: Halbleiterfloppy sind schneller... Elektrotechnik 65(1983)9, S.19 bis 21 |
[3] | Joepgen, H.: Virtuelle Floppy, mc (1983)9, S.47-49 |
[4] | Sternberg, G.: Ein RAM-Floppy für den MC-CP/M Computer. mc(1985)6, S. 86-96 |
![]() |
![]() |
![]() |
66 KByte | 72 KByte | 72 KByte |
Bild 1 | Bild 2 | Bild 3 |
![]() |
![]() |
119 KByte | 119 KByte |
Bild 4 | Bild 5 |
![]() |
![]() |
![]() |
41 KByte | 34 KByte | 103 KByte |
Tafel 1 | Tafel 2 | Tafel 3 |