← ST-Computer 09 / 1999

SCSI entrÀtselt (2)

Grundlagen

Im ersten Teil haben wir den prinzipiellen Ablauf der Kommunikation auf dem SCSI-Bus gesehen. Wer das aufmerksam gelesen hat, wird sich eventuell fragen, was der ganze Aufwand bei SCSI soll. Auch ohne Arbitrierung, Identifikation, Messages und das ganze Brimborium kann man doch auf GerÀte zugreifen, wie man ja z.B. beim IDE-Port sehen kann.

Wenn Sie nun diesen Artikel in Ruhe lesen und ihn auch einigermaßen verstanden haben (ganz ruhig, das ist halb so schwierig), dann wissen Sie wirklich, was mit SCSI los ist, und vor allem, was damit möglich ist.

Solange man ein simples System hat wie zum Beispiel DOS oder auch TOS ohne Multitasking, stimmt das auch, aber bei leistungsfÀhigeren Systemen sieht das anders aus.

Dazu betrachten wir mal den Betrieb mit mehreren Rechnern oder mit mehreren Prozessen, die auf die GerÀte zugreifen sollen.

2.1 Leistungssteigerung durch gute Busnutzung

2.1.1 Mehrere Initiatoren

Initiatoren sind SCSI-GerÀte, die eine Aktion auf dem SCSI-Bus auslösen. Normalerweise handelt es sich dabei um die Computer auf dem SCSI-Bus, es können aber auch andere GerÀte sein, zum Beispiel ein Streamer, der ein Copy-Kommando abarbeitet. Allgemein spricht man daher eben nicht von Computern, sondern von Initiatoren.

Spricht ein GerÀt ein anderes an, so ist das angesprochene GerÀt das Target, das Ziel der Ansprache.

FĂŒr die meisten Benutzer dĂŒrfte die Anwendung interessant sein, mehrere Computer gemeinsam auf einem SCSI-Bus zu betreiben. Der Sinn der Sache ist dabei, die SCSI-GerĂ€te fĂŒr beide Rechner benutzen zu können, ohne diese GerĂ€te doppelt kaufen zu mĂŒssen.

Im wesentlichen geht es dabei um Streamer, Scanner und CD-ROMs. Festplatten kann man natĂŒrlich auch von beiden Rechnern aus benutzen, aber dabei treten logische Probleme auf, die der Anwender beachten muss.

Beim Zugriff auf Festplatten werden einige Daten gecachet, d.h. Daten, die bereits von der Platte gelesen wurden, und auf die erneut zugegriffen wird, werden im Speicher gehalten, und bei einem erneuten Zugriff mĂŒssen diese Daten nicht neu eingelesen werden. Wenn nun zwei Rechner auf die gleiche Partition auf der gleichen Festplatte zugreifen, fĂŒhrt dies unweigerlich zu einer Zerstörung der Daten auf der Platte, Verzeichnisse werden fehlerhaft zurĂŒckgeschrieben, weil der eine Rechner eine Änderung gemacht hat, von der der andere nichts weiß. Solange man aber immer nur mit einem Rechner zugreift oder jeder seine eigene Festplatte hat und die des anderen in Ruhe lĂ€ĂŸt, gibt es dieses Problem nicht.

Genauso gilt dies natĂŒrlich auch bei anderen GerĂ€ten, man kann logischerweise nicht von beiden Rechnern aus gleichzeitig ein Backup auf den Streamer machen.

Aber um zu SCSI zurĂŒckzukommen: Dank des SCSI-Protokolls kann ohne Probleme der eine Rechner auf seiner Festplatte arbeiten und quasi gleichzeitig der andere Rechner auf der seinigen und dabei zum Beispiel ein Backup auf den Streamer durchfĂŒhren.

ZunÀchst ist es ja so, dass mehrere Rechner gleichzeitig den SCSI-Bus beanspruchen. Damit es dabei nicht zu Problemen kommt, gibt es wie im ersten Teil des Artikels bereits erklÀrt, die Arbitrierung. Die Arbitrierung ist aber dabei nicht alles. Zwar reicht das bereits aus, um einen störungsfreien Betrieb zu erhalten, aber die Leistung des Systems ist dabei nicht optimal. Betrachten wir mal den genannten Fall des Backups auf einen Streamer. Rechner A sei der Rechner, der Daten von einer CD-ROM auf seine Festplatte kopiert, und Rechner B schreibt gerade ein Backup auf den Streamer.

