So ein paar Ergänzende Gedanken:
1. Wir müssen die Datei im Verzeichnis finden
U.U. müssen wir auch erst noch das Verzeichnis finden innerhalb eines Verzeichnisbaums. Dann wird dieser Vorgang sogar mehrfach notwendig.
3. Eine Liste der von einer Datei belegten Sektoren muss geladen werden Die Sektoren einer Datei liegen nicht hintereinander, deshalb kennen moderne Dateisysteme Verwaltungssektoren, welche die Reihenfolge der belegten Sektoren einer Datei enthalten. Je größer die Datei ist, desto häufiger müssen diese Verwaltungssektoren gelesen werden.
Moderne Dateisysteme nutzen heute auch Extends um zusammenhängende Sektoren kompakt abzubilden: Statt einer langen Liste mit Sektoren 500,501,502,...,999,1000,2000,2001,...,2999,3000 kann man das wesentlich kompakter als 500-1000,2000-3000 darstellen.
2. Wir müssen den eigentlichen Dateiinhalt laden Der liegt auf dem Datenträger, aber nicht direkt "neben" dem Verzeichniseintrag.
Bei NTFS werden sehr kleine Dateien (AFAIR liegt die Grenze bei etwa 1,4KB) tatsächlich direkt in der MFT abgespeichert.
Lese-Cache). Da wirken dann solche Dinge wie Imvoraus-Lesen mit. Das wird oft was bringen, kann dann aber in ungünstigen Fällen auch bewirken, das der Cache verworfen wird und neu geladen werden muss. Ich tippe, das wird bei vielen kleinen Dateien häufiger vorkommen, als bei wenigen Großen.
Bei Cache haben wir auch noch eine mehrstufige Hierarchie, selbst wenn der Zugriff aufs RAM erfolgt. Wenns noch nicht im L1, L2 oder L3 Cache liegt dann muss man Ende sogar aufs langsame RAM gewartet werden.
Beim Schreiben der Daten werden die alten Daten erst nach dem schreiben der neuen Daten i wieder freigegeben.
Das wäre das Verhalten was man bei Copy-On-Write-Dateisystemen vorfindet. Die sind zwar sehr robust, aber die hat man nicht immer (und die haben auch den Nachteil, dass sie die Fragmentierung begünstigen).
Aber das reicht noch nicht an zusätzlichen Aufwand: soweit ich weiß sind die physikalisch geschriebenen Einheiten (Cluster) häufig größer als ein Sektor. Je mehr Sektoren in einem Cluster liegen, desto mehr Schreiboperationen, kann man mit passenden Schreibcache einsparen - wenn das denn alles passt. Das Problem ist, dass dies bei kleinen Dateien vermutlich nicht immer gut passen wird. Spätestens, wenn eine neue kleine Datei geschrieben wird, die in einen Cluster soll, der bereits kurz vorher geschrieben werden sollte und jetzt gerade gesperrt ist, bis der alte Inhalt geschrieben wird, muss das ganze Warten.
Bei RAM haben wir erst mal keine Sektoren, aber die Organisation erfolgt in virtuellen Speicherseiten (heute i.d.R. 4KiB) die dann in Hardware auf physikalische Speicheradressen gemappt werden müssen.
Bei Festplatten haben wir heute ja die etwas krude Situation, dass sie nach außen meist immer noch die 512Byte Sektoren präsentieren, intern jedoch mit 4KiB Sektoren arbeiten. Willst Du da nur ein Bit ändern musst Du den kompletten Sektor neu schreiben (der u.A. auch ein bisschen Overhead wie Checksummen enthält). Bei Flash-Speichern hat man sogar noch größere zusammhängende Blöcke.
Gruß
bor