» »

Navidezni pomnilnik

Navidezni pomnilnik

B & O ::

Za izpit predelujem snov in naloge iz predpomnilnika in navideznega pomnilnika. Imam pa nekaj vprašanj (ne znam si logično razložit kako se stvari v praksi odvijajo).

Ker je CPU precej hitra zadeva in da ga čimbolj izkoristimo rabimo tudi hiter pomnilnik (RAM), ki pa je drag, zato uporabimo navidezni pomnilnik, ki ga je praktično ogromno in je zelo poceni. Če dodamo še predpomnilnik, potem vidi CPU razpoložljiv prostor kot izjemno hiter in izjemno velik (hiter zaradi predpomnilnika in velik zaradi HDD).

Predvidevam da zaradi vsega tega CPU vidi ves pomnilnik kot en kos (čeprav je v resnici iz 2,3,4+ različnih fizičnih podenot) in tudi izstavi zato enoten naslov (naslov operanda, operacije,...), ki se mu reče navidezni naslov (mislim da zato ker se ne ve točno na katero od enot se bo ta naslov nanašal). Preko MMU čipa naj bi se navidezni naslov preslikal v fizičnega in tako dostopal do podatka ki je na tistem naslovu, kjerkoli že pač je.

Nejasna mi je razdelitev RAMa in navideznega pomnilnika na bloke/segmente (Ali je to eno in isto?). Tega si ne znam predstavljat. Tako RAM kot navidezni pomnilnik sta razdeljena na bloke, in kadar nečesa ni v RAMu se po blokih prenese iz diska v RAM.

Kaj bi v tem kontekstu v praksi pomenilo da ima nek računalnik eno/ dvo/ tronivojsko preslikavo iz navideznega v fizični naslov in kako je tu z dostopi do RAMa? Ali ima deskriptor tu kakšno vezo? Ali to pomeni da tak računalnik nima posebne enote MMU za avtomatsko pretvorbo? Deskriptor je zgolj neka datoteka ki vsebuje informacije kaj in kako se je/ se bo preslikal nek blok iz diska v ram ali predpomnilnik?

Ali ima te večnivojske preslikave čez sam OS ali je tu vgrajena posebna logika (strojno kot recimo MMU). Na Wikipediji sem zasledil tole:

"OS lahko simulira tako velik pomnilnik kot je celoten naslovni prostor procesorja (32-biten: 4GB, 64-biten: 18EB oz. 2 na 64 bitov)"

Ali to pomeni da če bi (zgolje teoretično) želeli ogromen navidezni pomnilnik in bi imeli nameščen 64-bit OS lahko OS predstavljal CPU-ju kot da ima v bistvu na voljo glavni pomnilnik velikost 2^64 bita (ob predpostavki da bi imeli tako ogromen disk)?

Te stvari precej mešam med seboj, tako da bi bil zelo vesel če kdo kaj bolj podrobno ve glede tega?

fiction ::

Če dodamo še predpomnilnik, potem vidi CPU razpoložljiv prostor kot izjemno hiter in izjemno velik (hiter zaradi predpomnilnika in velik zaradi HDD).
Nekako tako. Vse skupaj deluje zaradi "lokalnosti pomnilniskih dostopov". Ti ponavadi vedno dostopas do necesa blizu prejsnje lokacije (tabele / strukture v programu, sekvencno izvajanje programov).

Aja pa disk AFAIK ne steje v "pomnilnisko hierarhijo" - v bistvu je to I/O enota. L1 predpomnilnik, L2 predpomnilnik, glavni pomnilnik (RAM). Sele pri navideznem pomnilniku imas zraven tudi disk, ampak ta v bistvu ni direktno del tega. Ni tako da bi bila velikost navideznega pomnilnika omojena z velikostjo diskovja. Ti se spomnis imam toliko razlicnih navideznih naslovov. Ta del dam lahko na razpolago za pomnilnisko preslikan vhod / izhod, tega dam na razpolago za nekaj drugega itd. Problem je samo takrat, ce res toliko pomnilnika ponucas.

