Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams

Bitte aktiviere JavaScript!
Hey,
Ich weiß das ein Buffer die Daten erst allesamt sammelt und erst ab einer gewissen Byte zahl auf z.B. die Festplatte überträgt.
Jedoch warum ist es so ineffizient den Buffer weg zu lassen?
Sprich wie sehen die Schritte aus die der Computer macht um etwas aus einem Programm auf die Festplatte zu bringen?
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
warum ist es so ineffizient den Buffer weg zu lassen?
Naja, weil eben nicht nur Move-/Kopieroperationen im RAM-Speicher stattfinden müssen, sondern noch viele andere Dinge:
- Aufruf einer Systemfunktion wie etwa WriteFile (Win32)
- Diese wiederum benutzt den für den FILE-Descriptor zuständigen Treiber des Laufwerkes, und führt dort auch Funktionen aus
- Der Treiber wiederum muss mit dem Speicherbus des Systems (z.B. SCSI) reden, um ihn anzuweisen, Daten von einer physischen Arbeitsspeicher-Adresse zum Laufwerk zu senden
- Das Laufwerk wiederum hat einen Controller, der die Daten entgegennimmt und dann entsprechend die Hardware instruiert, diese zu speichern oder erstmal in einem internen flüchtigen Cache abzulegen. Davor kommt auch noch das Warten auf noch vorher auszuführende I/O Schreibe-/Leseoperationen. Dann das Alloziieren (falls noch nicht alloziiert) eines entsprechenden Bereiches auf der Festplatte und dann das Warten, dass die Hardware bereit ist, diesen Bereich zu schreiben (z.B. bei HDD Warten, dass die Scheibe sich an der entsprechenden Stelle befindet).
- Dann das physische Schreiben der Daten
- Dann dem SCSI Controller Bescheid sagen, dass alles geschrieben wurde, oder zumindest, dass die Daten im Cache des Festplattencontrollers angekommen sind
- Dann muss der SCSI Controller dem auf die I/O Operation wartenden Thread der CPU Bescheid sagen (z.B. per Hardware-Interrupt)

Es gibt zudem noch mehrere Möglichkeiten, wie eine Datei für ein Programm aussehen kann. Einmal eben als abstrakter FILE Descriptor mit System-Operationen wie fwrite/fread, etc. oder als Memory-Mapped File. In letzterem Fall sieht dann für das Programm die Datei tatsächlich so aus wie virtueller Arbeitsspeicher und man kann mit Speicherschreib-/leseoperationen darauf zugreifen. Für diesen Fall lese z.B. https://ayende.com/blog/162791/on-memory-mapped-files

Es sind also seeeehr viel mehr Operationen beteiligt, wenn man auf eine externe Festplatte speichern möchte, als wenn du einfach nur Arbeitsspeicher hinundherkopierst.
 
Sorry, das extern habe ich ins Spiel gebracht. Apropos Spiel: es spielt letztlich keine Rolle. Wenn man alle Buffer wegließe, würde es bei einer rotierenden Platte bedeuten, für jedes zu schreibende/lesende Byte darauf warten zu müssen, bis gerade der richtige Sektor vorbeikommt und das ist weder intern noch extern gut.
 
Ja, ob nun "extern" (Platte hängt an einem SCSI-Kabel aus dem Gehäuse raus - wie bei mir :) oder Platte hängt an einem USB-Kabel) oder Platte ist halt intern verbaut (woran auch immer), macht ja nun wirklich keinen Unterschied für die Betrachtung.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben