Wohin gehen die Daten, wenn ein Festplattenlesevorgang oder ein Festplattenschreibvorgang stattfindet?
10
Ich verstehe, dass es so etwas wie einen Festplattencontroller gibt, der einen Puffer enthält, aber ich habe mich gefragt, ob die CPU direkt aus diesem Puffer liest oder ob die Daten zuerst an einen bestimmten Speicherort im Speicher gehen und sich dann selbst lesen lassen müssen von der CPU?
Weiß jemand auch, wie der Puffer heißt? Und wie passt DMA in all das?
Für einen Festplattenlesevorgang ist der Datenfluss im Wesentlichen:
Nachdem sich die Lese- / Schreibanordnung am angeforderten Zylinder befindet, wird der angeforderte R / W-Kopf ausgewählt.
In jedem Sektor wird die Sektor-ID gelesen. Wenn die gelesene Sektornummer mit der angeforderten Sektornummer übereinstimmt, werden die Sektordaten gelesen.
Die Sektordaten werden als serieller Bitstrom gelesen und in Bytes konvertiert.
Die Bytes des Sektors werden in einem Sektorpuffer gespeichert (normalerweise SRAM in der Steuerung). Dieser Sektorpuffer unterscheidet sich vom "Festplatten-Cache".
Sobald der gesamte Sektor gelesen wurde, werden die Daten mithilfe von ECC validiert und möglicherweise korrigiert.
Nach der Validierung werden die Sektordaten von der Steuerung zum Host-PC übertragen. Hinweis: Das Vorhandensein dieses Sektorpuffers ist nicht gut bekannt, und es gibt weit verbreitete Fehlinformationen, dass die Übertragungsgeschwindigkeit auf der Host-Schnittstelle (egATA) durch die Bitrate am R / W-Kopf gebunden oder begrenzt ist. Das ist völlig falsch, da diese beiden Datenübertragungen unabhängige und sequentielle Operationen sind und nicht gleichzeitig.
Wenn der PC die Daten vom Plattencontroller über die ATA-Schnittstelle empfängt, kann der PC entweder programmierte E / A (die CPU liest wiederholt das Datenregister des ATA-Ports und kopiert den Wert in den Zielspeicher) oder DMA (der DMA-Controller ist) verwenden Setup zum Kopieren von N Bytes aus dem Datenregister des ATA-Ports in einen Speicherpuffer ohne weiteren CPU-Eingriff).
Der Speicherpuffer des PCs, der die Daten empfängt, kann der Puffer der Anwendung sein (bei Verwendung eines Block-E / A-Systemaufrufs ) oder ein interner Systempuffer unter Dateisystemsteuerung oder sogar ein Programm- oder Datenspeicher, wenn die Daten aus dem Swap stammen Bereich (oder Auslagerungsdatei).
Ein Schreibvorgang auf die Festplatte ist ähnlich, außer dass die Daten vom PC zum Festplattencontroller übertragen werden, der ECC berechnet wird, der angeforderte Sektor lokalisiert wird und dann die Daten aus dem Sektorpuffer auf den Plattenteller geschrieben werden.
Für zusätzliche Gutschrift:
Informieren Sie sich über " Scatter-Gather " -Transfers, bei denen DMA-Verkettung und eine Scatter-Gather-Liste mit Speicheradressen und Pufferlängen verwendet werden. Anstelle eines großen, zusammenhängenden Speicherpuffers ermöglicht eine "Scatter-Gather" -Übertragung die Aggregation von nicht zusammenhängenden Speicherpuffern für die Platten-E / A-Anforderung.
Könnte vielleicht etwas weniger spezifisch in Bezug auf "R / W-Köpfe" sein, da nicht-mechanische Antriebe heutzutage viel häufiger verwendet werden, aber es ist eine gute Antwort.
Shinrai
@Shinrai - Ich habe nur Programmiererfahrung aus erster Hand mit Laufwerken mit beweglichem Arm (und ich habe Festplattenlaufwerke verwendet). Ich beschließe, keine Informationen aus zweiter oder dritter Hand über die Funktionsweise von SSDs zu spekulieren oder zu wiederholen.
Sägemehl
+1 für diese großartige Antwort, gut dokumentiert und geschrieben. Sehr professionell.
Climenole
2
Es geht in einen bestimmten Speicherbereich, dem der Kernel den Treiber der Festplatte zugewiesen hat. Ich glaube nicht, dass es speziell benannt ist. Dieser Speicherbereich ist normalerweise als Ringpuffer konfiguriert . Abhängig vom Betriebssystem kann dieser Speicher ein zweites Mal in den Benutzerbereich kopiert werden, damit die Anwendung ihn verwenden kann.
DMA ist "direkter Speicherzugriff", was bedeutet, dass der Controller des Festplattenlaufwerks direkt in den RAM schreiben kann, ohne dass die CPU wiederholt fragt, ob mehr Daten verfügbar sind (so genanntes Polling - wie früher ). Wenn stattdessen der gesamte Puffer übertragen wurde, unterbricht die Steuerung die CPU, um sie darüber zu informieren, dass jetzt Daten verfügbar sind.
Wenn Sie neugierig auf eine noch niedrigere Ebene sind, führt der Treiber ioctl- Anrufe durch.
Ringpuffer werden normalerweise von Netzwerkgeräten (z. B. Ethernet-Controller) verwendet, da die Daten unaufgefordert eintreffen können (unerwartet ohne ausstehende Leseanforderung). Daten von einem Festplattenlaufwerk / Controller sind immer eine Antwort auf eine Anfrage des Hosts. Die Daten werden angefordert, sodass in einem Festplattentreiber kein "Ringpuffer" erforderlich ist.
Sägemehl
OK, ich habe nur mit DACs auf Treiberebene gearbeitet und sie verwenden auch Ringpuffer, also hatte ich angenommen.
Es geht in einen bestimmten Speicherbereich, dem der Kernel den Treiber der Festplatte zugewiesen hat. Ich glaube nicht, dass es speziell benannt ist. Dieser Speicherbereich ist normalerweise als Ringpuffer konfiguriert . Abhängig vom Betriebssystem kann dieser Speicher ein zweites Mal in den Benutzerbereich kopiert werden, damit die Anwendung ihn verwenden kann.
DMA ist "direkter Speicherzugriff", was bedeutet, dass der Controller des Festplattenlaufwerks direkt in den RAM schreiben kann, ohne dass die CPU wiederholt fragt, ob mehr Daten verfügbar sind (so genanntes Polling - wie früher ). Wenn stattdessen der gesamte Puffer übertragen wurde, unterbricht die Steuerung die CPU, um sie darüber zu informieren, dass jetzt Daten verfügbar sind.
Wenn Sie neugierig auf eine noch niedrigere Ebene sind, führt der Treiber ioctl- Anrufe durch.
quelle