Nejasna mi je razdelitev RAMa in navideznega pomnilnika na bloke/segmente (Ali je to eno in isto?)
Pri navideznem pomnilniku imas lahko segmentacijo in/ali ostranjevanje. Segment je nek razlicno dolg kos pomnilnika, medtem ko je stran zmeraj enako velika npr. 4096 bajtov. Pri ostranjevanju je tako, da imas v RAM-u (oz. cachu) stran. Ce zmanjkuje RAM-a se ta stran lahko preseli tudi v svoj "okvir" na disk.

fiction ::

Deskriptor je zgolj neka datoteka ki vsebuje informacije kaj in kako se je/ se bo preslikal nek blok iz diska v ram ali predpomnilnik?
Deskriptor je nek mapping v glavnem pomnilniku (ni datoteka) v stilu navidezni naslov 0 - 4096 je v resnici fizicni naslov ("v RAM-u", pri cemer je del ali pa vse od tega lahko tudi v kaksnem predpomnilniku) 131072 do 135168, plus nekaj dodatnih atributov (bitov v deskriptorju je) za zascito, ce je stran veljavna itd.

Kaj bi v tem kontekstu v praksi pomenilo da ima nek računalnik eno/ dvo/ tronivojsko preslikavo iz navideznega v fizični naslov in kako je tu z dostopi do RAMa?
To je nako tako da ne pise direktno kaksna je preslikava, ampak pise (malo karikiram) za naslove od 0-65535 poglej tja. Tam potem pise za naslove od 0-32767 poglej tja in na koncu imas to preslikavo. Kako oz. kdo to naredi (MMU) je tukaj povsem irelevanto.

Fora v tem je, da je tako ta tabela manjsa. V bistvu je tako da je del navideznega naslova (zacetni biti) dejansko nek indeks za to tabelo deskriptorjev. Potem najdes prvi deskriptor in ves kje je druga tebela in
na njej kot indeks lahko uporabis naslednjih nekaj bitov navideznega naslova. Tisti konec je nek offset, ko ze ves v katerem "kosu dejanskega pomnilnika" si.

Ali to pomeni da če bi (zgolje teoretično) želeli ogromen navidezni pomnilnik in bi imeli nameščen 64-bit OS lahko OS predstavljal CPU-ju kot da ima v bistvu na voljo glavni pomnilnik velikost 2^64 bita (ob predpostavki da bi imeli tako ogromen disk)?
To je tisto o cemer sem govoril prej. Ni nujno da imas tako velik disk oz. toliko prostora za swappanje. Navideznih naslovov je ogromno in ponavadi uporabljas samo nekaj razlicnih. Podatki na disku niso "nadmnozica" celega RAM-a (tako kot to velja za RAM v primerjavi z npr L2 cache), ampak je tam samo tisto kar se ni uporabljalo dolgo casa in je bilo tisto potrebno vreci iz RAM-a zato da je bil prostor (se) za nekaj drugega.

Navidezni pomnilnik ni zato, da bi si "povecal" pomnilnik, ampak zato da imas lahko neko svojo razdelitev kako izgleda pomnilnik, ter razne svoje zascitne mehanizme v zvezi s tem. V stilu, ker gre dostop cez to preslikavo je lazje preverjati kdo do cesa dostopa.

whatever ::

Veliko jih je notri, še več jih je pa zunaj.
Bilijarde v šole! - Ivan Kramberger
Abnormal behaviour of abnormal brain makes me normal.

fiction ::

Ali ima te večnivojske preslikave čez sam OS ali je tu vgrajena posebna logika (strojno kot recimo MMU).
Pomoje tudi to (in razne druge detajle) pohandla MMU. Edino kadar dolocene strani ni, se izvede "page fault" prekinitev. Takrat mora operacijski sistem poskrbeti za prenos dolocene stvari z diska v glavni pomnilnik. Ampak to naceloma ni problem ker je disk tako pocasen. Se pravi "page fault" v bistvu ni neka grozna napaka, ampak se stalno dogaja. Samo ce se tisto ne prenese dobro nazaj v glavni pomnilnik so problemi in se res lahko vse skupaj sesuje.

B & O ::

Whatever, link ne deluje, predvidevam pa da si dal link na knjigo od Kodeka >:D Jo imam doma, sprašujem kako to res poteka ker če sam to predeluješ si hitro utegneš narobe predstavljat. Fiction tebi pa hvala.

Sem pa prebiral tudi na netu glede navideznega pomnilnika in našel tale stavek (velja za paging oz. swap particijo na Linuxu):

