Wohin gehen die Daten, wenn ein Datenträger gelesen oder geschrieben wird?

2938
Kaitlyn Mcmordie

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 eine bestimmte Stelle im Speicher gehen müssen und sich dann lesen lassen von der CPU?

Weiß jemand auch, wie der Puffer heißt? Und wie passt DMA dazu?

7

2 Antworten auf die Frage

16
sawdust

Für ein Plattenlesen ist der Datenfluss im Wesentlichen:

  • Nachdem sich die Lese- / Schreibeinheit am angeforderten Zylinder befindet, wird der angeforderte Schreib- / Lesekopf 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 umgewandelt.
  • die Bytes des Sektors werden in einem Sektorpuffer gespeichert (normalerweise SRAM in der Steuerung); Dieser Sektorpuffer unterscheidet sich vom "Platten-Cache".
  • Sobald der gesamte Sektor gelesen wurde, werden die Daten mit 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 allgemein bekannt, und es gibt weit verbreitete Fehlinformationen darüber, 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 ablaufen.
  • Wenn der PC die Daten vom Festplattencontroller über die ATA-Schnittstelle empfängt, kann der PC entweder programmierte E / A verwenden (die CPU liest wiederholt das Datenregister des ATA-Ports und kopiert den Wert in den Zielspeicher) oder DMA (der DMA-Controller ist.) Setup zum Kopieren von N Bytes aus dem Datenregister des ATA-Ports in einen Speicherpuffer ohne weiteren Eingriff der CPU).
  • Der Speicherpuffer des PCs, der die Daten empfängt, kann der Puffer der Anwendung sein (bei Verwendung des Block-E / A-Systemaufrufs ) oder ein interner Systempuffer unter Dateisystemkontrolle oder sogar Programm- oder Datenspeicher, falls die Daten vom Swap stammen Bereich (oder Seitendatei).

Ein Schreibvorgang auf die Platte ist ähnlich, mit der Ausnahme, dass die Daten vom PC zum Plattencontroller übertragen werden, der ECC berechnet wird, der angeforderte Sektor lokalisiert wird und dann die Daten aus dem Sektorpuffer in 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 Verwendung nicht zusammenhängender Speicherpuffer für die Platten-E / A-Anforderung.

Könnte etwas weniger spezifisch sein, da nicht-mechanische Antriebe heutzutage viel häufiger verwendet werden, aber es ist eine gute Antwort. Shinrai vor 13 Jahren 1
@Shinrai - Ich habe nur Programmiererfahrung aus erster Hand mit Laufarm-Laufwerken (und ich habe Festplatten mit festem Kopf verwendet). Ich entscheide mich dafür, nicht zu spekulieren oder Informationen über die Funktionsweise von SSDs zu wiederholen. sawdust vor 13 Jahren 0
+1 für diese großartige Antwort, gut dokumentiert und geschrieben. Sehr professionell. climenole vor 12 Jahren 0
2
Aaron D. Marasco

Es geht in einen bestimmten Speicherbereich, den der Kernel dem Treiber der Festplatte zugewiesen hat. Ich glaube nicht, dass es einen bestimmten Namen hat. Dieser Speicherbereich ist normalerweise als Ringpuffer konfiguriert . Je nach Betriebssystem kann dieser Speicher ein zweites Mal in den Benutzerbereich kopiert werden, damit die Anwendung ihn verwenden kann.

DMA ist „Direct Memory Access“, was bedeutet, dass die Steuerung des Plattenlaufwerk direkt an den RAM schreiben kann die CPU wiederholt es, ohne zu fragen, ob mehr Daten verfügbar sind (als Polling bekannt - so wie die Dinge verwendet getan werden). Stattdessen, nachdem der gesamte Puffer übertragen wurde, unterbricht der Controller die CPU, um zu wissen, dass jetzt Daten verfügbar sind.

Wenn Sie sich für eine noch niedrigere Ebene interessieren, führt der Treiber Ioctl- Aufrufe durch.

Ringpuffer werden normalerweise von Netzwerkgeräten (z. B. Ethernet-Controller) verwendet, da die Daten unaufgefordert ankommen können (unerwartet ohne ausstehende Leseanforderung). Daten von einem Festplattenlaufwerk / Controller reagieren immer auf eine Anfrage des Hosts. Die Daten werden abgefragt, so dass in einem Festplattentreiber kein "Ringpuffer" erforderlich ist. sawdust vor 13 Jahren 1
OK, ich habe nur mit DACs auf Treiberebene gearbeitet und sie verwenden ebenfalls Ringpuffer, also hatte ich angenommen. Aaron D. Marasco vor 13 Jahren 0