Gestió de memòria

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

Introducció

La seua labor és la de portar el control de quines parts de la memòria estan en ús i quines no ho estan, assignar memòria a processos quan la necessiten i retirar quan acaben, administrar l'intercanvi entre la memòria central i el disc quan la memòria central no siga suficient per contenir tots els processos.

En aquest tema començarem estudiant el sistema de gestió de la memòria més simple sencill, després progressarem gradualment analitzant sistemes cada vegada més elaborats.


Administració de la memòria sense intercanvi

Els sistemes d'administració de la memòria es poden dividir en dues classes: els que mouen els processos entre la memòria central i el disc durant l'execució (intercanvi i paginació) i aquells que no ho fan. Els segons són més simples, l'intercanvi i la paginació són estratagemes produïdes principalment per la insuficiència de la memòria central per contenir tots els programes al mateix temps.


Gestió de la memòria sense reasignació

En aquest cas, el compilador assigna a les dades e instruccions direccions físiques que no poden cambiar durant l'execució del programa. És un sistema molt sencill, però al no ser reasignables les direccions de memòria, dificulta la multiprogramació i la protecció de la memòria. El problema és que, abans de la compilació, deuriem conèixer les direccions de memòria que tindrà disponible el programa.

Els sistemes operatius amb aquesta gestió han de ser monotarea. Per exemple MS-DOS

Gestió de la memòria amb reasignació

Ens interessa que el compilador no genere direccions definitives, sinó reassignables. Si la reassignació es fa en temps de càrrega es diu estàtica i si es fa en temps d'execució es diu dinàmica. Els processos no saben la direcció real que estan utilitzant. Per a ells, sempre comença per la 0.

Si la reassignació és estàtica, la Unitat de Gestió de la Memòria (MMU), conté un registre base al qual se li sumarà la direcció de la memòria que necessite el procés. Però el valor d'aquest registre no pot canviar durant l'execució del programa. El canviar aquesta direcció implicaria poder moure el procés a un altre lloc de la memòria. El problema de la estàtica és que no podem compactar la memòria i podem provocar fragmentació.

Amb la reassignació dinàmica, podem recol·locar els processos per deixar buits majors.

Reassignaciodinamina.png


Gestió de la memòria amb intercanvi

Amb la reassignació dinámica apareixen possiblitats noves com la càrrega dinàmica, que permet carregat parts del programa sols quant fan falta i l'enllaç dinàmic, per a les biblioteques dinàmiques.

Per a possibilitar la càrrega dinàmica, és necessari comptar amb un mecanisme per a passar els fragments de programa de la RAM al disc o dels disc a la RAM quant fan falta. Aques mecanisme es diu swapping. I es parla de swap in quant es carrega en al RAM i swap out quant es passa al disc. L'encarregat de implementar aquest mecanisme és el Planificador a mig plaç.

El planificador a mig plaç necessita un criteri per a elegir el procés que entrarà a la RAM i un criteri per a elegir a la víctima que es quedarà fora. Amés, necessita un espai reservat en disc per a poder fer-ho.

Aquest espai és la partició swap de Linux o el fitxer pagefile.sys de Windows. En el cas de Windows, el fitxer està per defecte en c:, encara que es pot canviar.


Gestió de la memòria contigua

El cas trivial és en el que no hi ha multiprogramació i sols cal establir un registre base per a separar l'espai del SO de l'espai del procés.

Contigua.png

És insuficient si volem poder tindre més d'un procés a la vegada.

L'evolució són les particions múltiples. Aquestes poden ser de mida fixa MFT o variable MVT. Les de mida fixa poden ser totes iguals o no. Particionsmultiples.png

Les particions de mida fixa simplifiquen la protecció, ja que no és necessari guardar un registre límit per a cada partició. Amés, simplifiquen la gestió de l'espai lliure.

Si les particions no són totes iguals o són de mida variable, cal reservar espai per a un procés segons un d'aquests algoritmes:

  • Millor Buit (el més menut on cap)
  • Pijor buit (el més gran)
  • Primer buit (el primer buit trobat on cap)

En general, el primer o millor buit donen millor rendiment.

Per a evitar que un procés puga accedir a una direcció de memòria que no li correspon, cal implementar un mecanisme de protecció amb un registre base i un registre límit.

Protecciomemoria.png

El problema de la fragmentació

És el gran problema de la memòria

  • Fragmentació interna (MFT) Si les particions de mida fixa, els processos no tenen perquè ocupar tot l'espai reservat. El que sobre no es pot aprofitar. Per un altra banda, si les particions les fem menudes per a que no sobre espai, és possible que no puguen entrar processos grans. La solució és poder partir el procés en parts més menudes que sí entren en les particions.
  • Fragmentació externa (MVT) Si les particions són de mida variable, és possible que es creen buits tan menuts que ningún procés puga aprofitar-los. La solució és compactar la memòria, però és molt ineficient.

La solució de dividir el programa en parts més menudes es fà amb dos estratègies: segmentació i paginació.

Segmentació