12.07.2015 Views

7. Predavanje - VTS NS

7. Predavanje - VTS NS

7. Predavanje - VTS NS

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

VII Upravljanje memorijomUvodVezivanje adresaDeljenje memorijeOrganizacija i alokacija memorijeVirtuelna memorija1


UvodMemorija je fundamentalni deo modernih računarskih sistema.Memarija se sastoji od niza memorijskih reči, a svaka ima jedinstvenuadresu.Slobodno se može reći da proces bez memorije ne može gotovo ništada uradi u većini slučajeva.Na nivou sloja upravljanja memorijom treba postići sledeće ciljeve:1) Alokacija memorije2) Razdvajanje fizičkog i logičkog adresnog prostora programa ivezivanje adresa3) Logička organizacija memorije, što znači razdvajanje neizmenljivihsegmenata (modula i procedura) od segmenata s promenljivimsadržajem, tj. podacima.4) Relokacija,koja obuhvata sažimanje, tj. defragmentaciju radnememorije5) Podrška za dinamičko punjenje memorije programom i dinamičkovezivanje2/285


Dodeljivanje memorijeMemorija se deli na najmanje dve particije od kojih je jedna (najčešćenižideo)namenjena rezidentnom delu operativnog sistema (eng!. kernel space) a drugaparticija (viši delovi) korisničkim procesima (eng!. user space).U najnižem delu memorije nalazi se tabela prekidnih rutina.U korisničkom adresnom prostoru nalazi se više procesa koji formiraju redčekanja na procesor. Da bi proces ušao u red čekanja na procesor, neophodno jeda najpre dobije potrebnu memoriju.Glavni problem pri upravljanju memorijom jeste dodela slobodne memorijeprocesima koji su u ulaznom redu (alokacija memorije).Tehnike za dodelu memorije procesima grubo se mogu podeliti na dve vrste:- Kontinualna alokacija (i logički i fizički adresni prostor procesa sastoje se odkontinualnog niza memorijskih adresa)- Diskontinualna alokacija (fizički adresni prostor procesa nije reakizovan kaokontinualan niz memorijskih adresa)3/285


Vezivanje adresa4/285


Logički i fizički adresni prostorAdresa koju generiše procesorska instrukcija je logička, a adresa samememorijske jedinice je fizička.Logističke i fizičke adrese su potpuno iste u faziprevođenja i u fazi učitavanja programa, ali se razlikuju u fazi njegovogizvršavanja.Skup svih logičkih adresa koje generiše program naziva se logički ili virtuelniadresni prostor, a skup svih fizičkih adresa koje njima odgovaraju naziva sefizički adresni prostor.Mapiranje (preslikavanje) virtuelnog adresnog prostora u fizički obavljahardverski uređaj koji se naziva MMU (eng!. Memory-Management Unit) -jedinica za upravljanje memorijom.5/285


Zaštita memorijeZaštita operativnog sistema od korisničkihprocesa i međusobna zaštita korisničkihprocesa po pitanju pristupa memorijskimsekcijama može se realizovati pomoću dvaregistra:- relokacionog registra, koji sadrži najnižuadresu procesa- registra ograničenja, koji sadrži najveći opseglogičkih adresa procesa.Relokacioni iregistar i registar ograničenja sudva registra procesora, koji se pune ondakada proces dobija procesor naizvršenje.Pomoću ova dva registra, procesiuspešno štite svoje memorijske sekcije, jer jesvaka logistička adresa relativna u odnosu nanulu i mora da prođe obradu preko ova dvaregistra.6/285


Razmena (swap)Postoje situacije kada se proces može privremeno prebaciti iz memorije na disk,kako bi se oslobodila memorija.Razmena (eng!. swap) koristi se u prioritetnim šemama za raspoređivanje procesa,gde se procesi visokog prioriteta čuvaju u memoriji, dok se svi procesi niskogprioriteta upisuju na disk i čekaju da se oslobodi memorija.Proces koji se razmenjuje mora biti potpuno oslobođen aktivnosti – ne sme raditi,niti da šeka kraj neke ulazno- izlazne operacije.Tehnika razmene zahteva postojanje tri komponente:- prostor na disku (eng!. swap space), na koji će se smeštati "uspavani" procesi- mehanizam swap-out koji prebacuje proces iz memorije na disk- mehanizam swap-in koji vraća "uspavani" proces sa diska u memorijuTrajanje jedne razmene zavisi od količine podataka za prenos, karakteristikadiskova i pratećeg hardvera.Swap postoji na svim modernim operativnim sistemima i to u različitimmodifikovanim varijantama.7/285


