Was ist der Unterschied zwischen block- und zeichenorientierten Geräten? Und welche Rolle spielen dabei Socket-Dateien?

2 Antworten

Ein character-Device liefert einen (kontinuierlichen) Zeichenstrom - Es ist vor allem bei Geräten sinnvoll, die relativ wenig Bandbreite/niedrige Datenraten benötigen.

Einfaches klassisches Beispiel wäre z.B. eine Tastatur. Es reicht in der Regel, wenn ich bei jedem Tastendruck ein Zeichen erhalte, mir also jede Lesoperatiion ein Zeichen zurückliefert.

Bei block-Devices werden Daten immer Blockweise gelesen, Beispiel wären hier Speichergeräte. Ein Sektor hat 512 Bytes, ich möchte natürlich nicht sagen müssen:

Hole Block, um dann 512 mal ein read auszuführen, ich erwarte eher, daß ich ein read ausführe und den ganzen Block zurück geliefert bekomme.

Sockets sind im Prinzip Hybriden, obwohl ich ein paketorientiertes (Block) Netzwerk habe, kann ich einen linearen Stream lesen und schreiben (bei TCP/stream sockets), aber auch blockorientiert - andererseits muß ich bei datagram sockets (UDP) auch blockorientiert lesen und schreiben.

Aus diesem Grund stellen Sockets auch keine normalen Gerätedateien dar.

Gerätedateien sind eigentlich gar keine Dateien, denn sie haben immer die Länge Null Byte. Zu jeder Datei gehören aber sogenannte Metadaten. Das ist vergleichbar mit mit einem Inhaltsverzeichnis. Unix/Linux-Systeme benutzen sie, um zu entscheiden, wie mit dem zugeordneten Gerät (es sind Beschreibungsdateien) umgegangen werden soll.

Wenn also das Betriebssystem z.B. einen Schreibauftrag "schreibe auf Gerätedatei" erhält, dann liest es die Metadaten der Gerätedatei und erkennt "das ist eine Festplatte, weil die Major-Nummer eine 8 ist" . Welche Festplatte und welche Partition wird an der Minor-Nummer erkannt. (ls -l /dev/sd* würde das auch für dich anzeigen)

Findet es dann auch noch als Typ "Blockdevice", dann werden einzelne Bytes erst einmal gesammelt und dann als Bock auf die Platte geschrieben.

Ist der Type jedoch ein zeichenorientiertes Gerät, dann wird das Byte nahezu sofort an das Gerät weitergeben. Aber auch da gibt es Puffer, die Bytes sammeln (müssen), weil z.B. ein Modem doch ein langsames Gerät ist und nicht sofort wieder bereit ist.

Sockets sind auch wieder spezielle Beschreibungsdateien aber für den Datenaustausch über ein Netzwerk. Bei der Behandlung von Block- oder Zeichen-Geräten spielen sie keine Rolle.

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995