Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2004  »  03  »  Kern-Technik  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Reale Geräte

Ein Blockgerätetreiber für reale Geräte unterscheidet sich von dem vorgestellten Code in zweierlei Hinsicht:

  • Ein reales Gerät verwendet die Funktion
    »blk_init_queue()« , um einer Request-Queue die Adresse
    der Request-Funktion zu übergeben und sich die Adresse der
    zugehörigen Request-Queue geben zu lassen. Es gibt kein
    »blk_alloc_queue()« und kein
    »blk_queue_make_request()«. Die Funktion erwartet als
    zweiten Parameter die Adresse eines Spinlocks, der parallele
    Zugriffe auf die Request-Queue absichert:
if( (bdqueue = blk_init_queue(
      &bdRequest, &bdlock))==NULL )
         goto out;
  • Ein echter Blockgerätetreiber realisiert eine
    Request-Funktion (siehe Abbildung 4).


Abbildung 4: Das Struktogramm zeigt die Arbeitsweise der Transferfunktion eines Blockgerätetreibers. Die Routine »elv_next_request()« bildet eine Schleife für alle Aufträge an den Treiber.

Die Request-Funktion entnimmt mit Hilfe des Makros »elv_next_request()« den jeweils nächsten Auftrag aus der Request-Liste:

while((req = elv_next_request(q))
   != NULL ) {

Das Makro erhält als Parameter die Request-Queue und gibt einen Zeiger auf den nächsten Auftrag »req« zurück (vom Typ »struct request *«, siehe Abbildung 2). Zunächst muss der Treiber aber feststellen, ob es sich um einen normalen Schreib- oder Leseauftrag handelt:

if( !blk_fs_request(req) ) {
   // kein Schreib-/Leseauftrag
   end_request( req, 0 );
      continue;
}

Ist dies nicht der Fall, holt der Treiber mit »continue« den nächsten Auftrag aus der Liste. Handelt es sich um einen Schreib- oder Leseauftrag, arbeitet er ihn ab. Das Makro »rq_for_each_bio()« liefert dazu als Teil einer Schleife den jeweiligen BIO-Block zurück, den der Treiber dann wie beschrieben auswertet:

rq_for_each_bio(bio, req ) {

Hat er einen Auftrag abgearbeitet, ruft er »end_request()« auf. Der erste Parameter ist dabei der Auftrag selbst. Der zweite Parameter spezifiziert mit einem Wert ungleich null, dass der Auftrag bearbeitet wurde (siehe Abbildung 4).

Rückblick und Vorschau

Das Blockgerätemodell bietet eine einheitliche Programmierschnittstelle für reale Hardware zur Datenspeicherung - von der großen Festplatte bis zum USB-Stick. Um USB-Geräte geht es in der nächsten Folge der Kern-Technik, denn die haben mittlerweile RS-232 als Standardschnittstelle abgelöst. (ofr)

Infos:

[1] Eva-Katharina Kunst, Jürgen Quade, "Kern-Technik", Folge 1: Linux-Magazin 8/03, S. 88

[2] Eva-Katharina Kunst, Jürgen Quade, "Meister-Installateur": Linux-Magazin 1/04, S. 28

[3] Jonathan Corbet, "Driver Porting: A simple block driver": [http://lwn.net/Articles/58719/]

[4] Jonathan Corbet, "Driver Porting: the gendisk interface": [http://lwn.net/Articles/25711/]

Die Autoren

Eva-Katharina Kunst, Journalistin, und Jürgen Quade, Professor an der Hochschule Niederrhein, sind seit den Anfängen von Linux Fans von Open Source.

Copyright © 2002 Linux New Media AG

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Einbruch? Spuren und Daten nach Crackversuchen oder Beschlagnahme richtig sichern
Knoppix 6.5 Klaus Knopper über sein neues Linux
Blitzmerker Neue Dateisysteme nehmen Rücksicht auf den begrenzten Lebenszyklus von Flashspeichern
Kern-Technik Kernel- und Treiberprogrammierung mit dem Kernel 2.6 - Folge 28
Kern-Technik Kernel- und Treiberprogrammierung mit dem Kernel 2.6 - Folge 54
Fragwürdige Softskills Kurztest: Mini-Rechner von Transtec mit SLED 10
Whitepaper
Daten Migration - Eine Publikation von Bloor Research

Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.

Download PDF (Registrierung erforderlich)
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Kommentare (0)