PROGRAMERSKE TEHNIKEMEMORIJOMUPRAVLJANJAMemorija se može efikasnije iskoristiti ukoliko se primene tehnike dinamičkogpunjenja programaSuština dinamičkog punjenja (eng!. dynamic loading) odnosi se na smeštaj samopotrebnih delova programa u memoriju, pri čemu se odgovarajuće rutineučitavaju u memoriju samo kada ih program pozove.Da bi to bilo moguće, sve rutine programa čuvaju se na disku u relokatibilnomformatu.Kada se rutina pozove iz programa, proverava se da li je ona već u memoriji i akonije poziva se punilac daje učita u memoriju.Prednosti dinamičkog punjenja su u tome što rutine koje nisu trenutno potrebne nezauzimaju mesto u memoriji, takođe dinamičko punjenje ne zahteva specijalnupodršku od operativnog sistema.8/285


Tehnika preklapanjaDa bi se omogućilo izvršenje procesa koji je veći od same fizičke memorije, koristise tehnika preklapanja (eng!. overlay).Preklapanje omogućava da se u memoriji čuvaju samo oni delovi programa kojisu potrebni u tom trenutku. Kada drugi delovi programa budu potrebni, oni ćese učitati u memoriju umesto delova koji više nisu potrebni.Tehnika preklapanja usporava rad samog programa, jer se delo vi programaučitavaju u memoriju u više iteracija, ali se njome postiže ono što drugačije nebi bilo moguće.Tehnika preklapanja može biti korisna na sistemima sa ograničenim resursima.9/285


KONTINUALNO DODELJIVANJEMEMORIJEUkoliko se koristi kontinualno dodeljivanje memorije, i logički i fizički adresniprostor procesa sastoje se od kontinualnog niza memorijskih adresa.Prosto rečeno, svaki proces dobija jedan kontinualan deo memorije.10/285


Vezivanje adresaProblem vezivanja adresa (address binding)Prevođenje (compilation)Povezivanje (linking)Učitavanje (loading)Dinamičko preslikavanje adresa11


Problem vezivanja adresaIzvorni program na jeziku C/C++ podeljen na fajlove:// A.cpp: // B.cpp:int a = 3; extern int a;void f() {...}Pitanja:extern void f();void g() {...a++; ...f()...;}• Kako preslikati obraćanje promenljivoj a ili funkciji f u mašinski“razumljivo” adresiranje – prevođenje (compilation)?• Kako povezati prevedene fajlove u jedinstven program i rešitiobraćanje promenljivoj a ili funkciji f u drugom fajlu – povezivanje(linking)?• Kako odrediti adrese promenljive a i funkcije f kada se sazna gde ćeproces biti smešten u memoriji – učitavanje (loading)?• Postoji li potreba za preslikavanjem logičkih u fizičke adrese u vremeizvršavanja, uz pomoć hardvera – dinamičko preslikavanje adresa?12/285


Prevođenje (compilation)A.cppint a = 3;void f() {...}int extern a; int a;void f();void g() {...f()......a...}Ovo a i nije f moraju definicija dakoja budu bi uzrokovala deklarisanialokaciju pre referisanja prostoraB.cppA.obj↑a: 0↑f: 1...a: 3f: .........↑g: 0↓f: ...↓a: ...a: g: ?...?f......?a......B.obj13/285


Povezivanje (linking)A.obj↑a: 0↑f: 1...a: 3f: .........↑g: 0↓f: ...↓a: ...g:...?f......?a......B.objP.exeA.objB.objC.obj...Linker ima zadatak da sastavi niz .obj fajlova (A.obj, B.obj,C.obj itd.) i napravi jedan izvršni fajl (P.exe)Linker ovo tipično radi u dva prolaza:• pravi globalnu mapu .obj fajlova i tabelu definisanih izveženihsimbola i njihovih globalnih adresa (relativno u odnosu na početak.exe fajla)• razrešava referisanja na uvežene simbole koristeći adresedefinisanih simbola izračunate u tabeli simbola14/285


Povezivanje (linking)Biblioteke (libraries, .lib) imaju isti oblik i značenje kao iobični .obj fajlovi, osim što su pripremljeni prevođenjem ipovezivanjem skupa izvornih fajlovaLinker tretira biblioteke na isti način kao i druge .obj fajloveMoguće greške tokom povezivanja:• simbol nije definisan: linker saopštava samo ime .obj fajla koji uvozi(referiše) nedefinisani simbol; često zbunjuje, pošto korisnički kodmožda uopšte ne koristi taj simbol; verovatan uzrok: simbol se koristiu nekoj povezanoj biblioteci, ali druga biblioteka u kojoj je taj simboldefinisan nije uključena u listu za povezivanje• višestruke definicije simbola: linker saopštava imena .obj fajlova kojidefinišu isti simbol; verovatan uzrok: definicije u izvornim fajlovimai/ili biblioteci (“sukob imena”, name clashing)Povezivanje sa ciljem pravljenja biblioteke (.lib) razlikuje seod povezivanja sa ciljem pravljenja programa (.exe)! Zašto?15/285


