Relația dintre linia cache și pagina de memorie

  1. Dacă sunt corect, o pagină dintr-o memorie principală este cea mai mică unitate pentru transfer de date între memoria principală și un dispozitiv de stocare extern, cum ar fi un hard disk. O linie cache a unei memorii principale este cea mai mică unitate pentru transferul de date între memoria principală și cache-urile CPU.

  2. Mă întreb dacă dimensiunea unei pagini este întotdeauna sau este cel mai bine să fie o numărul natural al dimensiunii liniei cache? Dacă dimensiunea unei linii cache este de 64 de octeți și o dimensiune a paginii de memorie este de 4KB, atunci fiecare pagină are 4KB / 64 bytes == 64 linii de cache în ea.

  3. Sunt o pagină și o linie cache ambele obiecte fixe într-o memorie? Sau sunt doar orice bloc adiacent al unei memorii de o anumită dimensiune, care poate porni și pluti oriunde în memorie?

  4. Este întotdeauna că o linie cache nu poate cuprinde mai mult de o pagină, adică o parte a unei linii cache se află într-o pagină și cealaltă parte a liniei cache se află într-o altă pagină?

Mulțumesc.

Comentarii

  • Răspunsurile la întrebările dvs. sunt foarte dependente de arhitectura CPU.

Răspuns

  1. O linie cache este cea mai mică unitate cu care puteți atinge memoria fizică. Adică atunci când citiți / scrieți 1 octet, o linie completă de cache care o conține este citită în memoria cache a CPU și redactată. Rețineți că chiar și instrucțiunile care ocolesc memoria cache pentru a scrie (instrucțiuni de streaming efemere) scriu în dimensiunile liniei cache. În funcție de procesor, dimensiunile liniei cache sunt de obicei 32/64/128 octeți. Când paginile de memorie sunt scrise pe disc, acestea sunt scrise în întregime. Acest lucru se va întâmpla atunci când presiunea memoriei este prea mare sau cu procese de hibernare (și posibil pentru alte utilizări). De asemenea, vor fi citite întregi atunci când este nevoie din nou. Acest lucru se datorează în principal faptului că nucleul nu are cum să știe dacă pagina este utilizată parțial sau complet. Alte operații de citire / scriere de stocare externă pot avea o granularitate arbitrară (de exemplu: fwrite (..)).

  2. Dimensiunea paginii depinde de CPU / GPU. Pentru majoritatea procesoarelor, dimensiunile paginilor vor fi de cel puțin 4KB și, în general, acceptă un mix de 4KB / 64KB / 2MB / 4MB / 16MB / 1GB (nu neapărat toate sunt acceptate în același timp). Dimensiunea va avea întotdeauna o putere de două.

  3. Atât o pagină cât și o linie cache sunt contigue și necesită alinierea la dimensiunea lor respectivă. O linie cache de 64 de octeți este întotdeauna aliniată pe 64 de octeți, iar o pagină de 2 MB este întotdeauna aliniată la 2 MB.

  4. Din cauza # 3, o linie cache nu poate cuprinde niciodată 2 pagini, deoarece dimensiunile paginilor vor fi să fie întotdeauna mai mare decât o linie cache și va fi întotdeauna un multiplu de dimensiunea unei linii cache.

Consultați această sursă excelentă pentru o mulțime de informații cu privire la memorie: http://lwn.net/Articles/250967/

Comentarii

  • Este acest răspuns este încă relevant în 2020? S-au schimbat aceste dimensiuni?
  • Din câte știu, acele valori rămân relevante astăzi. Toate procesoarele moderne x86 și x64 utilizează 64 de octeți pe linie cache și 4KB rămâne cea mai comună dimensiune a paginii în Windows și Linux. Pentru dispozitivele încorporate, consultați manualul intern al procesorului pentru detalii despre ceea ce este acceptat.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *