Warum sollte eine Speicherregion als nicht zwischengespeichert markiert werden?

9

In einer eingebetteten Anwendung haben wir eine Tabelle, die die verschiedenen Adressbereiche beschreibt, die auf der Zieltafel gültig sind. Diese Tabelle wird zum Einrichten der MMU verwendet.
Der RAM-Adressbereich ist als cachefähig gekennzeichnet, andere Regionen sind jedoch als nicht cachefähig gekennzeichnet. Warum ist das so?

    
Benoit 18.09.2008, 05:10
quelle

6 Antworten

3

Wenn auf eine Speicherregion gleichzeitig sowohl von Hardware als auch von Software zugegriffen wird (EX: Hardwarekonfigurationsregister oder Scatter Gather List für DMA), muss diese Region als nicht zwischengespeichert definiert werden. Für den tatsächlichen DMA kann der Speicherpuffer als zwischengespeichert definiert werden, und in den meisten Fällen ist es ratsam, den Puffer zwischenzuspeichern, um dem Anwendungspegel einen schnellen Zugriff auf diesen Puffer zu ermöglichen. Es liegt in der Verantwortung des Treibers, den Cache zu leeren / ungültig zu machen, bevor der Puffer an DMA oder die Anwendung übergeben wird.

    
Ilya 18.09.2008, 15:16
quelle
13

Dies geschieht, damit der Prozessor aufgrund des Caching keine veralteten Werte verwendet. Wenn Sie auf (normalen) zwischengespeicherten RAM zugreifen, kann sich der Prozessor den Wert merken, auf den Sie zugegriffen haben. Wenn Sie das nächste Mal auf denselben Speicherort schauen, gibt der Prozessor den Wert zurück, an den er sich erinnert, ohne in den Arbeitsspeicher zu schauen. Dies ist Caching.

Wenn sich der Inhalt des Standorts ändern kann, ohne dass der Prozessor dies bemerkt, wie dies bei einem Speichergerät der Fall sein könnte (ein FPGA gibt zum Beispiel einige Datenpakete zurück), könnte der Prozessor den zuletzt gespeicherten Wert zurückgeben Zeit, die wäre falsch.

Um dieses Problem zu vermeiden, markieren Sie diesen Adressraum als nicht zwischenspeicherbar. Dies stellt sicher, dass der Prozessor nicht versucht, sich an den Wert zu erinnern.

    
Benoit 18.09.2008 05:15
quelle
4

Jeder Speicherbereich, der für DMA oder andere Hardwareinteraktionen verwendet wird, sollte nicht zwischengespeichert werden.

    
bmdhacks 18.09.2008 05:12
quelle
1

Vielleicht wird es für Memory-Mapped I / O verwendet?

    
Nicholas Riley 18.09.2008 05:11
quelle
0

Einige Bereiche wie Flash können in einem Zyklus gelesen werden, müssen also nicht zwischengespeichert werden.

    
LarryH 18.09.2008 21:49
quelle
0

Moderne Controller können L2-Cache für DMA verwenden, was bedeutet, dass sie die Kohärenz des zwischengespeicherten Speicherbereichs für DMA-Zugriffe beibehalten. Dies wird auch als "Snoop-fähige Speichertransaktionen" bezeichnet, die vom Controller (über DMA) ausgeführt werden.

    
klaus 28.07.2014 07:14
quelle

Tags und Links