Učitavanje (loading)Procesi čije je započinjanje zahtevano (kreirani su) nalazese u redu za započinjanje (job queue, input queue) – naspisku su svih procesa, ali još nisu spremni za izvršavanjeDa bi ovakav proces bio spreman za izvršavanje i prešao uready queue, OS treba sa njim da uradi sledeće:1. pronađe slobodan prostor u memoriji za smeštanje programa ipodataka procesa2. učita program i statički alocirane podatke u memoriju sa diska3. (ako je potrebno) razreši adrese referisanih simbola u programu –relativne adrese u odnosu na početak programa pretvori uapsolutne memorijske fizičke adrese, prostim dodavanjemapsolutne fizičke adrese smeštanja procesa u memoriju – statičkovezivanje adresa u vreme učitavanja4. kreira početni kontekstOve poslove obavlja poseban deo OS, sistemski programpod nazivom loader (“utovarivač”)16/285


Dinamičko preslikavanje adresaAko OS omogućava postojanje više procesa u memoriji u jednomtrenutku i izbacivanje nekih (delova) procesa a ubacivanje drugih,onda statičko vezivanje adresa u vreme učitavanja nije dovoljnoPotrebno je da proces bude relokatibilan: da se može jednostavno, uvreme izvršavanja programa, promeniti lokacija procesa (programa injegovih podataka) na drugo mesto u memoriji, a da to ni na koji načinne utiče na program i njegovo adresiranje podataka (pokazivači!)Potrebno je zato da proces poseduje logički (virtuelni) adresni prostor,tako da program može da adresira sve adrese u opsegu 0 do MaxLogičke adrese se preslikavaju u fizičke adrese koje se upućujumemorijskim modulimaPreslikavanje logičkih u fizičke adrese obavlja se dinamički, u vremeizvršavanjaOvo preslikavanje vrši hardver – obavezna je hardverska podrškaOvo preslikavanja vrši se uvek i za svaku logičku adresu – program“vidi” isključivo logički adresni prostor, nikako fizički17/285


Dinamičko preslikavanje adresaNajjednostavnija tehnika dinamičkog preslikavanja adresa:bazni registar za relokaciju (base relocation register):VAddrCPU17Zaduženja OS-a:Relocation Reg1A220000MMU+1A220017OMLoader treba da definiše vrednost relokacionog registra na osnovumesta učitavanja procesa u memoriji i smesti tu vrednost u PCBprilikom svake promene konteksta, OS treba da upiše vrednost izPCB u relokacioni registarSloženije tehnike dinamičkog preslikavanja: stranična,segmentna i stranično-segmentna organizacija18/285


Deljenje memorijeProblem deljenja memorijeDinamičko učitavanje (dynamic loading)Preklopi (overlays)Biblioteke sa dinamičkim vezivanjem (DLL)Zamena (swapping)19


Problem deljenja memorijeViše procesa konkuriše za isti resurs. Kako ih sve zadovoljiti?Deljenjem resursa!Kako se može deliti resurs:• vremenski (time sharing): jedno vreme resurs koristi jedan proces, paga onda preuzima (preempt) i malo koristi drugi itd.; primer: CPU• prostorno (space sharing): jedan deo resursa koristi jedan proces,drugi deo drugi proces itd.; primer: operativna memorijaOperativna memorija se može deliti i vremenski i prostorno:• samo vremenski: celu memoriju koristi samo jedan proces nekovreme, pa onda celu memoriju koristi neki drugi; veoma stari OS• samo prostorno: ceo proces je u OM, ali je u datom trenutku višeprocesa u OM; uglavnom stariji i slabiji OS, bez izbacivanja delova ilicelih procesa• kombinacija: delovi procesa ili celi procesi se izbacuju i učitavaju sedrugi, u jednom trenutku je u OM više delova ili celih procesa;moderni OS20/285


Problem deljenja memorijeUkoliko više procesa treba da koristi memoriju, kako rešitiproblem nedostatka (ograničenja) memorije? Tehnike:• smanjiti potrebu za memorijom od strane programa bez učešćaOSa - prevodilac obezbeđuje da program smanji svoje potrebe:• dinamičko učitavanje (dynamic loading)• preklopi (overlays)• prostorno deliti memoriju:• deljene biblioteke (shared libraries) i dinamičko vezivanje (dynamiclinking)• učitavati više procesa u memoriju; neophodan uslov: relokatibilnost• vremenski deliti memoriju:• zamena (swapping)• virtuelna memorija (virtual memory)21/285


