XHDI - Festplatten voll im Griff

Spätestens seit der Verfügbarkeit von IDE-Interfaces für die ST-Serie lassen sich ATARI-Computer mit allen handelsüblichen Festplatten verbinden. Man sollte daher meinen, es gebe keinen Bedarf mehr für neue Festplatten-Software.

Die Einführung von EIDE-Platten (Extended IDE) braucht den ATARI-Anwender nicht weiter zu interessieren, da sich diese Platten an jedes IDE-Interface anschließen lassen und die Beschränkungen, die auf dem PC-Sektor zur Entwicklung dieser Platten geführt haben, für den ATARI ohnehin nicht relevant waren. Es muß also andere Gründe dafür geben, daß weiterhin verbesserte Festplattentreiber für den ATARI entwickelt werden ATARI-Anwender nicht weiter zu interessieren, da sich diese Platten an jedes IDE-Interface anschließen lassen und die Beschränkungen, die auf dem PC-Sektor zur Entwicklung dieser Platten geführt haben, für den ATARI ohnehin nicht relevant waren. Es muß also andere Gründe dafür geben, daß weiterhin verbesserte Festplattentreiber für den ATARI entwickelt werden. Klar, daß solche Treiber, wie andere Software auch, nie fehlerfrei sind und daher hin und wieder fehlerbereinigte Versionen notwendig werden. Darüber hinaus fließen in einige Treiber aber auch neue Funktionen ein, die häufig in Zusammenhang mit der sogenannten „XHDI-Spezifikation“ (extended HardDisk Interface) stehen. Dieser Standard, der vor gut 3 Jahren von einigen engagierten Software-Entwicklern ins Leben gerufen wurde, erfreut sich seitdem bei den Anwendern wachsender Beliebtheit.

Ade AHDI

Von einem modernen Festplattentreiber darf man mehr erwarten als lediglich die Übertragung von Daten zwischen Computer und Platte. Dies ist inzwischen den meisten ATARI-Anwendern bewußt geworden. Die Hauptaufgabe der Datenübertragung hat der von ATARI bereitgestellte Treiber AHDI in den letzten Jahren recht zuverlässig erfüllt, wobei sich seine Leistungsmerkmale allerdings nur auf das Nötigste beschränken. Von AHDI sind jedoch keine neuen Versionen in Sicht (aktuell ist weiterhin AHDI 6.061), und es hat sich bereits vor längerer Zeit gezeigt, daß die Standards, die ATARI mit AHDI gesetzt hat, die heutigen Bedürfnisse beim Einsatz von Festplatten nur unzureichend decken.

Die Qualität eines Festplattentreibers läßt sich nicht nur daran messen, welche Platten er bedienen kann und wie schnell die Datenübertragung abläuft. Hier sind ohnehin alle Treiber auf nahezu dem gleichen Leistungsstand. Verbesserungen sind nicht mehr möglich, da die Grenze dessen, was die Hardware der ATARIs in dieser Hinsicht leisten kann, inzwischen erreicht ist. In den Vordergrund gerückt ist die Frage nach den sonstigen „Dienstleistungen“, die ein Treiber erfüllen kann. Als Bindeglied zwischen Betriebssystem und Festplatte sind dem Festplattentreiber einige nützliche Informationen bekannt, die sich innerhalb von Anwendungsprogrammen sinnvoll verwerten lassen. Auch der Anwender wird es begrüßen, sich über die angeschlossenen Platten detailliert informieren oder in Erfahrung bringen zu können, welche Möglichkeiten das Betriebssystem bei der Ansteuerung von Festplatten bietet und wo mit Limitationen zu rechnen ist. Warum herumrätseln, wie groß wohl die genaue Plattenkapazität oder die maximal erlaubte Partitionsgröße sein mag, wenn es der Treiber auf den Sektor genau weiß?

Sicherheit durch Information

Der Nutzen solcher Informationen zeigt sich spätestens dann, wenn mit mehreren Platten gearbeitet wird und eine dieser Platten neu formatiert oder partitioniert werden soll. Hier setzt bei vielen Anwendern leicht eine Unsicherheitein, die auf die Angst zurückzuführen ist, durch die Auswahl der falschen Platte Daten unwiderruflich zu zerstören. Da ist es sehr hilfreich, wenn der Festplattentreiber die Auswahl der korrekten Platte dadurch erleichtert, daß er der Partitionierungs-Software die Namen aller angeschlossenen Platten mitteilt. XHDI-kompatible Treiber bieten hierzu geeignete Funktionen an.