"Celoten naslovni prostor se razdeli na strani (pages). To so deli pomnilnika, ki so običajno veliki od 512B do 8kB. Ko procesor naslavlja določen naslov v resnici določi stran (page, najvišji biti) in odmik na strani (offset, najnižji biti). Tako se v RAM nalagajo le koščki programa in ne celoten program."

Kaj je sedaj tu celoten naslovni prostor? Kakor sem jaz prfoksa na predavanjih razumel gre za podmnožice (kar je v L1 je tudi v L2, kar je v L2 je tudi v RAMu in kar je v ramu je tudi na disku - zato sem predpostavljal tisto o ogromnem prostoru na disku). Če pa je tako kot ti praviš se pravi imamo samo 3 stopnje (pri i7 recimo 4, ker je še L3) in vse tri/štiri stopnje so razdeljene na enake bloke (samo zakaj je potem predpomnilnik razdeljen na sete...?).

Glede navideznih naslovov procesor ki je x64 a teče na x86 OS-u lahko "pridela" 2^32 različnih naslovnih navideznih signalov? Mi pa imamo recimo v računalniku samo 2GB RAMa zato je potrebno preslikovanje naslova (če CPU ven butne naslov ki ne obstaja v RAMu ker je premajhen?)?

bogi ::

Pozdravlejni!

Ali mi lahko kdo pomaga rešito to nalogo:

Procesor ima naslednji primarni podatkovni predpomnilnik: velikost podatkovnega dela 8kB, podatkovna vrstca (blok) je dolga 16 bajtov. Določite mesto (set, blok, mesto v bloku) 12 zaporednih bajtov, ki se začnejo na naslovu 0x019AFEC3, če je predpomnilnik set-asociativni, s stopnjo asociativnosti 2.

Mavrik ::

(samo zakaj je potem predpomnilnik razdeljen na sete...?)


Zato ker ga je potem lažje in ceneje realizirati. Namreč narediti poln asociativen predpomnilnik je drago, ker rabiš za vsak blok primerjalnike za cel naslov. Zato je ceneje preprosto bloke še potem razdeliti v sete, zato da v tistih setih potem vedno končajo določeni kosi fizičnega pomnilnika in prihraniš precej na primerjalnikih (in zgubiš nekaj zaradi nepotrebnega trashinga).

Glede navideznih naslovov procesor ki je x64 a teče na x86 OS-u lahko "pridela" 2^32 različnih naslovnih navideznih signalov? Mi pa imamo recimo v računalniku samo 2GB RAMa zato je potrebno preslikovanje naslova (če CPU ven butne naslov ki ne obstaja v RAMu ker je premajhen?)?


Če na x64 procesorju poženeš x86 OS, potem le-ta procesor teče v 32-bitnem načinu in se obnaša popolnoma enako kot katerikol drugi 32-bitni procesor. Zavedaj se da je x64 malo nahekan na osnovni x86 design (recimo 2x 32-bit registra povezana v pare, da tvorita en 64-bit register v "dolgem" načinu) in se zato malo čudno obnašajo.

Kaj več bom pa razložo kasneje, zmanjkuje časa.
The truth is rarely pure and never simple.

bogi ::

Pozdravlejni!

Ali mi lahko kdo pomaga rešito to nalogo:

Procesor ima naslednji primarni podatkovni predpomnilnik: velikost podatkovnega dela 8kB, podatkovna vrstca (blok) je dolga 16 bajtov. Določite mesto (set, blok, mesto v bloku) 12 zaporednih bajtov, ki se začnejo na naslovu 0x019AFEC3, če je predpomnilnik set-asociativni, s stopnjo asociativnosti 2.


OK, ugotovil sem da je mesto v bloku določeno z biti od 0 do 3, set je določen za biti od 4 do 11 in blok z biti od 12 do 31. (Upam da je prav)
Sedaj pa me zanima tistih 12 zaporednih bajtov od naslova 0x019AFEC3 naprej. Kako naj določim mesto (set, blok, mesto v bloku) kateremu pripadajo?

B & O ::

Mavrik še čakam če boš kaj razložil. :8)

Sicer pa kar sem uspel izvedet do sedaj:

