Rešitve upravljanja s pomnilnikom
- so tudi programi zahtevajo vedno več pomnilnika in
- osebni računalniki uporabljajo multiprocesiranje (multiprogramming)
V nadaljevanju bomo sledili razvoju rešitev upravljanja s pomnilnikom v časovnem zaporedju.
REŠITEV 0: BREZ UPRAVLJANJA S POMNILNIKOM
Prvi računalniki niso imeli operacijskih sistemov, zato pa tudi ne upravljanja s pomnilnikom. Vsak programer je imel dostop do celotnega pomnilnika in je sam skrbel za nalaganje programov v glavni pomnilnik.
Največja prednost te rešitve je, da programerju omogoča totalen nadzor nad sistemom. Po drugi strani pa je slabost izguba časa, ki ga programer porabi za nalaganje programov.
Načrtovalci sistemov so hitro našli boljšo rešitev: vsak sistem mora imeti nadzornik (monitor), ki se nahaja v pomnilniku. Ta nadzornik se sproži vsakič, ko se trenutni program konča in nato požene naslednji program v čakalni vrsti. Tako se je začelo t.i. Batch-processiranje.
Nadzornik je začel skoraj takoj vključevati tudi Vhodno/Izhodno Knjižnico (I/O library), prvi servis (service), ki ga vključujejo moderni operacijski sistemi. Reče se, da tak sistem uporablja enoprocesiranje, saj je naenkrat aktiven samo en proces.
Nadzornik (monitor) samo nalaga in zaganja programe
MS-DOS je najboljši primer takega sistema: čeprav je bil interaktiven in je omogočal, da se je več procesov nahajalo v pomnilniku, ni omogočal multiprocesiarnja. Tako nisi mogel urejati nekega dokumenta ali pognati pasjanse, ko si čakal, da se konča neko dolgotrajno opravilo.
Uporabniki so kmalu ugotovili, da se da tak sistem hitro porušiti s pisanjem v pomnilnik na naslove, kjer se je nahajal naddzornik. Da bi to preprečili, so začeli v sisteme vključevati strojno zaščito pomnilnika, ki je preprečila vse posege v del pomnilnika z nadzornikom. MS-DOS ni podpiral zaščite pomnilnika. Če se je program nepravilno izvedel je moral uporabnik resetirati svoj računalnik.
Enoprocesiranje ne podpira delitve procesorskega časa in zato slabo izkorišča CPE, ko je na čakalni listi veliko Vhodno/Izhodnih ukazov. Prav tako je na takem sistemu težko vzpostaviti dobre mrežne povezave. Tako je bilo uvajanje multiprocesiranja prava rešitev.
Prvi sistemi, ki so omogočali multiprocesiranje so razdelili glavni pomnilnik na fiksno število pomnilniških particij s fiksnimi začetnimi naslovi.Programi, ki so tekli v različnih particijah so imeli različne začetne naslove.
ako lahko ali:
- prisilimo kar največ programov, da so vedno naloženi v isti particiji, če pa hočemo pognati program z več particij, mora vsaka particija vsebovati kopijo programa.
- imamo nalagalnik (loader), ki je sposoben spreminjati začetne naslove programov medtem, ko je program naložen v glavnem pomnilniku.
REŠITEV 3: MULTIPROCESIRANJE S SPREMENLJIVIMI PARTICIJAMI
Uporabniki so kmalu spoznali, da multiprocesiranje s fiksnimi particijami ne prinaša dovolj prilagodljivosti, ker:
- ni bil izkoriščen pomnilniški prostor, ko je bila particija veliko večja od potreb procesa
- se je moralo število particij stalno spreminjati zaradi spremenljivosti števila zagnanih procesov.
Vsakič, ko se proces zaključi, se prostor, ki ga je ta proces zavzemal, doda na prosto listo (free list).
Glavna omejitev multiprocesiranja s spremenljivimi particijami je ta, da prosti odseki postajajo vse manšji, saj je navadno program, ki zapolne nek prazen prostor, manjši od njega. Tako se prosti pomnilnik fragmentira na veliko majhnih prostih blokov, ki pa postanejo premajhni za praktično uporabo; temu se reče zunanja fragmentacija. Edina prava rešitev fragmentacije je združevanje. To pomeni, da se vsi prosti bloki združijo v en velik prost blok s premikanjem procesov. Združevanje deluje le, če se lahko procesi izvajajo tudi potem, ko so premaknjeni na nov naslovni prostor. Za to je potrebno dinamično prenaslavljanje (dynamic address relocation), ki ga večina multiprocesorskih sistem omogoča. Resna slabost tega pa je čas, ki se porabi za premikanje procesov, ki je odvisen od velikosti procesa in od velikosti pomnilnika. Zato danes združevanje ni več tako popularno, kot je bilo, ko so bili pomnilniki manjši.
Dinamično prenaslavljanje omogoča procesom, da nadaljujejo izvajanje po tem, ko so bili premeščeni na nov naslovni prostor. Brez dinamičnega prenaslavljanja bi bilo združevanje nemogoče poleg tega pa bi se morali prekinjeni procesi vedno vrniti na isto mesto, ko se jih spet zažene.
REŠITEV 4: Virtualni pomnilnik
Edina prava rešitev za omenjene probleme bi bilo upravljanje s pomnilnikom, ki bi procesom omogočalo dodelitev nezdruženih delov glavnega pomnilnika (non-contiguous memory alocation).
Rešitve so opisane v poglavju Navidezni pomnilnik. V osnovi pa uporaba navideznega pomnilnika rešuje dva problema:
- neenovito dodeljevanje pomnilnika (non-contiguos allocation of memmory) in
- polnenje na zahtevo.