Rešitve upravljanja s pomnilnikom

Glavni pomnilnik in CPE sta dva najpomembnejša računalniška vira. Čeprav se glavni pomnilnik stalno pocenjuje, je videti, kot da računalniški sistemi nikoli nimajo dovolj pomnilnika, ker:
  • 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.

REŠITEV 1: ENOPROCESIRANJE (UNIPROGRAMMING)

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.

img144_8
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.

img145_8
REŠITEV 2: MULTIPROCESIRANJE S FIKSNIMI PARTICIJAMI

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.
Pri multiprocesiranju s spremenljivimi particijami se vsakemu procesu dodeli točno toliko prostora v pomnilniku, kot ga potrebuje.

Vsakič, ko se proces zaključi, se prostor, ki ga je ta proces zavzemal, doda na prosto listo (free list).

img147_8

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.