Navidezni pomnilnik vsebuje največjo množico informacij, glavni pomnilnik vsebuje podmnožico informacij iz navideznega, in predpomnilnik vsebuje podmnožico informacij iz glavnega pomnilnika (se pravi vse kar je v predpomnilniku in gl. pomnilniku je v bistvu "potomec, kopija" tega kar je v navideznem pomnilniku).

Še vedno čisto ne razumem kako to da rabimo pri predpomnilniku kontrolni del, zato da se ve kaj iz RAMa je v predpomnilniku. Zakaj rabi sploh računalnik to vedet? In ali imamo zato navid. pomnilnik razdeljen na strani in pomnilnik na okvirje strani - da se tudi tu ve kaj je iz kje kopiran?

Torej "zgodbica" naj bi šla nekako tako (za PC z navideznim, glavnim in predpomnilnikom):

CPE pošlje navidezni naslov na zadnjega v hierarhiji - to je navidezni pomnilnik zato je tudi navidezni naslov. Vkolikor je informacija v predpomnilniku se ta navidezni naslov tolmači kot naslov besede v bloku, lokacijo bloka in lokacijo seta (v bistvu se ne pretvori v fizični naslov če prav razumem ali je ravno obratno in se preko MMU ali TLB še pred dostopom do predpomnilnika pretvori v fizični naslov in si tistega tolmači kot naslov bloka,...). Če pride do zgrešitve (v nekaj % možnosti) se naslov spremeni v naslov na disku kjer se ga tolmači kot naslov sektorja na disku kjer je informacija in se potem to stran naloži v RAM kjer do nje dostopa CPE. Še vedno pa v tej zgodbici potem izpadejo preslikovalne tabele. Kam bi to vtaknil da bi bila vsa stvar smiselna?

Mavrik ::

Navidezni pomnilnik vsebuje največjo množico informacij, glavni pomnilnik vsebuje podmnožico informacij iz navideznega, in predpomnilnik vsebuje podmnožico informacij iz glavnega pomnilnika (se pravi vse kar je v predpomnilniku in gl. pomnilniku je v bistvu "potomec, kopija" tega kar je v navideznem pomnilniku).


Da, to je prav.

Še vedno čisto ne razumem kako to da rabimo pri predpomnilniku kontrolni del, zato da se ve kaj iz RAMa je v predpomnilniku.


Okej, takole je. Ti maš predpomnilnik razdelejen na kose določene velikosti - bloke. Pri asociativnem predpomnilniku to pomeni, da je lahko v poljubnem bloku predpomnilnika poljuben kos glavnega pomnilnika.
Zdaj pa ko pride CPU do recimo ukaza LOAD FFFF00, torej "naloži podatek iz naslova FFFF00" mora najprej pogruntat, če ima slučajno ta podatek v predpomnilniku. To pa ne more narediti drugače, kot da ima vsaj blok en "tag", ki pove "tale blok pa ima podatke z naslova, ki se začne na FFFF0".
Namreč tedaj CPU preprosto hitro primerja zahtevani naslov z vsemi "tagi" in če se kateri sklada, potem ve, da je podatek v tistem bloku predpomnilnika in mu ni treba it po njega v RAM (spomnimo se, da je dostop do RAMa izjemno počasen... še posebej ker se z vsako DDR inkarnacijo čas dostopa povečuje).

Pri set-asociativnem predpomnilniku je fora samo v tem, da vedno veš, da se naslovi v določenem setu začnejo z določenimi biti. Recimo naslovi v set 0 majo vedno 00 na začetku, v set 1 01 itd, kar poenostavi logiko za primerjanje in tako poceni izdelavo.

In ali imamo zato navid. pomnilnik razdeljen na strani in pomnilnik na okvirje strani - da se tudi tu ve kaj je iz kje kopiran?


Da, s tem da pri nav. pomnilniku povezave med navideznimi naslovi in fizičnimi naslovi hrani tabela strani. Tam je recimo napisano, da če Aplikacija A nalaga nekaj z naslova 00000FF to v resnici pomeni da nalaga z naslova FF33EECC v fizičnem pomnilniku. Pomnilnik pa je razdeljen na strani (in predpomnilnik na bloke) s preprostih razlogov:

a) Načelo lokalnosti pravi, da če rabimo nekaj, potem bomo najverjetneje rabili zelo hitro tudi sosednje podatke, zato se zelo splača naložiti jih enkrat v paketu, ker je RAM/disk zelo zelo počasen.
b) Če bi ena stran bila velika eno pomnilniško besedo (recimo 32-bitov za ARMe), bi to pomenilo da bi morala biti 2x tako velika kot celoten pomnilnik, da bi se shranile vse povezave (spomnimo se da so naslovi veliki 32-bitov pri 32-bitni arhitekturi, kar pomeni 2x 32-bitov za vsak vnos + dodatni biti za zastavice).

CPE pošlje navidezni naslov na zadnjega v hierarhiji - to je navidezni pomnilnik zato je tudi navidezni naslov. Vkolikor je informacija v predpomnilniku se ta navidezni naslov tolmači kot naslov besede v bloku, lokacijo bloka in lokacijo seta (v bistvu se ne pretvori v fizični naslov če prav razumem ali je ravno obratno in se preko MMU ali TLB še pred dostopom do predpomnilnika pretvori v fizični naslov in si tistega tolmači kot naslov bloka,...). Če pride do zgrešitve (v nekaj % možnosti) se naslov spremeni v naslov na disku kjer se ga tolmači kot naslov sektorja na disku kjer je informacija in se potem to stran naloži v RAM kjer do nje dostopa CPE. Še vedno pa v tej zgodbici potem izpadejo preslikovalne tabele. Kam bi to vtaknil da bi bila vsa stvar smiselna?


Celotna zgodba gre takole (tukaj predpostavljam, da imajo "tagi" v predpomnilniku shranjene virtualne naslove, kar ni nujno res pri vseh arhitekturah):


  • Procesor dobi ukaz "LOAD 000000FF" z virtualnim naslvom

  • Procesor primerja ta naslov s "tagi" blokov v L1 predpomnilniku.
    • Če se sklada, je podatek v predpomnilniku, ga naloži in nadaljuje z izvajanjem programa

    • Če se ne sklada, nadaljuje najprej z istim v L2 in L3, če pride vsepovsod do zgrešitve, potem podatka ni v predpomnilniku

  • Ker podatka ni v predpomnilniku, procesor pogleda najprej v TLD (neke vrste predpomnilnik za tabelo strani) in če ne najde naslova tam, gre gledat v tabelo strani v RAM
    • Če podatek najde, potem pogrunta, da se 000000 preslika v FF33EE, torej je podatek v fizičnem pomnilniku na naslovu FF33EEFF. V predpomnilnik naloži blok FF33EEF in potem dalje naloži podatek v register ter nadaljuje z izvajanjem

    • Če podatka ne najde, potem to pomeni da ga ni v fizičnem pomnilniku. Procesor vrže TRAP (programsko prekinitev).
      Tu dalje načeloma prevzame vajeti IRQ handler operacijskega sistema, ki pogrunta da je prišlo do page fault-a, v svojih strukturah poišče kam točno je iskano stran zabasal (najverjetneje na disk v page/swap file), jo naloži v fizični pomnilnik ter jo doda v tabelo strani ter ponovno požene ukaz, ki je vrgel trap (v tem primeru LOAD). Če vnosa ne najde je nekaj hudo narobe in v večini primerov operacijski sistemi gladko ubijejo program ki to stori (Linux recimo da znametiti segmentation fault, Winsi pa pokažejo "report error" dialog)


Opomba: v tem primeru sem vzel, da so predpomnilniški bloki veliki 16 byteov, strani za virt. pomnilnik pa 256 byteov. V resnici je seveda drugače.
Prav tako, če so v "tagih" fizični, ne virtualni naslovi, mora procesor najprej prevesti naslov v fizičnega in zatem pogledati predpomnilnik.
The truth is rarely pure and never simple.

Zgodovina sprememb…

  • spremenil: Mavrik ()

B & O ::


Pri set-asociativnem predpomnilniku je fora samo v tem, da vedno veš, da se naslovi v določenem setu začnejo z določenimi biti. Recimo naslovi v set 0 majo vedno 00 na začetku, v set 1 01 itd, kar poenostavi logiko za primerjanje in tako poceni izdelavo.