SCSI unterfordert?

CD-ROM und Streamer sind beides GerĂ€te, die ihre Daten relativ langsam vom Medium lesen oder darauf kopieren. Relativ langsam heißt hier, dass die Daten wesentlich schneller ĂŒber den SCSI-Bus transportiert werden können. Betrachten wir einen etwas moderneren SCSI-Bus mit 8 Bit Breite und FAST-SCSI, so können die Daten mit bis zu 20MB/sec ĂŒbertragen werden, wĂ€hrend das CD-ROM mit etwa 1,5 MB/sec die Daten lesen kann und der Streamer mit ca 200 kB/sec. Dadurch wĂŒrde der Bus unnötig belegt, wenn man Daten anfordert und der Bus bleibt solange belegt, bis die Daten komplett geliefert wurden.

Um diese unnötige Verzögerung zu vermeiden, gibt es die Möglichkeit zum Disconnect. Dabei gibt das Target den Bus frei, bis es die Daten ĂŒberhaupt vom Medium gelesen hat, und meldet sich dann beim Initiator zurĂŒck, um die Übertragung auszufĂŒhren.

Der Ablauf wird dabei ĂŒber Messages ausgefĂŒhrt. ZunĂ€chst musste vom Initiator bei der Übertragung des Kommandos

ATN gesetzt werden, um dem Target anzuzeigen, dass man eine Message - heißt ja eigentlich Nachricht, aber schließlich geht es hier um SCSI - abgeben möchte (s. SCSI-entrĂ€tselt, Teil 1) . In der daraufhin vom Target eingeleiteten Message-Out-Phase verschickt der Initiator ein Message-Byte mit einer Identify-Message.

Bit 7 6 5 4 3 2 l 0

Identify DiscPriv LUNTAR Reserved Reserved LUNTRN

Dabei ist das Bit 7 gesetzt, was kenntlich macht, dass es sich bei der Message um 'identify' handelt. Je nach dem, ob Bit 6 gesetzt ist oder nicht, teilt der Initiator mit, dass das GerĂ€t einen Disconnect ausfĂŒhren darf, falls es dies fĂŒr sinnvoll hĂ€lt.

Danach kann es halt passieren, dass das Target irgendwann eine Message-In-Phase einlĂ€utet und darin dem Initiator mitteilt, dass es einen Disconnect ausfĂŒhren möchte (Messagebyte 04h). Wenn der Initiator nichts dagegen hat (er könnte mit einer sofortigen Messagephase und der Antwort-Message 'MESSAGE-REJECT' den Disconnect ablehnen), wird der Bus daraufhin freigegeben, und irgendwann wird sich das GerĂ€t mit einem Reconnect zurĂŒckmelden. Der Reconnect lĂ€uft dann genauso wie eine komplette Selektion eines Initiators an ein Target, also mit Arbi-trierung um den Bus und anschließender Selektion des Initiators durch das Target. Obwohl hier nun die Selektion vom Target durchgefĂŒhrt wird, wird das Target jetzt nicht als Initiator bezeichnet, um keine Verwirrung entstehen zu lassen. Sonst mĂŒĂŸte man ja immer beachten, wer nun einen Reconnect durchgefĂŒhrt hat.

Wann denn nun?

Eine kleine Frage am Rande ist natĂŒrlich dabei das Kriterium, wann das Target einen Disconnect und wann es einen Reconnect durchfĂŒhrt. Oben hatte ich das noch als 'falls es das fĂŒr sinnvoll hĂ€lt' abgetan. Dazu gibt es natĂŒrlich (wer hĂ€tte jetzt etwas anderes erwartet) eine Möglichkeit, dies bei dem GerĂ€t zu erfragen oder auch einzustellen.

Dazu gibt es eine Parameterseite - man nennt das 'mode page' - die mit dem Kommando 'Mode Sense' gelesen und mit 'Mode Select' geÀndert werden kann.

