370 likes | 582 Views
Pomnilniška hierarhija. Kaj je navidezni pomnilnik. Mehanizem, ki daje uporabniku vtis, da je glavnega pomnilnika več, kot ga je v resnici. Koncept navideznega pomnilnika ni nov (pozna šestdeseta leta prejšnjega stoletja). Sprva realiziran na velikih računalniških sistemih.
E N D
Kaj je navidezni pomnilnik • Mehanizem, ki daje uporabniku vtis, da je glavnega pomnilnika več, kot ga je v resnici. • Koncept navideznega pomnilnika ni nov (pozna šestdeseta leta prejšnjega stoletja). • Sprva realiziran na velikih računalniških sistemih. • Množična prisotnost je razmeroma nova (osebni računalniki). • Obravnavanje navideznega pomnilnka spada v širši kontekst upravljanja pomnilnika, ta pa v kontekst operacijskih sistemov. • Podlago delovanju navideznega pomnilnika daje lokalnost pomnilniških referenc. • Za realizacijo je potrebna ustrezna strojna in programska oprema.
Navidezni pomnilnik • Analize kažejo: • Nekateri deli programa se redko ali celo nikoli ne izvršijo. • Deli programa se (v enoprocesorskih sistemih) ne izvršujejo sočasno, niti ves čas. • Torej ni potrebe, da bi se v pomnilniku nahajali sočasno ali ves čas. • Zadostuje, da se v pomnilniku nahaja tisti del “delovni del” programa , ki se tedaj izvršuje. • Zamisel: • Dodeljevanje pomnilnika programom/procesom oziroma delom programov/procesov samo, če ga zares potrebujejo (to je “na zahtevo”). • Pridobitve: • Možno je izvrševati programe, ki so večji od velikosti glavnega pomnilnika • Maks. velikost programa ni direktno dvisna od velikosti glavnega pomnilnika. • Možnost sočasnega izvrševanja večjega števila programov (procesov oz. opravil) kot bi to dovoljevala velikost glavnega pomnilnika.
Logični in fizični naslovi • Za razumevanje delovanja navideznega pomnilnika je bistvenega pomena razlikovanje logičnih od fizičnih naslovov. • Logični naslov je naslov znotraj programa (naslov ukaza ali podatka). • To je v bistvu naslov, ki ga generira procesor med izvrševanjem programa (na primer vsebina programskea števca). • Fizični naslov je naslov pomnilniške besede (glavnega) pomnilnika. To je v bistvu naslovna kombinacija na naslovnem vodilu. • Logični naslovi sestavljajo logično naslovno področje programa. • Torej je velikost logičnega naslovnega področja dana z velikostjo programa. Maksimalna velikost programa je dana z dolžino logičnega naslova oziroma dolžino (ter funkcijo) naslovnih registrov procesorja. • Fizični naslovi sestavljajo fizično naslovno področje pomnilnika. • Velikost fizičnega naslovnega področja je dana z velikostjo glavnega pomnilnika. Maksimalna velikost glavnega pomnilnika je dana s širino naslovnega vodila.
Logični in fizični naslovi Ko program namestimo v pomnilnik – dodelimo pomnilnik – mu dodelimo fizične naslove. • Logični • naslovi • Fizični • naslovi • Na primer, ukazu z logičnim naslovom 1000 dodelimo pomnilniško besedo • s fizičnim naslovom 3000. • Vprašanje: kdaj in kako naj se l. n. 1000 preslika v f. n.?
Preslikava l.n. v f.n. • Statično – pred izvršitvijo: • Prevajanje: program prevedemo tako, da so logični naslovi po vrednosti kar enaki fizičnim naslovom (absolutni program). Program namestimo na te fizične naslove (dodelimo tisti del pomnilnika) in ga izvršimo. • Povezovanje: program prevedemo ob predpostavki, da bodo fizični naslovi izbrani v času povezovanja. Program ali dele programov prevedemo tako, da začnejo z logičnim naslovom 0000. V času povezovanja se logični naslovi “preračunajo” v fizične naslove, program namestimo na predvidene naslove in ga izvršimo. • Nameščanje: Programu dodelimo (“izračunamo”) dejanske naslove v času nameščanja, program v glavni pomnilnik tja tudi namestimo in izvršimo.
Preslikovanje l.n. v f.n. • Dinamično – med izvrševanjem: • Ko procesor generira logični naslov, se le-ta “preračuna” – to je preslika v fizični naslov pomnilniške besede, kjer je nameščen ukaz (ali podatek) . • Za to preslikavo je potrebna ustrezna strojna oprema, na primer, ko procesor generira logični naslov 1000, se le ta s pomočjo strojne opreme preslika v fizični naslov 3000. • Na tem temelji izvedba navideznega pomnilnika. • Vprašanje: kako na učinkovit način realizirati to preslikavo?
Dodeljevanje pomnilnika • Zvezno: • Program (proces ali opravilo) namestimo v pomnilnik v enem kosu. • V pomnilnik lahko namestimo sicer tudi več programov (več opravilnost), vendar vsakega zase zvezno. • Nezvezno: • Posamezen program namestimo v pomnilnik po delih. Zvezno je nameščen v pomnilnik samo posamezen del programa. • To je podlaga za izvedbo navideznega pomnilnika, program delimo na: • Enako velike dele – strani, “ostranjenje”, • Različno velike dele – segmente, “segmentiranje”, • Kombinacijo obeh – segmentiranje z ostranjenjem.
Tabela strani • Primer: • Velikost strani = velikost okvirja = 4 KB • Logični naslovni prostor: 4 GB, maks. št. strani 1 M • Fizični naslovni prostor: 4 MB, št. okvirjev 1 K • Poleg logičnega in fizičnega naslova vsebuje tabela še dodatna določila: bit veljavnosti (V), bit spremembe (M), bit zaščite (WP), bit prisotnosti, ipd. • Tabela strani je lahko zelo velika • Velikost tabele strani = število strani x velikost posamezne komponente, • Na primer, 1 M x 8 = 8 MB • Vsak program, ki je nameščen v pomnilnik, mora imeti svojo tabelo, • Toliko tabel kot programov. • Vprašanje: Kam namestiti vse tabele? • Tabele so nameščene v glavni pomnilnik.
Tabela strani • Posledica: • Upočasnitev napredovanja programa – za vsako koristno rferenco sta potrebna dva pomnilniška dostopa, eden do tabele in eden do programa (vsebine) • V uporabi pa so tudi večnivojski sistemi tabel • Vsakemu program v tem primeru pripada ena tabela prvega nivoja in več tabel naslednjega (drugega), tretjega , ..., nivoja. • Za vsako pomnilniško referenco je potrebno toliko dodatnih dostopov kolikor je nivojev tabel. • Preslikava l.n. v f.n. pa mora biti hitra • Rešitev – naslovni preslikovalni predpomnilnik – ATC ali TLB • ATC – Address Translation Cache • TLB – Translation Look-aside Buffer • ATC (TLB) vsebuje samo del – aktivni del – tabele strani • Tabela strani se sicer še vedno nahaja v glavnem pomnilniku.
Tabela strani in ATC • Tabela strani se nahaja v glavnem pomnilniku, aktivni del tabele se nahaja tudi v ATC • Ta predpomnilnik je največkrat asociativen ali delno (npr. 4 ali 8-stransko delno asociativen) • Dokler je aktivni del tabele v predpomnilniku, je dostop do pomnilnika hiter oz. se praktično ne podaljša • V nasprotnem primeru je potreben dodaten pomnilniški dostop do pomnilnika (za vsak nivo tabel) in polnjenje ATC. • V primeru, da stran ni v pomnilniku, pa je (seveda) potreben tudi dostop do diska (torej nameščanje strani).
Segmentiranje • Segmentiranje temelji na izgledu naslovnega področja, kot ga vidi programer. • Logično naslovno področje za njega ni linearno zaporedje pomnilniških naslovov. • Program sestavlja določeno število različno velikih delov programa – segmentov. • Segment je del programa, ki ima za programerja enoten pomen (npr. ukazi, podatki, sklad) • Vsak segment ima svoje ime (oznako ali številko) in velikost. • Logični naslov je tako dan z dvema določiloma: imenom segmenta in odmikom znotraj segmenta.