Aha, torej pri direktnem predpomnilniku pa je setov kar toliko kot je byte-ov (ali nekaj byte-ov skupaj?)? Zakaj je recimo pri direktnem predpomnilniku omejitev pri preslikavi največja? Kaj ni vseeno ali CPU prenese nek podatek v nek set ali ga da kar nekam v predpomnilnik (pri čistem asociativnem) in pri direktnem pač na točno določeno mesto, ali ni za to porabljen enak čas? Od kje potem in zakaj omejitev pri preslikavi?
Ali je pri asociativnem predpomnilniku (kasneje PP) kontrolna enota ("tagi" kot praviš) in vsebina iz asociativnega PP ali so samo kontrolni deli, podatkovni del pa je realiziran enako kot pri glavnem pomnilniku? Ali je razdelitev na sete mislena ali fizična (poleg tega da veljajo neka pravila pri določitvi naslova seta)? Direktni PP predvidevam da se obnaša enako kot glavni pomnilnik.

Si mislil TLD ali slučajno TLB? Ali je to enako kot preslikovalni predpomnilnik ali/in MMU? Predvidevam da je čas dostopa do preslikovalnega predpomnilnika za neko povprečno računanje dostopa to pom. hierarhije zanemarljiv? Ali je TLD lociran v samem PP ali gre za "čip" ki se nahaja na vezju CPU? V primeru da računalnik nima TLD-ja ali kaj podobnega ali mora potem v vsakem primeru če CPE naslovi navidezni pomnilnik (razen seveda če tabele strani ni že slučajno v registrih CPE) CPE dostopat do tabele strani v gl. pomnilniku? Torej naredi za eno informacijo dva dostopa, prvega za dostop do tabele in drugega za dostop do informacije v gl. pomnilniku?

Sicer pa lepa hvala za že tako izčrpen odgovor, mislim da mi bo precej pomagal pri računskih nalogah.

Mavrik ::

Aha, torej pri direktnem predpomnilniku pa je setov kar toliko kot je byte-ov (ali nekaj byte-ov skupaj?)? Zakaj je recimo pri direktnem predpomnilniku omejitev pri preslikavi največja? Kaj ni vseeno ali CPU prenese nek podatek v nek set ali ga da kar nekam v predpomnilnik (pri čistem asociativnem) in pri direktnem pač na točno določeno mesto, ali ni za to porabljen enak čas? Od kje potem in zakaj omejitev pri preslikavi?


Pri direktnem predpomnilniku ima vsak set samo en blok, zato je najbolj omejen glede preslikave. Recimo poglejva primer:
Imaš bloke v PP velike 16 B (forej rabiš 4bite za naslov), cel predpomnilnik pa je velik 256 B (torej 8 bitov za naslove), celoten glavni pomnilnik pa je velik 4096 B (torej 12 bitov za vse naslove, od 000 do FFF).

Ker imaš direktni predpomnilnik, je v vsakem setu en blok, kar pomeni da imaš vse skupaj 16 setov. To pomeni da vsakemu "pripada" 1/16 pomnilniškega prostora, torej set 0 ima 0xx, set 1 1xx, set 2 2xx in tako naprej.

Zdaj pa recimo nalagaš podatek na lokaciji 000. Ker se začne z 0, to pomeni da procesor prenese blok pomnilnika 000 - 00F (spomnimo se, blok v PP je velik 16B) v set 0. Zdaj pa recimo da nalagaš podatek na lokaciji 010. Ker se spet začne z nič, bo procesor moral podatek spet prenesti v set 0 in s tem vreči prejšnjo informacijo ven, kljub temu da imaš poleg tega še 15 blokov predpomnilnika praznih! Če zdaj spet zahtevaš podatek recimo 001, boš moral spet prenesti blok 000 - 00F nazaj v pomnilnik in blok 010 - 010F vreči ven. V kolikor bi recimo imel v setu dva bloka, bi lahko preprosto pri zahtevi za 010 dal drugi blok zraven in ne bi bilo pri ponovni zahtevi za podatke s prvega bloka iti v pomnilnik.

V tem je fora omejitve direktnega predpomnilnika: podatek z določenega kosa pomnilnika vedno konča v istem bloku PP, kar pomeni problem, če veliko zahtevaš podatke z različnih blokov glavnega pomnilnika, ki pripadajo istemu setu. V tem primeru mora procesor neprestano menjavati bloke in po njih hoditi v glavni pomnilnik, čeprav je večino ostalega PP praznega.

Upam da sem razumljivo razložo.

