Sunteți pe pagina 1din 23

Planificatorul

memoriei
Clasificarea planificatorului de memorie

• Planificatorul memoriei se împarte în două clase:


• 1. Planificatorul de memirie virtual - procesul
parțial este încărcat în memoria operativă și
parțial în memoria virtuală - paginare (paging).
Dacă este posibil procesul se încarcă complect
în memoria operativă (swapping)
• 2. Planificatorul de memirie simplu – care
încarcă inițial tot procesul în memoria operativă.
Sistem unic de sarcină fără paginare pe disc

Sistemul de operare Draiverele


În MO dispozitivelor în
MP

Programul
Programul utilizatorului Programul
utilizatorului
utilizatorului

Sistemul de Sistemul de
Operare în MO operare în MO

0
Multitasking cu partiții fixe

1. Memoria se împarte în n partiții (eventual


inegale), cu rînduri multiple de intrare.

2. Memorie se împarte în n partiții (eventual


inegale), cu un rînd de intrare .
Exemplu
Partiția 1 Partiția 1

Partiția 2
Partiția 2

Partiția 3 Partiția 3

Partiția 4
Partiția 4

Sistemul
Sistemul
de operare
de operare
Paging
Există două abordări de bază pentru managementul
memoriei , în dependență de hardware-ul disponibil .

•1. Cea mai simplă strategie , numită svoping


(swapping) sau paginare obișnuită constă în faptul că
fiecare proces este pe deplin transferat în memoria
operativă, care rulează un timp și apoi revine în
întregime pe disc .
•2. O altă strategie , care poartă numele de memorie
virtuală , permite programelor să lucreze chiar și atunci
când acestea sunt doar parțial în memoria operativă.
•Dacă memoria este alocata dinamic , procesul trebuie
să fie controlat de către sistemul de operare . Există
două moduri de utilizare memoriei: bitmap sau hărți de
octeți și listele de zone libere.
Managementul memoriei cu bitmap

Atunci când se lucrează cu memoria bitmap memoria este


subdivizată în blocuri cu mărimi de la kilobytes pînă la
câteva cuvinte . În harta bitmap pentru fiecare bloc liber
corespunde un bit egal cu 0 , iar fiecarui bloc ocupat îi
corespunde un bit egal cu 1.
Principala problemă cu acest sistem este faptul că decizia
de a muta în memoria blocul - K planificatorul de
memorie ytctsită de a găsi în harta bitmap o serie de k
biți consecutivi de zerouri. Căutare zonei de lungime
predeterminată de harta bitmap într- o operațiune este
lentă ( deoarece secvența dorită de biți pot traversa
limitele de cuvinte în matrice de biți ) .
Managementul memoriei cu listele de
zone libere
Acest sprijin a listelor înlănțuite de intervale libere și
ocupate de memorie, unde un segment este sau proces
sau zona dintre cele două procese.
Fiecare inregistrare în listă indică dacă memoria este
liberă ( H, de la hile - gaura ) sau ocupată de proces ( P,
proces) ; adresa la care sa inceape acest domeniu;
lungimea sa; conține un pointer la următoarea
înregistrare .
Este mai convenabil de a avea o listă cu două legături
decât cu una. Această structură simplifică căutarea
înregistrarii anterioare și evaluarea conectivității .
Algoritmi de planificare
1. Algoritmul „primul interval potrivit. „ Managerul memoriei
scanează lista zonelor , atâta timp cât nu găsrște
interval liber suficient. Apoi, această secțiune este
împărțită în două părți: prima este dată procesului, în
timp ce celălalt rămâne neutilizată . Aceasta este un
algoritm rapid deoarece căutarea se reduce cât mai
mult posibil .
2. Algoritmul „intervalul următorul potrivit." Acesta
funcționează la fel ca primul algoritm , dar de fiecare
dată când găsește un fragment liber corespunzător îi
memorează adresa. Și când data viitoare algoritmul
este chemat pentru a căuta, începe chiar de la locul în
care sa oprit ultima dată în loc de a începe căutarea
de la începutul listei . Simularea algoritmului a arătat că
performanța sistemului, „următorul potrivir" este un pic
mai rău decât "primul potrivit "
continuare
3. Algoritmul „cel mai potrivit interval”. Se caută pe întreaga
listă și se selectează cea mai mică bucată gratuită
potrivită. Algoritmul este mai lent decât „prima potrivire”,
deoarece trebuie să caute întreaga listă de fiecare dată.
Produce rezultate și mai proaste, deoarece tinde să
umple memoria cu zone libere foarte mici, inutile, adică
fragmentează memoria.