Im wesentlichen gibt es dort zwei Dinge, die die Disconnect und Reconnect-Bereit-schaft steuern, zum einen ist es eine Angabe fĂŒr den FĂŒllungsgrad der Puffer auf der Platte (das Plattencache), wann jeweils ein Reconnect beim Schreiben (die buffer empty ratio) oder ein Reconnect beim Lesen (buffer fĂŒll ratio) ausgefĂŒhrt werden soll. Als zweites gibt es eine Grenze, die angibt, wie lange der Bus belegt bleiben darf, ohne dass Daten ĂŒber den Bus transportiert werden. Wird diese Zeit ĂŒberschritten, fĂŒhrt das Target ebenfalls einen Disconnect aus.

Die komplette ErklÀrung entnehmen sie am besten der SCSI-2, Abschnitt 8.3.3.2 Disconnect-Reconnect page.

Es besteht ĂŒbrigens auch fĂŒr den Initiator die Möglichkeit, von sich aus einen Disconnect einzuleiten, dazu muss er ATN setzen und in der daraufhin folgenden Message-Out-Phase die Message DISCONNECT verschicken.

So, und nun machen wir am bes'ten eine kurze Pause und denken mal darĂŒber nach, was uns das denn bringt. Falls Sie das nun nach der ErklĂ€rung noch nicht raus haben, sollten sie den bisherigen Teil des Artikels vielleicht nochmals lesen. Alternativ kann ich es natĂŒrlich auch erklĂ€ren.

Na, noch nicht klar?

Ok, der Sinn der Sache ist natĂŒrlich, dass beide GerĂ€te nur soviel den SCSI-Bus benutzen, wie nötig ist. Bei dem Beispiel eines Streamers und eines CD-ROM haben wir eine insgesamt zu ĂŒbertragende Datenmenge von etwa 1,7 MB/sec. Ein 'normaler' SCSI-Bus kann aber schon 5 MB/sec ĂŒbertragen. WĂŒrde der Bus dabei permanent belegt, hĂ€tte man eine erheblich geringere Leistung beim Zugriff auf die GerĂ€te.

2.1.2 Mehrere Tasks

Im Prinzip sieht es genauso aus, wenn man mit mehreren Programmen von einem Rechner aus auf die GerÀte zugreifen möchte. Um das zu verallgemeinern, betrachten wir jedoch nicht unbedingt Programme, sondern Tasks, den Grund werden wir spÀter noch sehen.

Stellen Sie sich vor, ein Programm kopiert gerade Daten von der CD auf die Festplatte und ein anderes möchte gerne Daten von der Festplatte lesen. Die Situation ist die gleiche wie bei mehreren Rechnern auf dem SCSI-Bus, nur dass die Programmierung etwas schwieriger ist. Hierbei muss eben der SCSI-Treiber dafĂŒr sorgen, dass ein zweites Programm erst dann auf die SCSI-Schnittstelle zugreift, wenn das erste Programm fertig ist oder eben gerade ein Disconnect aufgetreten ist.

Solange das CD-ROM die Daten noch nicht in seinem Puffer hat, kann das andere Programm weiterhin Daten lesen und weiterarbeiten. Bei Betriebssystemen, die dies wirklich nutzen können, ist der Unterschied frappierend. Ein sehr gutes Beispiel dafĂŒr ist Linux, man merkt in der Task, die auf die Festplatte zugreift fast gar nicht, dass jemand anderes da auch noch auf dem Bus arbeitet. Eine viel gestellte Frage zu SCSI ist aus diesem und dem vorhergehenden Abschnitt auch einfach zu beantworten: Wozu werden SCSI-GerĂ€te unter anderem mit ihrer maximalen Transfergeschwindigkeit auf dem SCSI-Bus angegeben? Liest man bei einem CD-ROM davon, dass es bis zu 20 MB/sec ĂŒbertragen kann, denkt man doch zunĂ€chst, dass dies keine Vorteile bringt, können die schnellsten CD-Laufwerke doch gerade 3 MB pro Sekunde von der CD lesen. Angesichts der Tatsache aber, dass man aufgrund der kĂŒrzen Übertragungszeiten den Bus lĂ€nger freigeben kann, ist der Sinn einer solchen Angelegenheit klar.

