Adresseerbare bytes versus adresseerbare woorden

Ik probeer het verschil te begrijpen tussen byte-adressering en woordadressering.

Een 4-way set-associatieve cache-geheugeneenheid met een capaciteit van 16 KB wordt gebouwd met een blokgrootte van 8 woorden. De woordlengte is 32 bits. De grootte van de fysieke adresruimte is 4 GB.

Aantal sets in de cache $ = (16 * 1024) / (4 * 8 * 4) = 2 ^ 7 $

Als woordadressering wordt gebruikt:

Blok-offset $ = 3 \ bits $

Aangezien PAS $ 4 \ GB $ is, totaal aantal adressen = $ 2 ^ {32} / 2 ^ 2 = 2 ^ {30} $

Totaal aantal adresbits $ = 30 \ bits $

Adresstructuur:

Tagbits: $ 20 \ bits $
Set bits: $ 7 \ bits $
Block offset bits: $ 3 \ bits $

Stel nu dat de CPU toegang wil tot de 3e byte van een bepaald woord.

  1. De cachecontroller gebruikt het $ 7 \ bits $ set-veld om te indexeren in een set en en vervolgens het hogere $ 20 \ bits $ tagveld te vergelijken met alle $ 4 $ blokken in de set. Als er een overeenkomst wordt gevonden, vindt er een cache-treffer plaats en wordt de onderste $ 3 \ bits $ blokverschuiving om een van de woorden uit de $ 8 $ woorden in een van de algemene registers. De CPU extraheert vervolgens de 3e byte uit het woord en voert de bewerking uit.
  2. Als tags niet overeenkomen, treedt cachemis op, wordt een geheugenleessignaal verzonden en vanwege de ruimtelijke referentielocatie een blok met de word overgebracht naar de cache.

Als de CPU adresseerbaar is voor bytes:

Totaal aantal adresbits $ = 32 $

Adresstructuur: tagbits: $ 20 \ bits $
Set bits: $ 7 \ bits $
Offsetbits blokkeren: $ 5 \ bits $

Als de CPU toegang wil krijgen tot de 3e byte van een word:

  1. Hetzelfde als in stap 1 van woord adresseerbaar, maar de CPU kan nu rechtstreeks de 3e byte van het woord adresseren, met behulp van de onderste $ 2 \ bits $ byte-offset. Ik ben echter in de war hoe dat zou gebeuren. Aangezien de grootte van het CPU-register een breedte heeft van 1 woord, vergelijkbaar met de woordadressering, wordt één woord van de 8 woorden in het blok overgebracht naar het register. Maar hoe zou is de stap byte extraheren hier gemakkelijker? En waarom noemen we het byte-adressering als we nog steeds een woord adresseren?
  2. Hetzelfde als in stap 2 van woordadressering. Gegevensblok wordt overgedragen van het geheugen naar de cache in geval van cachemis.

Ook zegt dit antwoord dat fysiek geheugen altijd byte is adresseerbaar. Wat is nu het verschil tussen de adresseerbaarheid van het geheugen en de adresseerbaarheid van de CPU-architectuur?

Antwoord

Woordadressering betekent dat het aantal regels in de adresbus in de processor kleiner is dan het aantal bits in het woord zelf.

Laten we zeggen dat we een woord van 4 bytes hebben. (32 bit adresruimte)

Als deze machine een byte-adresab le, dan heeft de adresbus van de CPU 32 regels, waardoor hij toegang heeft tot elke byte in het geheugen.

Als deze machine woordadresseerbaar is, dan heeft de adresbus van de CPU 30 regels ( $ 32 – log_ {2} 4 = 30 $ ), waardoor het toegang heeft tot geheugen ALLEEN in woorden / brokken van 4 bytes en ook dat van adressen die een veelvoud zijn van de woordgrootte.

Als je nu de CPU vraagt om een byte van een bepaald adres op te halen, laat het eerst de 2 minst significante bits vallen (met drop bedoel ik ze overschrijven met 0 “s) van het adres, haal een woord op van het resulterende adres en retourneer een byte met de 2 minst significante bits als een offset binnen het opgehaalde woord.

Dit zorgt ervoor dat de geheugentoegangstijd toeneemt, aangezien de CPU meer tijd moet besteden aan het aanpassen van het adres en de verwerking het opgehaalde woord. Maar het helpt ook de hardwarekosten te verlagen, aangezien de complexiteit van de circuits wordt verminderd vanwege de vermindering van het aantal adresbuslijnen.

Deze overhead treedt echter nooit op in een byte-adresseerbare machine, vandaar byte extraheren “is gemakkelijker.

Reacties

  • Ik begrijp wat je ‘ zegt. Maar wat ‘ Zal gebeuren in het geval van byte-adressering? Stel dat de CPU de 3e byte van het woord nodig heeft. Het zal het 32-bits adres verzenden met de minst 2 significante bits ingesteld op 10, righ t?Maar hoe slaat het dan de byte op, gegeven dat het een register van 1 woordbreedte gebruikt? Heeft ‘ de CPU in dit geval ook het woord uit de cache gehaald en in het ‘ s register?
  • Voor jou eerste vraag: CPUs voor byte-adressering hebben aparte schrijfinstructies op basis van de grootte van de te schrijven data. Een voor een byte, een voor een dubbele byte, een voor een quad-byte, een voor een woord, enz. (Eigenlijk heeft elke CPU afzonderlijke schrijfinstructies voor elk van de verschillende ondersteunde groottes van te schrijven gegevens). te schrijven byte wordt gewoonlijk opgeslagen in de 8 LSBs van het register, waarna de schrijfinstructie voor een byte wordt uitgevoerd. Dit zorgt ervoor dat ALLEEN de 8 LSB-bits van het register op de databus worden geladen en dat slechts één byte op het adres in het geheugen wordt gewijzigd.
  • Ik heb ‘ begrijp je tweede vraag niet. Kun je dit toelichten.
  • Ik veronderstel dat hetzelfde gebeurt bij het lezen van een byte in een byte-adresseerbare machine, toch? Laten we bijvoorbeeld ‘ s zeggen dat er ‘ s een tekenreeks char arr[10] en de CPU wil het derde teken lezen, dwz arr[2]. Na toegang tot de byte met een 32-bits adres, wordt deze opgeslagen in de 8 LSBs van het register. Maar in het geval van adresseerbaar woord, berekent de CPU eerst het adres van het woord waartoe de 3e byte behoort (dwz overschrijf de 2 LSBs met 0) en haalt het woord erin ‘ s registreren. Daarna zal het de byte-offset gebruiken om de vereiste byte te krijgen. Is dit correct?
  • Hartelijk dank. Ik verzoek u deze allemaal samen te voegen in het oorspronkelijke antwoord, zodat het elke toekomstige lezer kan helpen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *