Byte adresserbar vs Word adresserbar (Svenska)

Jag försöker förstå skillnaden mellan byte adressering och ord adressering.

En 4-vägs set-associativ cache-minnesenhet med en kapacitet på 16 KB är byggd med en blockstorlek på 8 ord. Ordlängden är 32 bitar. Storleken på det fysiska adressutrymmet är 4 GB.

Antal uppsättningar i cachen $ = (16 * 1024) / (4 * 8 * 4) = 2 ^ 7 $

Om adressadressering används:

Blockera förskjutning $ = 3 \ bits $

Eftersom PAS är $ 4 \ GB $ , totalt antal adresser = $ 2 ^ {32} / 2 ^ 2 = 2 ^ {30} $

Så, totala adressbitar $ = 30 \ bits $

Adressstruktur:

Tagbitar: $ 20 \ bits $
Ställ in bitar: $ 7 \ bits $
Blockera offsetbitar: $ 3 \ bits $

Antag nu att CPU vill komma åt 3: e byte av ett visst ord.

  1. Cache-controller använder $ 7 \ bits $ set-field för att indexera till en uppsättning och jämför sedan det högre $ 20 \ bits $ taggfältet med alla $ 4 $ block i uppsättningen. Om en matchning hittas inträffar cacheträff och den lägre $ 3 \ bits $ blockerar förskjutning för att lägga ett av orden från $ 8 $ ord i ett av de allmänna ändamålsregistret. CPU extraherar sedan den tredje byten från ordet och utför operationen.
  2. Om taggarna inte matchas uppstår cachemiss, en minnesavläsningssignal skickas och på grund av den geografiska referensplatsen, ett block som innehåller ord överförs till cachen.

Om CPU: n kan bytas adresserbar:

Totala adressbitar $ = 32 $

Adressstruktur: Tagbitar: $ 20 \ bits $
Ställ in bitar: $ 7 \ bits $
Blockera offsetbitar: $ 5 \ bits $

Om processorn vill komma åt tredje byte av en word:

  1. Samma som i steg 1 i ordet adresserbart, men CPU: n kan nu adressera den tredje byten av ordet med den lägre $ 2 \ bitar $ byte offset. Jag har emellertid förvirrat hur det skulle hända. Eftersom CPU-registerstorleken har en bredd på 1 ord, liknande ordet adressering, kommer ett ord av de 8 orden i blocket att överföras till registret. Men hur skulle steget ”byte extrahera” är lättare här? Och varför kallar vi det byte adressering om vi fortfarande adresserar ett ord?
  2. Samma som i steg 2 i ordadressering. Datablock överförs från minnet till cachen vid cachemiss.

Det här svaret säger också att fysiskt minne alltid är byte adresserbar. Vad är nu skillnaden mellan adressansvarigheten för minnet och adressansvarigheten för CPU-arkitekturen?

Svar

Ordadressering betyder att antalet rader i adressbussen i processorn är mindre än antalet bitar i själva ordet.

Låt oss säga att vi har ett ord på 4 byte. (32 bitars adressutrymme)

Om maskinen är byte adressab le kommer då adressbussen på CPU: n att ha 32 rader, vilket gör det möjligt att komma åt varje byte i minnet.

Om den här maskinen är ordadresserbar kommer CPU: ns adressbuss att ha 30 rader ( $ 32 – log_ {2} 4 = 30 $ ), vilket gör det möjligt att komma åt minne ENDAST i ord / bitar om 4 byte och det också från adresser som är en multipel av ordstorleken.

Nu om du ber CPU att hämta en byte från en viss adress kommer den först att släppa de två minst signifikanta bitarna (med dropp menar jag att skriva över dem med 0 ”s) av adressen, hämta ett ord från den resulterande adressen och returnera en byte med de två minst signifikanta bitarna som en förskjutning inom det hämtade ordet.

Detta medför att åtkomsttiden för minnet ökar, eftersom CPU måste spendera mer tid på att ändra adressen och bearbeta det hämtade ordet. Men det hjälper också till att minska hårdvarukostnaden eftersom kretsarnas komplexitet minskar på grund av minskningen av adressbusslinjer.

Denna overhead uppstår dock aldrig i en byte adresserbar maskin, därav ”byte extrahera ”är lättare.

Kommentarer

  • Jag förstår vad du ' säger. Men vad ' Kommer att hända vid byte-adressering? Antag att processorn behöver den tredje byten av ordet. Den skickar 32-bitarsadressen med minst 2 signifikant bit inställd på 10, righ t?Men hur kommer den att lagra byten med tanke på att den använder register med 1 ordbredd? Vann ' t CPU i det här fallet också hämta ordet från cachen och lagra det i det ' s register?
  • För dig första fråga: Byte-adressering av processorer har separata skrivinstruktioner baserat på storleken på de data som ska skrivas. En för en byte, en för en dubbel byte, en för en fyrkantig byte, en för ett ord, etc. (Egentligen har varje processor separata skrivinstruktioner, var och en för de olika formatstorlekar som ska skrivas). byte som ska skrivas lagras vanligtvis i de 8 LSB: erna i registret, sedan utförs skrivinstruktionen för en byte. Detta gör att ENDAST de 8 LSB-bitarna i registret laddas på databussen, och endast en byte vid adressen i minnet ändras.
  • Jag gjorde inte ' t förstår din andra fråga. Kan du utarbeta.
  • Jag antar att samma sak händer för att läsa en byte i en byte adresserbar maskin, eller hur? Låt till exempel ' s säga där ' är en teckenmatris char arr[10] och CPU vill läsa det tredje tecknet, dvs arr[2]. Sedan efter åtkomst till byten med 32-bitarsadress kommer den att lagras i de 8 LSB: erna i registret. Men i fallet med ordet adresserbart kommer CPU: n först att beräkna adressen till det ord som den 3: e byten tillhör (dvs. skriva över de 2 LSB: erna med 0) och hämta ordet i det > s register. Därefter använder den byteförskjutningen för att få önskad byte. Är detta korrekt?
  • Tack så mycket. Jag ber dig sammanställa alla dessa i det ursprungliga svaret så att det kan hjälpa alla framtida läsare.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *