A gyorsítótár és a memóriaoldal kapcsolata

  1. Ha jól mondom, a fő memóriában található oldal a legkisebb egység az adatátvitelhez a fő memória és egy külső tárolóeszköz, például egy merevlemez között. A fő memória gyorsítótár-sora a legkisebb egység az adatok átadásához a fő memória és a CPU gyorsítótárai között.

  2. Kíváncsi vagyok, hogy az oldal mérete mindig vagy a legjobb-e egy a gyorsítótár sorának természetes száma? Ha a gyorsítótár sormérete 64 bájt, a memóriaoldal mérete pedig 4KB, akkor mindegyik oldalon 4KB / 64 bájt == 64 gyorsítótár található.

  3. Az oldal és a gyorsítótár egyaránt fix objektum a memóriában? Vagy csak egy bizonyos méretű memória összefüggő blokkjai, amelyek a memóriában bárhol elindulhatnak és lebeghetnek?

  4. Mindig az, hogy a gyorsítótár sora legfeljebb az egyik oldal, vagyis a gyorsítótár sorának része egy oldalon van, a gyorsítótár másik része pedig egy másik oldalon?

Köszönöm.

Megjegyzések

  • A kérdéseire adott válaszok nagymértékben a CPU-architektúrától függenek.

Válasz

  1. A gyorsítótár sor a legkisebb egység, amellyel megérintheti a fizikai memóriát. Ha 1 bájtot olvas vagy ír, az azt tartalmazó teljes gyorsítótár sor beolvasásra kerül a CPU gyorsítótárába, és újraírásra kerül. Vegye figyelembe, hogy még azok az utasítások is, amelyek megkerülik a gyorsítótárat az íráshoz (átmeneti adatfolyam-továbbítási utasítások), gyorsítótár-sormérettel írnak. A CPU-tól függően a gyorsítótár sormérete általában 32/64/128 bájt. Amikor a Memória oldalakat lemezre írja, egészben íródik. Ez akkor történik meg, ha a memória nyomása túl magas, vagy hibernált folyamatok esetén (és esetleg más célokra). Szükség esetén újra egészben olvashatók. Ennek oka elsősorban az, hogy a kernelnek nincs módja megtudni, hogy az oldalt részben vagy teljesen használják-e. Más külső tároló olvasási / írási műveletek tetszőleges részletességgel bírhatnak (pl .: fwrite (..)).

  2. Az oldal mérete CPU / GPU-függő. A legtöbb CPU esetében az oldalméretek legalább 4KB-osak lesznek, és általában 4KB / 64KB / 2MB / 4MB / 16MB / 1GB keveréket támogatnak (nem feltétlenül támogatottak mind egyszerre). A méret mindig kettő hatványa lesz.

  3. Mind az oldal, mind a gyorsítótár sora összefüggő, és meg kell egyezni a megfelelő méretükkel. A 64 bájtos gyorsítótár sor mindig 64 bájtos, a 2 MB-os oldal pedig mindig 2 MB-os.

  4. A # 3 miatt a gyorsítótár sora soha nem terjedhet át 2 oldalra, mivel az oldalméretek mindig nagyobb legyen, mint egy gyorsítótár, és mindig többszöröse lesz a gyorsítótár méretének.

A memóriával kapcsolatos rengeteg információért lásd ezt a kiváló forrást: http://lwn.net/Articles/250967/

Megjegyzések

  • ez a válasz még mindig releváns 2020-ban? Változtak ezek a méretek?
  • Ha jól tudom, ezek az értékek ma is relevánsak. Az összes modern x86 és x64 processzor 64 bájtot használ gyorsítótáronként, és 4KB továbbra is a leggyakoribb oldalméret Windows és Linux alatt. Beágyazott eszközök esetén ellenőrizze a processzor belső kézikönyvében a támogatottak részleteit.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük