-
Wenn ich richtig bin, ist eine Seite in einem Hauptspeicher die kleinste Einheit für die Datenübertragung zwischen dem Hauptspeicher und einem externen Speichergerät, z. B. einer Festplatte. Eine Cache-Zeile eines Hauptspeichers ist die kleinste Einheit für die Datenübertragung zwischen dem Hauptspeicher und den CPU-Caches.
-
Ich frage mich, ob eine Seitengröße immer oder am besten eine ist natürliche Anzahl der Cache-Zeilengröße? Wenn eine Cache-Zeilengröße 64 Byte und eine Speicherseitengröße 4 KB beträgt, enthält jede Seite 4 KB / 64 Byte == 64 Cache-Zeilen.
-
Sind eine Seite und eine Cache-Zeile feste Objekte in einem Speicher? Oder handelt es sich nur um einen zusammenhängenden Block eines Speichers einer bestimmten Größe, der an einer beliebigen Stelle im Speicher starten und schweben kann?
-
Ist es immer so, dass eine Cache-Zeile nicht mehr als umfassen kann? Eine Seite, dh ein Teil einer Cache-Zeile befindet sich auf einer Seite und der andere Teil der Cache-Zeile befindet sich auf einer anderen Seite?
Danke.
Kommentare
- Die Antworten auf Ihre Fragen hängen stark von der CPU-Architektur ab.
Antwort
-
Eine Cache-Zeile ist die kleinste Einheit, mit der Sie den physischen Speicher berühren können. Das heißt, wenn Sie 1 Byte lesen / schreiben, wird eine vollständige Cache-Zeile, die es enthält, in den CPU-Cache eingelesen und zurückgeschrieben. Beachten Sie, dass selbst Anweisungen, die den zu schreibenden Cache umgehen (kurzlebige Streaming-Anweisungen), in Cache-Zeilengrößen schreiben. Abhängig von der CPU betragen die Cache-Zeilengrößen normalerweise 32/64/128 Byte. Wenn Speicherseiten auf die Festplatte geschrieben werden, werden sie vollständig geschrieben. Dies geschieht, wenn der Speicherdruck zu hoch ist oder wenn sich der Ruhezustand befindet (und möglicherweise für andere Zwecke). Sie werden bei Bedarf auch vollständig gelesen. Dies liegt hauptsächlich daran, dass der Kernel nicht wissen kann, ob die Seite teilweise oder vollständig verwendet wird. Andere Lese- / Schreibvorgänge für externen Speicher können eine beliebige Granularität aufweisen (z. B. fwrite (..)).
-
Die Seitengröße ist CPU / GPU-abhängig. Bei den meisten CPUs beträgt die Seitengröße mindestens 4 KB und unterstützt im Allgemeinen eine Mischung aus 4 KB / 64 KB / 2 MB / 4 MB / 16 MB / 1 GB (nicht unbedingt alle gleichzeitig unterstützt). Die Größe ist immer eine Zweierpotenz.
-
Sowohl eine Seite als auch eine Cache-Zeile sind zusammenhängend und müssen an ihrer jeweiligen Größe ausgerichtet werden. Eine 64-Byte-Cache-Zeile ist immer 64-Byte-ausgerichtet und eine 2-MB-Seite ist immer 2 MB ausgerichtet.
-
Aufgrund von # 3 kann eine Cache-Zeile niemals 2 Seiten umfassen, da die Seitengröße dies zulässt Immer größer als eine Cache-Zeile und immer ein Vielfaches der Größe einer Cache-Zeile.
In dieser hervorragenden Quelle finden Sie zahlreiche Informationen zum Speicher: http://lwn.net/Articles/250967/
Kommentare
- Ist diese Antwort im Jahr 2020 noch relevant? Haben sich diese Größen geändert?
- Soweit ich weiß, sind diese Werte bis heute relevant. Alle modernen x86- und x64-CPUs verwenden 64 Byte pro Cache-Zeile, und 4 KB bleiben unter Windows und Linux die am häufigsten verwendete Seitengröße. Informationen zu den unterstützten Geräten finden Sie in Ihrem Handbuch für eingebettete Prozessoren.