Yritän ymmärtää eroa tavuosoituksen ja sanaosoituksen välillä.
4-tieinen sarja-assosiatiivinen välimuistiyksikkö, jonka kapasiteetti on 16 kt, on rakennettu käyttäen 8 sanan lohkokokoa. Sanan pituus on 32 bittiä. Fyysisen osoitetilan koko on 4 Gt.
Sarjojen määrä välimuistissa $ = (16 * 1024) / (4 * 8 * 4) = 2 ^ 7 $
Jos käytetään sanaosoitetta:
Estä offset $ = 3 \ bits $
Koska PAS on $ 4 \ GB $ , osoitteiden kokonaismäärä = $ 2 ^ {32} / 2 ^ 2 = 2 ^ {30} $
Osoitebittien kokonaismäärä $ = 30 \ bitti $
Osoiterakenne:
Tunnistebitit: $ 20 \ bits $
Aseta bittejä: $ 7 \ bits $
Estä offsetbitit: $ 3 \ bits $
Oletetaan, että keskusyksikkö haluaa nyt käyttää Tietyn sanan kolmas tavu.
- Välimuistiohjain käyttää joukkoa $ 7 \ bitti $ joukkoihin indeksoimiseksi ja sitten verrataan ylempää $ 20 \ bits $ -tagikenttää kaikkiin $ 4 $ lohkot sarjassa. Jos osuma löydetään, välimuistin osuma tapahtuu ja alempi $ 3 \ bits $ $ -siirtymä siirtää yhden sanasta $ 8 $ sanat yhdessä yleiskäyttöisessä rekisterissä. Sitten keskusyksikkö purkaa kolmannen tavun sanasta ja suorittaa toiminnon.
- Jos tunnisteita ei ole sovitettu, välimuistihäiriö tapahtuu, muistin lukusignaali lähetetään ja viittauksen paikkatietopaikan vuoksi lohko, joka sisältää sana siirretään välimuistiin.
Jos CPU on tavu osoitettavissa:
Osoitebittejä yhteensä $ = 32 $
Osoiterakenne: Tunnistebitit: $ 20 \ bits $
Aseta bittejä: $ 7 \ bits $
Estä offsetbitit: $ 5 \ bits $
Jos keskusyksikkö haluaa käyttää sana:
- Sama kuin sanan osoitettava vaiheessa 1, mutta keskusyksikkö voi nyt suoraan kohdistaa sanan 3. tavun käyttämällä alempaa $ 2 \ bittiä $ tavun siirtymä. Olen kuitenkin hämmentynyt siitä, miten se tapahtuisi. Koska CPU-rekisterin koon leveys on 1 sana, samanlainen kuin sanaosoitus, yksi sana lohkon 8 sanasta siirretään rekisteriin. Mutta miten ”tavujen purku” -vaihe on täällä helpompaa? Ja miksi kutsumme sitä tavuosoitteeksi, jos silti todella osoitamme sanaa?
- Sama kuin sanaosoitteen vaiheessa 2. Tietolohko siirretään muistista välimuistiin välimuistin puuttuessa.
Tässä vastauksessa sanotaan myös, että fyysinen muisti on aina tavua osoitettavissa. Mitä eroa on nyt muistin osoitettavuuden ja suorittimen arkkitehtuurin osoitettavuuden välillä?
Vastaa
Sanaan osoitettu tarkoittaa, että prosessorin osoiteväylän rivien määrä on pienempi kuin sanan itse bittien määrä.
Sanotaan, että meillä on 4 tavun sana. (32-bittinen osoitetila)
Jos tämä kone on tavutunniste Tällöin CPU: n osoiteväylällä on 32 riviä, mikä mahdollistaa sen pääsyn jokaiseen tavuun muistissa.
Jos tämä kone on sanaosoitettava, CPU: n osoiteväylällä on 30 riviä ( $ 32 – log_ {2} 4 = 30 $ ), mikä sallii sen käyttää muistia VAIN 4 tavun sanoina / paloina ja myös osoitteista, jotka ovat sanakoon moninkertaisia.
Jos nyt pyydät suorittinta hakemaan tavun tietystä osoitteesta, se pudottaa ensin 2 vähiten merkitsevää bittiä (pisaralla tarkoitan korvaa ne 0 ”s) osoitteella, hae sana tuloksena olevasta osoitteesta ja palauta tavu käyttäen kahta vähiten merkitsevää bittiä offsetina haetussa sanassa.
Tämä lisää muistin käyttöaikaa, koska suorittimen on käytettävä enemmän aikaa osoitteen muokkaamiseen ja käsittelyyn. Mutta se auttaa myös vähentämään laitteistokustannuksia, koska piirien monimutkaisuus vähenee johtuen osoiteväyläjohtojen vähenemisestä.
Tätä yleiskustannusta ei kuitenkaan koskaan esiinny tavua osoittavassa koneessa, joten ”tavu” ”” on helpompaa purkaa.
char arr[10]
ja keskusyksikkö haluaa lukea kolmannen merkin, eliarr[2]
. Sitten kun tavu on käytetty 32-bittisellä osoitteella, se tallentaa sen rekisterin 8 LSB: hen. Mutta jos kyseessä on sana, joka on osoitettavissa, keskusyksikkö laskee ensin sen sanan osoitteen, johon kolmas tavu kuuluu (eli korvaa 2 LSB: tä 0: lla) ja noutaa sen sanan ' s -rekisteri. Sen jälkeen se käyttää tavueroa tarvittavan tavun saamiseksi. Onko tämä oikein?