
Warum benötigen andere UNIX-Systeme Zeichengeräte als Speichergeräte, Linux jedoch nicht?
Andere UNIX-Betriebssysteme (AIX, HPUX, Solaris und macOS) verwenden für Speichergeräte beispielsweise „/dev/rdisk#“ und „/dev/disk#“.
Antwort1
Ich denke, dieser Wikipedia-Artikelhttps://en.wikipedia.org/wiki/Raw_deviceerklärt es sehr gut:
In der Computertechnik, insbesondere in Unix und Unix-ähnlichen Betriebssystemen, ist ein Raw Device eine spezielle Art von logischem Gerät, das mit einer Zeichengerätedatei verknüpft ist und den direkten Zugriff auf ein Speichergerät wie eine Festplatte ermöglicht, wobei die Caches und Puffer des Betriebssystems umgangen werden (obwohl die Hardware-Caches möglicherweise weiterhin verwendet werden). Anwendungen wie ein Datenbankverwaltungssystem können Raw Devices direkt verwenden, wodurch sie verwalten können, wie Daten zwischengespeichert werden, anstatt diese Aufgabe an das Betriebssystem zu übertragen.
In FreeBSD sind alle Gerätedateien tatsächlich Rohgeräte. Die Unterstützung für Nicht-Raw-Geräte wurde in FreeBSD 4.0 entfernt, um die Pufferverwaltung zu vereinfachen und Skalierbarkeit und Leistung zu verbessern.1
Im Linux-Kernel wurden Raw-Geräte verworfen und ihre Entfernung war zu einem bestimmten Zeitpunkt geplant, da stattdessen das Flag O_DIRECT verwendet werden kann.
Antwort2
Der Grund, warum man die Raw-Schnittstelle anstelle der Blockgeräteschnittstelle verwenden möchte, liegt darin, dass die Raw-Schnittstelle normalerweise schneller ist. Das Betriebssystem führt nur für blockspezifische Dateien eine Pufferspeicherung durch.
Wenn eine sehr große Datei von einem Medium wie einem Magnetband gelesen oder darauf geschrieben wird, bietet die Pufferspeicherung durch das Betriebssystem keinen Vorteil, da kein Block mehr als einmal gelesen wird. Durch die Verwendung der Raw-Device-Schnittstelle wird diese übermäßige Systemaktivität vermieden.
Ein weiterer Grund, die Raw-Device-Schnittstelle bei der Verarbeitung sehr großer Stream-Dateien auf magnetischen Medien zu verwenden, ist, dass die Raw-Schnittstelle sehr große Blockgrößen unterstützen kann, wodurch sehr hohe Datenübertragungsraten erreicht werden können. Wenn auf ein Gerät über die Block-Device-Schnittstelle zugegriffen wird, müssen alle Lese- und Schreibvorgänge über die Systempuffer geleitet werden und sind daher auf die Blockgröße des Dateisystems (normalerweise 1 KB oder 2 KB) beschränkt. Bei Verwendung des Raw-Devices können Blockgrößen von 32 KB oder mehr verwendet werden. --John J. Valley,UNIX Programmierreferenz; Ausgabe 1991.
Abgesehen von Leistungssteigerungen gab (gibt?) es die Anforderung, dass Dateisysteme, auf die über die Blockschnittstelle zugegriffen wird, aus Gründen der Cache-Konsistenz demontiert werden müssen. Vom System zwischengespeicherte Blöcke können Änderungen, die über das Blockgerät vorgenommen wurden, überschreiben, wenn sie auf die Festplatte zurückgeschrieben werden. Das Deinstallieren vor fschk ist ein kleines Ärgernis; wenn die Anwendung, die direkten Zugriff benötigt, die Hauptverwendung des Systems ist, ist es viel schlimmer.
Als Antwort auf Ihre ursprüngliche Frage sind viele der Probleme weitgehend historischer Natur. In modernen Systemen ist es ungewöhnlich, dass Gerätepuffer größer sind als Systempuffer. (Wann haben Sie das letzte Mal eine Workstation verwendet, die an einen Hochgeschwindigkeitsdrucker angeschlossen war und einen größeren Puffer als den Arbeitsspeicher der Workstation hatte?)