Unklarheit herrscht häufig auch darüber, wie viele Partitionen in Abhängigkeit vom Betriebssystem ohne Schwierigkeiten zu handhaben sind und wo die maximal zulässige Größe einer Partition liegt. Wußten Sie, daß eine Partition ab TOS 4.0 bzw. unter MagiC bis zu 1 GByte umfassen darf, bis einschließlich TOS 1.02 aber nur maximal 256 MByte? Kann sich die zur Partitionierung eingesetzte Software diese Informationen verschaffen, lassen sich Fehler bei der Aufteilung der Platte vermeiden, die andernfalls später einmal zum Tragen kommen könnten. Und dann erweist es sich als höchst ärgerlich, eine Platte, die bereits Daten enthält, neu einteilen zu müssen.

XHDI macht’s möglich

Nun wird eine Platte zwar nicht ständig neu partitioniert, aber auch bei anderen Anwendungen ist es nützlich, wenn jederzeit ausführliche Informationen über eine Platte und deren Einteilung in Partitionen bereitstehen. Software zum automatischen Parken von Platten kann so beispielsweise eine Auswahl von Platten und/oder Partitionen anbieten, auf die sich die Parkfunktion beschränken soll. Auch das Parken der Platte an sich sowie das Entriegeln der Leseköpfe bei einem erneuten Zugriff sollte vom Treiber übernommen werden, damit die Anwendungssoftware keinerlei Annahmen über die zugrundeliegende Hardware machen muß.

Eine Lösung für diese und viele andere Forderungen bieten Festplattentreiber, die die XHDI-Spezifikation unterstützen. Basierend auf XHDI, ist es auch Programmen, die in einer Hochsprache geschrieben wurden, möglich, plattenspezifische Informationen und Funktionen abzurufen, ohne sich direkt mit der Hardware auseinandersetzen zu müssen. Das XHDI-Interface ist inzwischen auf 27 Funktionen angewachsen, von denen nun einige herausgegriffen und zusammen mit Anwendungen, die von ihnen Gebrauch machen, vorgestellt werden sollen. Seien Sie nicht überrascht, wenn Sie feststellen, daß sich das eine oder andere dieser Anwendungsprogramme bereits in Ihrer Programmsammlung befindet.

Software mit XHDI-Unterstützung

Bereits kurz nach der Verabschiedung der ersten Fassung der XHDI-Schnittstelle kam Software auf den Markt, die sich diesen Standard zu Nutze machte. Eines der ersten Programme mit XHDI-Unterstützung war CHK_OFLS, enthalten u. a. im Lieferumfang des schnellen Dateikopierers KOBOLD. CHK_OFLS sorgt dafür, daß Wechselmedien so lange nicht entnommen werden können, wie auf Ihnen Dateien geöffnet sind. Dies ist deshalb realisierbar, weil alle Syquest-Wechselplatten eine Funktion zum Verriegeln des Auswurfknopfes besitzen, die per Software gesteuert werden kann. Sobald eine Datei auf dem Wechselmedium geöffnet wird, aktiviert CHK_OFLS über den Aufruf einer XHDI-Funktion diesen Verriegelungsmechanismus und gibt das Medium erst dann wieder frei, wenn die letzte offene Datei geschlossen wurde. Auf diese Weise ist sichergestellt, daß das Entnehmen des Mediums zum falschen Zeitpunkt nicht zu Datenverlusten führen kann. Insbesondere Datenbanken haben häufig mehrere Dateien gleichzeitig geöffnet, und hier hätte ein vorzeitiges Entfernen des Mediums fatale Folgen. CHK_OFLS stellt darüber hinaus einen ausgezeichneten Schutz gegen Datenverluste dar, die im Multitasking-Betrieb auftreten können, wenn nicht ohne weiteres festgestellt werden kann, ob eine der parallel laufenden Anwendungen noch geöffnete Dateien unterhält.

Die Verriegelung des Auswurfknopfes erreicht CHK_OFLS mit Hilfe des XHDI-Aufrufs XHLock(), der folgende Syntax besitzt:

LONG XHLock (UWORD major, UWORD minor, UWORD do_lock, UWORD key);

Dabei steht major für die physikalische Gerätenummer der Platte, die bei Geräten an der ACSI-Schnittstelle zwischen 0 und 7 und bei Platten an der SCSI-Schnittstelle zwischen 8 und 15 liegen kann. IDE-Platten besitzen beim ATARI die Gerätenummer 16 (IDE Master) bzw. 17 (IDE Slave), minor bezeichnet die Nummer der logischen Untereinheit und ist in aller Regel 0, da die Controller der meisten Festplatten genau eine Platte verwalten. Ausnahmen bilden lediglich einige wenige SCSI-Platten sowie die Adaptec-Controller der mit MFM- bzw. RLL-Platten ausgestatteten Megafile-Serien, die zwei Untereinheiten ansprechen können. (Die Wechselplatte Megafile 44 fällt übrigens nicht in diese Kategorie, da es sich hierum eine handelsübliche SCSI-Platte handelt.)