Dinamičko učitavanjeIdeja:• složeni program često nikada ne izvršava neke svojedelove ili ne koristi neke svoje podatke; neke procedurese možda nikada ili jako retko pozivaju, npr. kod zaobradu grešaka i izuzetnih situacija; neki podaci senikada ili retko koriste• zašto bezuslovno unapred učitavati ove deloveprograma, ako oni nikada neće biti korišćeni?• ovakve delove učitavati dinamički, tek u vremeizvršavanja, po potrebi – kada im se prvi put pristupi22/285


Dinamičko učitavanjeRealizacija:• prevodilac obezebeđuje potrebnu podršku i rastavlja program napotprograme kao odvojene celine za učitavanje; može zahtevatisugestiju i pomoć programera• potprogrami se smeštaju na disk kao relokatibilne celine• pri pokretanju procesa, učitava se glavni program i programskatabela adresa potprograma• kada se pozove potprogram, pozivajući kod proverava u tabeli da lije potprogram učitan• ako nije, pokreće se loader (kao deo programa, ne OS-a) da učitapotprogram na određenu lokaciju i postavi njegovu adresu u tabelupotprograma• kada se potprogram ponovo pozove, njegova adresa je u tabelispremna za pozivDinamičko učitavanje ne zahteva nikakvu podršku OS-a –sve radi prevodilac i generisani kod. OS samo obezbeđujebibliotečne rutine za dinamičko učitavanje23/285


PreklopiIdeja:• zašto ne omogućiti da program alocira manje prostora nego što ucelini zauzima, tako što se delovi koji se ne koriste u isto vremezamenjuju u memoriji, zauzimajući isto mesto - preklapajući se(overlaying)• kada zatreba neki deo koji nije u memoriji, izbaciti deo sa kojim sepreklapa i na njegovo mesto učitati potrebniRealizacija:• prevodilac obezebeđuje potrebnu podršku i rastavlja program nadelove kao odvojene celine za učitavanje; može zahtevati sugestiju ipomoć programera• delovi se smeštaju na disk kao relokatibilne celine• pri pokretanju procesa, učitavaju se određeni delovi• kada se zahteva neki deo, pozivajući kod poziva overlay driver kojiproverava da li je deo učitan• ako nije, pokreće se loader (kao deo programa, ne OS-a) da učita deona određenu lokaciju, zamenjujući neki drugi deo24/285


PreklopiPrimer:• linker sa dva prolaza• ukupna veličina programa: 200KB• overlay driver: 10KB• potrebna memorija sa preklapanjem:130KB• početno učitavanje je kraće• izvršavanje je duže zbog učitavanjaSymboltable20KBCommonroutines30KBOverlaydriver 10KBPass 1code70KBOverlayPass 2code80KB25/285


PreklopiPreklapanje ne zahteva nikakvu podršku OS-a – sve radiprevodilac (uz pomoć programera) i generisani kod. OSsamo obezbeđuje bibliotečne rutine za dinamičkoučitavanjeAli – da li preklapanje i niti (overlays+threads) moguzajedno?Problem: za velike programe (za male preklapanjeuglavnom nije potrebno) konstruisanje preklopa zahtevarazumevanje značenja programa, što može da budesloženoZbog toga je preklapanje ograničeno na mikroračunare samanjom količinom fizičke memorije i bez hardverskepodrške za složenije i bolje mehanizme upravljanjamemorijom26/285


Biblioteke sa dinamičkim vezivanjemIdeja:• mnogi programi često koriste iste sistemske biblioteke, npr. zadatoteke, GUI, mrežnu komunikaciju itd.• ako bi se te biblioteke statički povezivale, svaki program koji seizvršava zahtevao bi prostor unutar sebe za te biblioteke, a isti kodbi se ponavljao u svim programima• zašto ne obezbediti deljenje biblioteka (shared libraries), tako da umemoriji postoji samo jedna kopija koda biblioteka• potrebno je vršiti dinamičko povezivanje (dynamic linking) u vremeizvršavanja umesto statičkog povezivanja pre izvršavanja• ideja slična dinamičkom učitavanju, osim što se umesto učitavanjapovezivanje odlaže za vreme izvršavanja• deljene biblioteke sa dinamičkim vezivanjem (dynamic linkinglibraries, DLL)27/285


Biblioteke sa dinamičkim vezivanjemRealizacija:• u programu koji koristi DLL, za svaki potprogram iz DLLauvodi se stub – “kaobajagi” potprogram, njegov zamenik• pozivi datog potprograma prevode se uobičajeno, ali onipozivaju stub umesto pravog potprograma P• stub u sebi sadrži referencu (adresu) stvarnogpotprograma P iz biblioteke, inicijalno postavljenu na null• stub je mali deo koda koji radi sledeće:• ako je referenca na potprogram null, poziva se sistemska uslugakoja pronalazi traženi DLL i njegov potprogram P i vraća njegovuadresu• vraćenu vredost smešta u svoju referencu, tako da se svaki sledećipoziv odmah razrešava adresiranjem preko reference, bezsistemskog poziva28/285


Biblioteke sa dinamičkim vezivanjemX proc (A a, B b, C c) { // stub for procstatic X (*ref)(A,B,C) = 0;if (ref==0) {ref = sys_call(MapDLL, dllName, “proc”);if (ref==0) ... // Exception!}return (*ref)(a,b,c);}• sistemska usluga treba da uradi sledeće:• u sistemskom registru DLLova pronađe traženi DLL i traženipotprogram• učita DLL u memoriju ako već nije učitan na zahtev nekog drugogprocesa• (ako je potrebno) preslika fizički prostor koji zauzima DLL uvirtuelni prostor pozivajućeg procesa i vrati virtuelnu adresupotprograma – neophodna podrška OS-a29/285


Biblioteke sa dinamičkim vezivanjemPogodnost: prilikom izdavanja nove verzije biblioteke (npr.ispravka greške), programi koji je koriste ne morajuponovo da se statički povezujuProblem: šta ako nova verzija biblioteke nije višekompatibilna sa starim programima?Neophodno označavanje verzija biblioteka i proverakompatibilnosti biblioteke koja postoji u sistemu saverzijom koju program zahtevaPosledica: moguće je da u datom trenutku u sistemupostoji učitano više verzija iste biblioteke30/285


ZamenaIdeja: vremenski deliti memoriju tako što se jedan procesizbaci iz nje snimanjem na disk da bi drugi bio učitan sadiska – zamena (swapping)Jednostavna varijanta: kada dođe do preuzimanja, OSzapočinje snimanje sadržaja memorije procesa koji jeizgubio procesor na disk i učitavanje drugog na njegovomesto, dok u međuvremenu procesor izvršava neki trećiproces koji je spremanDa li se proces koji se učitava u memoriju vraća na istomesto iz koga je izbačen? Zavisi! Od čega?Disk za podršku zameni mora biti brz i velikog kapacitetada prihvati cele adresne prostore više procesaProstor na disku za podršku zameni je van fajl sistema OSada bi bio brz31/285


ZamenaPosledica: promena konteksta može biti veoma dugaNa primer, neka je brzina transfera diska 5MB/s; zazamenu procesa koji zauzima 1MB memorije potrebno je 2puta po oko 0.2s, dakle oko 0.4s; šta ako proces zauzima128MB? Zato je potrebno da OS zna koliko proces stvarnozauzima, ne koliko može da zauzimaDa bi sistem bio efikasan, vremenski kvant dodeljenprocesu za izvršavanje mora biti značajno duži od promenekontekstaProblem: šta ako proces koji se izbacuje čeka na završetakI/O operacije koja koristi deo memorije tog procesa zasvoje bafere? Rešenja:• zabraniti zamenu procesa koji čeka na završetak I/O• koristiti memorijski prostor OS-a za I/O bafere32/285


ZamenaMalo sistema koristi jednostavnu standardnu varijantustalne zamene celog procesa prilikom svake promenekonteksta; mnogo više se koriste modifikovane varijanteUnix modifikacija: zamena je normalno onemogućena, alise aktivira kada sistem postane opterećen sa mnogoprocesaMS Widows 3.1 varijanta: kada se pokrene novi proces anema dovoljno memorije, postojeći proces se zamenjuje;ovde korisnik, a ne OS inicira preuzimanje i zamenu: kadakorisnik pređe da radi sa nekim procesom, on se aktivira,po potrebi zamenjujući neki drugi proces; izbačeni procesostaje van memorije sve dok korisnik ne pređe na njega33/285


Organizacija i alokacijamemorijeKontinualna alokacijaStranična organizacijaSegmentna organizacija34


Kontinualna alokacijaZa svaki proces alocira se kontinualan memorijski prostorRelokatibilnost se obezbeđuje dinamičkim preslikavanjemsa registrom za relokaciju (relocation register)Ovakvo preslikavanje obezbeđuje i zaštitu OS-a odkorisničkih procesa i procesa između sebe –registar granice (limit register)Ova dva registra sastavni su deo konteksta procesa–OS ih učitava iz PCB pri promeni kontekstaIVTOSLimit RegRelocation RegUser ProcessVAddr


Kontinualna alokacijaOsnovno pitanje: kako pronaći slobodan prostor zasmeštanje procesa – problem alokacije (allocation)?Jedno jednostavno rešenje – particije (partition): podelitiOM za korisničke procese na particije jednake veličine,maksimalno dozvoljene procesu. Svaka particija može dasadrži samo jedan proces – stepen multiprogramiranja jeograničen brojem particijaOS vodi tabelu particija – za svaku particiju po jedan ulaz.Ulaz sadrži informaciju da li je particija slobodna, odnosnokom procesu je dodeljena. PCB sadrži oznaku particijeprocesaKada ima slobodne particije, proces se učitava i pokreće.Kada proces završi, njegova particija se označavaslobodnomZastareo metod, ne primenjuje se više36/285


Kontinualna alokacijaOpštiji pristup - dinamička alokacija memorije (dynamicstorage allocation):• OS vodi evidenciju o zauzetim i slobodnim delovima memorije• inicijalno je ceo prostor za korisničke procese slobodan• kada se kreira novi proces, stavlja se u ulazni red (input queue)• OS analizira memorijske zahteve procesa u ulaznom redu i trenutnostanje slobodne memorije i bira proces za učitavanje (na osnovualgoritma raspoređivanja ili memorijskih zahteva)• OS pronalazi slobodan deo memorije dovoljno veliki da smesti izabraniproces• OS učitava proces u izabrani deo slobodne memorije; deo memorijekoji proces zauzima označava zauzetim, a ostatak ostaje slobodan• kada se proces završi, deo memorije koji je zauzimao proglašava seslobodnim, uz eventualno spajanje u kontinualnu celinu sa slobodnimdelovima ispred i iza oslobođenog dela• OS može da ispita postoji li proces u ulaznom redu koji sada može dase učita37/285


Kontinualna alokacijaOsnovno pitanje: ukoliko postoji više slobodnihdelova u koje može da se smesti proces, kakoizabrati jedan?Pristupi:• izabrati prvi koji odgovara (first fit): jednostavan i efikasan• izabrati onaj koji najbolje odgovara (best fit), u smislu daostaje najmanje “otpatka”, sa idejom najboljeg iskorišćenjaprostora• izabrati onaj koji najlošije odgovara (worst fit), u smislu danajviše preostaje, sa idejom da se taj ostatak najlakšemože iskoristitiSimulacije pokazuju da su first fit i best fit bolji usmislu efikasnosti i iskorišćenja memorije; ni jedanod ta dva nije generalno bolji u smislu iskorišćenja,a first fit je generalno efikasniji38/285


Kontinualna alokacijaOsnovni problem - eksterna fragmentacija (externalfragmentation): ukupan slobodni prostor jestedovoljan, ali nije kontinualan za alokacijuStatistike: na N alociranih blokova, još oko ½Nblokova se gubi zbog fragmentacijeUzrok: alokacija delova različitih veličina u slobodneceline različitih veličinaJoš jedan problem: šta ako se alocira prostor od18462 bajta u slobodan deo od 18464 bajta –preostaju samo 2 slobodna bajta. Troškovi vođenjaevidencije o tako malom slobodnom prostoru nisuopravdani!39/285


Kontinualna alokacijaPristupi rešavanju eksterne fragmentacije:• podeliti memoriju na blokove fiksne veličine i alociratimemoriju samo u celom broju blokova; razlika izmeđustvarno zahtevane memorije i alocirane memorije –neiskorišćen ostatak – interna fragmentacija• kompakcija (compaction): relocirati procese tako da sespoje zauzeti i slobodni delovi memorije – “skupiti”slobodnu memoriju u jedan veliki blok; moguće samoako je relokacija dinamička, nije moguće za statičkurelokaciju (u vreme učitavanja); problem: skupo rešenje• stranična organizacija (paging): omogućiti da logičkiadresni prostor procesa ne bude kontinualan40/285


SEGMENTACIJAPo pravilu, programer definiše logičke segmente u izvornom programu, aprevodilac na osnovu toga pravi memorijske segmente.Segmentacija je metoda upravljanja memorijom koja podržava logičkikorisnički pogled na memoriju.Logički adresni prostor sastoji se od kolekcije segmenata, a sva-kisegment ima jedinstveno ime i dužinu. Logička adresa se sastoji od dvadela:- imena segmenta (umesto imena segmenta obično se zadaje broj kojipredstavlja identifikator segmenta)- pomeraja unutar segmenta.Pri segmentaciji s particijama promenljive dužine, javlja se eksternafragmentacija. Eksterna fragmentacija može se smanjiti sažimanjemmemorije.41/285


Hardverska podrškaMapiranje se obavlja preko tabele segmenata a ima podršku i uhardveru mikroprocesora.Svaki ulaz u tabeli segmenata opisuje tačno jedan segment, asadrži dvaparametra:- baznu adresu segmenta, koja definiše početnu fizičku adresu segmentau memoriji- ograničenje segmenta, koje definiše dužinu segmenta42/285


Zaštita i deljenje segmenataTabela segmenata, pored definicije segmenta u fizičkoj memoriji možesadržati i neke definicije zaštite, od kojih se najčešće koristi zaštita odmodifikacije.Segmenti sa kodom mogu biti definisani kao nepromenljivi (engl. readonly).Slično kao u metodi straničenja, i segmenti koji se ne menjaju mogu sedeliti na taj način se efikasno štedi43/285


Segmentacija sa straničenjemNajpopularnije serije procesora Intel(80x86 i Pentuim) i Motorola (68000)imaju ugrađenu podršku i zasegmentaciju i za straničenje, tako daomogućavaju primenu kombinovanihmetoda diskontinualne alokacije pa seprocesi mogu deliti na fizičkidiskontinualne logičke celine.Pri tome, straničenje poništava eksternufragmentaciju segmenta.44/285


Stranična organizacijaLogical AddresspdPMTPhysical AddressfdpfTipične veličine stranice: od 512 do 16M adresibilnih jedinicaInherentno obezbeđuje dinamičku relokatibilnostNema eksterne fragmentacijeIma interne fragmentacije. Ako je veličina procesa nezavisna od veličinestranice, očekivana veličina internog fragmenta je ½ straniceTaj razlog favorizuje male stranice. Međutim, male stranice unose višerežija (veća PMT, manje efikasan I/O) – pogododnije su veće stranice45/285


Stranična organizacijaPosledica: svaki proces “vidi” kontinualan logički (virtuelni)adresni prostor sa samo jednim programom, dok je u fizičkojmemoriji taj prostor rasut po okvirima (frame, blokovima)Ova razlika je transparentna za korisnički proces – sakriva gahardver za preslikavanje adresa (MMU) i OSKada se proces veličine N stranica izabere za učitavanje umemoriju, OS pronalazi N slobodnih okvira za smeštanjeprocesaZbog toga OS mora da vodi tabelu zauzetosti okvira fizičkememorije (frame table): za svaki okvir jedan ulaz – da li jeokvir slobodan ili je zauzet i koji proces ga zauzimaOS mora da vodi računa o tome da su adrese koje procesprenosi kao argumente sistemskog poziva logičke. OS morada ih preslika u fizičke adrese korišćenjem PMT za dati proces46/285


Stranična organizacijaAko je PMT u fizičkoj memoriji, svaki pristup jednoj logičkojlokaciji zahteva dva pristupa fizičkoj memoriji – pristupmemoriji se dvostruko produžavaDa li PMT može da se smesti u HW za preslikavanje adresa(MMU)?Teorijski - da. Posledice:• cela PMT je deo konteksta procesa koji mora da se učita u MMU pripromeni konteksta• registarski fajl za smeštanje PMT treba da bude brzMeđutim, takav registarski fajl za novije sisteme bio bineizvodljivo veliki – reda 1M registara (ulaza u PMT)Zbog toga noviji sistemi čuvaju PMT u operativnojmemoriji, a na PMT ukazuje PMTP registar – deo kontekstaKako rešiti problem neefikasnog pristupa OM? TLB!47/285


Stranična organizacijaModerni računari:• veoma veliki logički adresni prostor: 2 32 do 2 64 lokacija• neka je veličina stranice 4K lokacija (2 12 ), sledi:• PMT ima 2 20 do 2 52 ulaza!• ako je ulaz 4B (32 bita), što omogućava 2 32 fizičkih okvira, odnosno2 44 fizičkih lokacija, sledi:• PMT je veličine 2 22 (4M) do 2 54 bajtova!• Ovo može biti neizvodljivo!• Ali na sreću, često nije ni potrebno jer proces praktično nikada nekoristi ceo svoj logički adresni prostorJedno rešenje: PMT implementirana kao hash tabelaIdeja: veliki prostor ključeva (page) sa malo njih koji suiskorišćeni - treba imati preslikavanje ključeva u ulaze hashtabele koje “rasipa” ključeve koji se pojavljuju po tabeli, uzrešavanje konflikata (više ključeva se preslikava u isti ulaz)asocijativnim traženjem ključa u istom ulazu48/285


Stranična organizacijaDrugo rešenje: straničenje u više nivoa (multilevel paging)Ideja: samu PMT podeliti na stranice i te stranice (tj. samoone potrebne) rasuti po fizičkoj memorijiStraničenje u dva nivoa:Logical AddressPagep1p2OffsetdPMTPp1 p2 d49/285


Stranična organizacijaKako straničenje u više nivoa utiče na performanse?Pretpostavke:• vreme pristupa fizičkoj memoriji 100 ns• vreme pretrage i čitanja TLB-a 20 ns• procenat pogotka u TLB-u 98%Vreme pristupa bez TLB-a:• straničenje u jednom nivou: 2 x 100 ns = 200 ns• straničenje u tri nivoa: 4 x 100 ns = 400 nsVreme pristupa sa TLB-om:• straničenje u jednom nivou: 0.98 x 120 ns + 0.02 x 220 ns = 122 ns(22%)• straničenje u tri nivoa: 0.98 x 120 ns + 0.02 x 420 ns = 126 ns (26%)50/285


Stranična organizacijaZaštita u straničnoj organizaciji:• OS-a od korisničkih procesa i procesa između sebe inherentno(fizički im se ne može pristupiti)• od prekoračenja opsega dozvoljenih adresa procesa ili dozvoleupisa - proširenjem ulaza PMT bitima zaštite:• valid/invalid bit: da li je data stranica uopšte dozvoljena za pristup – dali je u opsegu dozvoljenih adresa ili nije• read/write/execute biti: biti dozvole čitanja, upisa ili izvršavanjasadržaja iz date straniceprilikom preslikavanja adrese, HW (MMU) dovlači deskriptorstranice i najpre proverava pravo pristupa do te stranice; akopristup nije dozvoljen, generiše se interni prekid (trap)Kako uštedeti na PMT ako nisu sve stranice potrebne?Registar dužine tabele stranica (page-table length register,PTLR) kao deo konteksta procesa51/285


Stranična organizacijaU višekorisničkim sistemima dešava se da mnogo procesaizvršava isti program. Ako svaki proces učitava isti programu svoj fizički memorijski prostor, ovaj prostor senepotrebno troši dupliranjem istog sadržaja (programskogkoda)Rešenje - deljenje stranica (shared pages): PMT za različiteprocese preslikavaju stranice sa istim programskim kodomu isti fizičke okvire, dok se stranice sa podacimapreslikavaju različito (sopstveno za svaki proces)Preduslov: da se kod ne menja tokom izvršavanja!52/285


Segmentna organizacijaLogical Addresss dST+Physical AddresssTrap>limitbaseSegmentna organizacija podržava korisnički pogled naprogram i njegove podatke: adresni prostor je podeljen nalogičke celine – segmentePodelu na segmente vrši prevodilac prema logičkojstrukturi programa (npr. programski moduli, globalnipodaci, stek, dinamička memorija – heap itd.)53/285


Segmentna organizacijaZaštita se prirodno uklapa u segment kao logičku celinu čijise sadržaj tipično koristi na isti način:• deskriptor segmenta (ulaz u ST) sadrži graničnu vrednost (limit)koja štiti od prekoračenja veličine segmenta; npr. može seiskoristiti za HW proveru granica niza ako se niz smesti u zasebansegment• deskriptor segmenta se može proširiti bitima za prava pristupa;npr. segment sa instrukcijama ima samo pravo izvršavanja,segment sa konstantnim podacima samo pravo čitanja itd.• ove provere vrši HW (MMU) pri svakom preslikavanju; ukolikoprovera nije prošla, generiše se trapDeljenje segmenata se takođe lako implementira - STrazličitih procesa preslikavaju određeni logički segment uistu fizičku početnu lokaciju (base); mogu se deliti i samodelovi programa, npr. statičke biblioteke54/285


Segmentna organizacijaProblem: šta je sa adresiranjem kod skokova (instrukcijaskoka apsolutno adresira odredište skoka u istomsegmentu), ako se taj kod deli kao različit logički segmentu različitim procesima?Rešenje: koristiti samo relativne skokove u segmentimakoji se deleSegmenti su različite veličine, a moraju se alocirati umemoriji. Posledice - kao i kod kontinualne alokacije:• potrebna je dinamička alokacija memorije• kako izabrati slobodan prostor za smeštanje (first fit, best fit)• moguća je eksterna fragmentacija; rešenja ista kao i kodkontinualne alokacije:• kompakcija (skupo) ili• straničenje – segmentno-stranična organizacija55/285

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!