4. Algoritmul „cel mai nepotrivit interval”. El alege


întotdeauna cea mai mare suprafață liberă, din care
după împărțire există o zonă de dimensiuni suficiente și
care poate fi utilizată ulterior. Cu toate acestea,
simulările au arătat că nici aceasta nu este o idee bună.

5. Algoritmul rapid potrivit, menține liste separate pentru


unele dintre cele mai frecvente dimensiuni solicitate.
Memoria virtuală

Dacă procesul este voluminos, se ia decizia de a împărți


programul în părți numite overlays.

Metoda modernă dezvoltată de repartizare a memoriei este


cunoscută sub numele de memorie virtuală. Ideea de
bază din spatele memoriei virtuale este că dimensiunea
combinată a programului, a datelor și a stivei poate
depăși cantitatea de memorie fizică disponibilă.

Sistemul de operare stochează părțile programului care


sunt utilizate în prezent în RAM, restul pe disc. Memoria
virtuală poate funcționa și într-un sistem multitasking, cu
porțiuni din multe programe care se află în memorie în
același timp.
Memoria paginării
Adresele generate de software, numite adrese virtuale,
formează spațiul de adrese virtuale. Când se utilizează
memoria virtuală, adresele virtuale sunt transmise
managerului de memorie(MMU — Memory Management
Unit), are mapează adresele virtuale la adresele de
memorie fizică.
Spațiul de adrese virtuale este împărțit în unități numite
pagini. Unitățile corespunzătoare din memoria fizică se
numesc blocuri de pagină (page frame). Pagini și
blocurile lor au întotdeauna aceeași dimensiune.
Sistemele reale au folosit dimensiuni de pagină de la 512
octeți.
În hardware-ul real, paginile prezente fizic în memorie sunt
urmărite folosind bitul de prezență / absență.
Tabelele de pagini
Scopul unui tabel de pagini este să mapeze paginile virtuale cu
blocurile de pagini. Un tabel de pagini este o funcție care ia un
număr de pagină virtuală ca argument și are ca rezultat un număr
de bloc fizic. Folosind rezultatul acestei funcții, câmpul de pagină
virtuală din adresa virtuală poate fi înlocuit cu un câmp de bloc de
pagină, formând astfel o adresă fizică.

Fiecare proces are nevoie de propriul tabel de pagini (deoarece are


propriul spațiu virtual de adrese).Întreaga tabelă de pagini este
situată în RAM.

Probleme importante:

1. Tabelul de pagini poate fi prea mare.

2. Afișajul trebuie să fie rapid.

Pentru a rezolva problema de a păstra permanent tabele imense de


pagini în memorie, multe computere utilizează un tabel de pagini
pe mai multe niveluri.
Algoritmi de înlocuire a paginii
1. Algoritmul optim este atunci când are loc o întrerupere de pagină, există
un set de pagini în memorie. Una dintre aceste pagini va fi accesată de
următoarea comandă procesor (pagina care conține comanda necesară).
Nu vor exista linkuri către alte pagini pentru următoarele câteva comenzi.
Fiecare pagină poate fi marcată cu numărul de comenzi care vor fi
executate înainte de primul apel către această pagină. Algoritmul de
paginare optim vă spune că pagina cu cea mai mare etichetă trebuie
descărcată. Algoritmul aferent are o problemă: nu este executabil. În
momentul unei întreruperi a paginii, sistemul de operare nu are cum să știe
când va avea loc următorul apel către fiecare pagină.

2. Algoritmul NRU este o pagină recent neutilizată. Pentru a determina ce


pagini sunt utilizate și care nu, majoritatea computerelor cu memorie
virtuală mențin doi biți de stare asociați fiecărei pagini. Bitul R (Referențiat)
este setat ori de câte ori este accesată o pagină (citire sau scriere). Bitul M
(modificat) este setat atunci când pagina este scrisă (adică modificată).
Fiecare element al tabelului de pagini conține biți.Este important să
actualizați acești biți la fiecare acces la memorie, deci trebuie să fie setați
în hardware.
continuare
Biții R și M sunt utilizați pentru a construi un algoritm simplu de înlocuire a
paginii. Când pornește un proces, ambele biți de pagină pentru toate
paginile sale sunt setate la 0 de către sistemul de operare. Fiecare
întrerupere a temporizatorului șterge bitul R pentru a distinge paginile care
nu au fost accesate de mult timp de cele la care au fost referite. Când apare
o întrerupere de pagină, sistemul de operare verifică toate paginile și le
împarte în patru categorii pe baza valorilor actuale ale biților R u M:

Clasa 0: nu au existat accesări sau modificări.


Clasa 1: fără accesări, pagina schimbată.
Clasa 2: a fost un hit, pagina nu a fost schimbată.
Clasa 3: s-au produs atât conversii, cât și schimbări.

Algoritmul Nu a fost folosit recent (NRU Not Recently Used ) elimină pagina
prin căutarea aleatorie a clasei mai puțin numerotate, necompletate. Acest
algoritm presupune că este mai bine să descărcați o pagină modificată care
nu a fost accesată pentru cel puțin o bifă a ceasului sistemului (de obicei 20
ms) decât să ștergeți o pagină utilizată frecvent. Apelul algoritmului NRU
constă în faptul că este ușor de înțeles, moderat dificil de implementat și
oferă performanțe care, desigur, nu sunt optime, dar pot fi suficiente.
continuare
3. Primul venit primul realizat FIFO Sistemul de operare menține o listă cu
toate paginile aflate în prezent în memorie, prima pagină fiind cea mai
veche și cele din coada listei cele mai recente. Când apare o întrerupere de
pagină, pagina din capul listei este descărcată din memorie și o nouă
pagină este adăugată la sfârșitul listei. Algoritmul FIFO este rar folosit în
forma sa originală.
4. Algoritmul "a doua încercare" La cea mai veche pagină, se învață bitul R.
Dacă este egal cu 0, pagina nu numai că rămâne în memorie mult timp, dar
nu este folosită, așa că este imediat înlocuită cu una nouă . Dacă bitul R
este 1, atunci i se atribuie valoarea 0, pagina este mutată la sfârșitul listei și
timpul de încărcare este actualizat, adică se consideră că pagina tocmai a
intrat în memorie. Al doilea algoritm de încercare caută în listă cea mai
veche pagină care nu a fost accesată în intervalul de timp anterior. Dacă au
existat linkuri către toate paginile, atunci „a doua încercare” se transformă
într-un algoritm FIFO obișnuit.
5. Algoritmul ceasului stochează toate blocurile de pagini într-o listă circulară
în formă de ceas. Când apare o întrerupere de pagină, se verifică pagina
către care este direcționată săgeata. Dacă bitul său R este 0, pagina este
descărcată, o nouă pagină apare în locul său în cercul orar și săgeata se
deplasează înainte cu o poziție. Dacă bitul R este 1, atunci este șters,
săgeata trece la pagina următoare. Acest proces se repetă până când se
găsește pagina cu bitul R = 0.
продолжение
6. Algoritmul LRU - Cea mai lungă pagină neutilizată - Când apare o
întrerupere de pagină, pagina care nu a fost folosită cel mai mult
timp este descărcată din memorie.
Pentru a implementa complet algoritmul LRU, este necesar să
mențineți o listă legată a tuturor paginilor din memorie, cu ultima
pagină utilizată în partea de sus a listei și cea care nu a fost
accesată cel mai mult la sfârșit. Partea dificilă este că lista trebuie
actualizată cu fiecare acces la memorie. Găsirea unei pagini,
ștergerea acesteia și apoi inserarea ei în partea de sus a listei sunt
operațiuni care necesită mult timp, chiar dacă acestea sunt
realizate în hardware.

Are 2 metode de implementare:


1. Contorul hardware pe 64 de biți C, care crește automat după
fiecare comandă.

2. O matrice de n x n biți inițial egală cu zero. Ori de câte ori se


accesează blocul de pagină k, hardware-ul setează mai întâi toți
biții din rândul k la 1, apoi setează toți biții din coloana k la zero.
continuare

7. Algoritm de îmbătrânire (aging). Algoritmul NFU (Nu se


utilizează frecvent - pagină utilizată rar). Necesită un
contor de programe asociat fiecărei pagini din memorie,
inițial zero. În timpul fiecărei întreruperi de timp, sistemul
de operare examinează toate paginile din memorie.
Bitul R al fiecărei pagini este adăugat la contor. Contoare
încearcă să țină evidența frecvenței cu care a fost
accesată fiecare pagină.
Cu o întrerupere a paginii, pagina cu cea mai mică valoare
a contorului este selectată pentru înlocuire.
continuare
8. Algoritmul setului de lucru .Setul de pagini pe care un
proces îl folosește în prezent se numește setul de lucru.
Dacă întregul set de lucru este în memorie, procesul va
rula fără a provoca multe erori până când va trece la o
altă fază de execuție.

