Snažím se pochopit rozdíl mezi adresováním bajtů a adresováním slov.
Čtyřcestná set-asociativní paměťová jednotka mezipaměti s kapacitou 16 KB je vytvořena pomocí velikosti bloku 8 slov. Délka slova je 32 bitů. Velikost fyzického adresního prostoru je 4 GB.
Počet sad v mezipaměti $ = (16 * 1024) / (4 * 8 * 4) = 2 ^ 7 $
Pokud je použito adresování slov:
Posun bloku $ = 3 \ bits $
Protože PAS je $ 4 \ GB $ , celkový počet adres = $ 2 ^ {32} / 2 ^ 2 = 2 ^ {30} $
Takže celkový počet bitů adresy $ = 30 \ bitů $
Struktura adresy:
Bity značek: 20 $ \ bits $
Nastavit bity: $ 7 \ bits $
Blokovat ofsetové bity: $ 3 \ bits $
Předpokládejme, že CPU chce získat přístup k 3. bajt konkrétního slova.
- Řadič mezipaměti použije pole $ 7 \ bits $ k indexování do sady a poté porovnejte vyšší $ 20 \ bits $ značkové pole se všemi $ 4 $ bloky v sadě. Pokud je nalezena shoda, dojde k zásahu do mezipaměti a spodní $ 3 \ bits $ blokování offsetu, aby bylo jedno ze slov $ 8 $ slova v jednom z registrů pro všeobecné účely. CPU poté extrahuje 3. bajt od slova a provede operaci.
- Pokud se tagy neshodují, dojde k chybě v mezipaměti, odešle se signál pro čtení paměti a kvůli prostorové referenční lokalitě se blok obsahující slovo je přeneseno do mezipaměti.
Pokud je CPU adresovatelné v bajtech:
Celkový počet bitů adresy $ = 32 $
Struktura adresy: Značkové bity: 20 $ \ bits $
Nastavit bity: $ 7 \ bits $
Blokovat offsetové bity: $ 5 \ bits $
Pokud CPU chce získat přístup k 3. bajtu word:
- Stejné jako v kroku 1 slova addressable, ale CPU nyní může přímo adresovat 3. bajt slova pomocí nižší $ 2 \ posunutí bajtů $ bajtů. Jsem však zmatený, jak by se to stalo. Protože velikost registru CPU má šířku 1 slova, podobně jako adresování slov, jedno slovo z 8 slov v bloku bude přeneseno do registru. Ale jak by krok „extrahování bajtů“ je zde jednodušší? A proč tomu říkáme adresování bajtů, pokud stále adresujeme slovo?
- Stejné jako v kroku 2 adresování slov. Blok dat bude přenesen z paměti do mezipaměti v případě chybějící mezipaměti.
Také tato odpověď říká, že fyzická paměť je vždy bajtová adresovatelné. Jaký je rozdíl mezi adresovatelností paměti a adresovatelností architektury CPU?
Odpověď
Adresování slov znamená, že počet řádků v adresní sběrnici v procesoru je menší než počet bitů v samotném slově.
Řekněme, že máme 4 bajtové slovo. (32bitový adresní prostor)
Pokud je tento stroj bajtový addressab le, pak bude mít adresní sběrnice CPU 32 řádků, což mu umožní přístup ke každému bajtu v paměti.
Pokud je tento stroj adresovatelný slovem, pak bude mít adresní sběrnice CPU 30 řádků ( $ 32 – log_ {2} 4 = 30 $ ), což mu umožňuje přístup do paměti POUZE ve slovech / blocích 4 bajty a to také z adres, které jsou násobkem velikosti slova.
Pokud nyní požádáte CPU o načtení bajtu z konkrétní adresy, nejdříve vypustí 2 nejméně významné bity adresy (tím, že je přepíšu, přepíšu je 0 s), načte slovo z výsledné adresy a vrátit bajt pomocí 2 nejméně významných bitů jako posun v načteném slově.
To způsobí prodloužení doby přístupu do paměti, protože CPU musí strávit více času úpravou adresy a zpracováním načtené slovo. Pomáhá však také snižovat náklady na hardware, protože složitost obvodů je snížena kvůli snížení adresních sběrnic.
Tato režie však nikdy nevzniká v bajtovém adresovatelném stroji, tedy „byte“ extrakce „je jednodušší.
Komentáře
- Chápu, co říkáte '. Ale co ' Dojde v případě adresování bajtů? Předpokládejme, že procesor potřebuje 3. bajt slova. Pošle 32bitovou adresu s nejméně 2 významnými bity nastavenými na 10, vpravo t?Ale jak potom uloží bajt, protože používá registr šířky 1 slova? Vyhrál ' CPU v tomto případě také načte slovo z mezipaměti a uloží jej do ' s registru?
- Pro vás první otázka: CPU adresující bajty mají samostatné instrukce pro zápis na základě velikosti dat, která mají být zapsána. Jeden pro bajt, jeden pro dvoubajt, jeden pro čtyřbajt, jeden pro slovo atd. (Ve skutečnosti má každá CPU samostatnou instrukci pro zápis pro různé podporované velikosti dat, která mají být zapsána.) bajt, který má být zapsán, je obvykle uložen v 8 LSB registru, poté je provedena instrukce pro zápis bajtu. To způsobí, že POUZE 8 bitů LSB registru bude načteno na datovou sběrnici a bude změněn pouze jeden bajt na adrese v paměti.
- Neudělal jsem ' nerozumím vaší druhé otázce. Mohl byste to rozvinout.
- Předpokládám, že se totéž stane se čtením bajtů v bajtovém adresovatelném stroji, že? Například řekněme ' s ' s pole znaků
char arr[10]
a CPU chce přečíst 3. znak, tj.arr[2]
. Poté po přístupu k bajtu pomocí 32bitové adresy jej uloží do 8 LSB registru. Ale v případě slova addressable, CPU nejprve vypočítá adresu slova, ke kterému patří 3. byte (tj. Přepíše 2 LSB s 0) a načte slovo v něm ' s registr. Poté použije offset bytu k získání požadovaného bytu. Je to správné? - Děkuji. Chtěl bych vás požádat, abyste všechny tyto informace spojili do původní odpovědi, aby to mohlo pomoci budoucímu čtenáři.