Megpróbálom megérteni a bájtcímzés és a szócímzés közötti különbséget.
Egy 4 utas 16-os kapacitású, asszociatív készlet-asszociatív gyorsítótár-memóriaegységet 8 szóból álló blokkmérettel építenek. A szó hossza 32 bit. A fizikai címtér mérete 4 GB.
Készletek száma a gyorsítótárban $ = (16 * 1024) / (4 * 8 * 4) = 2 ^ 7 $
Ha szócímzést használ:
Blokkolja az eltolást $ = 3 \ bits $
Mivel a PAS $ 4 \ GB $ , a címek száma összesen = $ 2 ^ {32} / 2 ^ 2 = 2 ^ {30} $
Tehát, az összes címbit $ = 30 \ bit $
Címszerkezet:
Címkebitek: $ 20 \ bits $
Állítsa be a biteket: $ 7 \ bits $
Eltolt bitek blokkolása: $ 3 \ bits $
Most tegyük fel, hogy a CPU hozzáférni akar Egy adott szó 3. bájtja.
- A gyorsítótár-vezérlő a $ 7 \ bits $ halmazmezőt használja a halmazba indexelésre, és majd összehasonlítja a magasabb $ 20 \ bits $ tag-mezőt az összes $ 4 $ blokk a készletben. Ha talál egyezést, akkor gyorsítótár-találat következik be, és az alsó $ 3 \ bits $ blokkeltolás eltolja, hogy az egyik szót kihúzhassa a $ 8 $ szavak az általános célú nyilvántartások egyikében. Ezután a CPU kivonja a szóból a 3. bájtot, és végrehajtja a műveletet.
- Ha a címkék nem egyeznek, akkor a gyorsítótár hiányzik, memóriaolvasási jelet küld, és a térbeli referencia lokalitása miatt egy blokk tartalmazza a a szó átkerül a gyorsítótárba.
Ha a CPU bájt címezhető:
Összes címbit $ = 32 $
Címszerkezet: Címkebitek: $ 20 \ bits $
Állítsa be a biteket: $ 7 \ bits $
Eltolt bitek blokkolása: $ 5 \ bits $
Ha a CPU hozzáférni akar egy szó:
- Ugyanaz, mint a word címezhető 1. lépésében, de a CPU most már közvetlenül megcímezheti a szó 3. bájtját, az alsó $ 2 \ használatával bit $ bájt eltolás. Azonban “nem értem, hogyan történne ez. Mivel a CPU regiszterméret szélessége 1 szó, hasonlóan a címzéshez, a blokkban lévő 8 szóból egy szó kerül a regiszterbe. De hogyan a “bájt kinyerése” lépés itt könnyebb? És miért nevezzük bájt címzésnek, ha mégis egy szót címezünk?
- Ugyanaz, mint a szócímzés 2. lépésében. Adattömb kerül átadásra a memóriából a gyorsítótárba cache hiány esetén.
Ez a válasz azt is mondja, hogy a fizikai memória mindig bájt címezhető. Most mi a különbség a memória címezhetősége és a CPU architektúra címezhetősége között?
Answer
Word címzés azt jelenti, hogy a processzor címbuszában a sorok száma kisebb, mint a szóban lévő bitek száma.
Mondjuk, hogy van 4 bájtos szavunk. (32 bites címtér)
Ha ez a gép byte addressab le, akkor a CPU címbuszának 32 sora lesz, amely lehetővé teszi a memóriában lévő minden byte elérését.
Ha ez a gép szócímezhető, akkor a CPU címsínje 30 sorból áll ( $ 32 – log_ {2} 4 = 30 $ ), amely lehetővé teszi a memória elérését CSAK 4 bájtos szavakban / darabokban, valamint a wordsize többszöröséből álló címekből.
Ha most arra kéred a CPU-t, hogy töltsön le egy bájtot egy adott címről, akkor először eldobja a 2 legkevésbé jelentős bitet (cseppenként azt értem, hogy felülírja őket 0 “s-mal) a címről, beolvas egy szót az eredményül kapott címről, és adjon vissza egy bájtot, amely a letöltött szóban eltolásként a 2 legkevésbé fontos bitet használja.
Ez megnöveli a memória elérési idejét, mivel a CPU-nak több időt kell töltenie a cím módosításával és a feldolgozással. a letöltött szó. De segít a hardverköltségek csökkentésében is, mivel az áramkörök bonyolultsága csökken a címbusz-vonalak csökkenése miatt.
Ez a rezsi azonban soha nem merül fel egy bájtos címezhető gépben, ezért “bájt” a “kivonása egyszerűbb.
Megjegyzések
- Értem, amit ' mondasz. De mit ' bekövetkezik bájt címzés esetén? Tegyük fel, hogy a CPU-nak szüksége van a szó 3. bájtjára. A 32 bites címet elküldi, a legkevesebb 2 jelentős bit 10-re állítva t?De akkor hogyan fogja tárolni a bájtot, ha 1 szó szélességű regisztert használ? Megnyerte ' t, hogy a CPU ebben az esetben a szót is előhívja a gyorsítótárból, és eltárolja benne ' regiszter?
- Önnek 1. kérdés: A bájt címző CPU-k külön írási utasításokkal rendelkeznek az írandó adatok nagysága alapján. Egy bájtért, egy kettős bájtért, egy négyes bájtért, egy szóért stb. (Valójában bármely CPU külön írási utasítással rendelkezik a különféle támogatott méretű írandó adatok mindegyikéhez). A bájtírással kapcsolatban a Az írandó bájt általában a regiszter 8 LSB-jében van tárolva, majd egy bájt írási utasítása végrehajtásra kerül. Ez CSAK a regiszter 8 LSB bitjét tölti be az adatbuszra, és csak egy bájt módosul a memóriában lévő címen.
- Nem csináltam ' nem érti a második kérdését. Tudna részletezni.
- Feltételezem, hogy ugyanez történik egy bájt címezhető gépben történő olvasásakor is, igaz? Például hagyja, hogy ' s mondják, hogy ' s egy karaktertömb
char arr[10]
és a CPU el akarja olvasni a 3. karaktert, azazarr[2]
. Majd miután elérte a bájtot 32 bites címmel, azt a regiszter 8 LSB-jében tárolja. De a címezhető szó esetében a CPU először kiszámítja annak a szónak a címét, amelyhez a 3. bájt tartozik (azaz felülírja a 2 LSB-t 0-val), és lekéri benne a szót ' s regisztráció. Ezt követően a bájt eltolást használja a szükséges bájt megszerzéséhez. Ez helyes? - Nagyon köszönöm. Arra kérem Önt, hogy ezeket mind írja össze az eredeti válaszban, hogy ez segítséget nyújtson minden jövőbeli olvasónak.