Wer kann's?

Leider haben wir auf dem Atari bisher nicht die Möglichkeit, dies wirklich auszunutzen. Prinzipiell bietet Magic zwar die Möglichkeit dazu, aber bisher ist es nicht nutzbar. Wie beim vielbeschworenen Hintergrundtransfer - der ĂŒbrigens nur geringe Vorteile bietet - kann man den Disconnect benutzen, um wĂ€hrend des Disconnect Rechenzeit an andere Programme freizustellen. Vom Disconnect bis zum Reconnect kann man immerhin Zeit abgeben, aber einen vollen Disconnect, wĂ€hrenddessen andere Programme auf andere GerĂ€te zugreifen können, gibt es leider noch nicht. Immerhin merkt man dabei, dass man zum Beispiel wĂ€hrend eines lĂ€ngeren Kopiervorganges von einer CD in anderen Programmen weiterarbeiten kann, aber mehr geht leider noch nicht. Einen Teil kann man sich aber nutzbar machen, GEMAR kann zum Beispiel einen getrennten Thread fĂŒr das Schreiben auf den Streamer benutzen. Dabei merkt man den Vorteil deutlich, wenn man den Streamer an einem anderen Bus hat als die Festplatte, von der die Daten kommen. Es kann daher sinnvoll sein, ein langsameres GerĂ€t wie den Streamer oder das CD-ROM auf den ACSI-Bus zu legen, wĂ€hrend die Festplatten an SCSI angeschlossen sind.

2.1.3 Queuing

Disconnect ist nicht alles, was SCSI bietet. Die nÀchste interessante Möglichkeit zur Leistungssteigerung ist das Command-Queuing. Dabei werden mehrere Kommandos an das SCSI-GerÀt geschickt, das dann entscheidet, in welcher Reihenfolge die Kommandos abgearbeitet werden.

Voraussetzung dazu ist, dass ein Disconnect aufgetreten ist. WÀhrenddessen ist ja der Bus frei, und statt eines Kommandos an ein anderes GerÀt kann bereits das nÀchste Kommando abgeschickt werden. Das SCSI-GerÀt kann dann entscheiden, in welcher Reihenfolge die aufgelaufenen Kommandos bearbeitet werden.

Um den Zusammenhang zwischen den Kommandos herzustellen - man muss ja wissen, zu welchem der laufenden Kommandos ein Reconnect gehört - werden ebenfalls Messages benutzt. Dazu bezeichnet der Initiator nach der Identify-Message, die ja im unmittelbaren Anschluß an die Kommando-Übertragung versandt wird, mit einer weiteren Message das laufende Kommando mit einer eindeutigen Nummer. Diese Nummer bezeichnet den laufenden Kontakt - man nennt das Nexus -, um einen eindeutigen Bezug herstellen zu können.

Nach einem Reconnect meldet das Target wiederum diese Nummer, um den Nexus zu identifizieren, mit dem der Betrieb jetzt weitergehen soll. Was das Target aus dem Queuing macht, ist ihm ĂŒberlassen. Eine denkbare Optimierung ist zum Beispiel zwei SCSI-Zugriffe auf die gleichen Blöcke der Festplatte.

In diesem Fall kann das GerĂ€t die gleichen Daten an beide Zugriffe zurĂŒck liefern und muss sie nur einmal vom Medium lesen. Bei einem Zugriff, der mehr Daten ĂŒbertragen soll, als in das Cache des GerĂ€tes passen, spart es erhebliche Zeit, die Daten jeweils in den Puffer zu lesen und dann zweimal mit voller Geschwindigkeit, die der Bus hergibt, an die zwei laufenden Zugriffe zu ĂŒbertragen.

SelbstverstĂ€ndlich könnte man dies auch im Treiber durchfĂŒhren, aber dort wĂ€re es logisch erheblich schwieriger unterzubringen, da SCSI-Kernroutinen normalerweise nichts ĂŒber die verschiedenen GerĂ€te und ihre Verhaltensweisen wissen. Eine Festplatte und ein CD-ROM haben da zum Beispiel normalerweise erheblich unterschiedliche Datenaufbauten, was zu unterschiedlichen Strategien des Caching fĂŒhren kann. Das GerĂ€t dagegen weiß schließlich am allerbesten, was es macht und wie es aufgebaut ist, kann also besser handeln.