Multe sisteme țin evidența setului de lucru al fiecărui proces


și se asigură că acesta este în memorie înainte de
începerea procesului. Această abordare se numește
modelul setului de lucru.
Este conceput pentru a reduce semnificativ procentul de
întreruperi de pagină. Încărcarea paginilor înainte de a
permite rularea unui proces se numește paginare în
avans (prepaging).
continuare
9. Algoritmul WSCIock este un algoritm bazat pe ceas, dar folosește și
informații despre setul de lucru. Necesită o structură de date sub
forma unei liste circulare a blocurilor de pagini, ca în algoritmul
„ceas”. Inițial, această listă este goală.
Când prima pagină este încărcată, aceasta este adăugată la listă. Pe
măsură ce sosesc paginile, acestea sunt adăugate la listă, formând
un inel. Fiecare intrare, cu excepția bitului R (afișat) și a bitului M
(neafișat), conține un câmp timpul ultemei realizări din algoritmul
setului de lucru de bază.
Pentru fiecare pauză de pagină, se verifică mai întâi pagina către care
indică săgeata. Dacă bitul R este 1, înseamnă că pagina a fost
utilizată în timpul ultimei bifări de ceas, deci nu este ștearsă. Apoi
bitul R este setat la 0, săgeata trece la pagina următoare și
algoritmul se repetă pentru acesta.
Gestionarea întreruperii de pagină

1. Hardware-ul comută sistemul în modul nucleu menținând contorul


programului pe stivă. Pe majoritatea mașinilor, registrele speciale
din procesor stochează câteva informații despre starea instrucțiunii
curente.

2. Este lansat un program scris în asamblare care păstrează registrele


principale și alte informații în schimbare, protejându-le de
distrugerea de către sistemul de operare. Acest program apelează
sistemul de operare ca o procedură.

3. Sistemul de operare detectează că a avut loc o întrerupere de


pagină și încearcă să găsească pagina virtuală necesară. Adesea
informațiile necesare sunt conținute într-unul din registrele
hardware. Dacă nu, sistemul de operare trebuie să scoată un
contor de instrucțiuni din stivă, să selecteze instrucțiunea și să o
analizeze programatic pentru a determina ce făcea când a apărut
eroarea.
continuare
4. De îndată ce este cunoscută adresa virtuală care a provocat
întreruperea, sistemul verifică dacă această adresă este validă și
dacă securitatea este în concordanță cu accesul. Dacă nu, un
semnal este trimis procesului sau procesul este ucis. Dacă adresa
este validă și nu a apărut nicio eroare de securitate, sistemul
verifică blocurile de pagină gratuite. Dacă nu există blocuri libere,
începe algoritmul de înlocuire a paginii.

5. Dacă blocul de pagină selectat este murdar, pagina este programată


să fie scrisă pe disc și apare un comutator de context, suspendând
procesul de întrerupere și permițând un alt proces să ruleze până
când pagina este transferată pe disc. În orice caz, blocul este
marcat ca ocupat pentru a preveni utilizarea acestuia în alte scopuri.

6. De îndată ce blocarea paginii este ștearsă, sistemul de operare


caută adresa de pe disc unde se află pagina solicitată și
programează o operație pe disc pentru ao muta în memorie. În
timpul încărcării paginii, procesul care a provocat întreruperea este
încă suspendat și se execută un alt proces de utilizator, dacă este
disponibil.
continuare

7. Când o întrerupere de disc marchează că o pagină a ajuns în


memorie, tabelul de pagini este actualizat pentru a reflecta poziția
sa, iar blocul este marcat ca normal.

8. Comanda întreruptă revine la starea din care a început și contorul de


comenzi al procesului suspendat (pe stivă sau în locația memoriei
sistemului) este ajustat pentru a indica acea comandă.

9. Procesul întrerupt este programat și sistemul de operare returnează


controlul la rutina de asamblare care l-a numit.

10. Această rutină reîncarcă registre și alte informații de stare și


returnează controlul în spațiul utilizatorului pentru a continua
executarea programului utilizatorului ca și cum nu s-ar fi produs
nicio întrerupere.