do_lock legt fest, ob der Auswurfknopf freigegeben oder verriegelt werden soll. Eine besondere Bewandtnis hat es mit dem Parameter key. Es darf nicht passieren, daß ein Medium von einer Anwendung verriegelt und vorzeitig von irgendeiner anderen Anwendung wieder entriegelt wird. Um dies zu verhindern, existiert der XHDI-Aufruf XHReserve(), der einen Zugriffsschlüsse! zurückliefert, ohne den sich die Platte nicht wieder entriegeln läßt:

LONG XHReserve (UWORD major, UWORD minor, UWORD do_reserve, UWORD key);

Je nach Zustand von do_reserve läßt sich so eine Reservierung gewisser Funktionen für eine bestimmte Anwendung erreichen bzw. diese Reservierung wieder aufheben.

Was XHLock() betrifft, findet man eine andere Anwendung, die diesen Aufruf einsetzt, in Form der virtuellen Speicherverwaltung OUTSIDE. Dieses Programm wandelt die freie Festplattenkapazität bei ATARIs mit 68030-Prozessor in zusätzlichen Hauptspeicher um. Befindet sich die „Swap-Partition" mit den Daten, die nicht im Speichergehalten werden können, auf einem Wechselmedium, darf dieses nicht entnommen werden. Sofern man einen XHDI-kompatiblen Festplattentreiber verwendet, kümmert sich OUTSIDE auf Wunsch automatisch um die Verriegelung des Mediums.

Keine Parkplatzsorgen

Besonders beliebt sind Programme, die Festplatten parken, eventuell automatisch nach dem Ablauf einer gewissen Zeitspanne. In diese Kategorie fallen u. a. das Programm HDPARK (Maus HB2, Maus KL), das CPX-Modul STOPLOCK (im Lieferumfang des SCSITOOL) sowie das Accessory AUTOPARK (im Lieferumfang von DISKUS oder HDDRIVER). Die aufgeführten Programme setzen die XHDI-Funktion XHStop() ein, beim zeitgesteuerten Parken eventuell unterstützt von XHLastAccess(). Der Einsatz von XHStop() erfolgt analog zu XHLock():

LONG XHStop (UWORD major, UWORD minor, UWORD do_stop, UWORD key);

do_stop enthält eine Angabe darüber, ob die durch major und minor eindeutig spezifizierte Platte geparkt oder gestartet („entparkt“) werden soll. Interessant ist es, das Verhalten von Festplatten zu beobachten, wenn diese geparkt werden. Ältere Modelle fahren lediglich die Köpfe auf die sogenannte Parkspur, so daß Erschütterungen sich nicht in Form von Datenverlusten auf den eigentlichen Datensektoren auswirken können. Platten neueren Datums schalten zusätzlich den Motor ab, was den Geräuschpegel angenehm senken kann. Dies sollte allerdings nicht dazu verleiten, solche Platten in kurzen Zeitabständen zu parken und wieder hochzufahren, weil dies einen erhöhten Verschleiß der Plattenmechanik mit sich bringt. Die meisten IDE-Platten im 2.5-Zoll-Format sind da weniger empfindlich und besitzen spezielle „Power Management“ Funktionen, mit denen sich die Platte in einen energiesparenden Modus versetzen läßt, in dem der Motor abgeschaltet ist. Diese Eigenschaft wird insbesondere bei Notebooks ausgenutzt, läßt sich aber in Abhängigkeit vom Festplattentreiber auch bei internen Festplatten im Falcon030 sinnvoll nutzen. Beim Parken einer Wechselplatte wird das Medium abgebremst, ähnlich wie nach der Betätigung des Auswurfknopfes.

Um das Schreiben von Software zum zeitgesteuerten Parken von Platten zu erleichtern, sieht die XHDI-Spezifikation 1.25 den optionalen Aufruf XHLastAccess() vor:

LONG XHLastAccess (UWORD major, UWORD minor, ULONG *ms);

Hier wird eine Angabe darüber zurückgeliefert, wieviele Millisekunden seit dem letzten erfolgreichen Lese- oder Schreibzugriff auf eine Platte vergangen sind. Anhand dieser Information läßt sich leicht entscheiden, ob die Zeit gekommen ist, eine bestimmte Platte in den Ruhezustand zu versetzen.

Darum, daß eine geparkte Platte beim nächsten Zugriff automatisch wieder anfährt, ohne daß es zu Fehlermeldungen kommt, kümmert sich der XHDI-Treiber übrigens automatisch.

GEMDOS-Limitationen