2.2 Andere Messages

2.2.1 BUS DEVICE RESET

Um ein GerĂ€t einzeln zurĂŒckzusetzen, ohne das andere GerĂ€te davon betroffen sind, wie es beim Setzen der Reset-Lei-tung auf dem SCSI-Bus ist, kann man eine RESET-Message an ein GerĂ€t versenden.

Das GerÀt verfÀhrt dann, als hÀtte es einen 'har reset' erhalten, verwirft alle laufenden Transfers, Command Queues, GerÀte-Reservierungen, Konfigurationen und was sonst noch so ansteht.

Außerdem liefert das GerĂ€t dann beim nĂ€chsten Zugriff 'Unit Attention', damit alle erfahren, dass der Zustand des GerĂ€tes nicht mehr gĂŒltig ist.

2.2.2 Abort

Aus verschiedenen GrĂŒnden ist es sinnvoll, ein laufendes Kommando abbrechen zu können. Ein wesentlicher Grund wĂ€re zum Beispiel, dass man vom Initiator aus einen prĂ€ventiven Lesezugriff machen möchte, um maximale Datenraten zu erreichen. Dabei wĂŒrde ein Treiber mehr Daten von der Platte anfordern, als eigentlich ursprĂŒnglich benötigt werden. Der Grund dafĂŒr ist die Erwartung, dass die Daten, die den ursprĂŒnglich angeforderten folgen, wahrscheinlich in KĂŒrze auch angefordert werden. Ein gutes Beispiel dafĂŒr sind Harddiskrecorder.

Dabei ist normalerweise davon auszugehen, dass die Daten auf der Festplatte komplett Sektor fĂŒr Sektor benötigt werden. Damit der SCSI-Overhead, der durch Arbitrierung, Selektion, KommandoĂŒbertragung und den ganzen Rattenschwanz zusammenkommt, nicht einen so hohen Anteil an der Übertragimgsdauer hat, werden bei solchen GerĂ€ten immer sehr große Datenmengen angefordert.

Falls dann jedoch dies plötzlich nicht eintritt, zum Beispiel, weil der Anwender auf einmal am Jogshuffle rumdreht (dieser VorwĂ€rts-rĂŒckwĂ€rts-Hebel zum Suchen einer Musikposition) stellt sich ja unerwarteterweise heraus, dass die angeforderten Daten gar nicht benötigt werden, aber dafĂŒr ganz andere.

Um nicht die Restzeit des laufenden Kommandos abwarten zu mĂŒssen, bricht man einfach das laufende Kommando ab, indem man eine ABORT-Nachricht an die Festplatte versendet. Die Platte fĂŒhrt das laufende Kommando nicht zu Ende, und man kann das neue Kommando absetzen.

Mit ABORT kann man so natĂŒrlich auch laufende Kommandos abbrechen, die sonst nicht abbrechbar erscheinen, zum Beispiel das Formatieren einer Festplatte.

Ein hÀufig anzutreffender Aberglaube betrifft die Vermutung, dass auf einem weiten SCSI-Bus - also 16 oder 32 Bit breit -bereits ein vorhandenes 8-Bit-GerÀt die weiten Transfers der weiten GerÀte unterbindet.

Dem ist nicht so, weil ein weiter Transfer erst dann durchgefĂŒhrt wird, wenn einer der beiden Teilnehmer einen weiten Transfer anfordert. Dazu wird einfach die Message WIDE DATA TRANSFER REQUEST (WDTR) verschickt, die dann entweder akzeptiert wird, indem mit einer entsprechenden WDTR-Message geantwortet, oder mit der Message MESSAGE REJECT abgelehnt wird.

WIDE DATA TRANSFER

Der erste, der die Nachricht ĂŒbertrĂ€gt, meldet dabei seine maximale Transferweite, und der Antwortende meldete seine Weite, jedoch maximal die, die vom ersten gemeldet wurde. Die zulĂ€ssige Breite ist damit ausgehandelt und kann bis auf weiteres benutzt werden.