Ali je razdelitev na sete mislena ali fizična (poleg tega da veljajo neka pravila pri določitvi naslova seta)?

Razdelitev je dejansko fizična. Namreč ko se išče podatek v asociativnem pomnilniku, se primerja iskani naslov z vsemi naslovi v kontrolnih enotah blokov hkrati, kar pomeni da rabiš toliko 32-bitnih primerjalnikov kot je blokov v PP (kar je pri tem da je ponavadi tak primerjalnik velik kakih 100 tranzistorjev hudo potratno).

Pri set asociativnih pa rabiš samo toliko primerjalnikov, kot je blokov v setu, žičke in povezave pa potem avtomatsko priklopijo pravi set na te primerjalnike in se tako informacija "išče" samo v tistem setu. Seti so tako v procesorju "hardwired", torej dejansko zvezani s povezavami.

Ali je pri asociativnem predpomnilniku (kasneje PP) kontrolna enota ("tagi" kot praviš) in vsebina iz asociativnega PP ali so samo kontrolni deli, podatkovni del pa je realiziran enako kot pri glavnem pomnilniku? Ali je razdelitev na sete mislena ali fizična (poleg tega da veljajo neka pravila pri določitvi naslova seta)? Direktni PP predvidevam da se obnaša enako kot glavni pomnilnik.


PP nima skoraj nič skupnega z glavnim pomnilnikom. Prvo kot prvo se večinoma za njih uporablja SRAM, ki je veliko veliko hitrejši od DRAMa, prav tako pa podatki v PP sploh nimajo svojih naslovov, ampak se do njih dostopa z njihovim opisom (zato je tudi "asociativni", ker se išče z asociacijo na podatek). V primeru predpomnilnika je opis seveda naslov v glavnem pomnilniku, h kateremu pripadajo podatki tam shranjeni. Drugače so pa tako asociativni, set-asociativni in direktni predpomnilniki realizirani praktično enako, razlika je le v vezju, ki dejansko potem išče podatke v njih.

Si mislil TLD ali slučajno TLB? Ali je to enako kot preslikovalni predpomnilnik ali/in MMU? Predvidevam da je čas dostopa do preslikovalnega predpomnilnika za neko povprečno računanje dostopa to pom. hierarhije zanemarljiv? Ali je TLD lociran v samem PP ali gre za "čip" ki se nahaja na vezju CPU? V primeru da računalnik nima TLD-ja ali kaj podobnega ali mora potem v vsakem primeru če CPE naslovi navidezni pomnilnik (razen seveda če tabele strani ni že slučajno v registrih CPE) CPE dostopat do tabele strani v gl. pomnilniku? Torej naredi za eno informacijo dva dostopa, prvega za dostop do tabele in drugega za dostop do informacije v gl. pomnilniku?


Am ja, se opravičujem. Seveda sem mislil TLB oz. slovensko "preslikovalni predpomnilnik". TLB je dejansko kar kos čipa, tako kot je navadni predpomnilnik, s tem da je ponavadi ločen od ostalih predpomnilnikov, ker ima drugačno organizacijo (v TLB niso potrebni bloki, saj rabiš samo pare naslovov). Ponavadi je namreč del MMU.

Ostalo pa vse pravilno predvidevaš: dostop do TLBja je izjemno hiter, kar pomeni da ni potreben še en izlet v glavni pomnilnik samo da se ugotovi prava preslikava iz tabele strani. V kolikor seveda vnosa ni v TLB sta za dostop do podatka potrebna dva zahtevka v RAM: en do tabele strani in drug za dejanski podatek.
The truth is rarely pure and never simple.

B & O ::

Hvala Mavrik!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Zakaj imam samo 3GB namesto 4GB rama? (strani: 1 2 )

Oddelek: Operacijski sistemi
8919824 (9909) bobi1992
»

Nekaj splošnih vprašanj s področja HW

Oddelek: Strojna oprema
131713 (1474) P1P1
»

Vista in 2GB po aplikaciji

Oddelek: Operacijski sistemi
191862 (1572) r0b3rt
»

Kritični popravki Intelovih procesorjev (strani: 1 2 )

Oddelek: Novice / Varnost
626845 (4419) Vlady
»

Segmentacja- pomoč

Oddelek: Šola
5932 (851) noraguta

Več podobnih tem