Eingangs war bereits die Rede davon, daß die maximale Größe einer Festplatten-Partition sowie die Höchstzahl der Partitionen davon abhängt, welches Betriebssystem zum Einsatz kommt. Vor allen Dingen dann, wenn eine Platte neu partitioniert werden soll, können diese Informationen wichtig für die Entscheidung über die Aufteilung der Platte sein. Ab XHDI 1.20 steht der optionale Aufruf XHDosLimits() bereit, über den sich wichtige Limits des aktuellen Betriebssystems ermitteln oder setzen lassen:

LONG XHDOSLimits (UWORD which, ULONG limit);

Über which läßt sich vorgeben, an welchem Systemparameter man interessiert ist. Erfragen lassen sich u. a. die maximale Sektorzahl pro Partition sowie die Zahl der unterstützten BIOS-Laufwerke. In diesem Zusammenhang ist interessant, daß MagiC 3.0 in Verbindung mit einem geeigneten Festplattentreiber nicht nur 16 Laufwerke mit den Kennungen A bis P, sondern ohne Einschränkungen bis zu 26 Laufwerke unterstützt, also die Kennungen A bis Z. Wer sich schon einmal darüber geärgert hat, daß beim Anschluß einer zusätzlichen Festplatte die Laufwerkskennungen nicht mehr ausreichten, wird dieses Leistungsmerkmal zu würdigen wissen.

BIOS-Alternativen

Man sollte meinen, das Lesen und Schreiben von Sektoren sei eine triviale Angelegenheit für einen Festplattentreiber und daher erübrigten sich spezielle Funktionen zu diesem Zweck. Ganz so ist es jedoch nicht, denn die vom BIOS des ATARI vorgesehenen Aufrufe zum sektororientierten Plattenzugriff sind für einige Anwendungen nicht ausreichend. Zum Lesen und Schreiben von Daten bieten XHDI-kompatible Treiber daher den Aufruf XHReadWrite() an, der gegenüber den vom Betriebssystem im BIOS bereitgestellten Funktion Rwabs() erweiterte Möglichkeiten bietet:

LONG XHReadWrite (UWORD major,
UWORD minor, UWORD rwflag, ULONG recno, 
UWORD count, void *buf);

Mit XHReadWrite() ist es möglich, auf Platten zuzugreifen, die über Systemaufrufe nicht ohne weiteres angesprochen werden können. Dabei handelt es sich insbesondere um Platten mit der logischen Gerätenummer 1, wie sie bei XHDI über den Parameter minor vorgegeben werden kann. AHDI und damit auch die ATARI-Spezifikation sehen den Anschluß solcher Platten an den ATARI nicht vor und bieten daher auch keine Zugriffsmöglichkeit. XHReadWrite() schafft hier Abhilfe.

Ferner wird XHReadWrite() vom MINIX-FS, einem speziellen Dateisystem mit langen Dateinamen für MiNT, eingesetzt, um auch besonders große Partitionen problemlos verwalten zu können.

6 aus 27

Bereits anhand der wenigen ausgewählten XHDI-Aufrufe, die ich hier vorgestellt habe, dürfte das Potential, das der XHDI-Standard für Programmierer und Anwender bietet, deutlich geworden sein. Bei der Entwicklung von Festplatten-Tools oder auch kleineren Anwendungen, die auf Festplatten abgestimmt sind, lassen sich zahlreiche Funktionen elegant und ohne eigene Treiberroutinen durch XHDI-Aufrufe realisieren. Die Beachtung der XHDI-Spezifikation schließt die Kompatibilität zu den offiziell dokumentierten Eigenschaften des ATARI-Treibers AHDI 3.00 ein, so daß ein XHDI-Treiber volle ATARI-Kompatibilität gewährleistet. Dazu zählen übrigens auch die Erkennung von Wechselplatten sowie die Unterstützung von Partitionen mit einer Größe von mehr als 16 MByte. Daß diese Eigenschaften von ATARI schon seit 1989 garantiert werden, ist offenbar noch nicht allgemein bekannt.

Unterstützt wird der XHDI-Standard zur Zeit von hdpSTACK (XHDI 1.25), HuSHI (XHDI 1.20) und HDDRIVER (XHDI 1.25). Ferner liegt eine Version von CBHD vor, die einige ausgewählte XHDI-Aufrufe kennt, allerdings keinem konkreten XHDI-Versions-Level zugeordnet werden kann. Die komplette offizielle Dokumentation zur aktuellen XHDI-Spezifikation 1.25 befindet sich zusammen mit einem Beispielprogramm und C-Bindings in Form der Datei XHDI-125.ZOO in den Mäusen MS2 und KL sowie auf dem ftp-Server ftp. uni-muenster.de. Für diejenigen, die sich näher mit der Ansteuerung von Festplatten am ATARI beschäftigen wollen, handelt es sich wohl um Pflichtlektüre.


Uwe Seimet
Aus: ST-Computer 05 / 1995, Seite 101

Links

Copyright-Bestimmungen: siehe Über diese Seite