Damit diese Nachricht nicht jedesmal ĂŒbertragen werden muss, gilt sie solange als ausgehandelt, bis sie ungĂŒltig wird (ach was).

UngĂŒltig wird dieser Zustand durch

  1. einen Hard Reset (Setzen der Resetleitung auf dem Bus)

  2. ein Device Reset (per Message BUS DEVICE RESET)

  3. einen Power On-Zyklus (also Ab- und Anschalten eines der GerÀte).

Damit kann man also auch ein Wide-SCSI-GerĂ€t ohne Probleme an einen 8-Bit-Bus anschließen. Da die Anforderung nicht bestĂ€tigt wird, wird eben nur mit 8 Bit Breite ĂŒbertragen.

Dieser Wert wird ĂŒbrigens fĂŒr jedes GerĂ€t getrennt ausgehandelt, damit immer zwei GerĂ€te miteinander das maximal Mögliche nutzen und nicht ein langsames GerĂ€t alle anderen ausbremst.

2.2.4 SYNCHRONOUS DATA TRANSFER REQUEST

Ähnlich wie bei der WDTR-Message geht es bei der SYNCHRONOUS DATA TRANSFER REQUEST (SDTR) Message um das Aushandeln maximaler synchroner Transferraten.

Dabei handeln die GerĂ€te eben aus, mit welcher synchronen Rate die Daten ĂŒbertragen werden können.

Genauso wie bei WDTR gilt diese Aushandlung solange, bis einer der genannten FĂ€lle die Absprache ungĂŒltig macht.

2.3 Verschiedenes

SCSI ist zu komplex, um es in einem Artikel komplett auszubreiten. Nachdem man die GrundzĂŒge verstanden hat - ich hoffe, das ist jetzt so - ist es jedoch so, dass man die auftretenden Fragen problemlos anhand der Norm beantworten kann.

Einige Themen, die jedoch immer wieder aufkommen, will ich jedoch noch in loser Sammlung behandeln.

2.3.1 Unit Attention

Immer wieder stolpern Anwender ĂŒber die Frage, was 'Unit Attention' bedeutet bzw. was mit einem Jumper einer Festplatte zu machen ist, mit dem man 'Unit Attention' abschalten kann.

Im wesentlichen ist Unit Attention nur ein Status, der eine Gruppe von bestimmten ZustĂ€nden zusammenfaßt. Prinzipiell liefert jedes GerĂ€t nach eine Zugriff ein Status-Byte, das entweder besagt, dass alles in Ordnung ist oder dass ein Fehler aufgetreten ist. Das Bit 1 im Status bedeutet dabei 'Check Condition', man soll also nachfragen, was wohl los ist.

Dazu wird das Kommando 'Request Sense' benutzt, das eine recht genau aufgeschlĂŒsselte Fehlermeldung liefert. Darin steht nun zunĂ€chst, dass es sich um Unit Attention handelt sowie eine weitergehende Information ĂŒber den Grund dafĂŒr. Üblich sind dabei eben, dass das GerĂ€t gerade eingeschaltet wurde, oder dass ein Reset auftrat, oder dass ein Medium gewechselt wurde (wenn es ein wechselbares Medium ist). Eine Änderung der Laufwerksparameter, wie sie mittels Mode Select möglich ist, fĂŒhrt ebenfalls dazu.

Im allgemeinen handelt es sich also um Fehlermeldungen, die mit irgendwelchen ZustandsÀnderungen des GerÀtes zusammenhÀngen.

FĂŒr einen Treiber ist dies wichtig, weil damit alle Absprachen mit dem GerĂ€t neu erfolgen mĂŒssen. FĂŒr Wechselplatten muss eben die neue Partitionsstruktur eingelesen werden, bei GerĂ€ten, mit denen synchrone oder weite Transfers abgehandelt waren, mĂŒssen diese erneuert werden.

FĂŒr Atari-Anwender ist dies insofern interessant, als ein GerĂ€t mit eingeschalteter Unit Attention auf Reset und 'Power On' erst mit einem TOS ab 2.06 bzw. 3.06 gebootet werden kann. Dies liegt daran, dass Ă€ltere Versionen von TOS nur einen Versuch machen, von einem GerĂ€t zu booten. SchlĂ€gt dieser fehl (eben durch die Unit Attention), wurde das GerĂ€t als nicht bootbar eingestuft. Neuere TOS-Versionen machen dann einfach einen zweiten Versuch, der dann auch problemlos klappt.

