Danas je riječ ‘virtualan’ nešto što se vrlo dobro ‘udomaćilo’ u našem svakodnevnom govoru i pisanju. Postoje stvari kao što su virtualne valute, virtualna stvarnost i virtualni uređaji. No što je sa virtulnom memorijom?
Virtualna memorija je nešto što ćemo pronaći u bilo kojem modernom uređaju, poput mobitela, prijenosnih i stolnih računala i tableta. Virtualnu memoriju koriste i operativni sustavi, kao što su Windows, Linux, iOS i Android. Zbog čega je virtualna memorija toliko važna da se čini kao da bez nje ništa ne može funkcionirati? To i još više toga ćemo saznati u nastavku.
Što je virtualna memorija?
UKRATKO: Prostor na hard disku koji operativni sustav koristi u nedostatku RAM memorije, a koristi ga kao RAM memoriju je zapravo virtualna memorija. Drugim riječima, virtualna memorija nije RAM memorija, nego prostor na tvrdom disku, koji vaš operativni sustav pretvara i počinje ga koristiti kao RAM memoriju.
‘Nastanak’ virtualne memorije i njezino značenje za virtualni svijet
Svako računalo pokreće program na način da slijedi instrukcije u vezi pokretanja tog programa koje se nalaze i pohranjuju u radnoj memoriji računala. Računalo će pokrenuti (execute) svaku instrukciju sa jedne, bilo koje lokacije (koja je još poznata pod imenom ‘adresa) i nakon toga je premjestiti na iduću lokaciju.
Osim toga, računalo u obavljanju onoga što mu se naredi može i ‘skakati’ sa lokacije na lokaciju. U prošlosti, dok su svijetom suvereno vladala 8-bitna računala, a čak i danas na mikro-kontrolerima, cjelokupna radna memorija računala se izravno koristila i svaka lokacija je bila jedinstvena i odnosila se na fizičko pohranjivanje u radnoj memoriji.
Novi pristup u pogledu iskorištavanja radne memorije razvio se u ’50.-im i’60.-im godinama prošlog stoljeća. Taj novi način je nazvan- virtualnom memorijom. Ono što u osnovi virtualna memorija omogućuje jest to da svaki proces i svaka aktivnost koja se obavlja na računalu ima vlastiti prostor i vlastitu lokaciju te da se te lokacije mogu ponovno i ponovno iskorištavati svakim novim procesom ili aktivnošću. Na primjer, adresa 4095 za jedan proces znači jedno, dok za neki drugi proces ona znači nešto sasvim drugo.
No, ove adrese moraju biti negdje i smještene tako da su smještene u fizičku radnu memoriju računala. To opet znači da se mape virtualne memorije odnose i na fizički prostor u radnoj memoriji, no nešto više o tome malo kasnije.
Mapiranje i stvaranje adresa u virtualnoj memoriji
Najjednostavniji način putem kojeg se koristi virtualna memorija jest stvaranje mapa u odnosu ‘jedan-na-jedan’. Zamislimo da imamo dva programa i da od njih svaki koristi točno 5 MB radne memorije. Recimo isto tako da se prvi program nalazi u fizičkoj radnoj memoriji na adresi 550 i da sa fizičke radne memorije troši 5 MB.
Drugi program isto tako počinje na fizičkoj radnoj memoriji na adresi 660 i isto tako troši 5 MB fizičke radne memorije. Isto tako pretpostaviti ćemo da jedna naredba troši 1 bajt. U sustavu virtualne memorije ova oba procesa imaju adrese koje počinju na 0 te nastavljaju sa 1, pa 2, itd.
Ako prvi proces želi pristupiti adresi 0, računalo će adresirati adresu 0 preko adrese 550 te će tako nastati adresa 550, adresa 1 će se adresirati kao 551, itd. Ako drugi proces želi ostvariti pristup adresi 0 u tom slučaju će računalo mapu 0 adresirati na 660, 1 na 661, itd.
Ovakav način mapiranja se obavlja u hardveru (uz veliku pomoć programa) i to kroz posebnu komponentu koja se naziva MMU ili ”Memory Management Unit.” Kernel, ili u slučaju kod Androida, Linux, govori MMU-u kakvo mapiranje da on koristi. Nakon što CPU pokuša ostvariti pristup virtualnoj adresi, MMU će tu adresu automatski mapirati na pravu- fizičku adresu.
Postoje velike prednosti virtualne memorije. Neke od njih su:
- Aplikaciju nije briga i ne treba ju zanimati gdje se ona nalazi u fizičkoj radnoj memoriji.
- Aplikacija ima pristup samo svom vlastitom prostoru, odnosno prostoru koji je određen adresom te aplikacije, što znači da se ona ne može ‘miješati’ u rad druge aplikacije.
- Aplikacija ne treba biti pohranjena u granični blok memorije.
Što sve ovo znači u praksi i u radu jednog operativnog sustava jednog pametnog telefona? Kao prvo, to znači da operativni sustav može pohraniti aplikaciju bilo gdje on to želi (ili smatra najprikladnijim) u memoriji, a aplikacija ‘ne mari’ za to.
Ustvari, aplikacija čak može biti i podijeljena između nekoliko segmenata memorije i ona to neće primijetiti niti će to utjecati na njezin rad.
Vratimo se na primjer naše sada dvije aplikacije koje troše 5 MB, no ovaj puta ćemo napraviti neke izmjene:
- Prva aplikacija je podijeljena na dva dijela, nalazi se u fizičkoj radnoj memoriji na adresi 5242880, a svaki dio troši 2.5 MB
- Druga aplikacija se isto tako nalazi na fizičkoj memoriji na adresi 7864320 i koristi 5 MB, no drugi dio druge aplikacije koji se nalazi u fizičkoj radnoj memoriji, nalazi se na adresi 13107200 i troši 2.5 MB
Prva aplikacija je podijeljena na dva dijela i nalazi se na dva različita dijela memorije. No, to je u redu iz razloga što je operativni sustav naredio MMU-u da svaki puta nakon što prva aplikacija pristupi adresi 0 da MMU tu adresu označi i imenuje u 5242880 (isto kao što se i prije zvala), no nakon što pristupi adresi 2621440 (adresi na kojoj se nalazi druga polovica aplikacije), on je ne označava na 7864320 (kao što bi bio slučaj ranije – 5242880+2621440) i to iz razloga jer taj prostor sada zauzima Aplikacija 2. Sada se 2621440 mapira u 13107200.
Da bi uopće mogao slagati i mapirati aplikacije MMU treba prostor za to. Jedan dio prostora će služiti kao virtualna adresa, a odmah pored tog dio prostora nalazi se fizička adresa aplikacije. Da bi preveo virtualnu adresu u fizičku adresu MMU prvo ‘gleda’ virtualnu adresu i nakon toga koristi odgovarajuću fizičku adresu koja će nakon toga zaista i ostvariti pristup radnoj memoriji.
Što u slučaju greške?
Greške, tj. ‘bugovi’ se nažalost događaju. Iako su one rjeđe kod novijih operativnih sustava te kako se baza podataka za neku aplikaciju nadograđuje, one postaju sve rjeđe. Ipak, što u slučaju greške, odnosno ako MMU ne može pronaći ulaz u fizičku radnu memoriju?
Ako MMU ne uspije pronaći stranicu u fizičkoj radnoj memoriji za određenu virtualnu adresu, nastaje izvješće o greški koja se šalje kernelu o tome da nešto nije u redu. Ove greške se mogu dogoditi zgo niza uzroka i razloga, no ovi su najčešći:
- Program sam u sebi ima grešku i pokušao je ostvariti nevažeću adresu. U ovom slučaju Android će ugasiti aplikaciju, odnosno dogodit će se ‘rušenje’ aplikacije (ili ”crash”).
- Virtualna adresa je važeća, ali stranica se ne nalazi u radnoj memoriji iz razloga što je bila zamijenjena.
- Virtualna adresa je važeća, ali kernel još uvijek nije označio odgovarajuće mjesto fizičke radne memorije za tu adresu. Ovo je još poznato i kao ‘lijeno određivanje mjesta’. Kernel će odrediti mjesto stranici na radnoj memoriji i nakon toga će pokušati ponovno.
Zaključna riječ
Virtualna memorija ne nešto što svi mi danas svakodnevno koristimo u svojim mobitelima i računalima, a da nismo ustvari niti svjesni koliko je ona korisna. Pomoću virtualne memorije naši mobiteli mogu bez ikakvih problema raditi one prijeko potrebne ‘multi-taksinge’, a osim toga ona služi i za kreiranje neke od najvažnijih metoda zaštite sustava.
Bez virtualne memorije stvari bi danas izgledale i radile znatno drugačije. Idući puta nakon što pokrenete neku od aplikacija, zastanite na tren i razmislite koliko se u tom trenutku procesa i aktivnosti odvija u ‘pozadini’ vašeg mobitela ili računala da bi ta aplikacija, zajedno sa operativnim sustavom, mogla raditi onako kako treba.
Virtualna memorija je definitivno jedan od najzaslužnijih čimbenika ubrzanog razvoja tehnologije kakvom svjedočimo iz dana u dan.
Piše: I.H.