§ Diagrama cu secțiuni fixe.
Cea mai simplă modalitate de a gestiona memoria RAM este să o împărțiți în mai multe secțiuni cu o valoare fixă. Acest lucru se poate face manual de către operator în timpul pornirii sistemului sau în timpul producerii acestuia. Următoarea sarcină primită pentru execuție este plasată fie în coada generală (figura 20, a), fie în coada de așteptare pentru o anumită secțiune (figura 20, b).
Figura 20. Schema cu secțiuni fixe: (a) cu o coadă de procese comune,
(b) cu cozi de procese separate.
Subsistemul de gestionare a memoriei îndeplinește următoarele sarcini în acest caz:
· Compară mărimea programului care trebuie efectuat și partițiile libere, selectează partiția corespunzătoare,
Această schemă a fost implementată în IBM OS / 360 (MFT) și în DEC RSX-11.
Prima strategie de potrivire. Sarcina este plasată în prima secțiune adecvată.
· Strategia celui mai potrivit (Best fit). Sarcina este plasată în secțiunea unde este cea mai apropiată.
· Strategia cea mai grea. Când este plasat în cea mai mare secțiune, rămâne suficient spațiu pentru posibila plasare a unui alt proces.
Modelarea a arătat că, din punct de vedere al utilizării memoriei, aceste metode sunt aproximativ aceleași, dar prima cale este mai rapidă. Rețineți că strategiile listate sunt utilizate pe scară largă de alte componente ale sistemului de operare, de exemplu, pentru a plasa fișiere pe disc.
Dezavantaje ale acestei scheme:
· Numărul proceselor care rulează simultan este limitat de numărul de partiții,
· Schema propusă suferă în mare măsură de fragmentarea externă a pierderii de memorie, care nu este utilizată de nici un proces.
Fragmentarea - este prezența unui număr mare de spațiu liber neînvecinate este foarte mic (fragmente). Atât de mici că nici unul dintre program nou primit nu se poate încadra în oricare dintre secțiuni, deși volumul total al fragmentelor poate atinge dimensiuni considerabile, ceea ce depășește cantitatea necesară de memorie. Fragmentarea apare deoarece procesul nu este dedicat în totalitate să-l ia parte sau nu ca urmare a utilizării anumitor secțiuni care sunt prea mici pentru a rula programe pentru utilizator.
Fig. 21. Organizarea unei structuri cu suprapunere.
Puteți încărca alternativ programele A-B, A-C-D și A-C-E în memorie. Codul ramurilor structurii programului de suprapunere se află pe disc ca imagini de memorie absolută și sunt citite de driverul suprapus, dacă este necesar.
Pentru a proiecta suprapunerile, sunt necesare algoritmi specifici pentru mutare și legare. Pentru a descrie structura suprapusă, se folosește de obicei o limbă specială simplă (limba de descriere a suprapunerii). Setul de fișiere ale programului executabil este completat cu un fișier (de obicei cu extensia .odl) care descrie arborele de apel în interiorul programului
De exemplu, pentru exemplul prezentat în Figura 21, textul acestui fișier ar putea arăta astfel:
Legarea memoriei are loc în momentul încărcării următoare a uneia dintre ramurile programului. Suprapunerile nu necesită suport special de la sistemul de operare. Acestea pot fi implementate pe deplin la nivel de utilizator, cu o structură simplă a fișierelor.
Rețineți că aici pentru prima dată se manifestă proprietatea localității, ceea ce face posibilă păstrarea în memorie a acelor informații care sunt necesare la fiecare moment de calcul.
§ Schema cu partiții variabile
O schemă cu partiții variabile (dinamice) este mai eficientă. În acest caz, memoria aparatului nu este divizată în prealabil în secțiuni. La început, toată memoria este gratuită. Fiecare nouă sarcină primită este alocată memoriei necesare. Dacă memoria nu este suficientă, sarcina nu este acceptată pentru execuție și se află în coada de așteptare. După terminarea sarcinii, memoria este eliberată și o altă sarcină poate fi descărcată în această locație. Astfel, în orice moment, memoria RAM este o secvență aleatorie de secțiuni (secțiuni) ocupate și libere de mărime arbitrară. Suprafețele libere adiacente pot fi combinate într-una.
Figura 22 prezintă starea memoriei la momente diferite când se utilizează alocarea dinamică. Deci, la un moment dat în memorie este doar sistemul de operare, iar în momentul în care memoria este împărțită între 5 sarcini și sarcina P4, se termină, se lasă memoria. Sarcina P6, sosită în acest moment, este încărcată pe locul golit după sarcina P4.
Fig. 22. Alocarea memoriei de către partițiile dinamice
Sarcinile sistemului de operare la implementarea acestei metode de gestionare a memoriei sunt:
· Încărcarea sarcinii în secțiunea selectată și actualizarea tabelelor zonelor libere și ocupate,
· După finalizarea sarcinii, actualizarea tabelelor din zonele libere și ocupate.
Această metodă este, de asemenea, caracterizată prin fragmentarea externă datorită prezenței unui număr mare de zone de memorie libere. Problemele fragmentării pot fi diferite. În cel mai rău caz, putem avea o regiune de memorie liberă (pierdută) între cele două procese. Dacă combinăm toate aceste piese într-un singur bloc, putem plasa mai multe procese. Alegerea dintre prima potrivire și cea mai bună potrivire afectează slab cantitatea de fragmentare.
§ Diagramă cu partiții relocabile
Fig. 23. Alocarea memoriei prin partiții în mișcare
Deși procedura de compresie are ca rezultat o utilizare mai eficientă a memoriei, poate dura un timp considerabil, iar algoritmul de alegere a strategiei optime de compresie este foarte laborios, ceea ce deseori depășește avantajele acestei metode.
Acesta a fost mult timp o problemă în plasarea memorie de program, dimensiunea care depășește capacitatea de memorie (una dintre opțiunile pentru soluțiile sale organizarea structurilor care se suprapun discutate în 6.3.1) Acest lucru presupune implicarea programator activ în procesul de segmentare și de a descărca programul.
Sa sugerat să trecem problema la computer. Dezvoltarea arhitecturii computerelor a condus la o complicație semnificativă a organizării memoriei, respectiv sarcinile sistemului de operare pentru gestionarea memoriei au devenit mai complicate și mai extinse. Una dintre principalele îmbunătățiri ale arhitecturii a fost apariția unei memorii virtuale (memorie virtuală). A fost prima dată realizată în 1959 pe computerul Atlas, dezvoltat la Universitatea din Manchester, și a devenit popular doar după un deceniu.
Definiția. O resursă virtuală este o resursă pe care un utilizator sau un program de utilizator pare să posede proprietăți pe care nu le deține.
De exemplu, utilizatorul poate fi prevăzut cu memorie virtuală, dimensiunea care depășește toate RAM disponibile în sistem real. Utilizatorul scrie programul ca și cum ar avea o memorie omogenă o cantitate mare, dar, în realitate, toate datele utilizate de program sunt stocate pe unul sau mai multe dispozitive de stocare eterogene, de obicei, pe disc, și este adesea necesară pentru a afișat în memoria reală.
Definiție: memoria virtuală ¾ este o colecție de software și hardware care permit utilizatorilor să scrie programe care sunt mai mari decât memoria disponibilă; pentru această memorie virtuală rezolvă următoarele sarcini:
· Introducerea de date în dispozitivele de memorie de diferite tipuri, de exemplu, o parte dintr-un program în memorie, o parte a discului;
· Mută ca date necesare între dispozitive de stocare de diferite tipuri, de exemplu, încarcă partea necesară a programului din disc în memoria principală;
Toate aceste acțiuni sunt efectuate automat. fără participarea programatorului, adică mecanismul de memorie virtuală este transparent pentru utilizator.
Astfel, cu ajutorul memoriei virtuale se rezolvă de obicei două sarcini:
· Programul nu este limitat de cantitatea de memorie fizică. Aceasta simplifică dezvoltarea programelor, deoarece puteți utiliza spații virtuale mari fără să vă faceți griji cu privire la cantitatea de memorie utilizată.
· Deoarece este posibilă partajarea parțială a unui program (proces) în memorie și flexibilizarea realocării memoriei între programe, este posibilă alocarea mai multor programe în memorie, ceea ce crește sarcina procesorului și capacitatea sistemului.
· Cantitatea de I / O pentru descărcarea unei porțiuni a programului pe disc poate fi mai mică decât în versiunea clasică de swap, în cele din urmă, fiecare program va funcționa mai repede.
În al doilea rând, oferirea controlului accesului la segmentele individuale ale memoriei și, în special, protejarea programelor de utilizator una de cealaltă și protejarea sistemului de operare de la programele utilizatorilor - oferind protecție.