Übrigens werden Fehlermeldungen immer an alle Initiatoren gemeldet, die von dieser Meldung betroffen sind. Dies ist auch ein Grund, warum Identifikation bei der Selektion Pflicht ist (siehe Teil l dieses Artikels), denn das GerĂ€t muss wissen, an wen die Meldung bereits geliefert wurde. Fehler, die einen Zugriff betreffen -zum Beispiel ein Lesefehler - werden nur an denjenigen gemeldet, der den Fehler ausgelöst hat.

2.3.2 PrioritÀten

Bei der Vergabe des Busses in der Arbi-trierungsphase haben die GerÀte ja PrioritÀten, die der ID des GerÀtes entsprechen (s. Teil 1). Ein sinnvoller Feintrimm der Leistung des SCSI-Busses ist daher die sinnvolle Vergabe der SCSI-Ids.

Im allgemeinen braucht man darum keine Sorge zu tragen, in besonderen FĂ€llen kann es sich jedoch lohnen.

Benutzt man zum Beispiel einen CD-Brenner in einem System mit echt genutzten Disconnects, dass also andere Tasks wÀhrend des Disconnect den Bus benutzen können, ist es sinnvoll, dem Brenner eine höhere SCSI-Id zu geben als dem Host.

Der CD-Brenner gibt nĂ€mlich den Bus per Disconnect frei, solange er genĂŒgend Daten im Puffer hat. WĂ€hrend der Bus frei ist, kann ein Thread des Brennvorganges - normalerweise handelt es sich um getrennte Threads fĂŒr das Schreiben und das Einlesen der Daten - weitere Daten von der Platte lesen und zum Brennen aufbereiten.

Will nun der Brenner einen Reconnect durchfĂŒhren und gleichzeitig der Rechner weitere Daten sammeln - oder auch ein anderes Programm auf die Platte zugreifen - gewinnt der Rechner mit der höheren ID den Bus, womit der Brenner warten muss, bis der Bus wieder frei ist. Zwar fĂŒhrt dies nicht sofort zu einem 'Buffer Underrun', aber damit wird immerhin das Risiko erhöht. In kritischen FĂ€llen, in denen man knapp an der Grenze liegt, kann es ausreichen, den Brenner auf eine höhere ID zu legen als den Hostadapter. Mit Sicherheit fĂŒhrt das nicht dazu, dass ein System, mit dem man kaum schafft, CDs zu brennen, auf einmal ohne Probleme durchkommt, aber immerhin ist es ein Sicherheitsgewinn. Tests beim Brennen von CDs mit gleichzeitig starker Belastung des SCSI-Bus zeigen eindeutig diese Besserung, leider ist der Grenzzustand jedoch nur sehr schwierig herbeizufĂŒhren, daher kann man es nicht so einfach mit einem kurzen Test nachvollziehen.

2.4 Was bringt's?

Auf dem Atari haben wir leider von einigen der Möglichkeiten keinen Nutzen. Disconnect und dessen Vorteile bei mehreren Programmen können wir genauso wenig nutzen wie Command-Queuing.

SCSI wird uns noch lange begleiten, solange wir es nur wollen. NatĂŒrlich kann ich mir die nĂ€chstbeste Billig-DOSe kaufen, und dabei nur IDE verwenden, aber wer das macht, besonders im Hinblick auf LeistungsfĂ€higeres als Windows 95, vergibt halt einfach einige Vorteile, die er sonst hĂ€tte.

Insbesondere bei der Betrachtung der wirklich leckeren Features, die andere Systeme haben - z.B. RAID 0 unter NT -kann man schnell erkennen, welche Vorteile SCSI bietet.

Jeder darf Leistung verschenken, soviel er will, aber ich will einfach nicht. Und deswegen kommt mir nichts anderes als SCSI ins Haus, jedenfalls nicht fĂŒr die primĂ€ren GerĂ€te.

Steffen Engel