You are on page 1of 7

UNIVERSIDAD MARIANO GALVEZ

INGENIERIA EN SISTEMAS
QUINTO SEMESTRE
ING. KELITA MAYORGA
ESTRUCTURA DE DATOS














MEMORIA DINAMICA
MEJOR AJUSTE



















HECTOR RENATO DE LA CRUZ OJEDA 1790-12-884
LIZARDO MANOLO BENTACOURTH PEREZ 1790-05-13686
LUIS GUILLERMO ALVARADO VERLUIZ 1790-05-13339
MARIO ARTURO CIFUENTES PERE -1790-02-11413
RAFAEL AUGUSTO MOLINA CASTILLO -1790-10-11833
JENNIFFER BEATRIZ GARCIA TARACENA 1790-12-3784


ASIGNACIN CONTIGUA DE MEMORIA

Particiones Variables: Mejor Ajuste ("Best Fit")

El sistema operativo (s.o.) es el responsable de asignar memoria principal a los procesos
para que puedan ser ejecutados.

En un modelo de memoria con asignacin contigua, todo el espacio lgico de un proceso
(Cdigo, Datos, Pila) ha de estar ubicado de forma contigua en memoria principal, es decir
en direcciones fsicas consecutivas.

Cuando un proceso finaliza libera la memoria ocupada. (Asignacin Contigua de Memoria)




ASIGNANDO MEMORIA CON PARTICIONES VARIABLES

Se considera inicialmente toda la memoria como un nico hueco para ubicar procesos.




Cada vez que llega un proceso al sistema se busca un hueco lo suficientemente grande para
ubicarlo.

Con particiones variables slo se le asigna al proceso el espacio que necesita del total del hueco y
el resto pasa a formar un nuevo hueco.



El estado de la memoria vara con el tiempo, puesto que cuando un proceso finaliza su ejecucin
se libera su memoria y se crea un hueco nuevo.

El S.O. lleva la contabilidad de huecos libres y el tamao de dichos huecos.

La lista de huecos puede estar ordenada por direcciones o por tamaos, buscando siempre la
eficiencia.



La fragmentacin externa aparece cuando hay suficiente memoria para ubicar un nuevo proceso,
pero el espacio disponible no est contiguo. La solucin al problema de la fragmentacin externa
es la compactacin.











Ejemplo Mejor Ajuste:

Para el proceso de 212K:

-Primer ajuste: 500 K (es la primera particin que puede albergar el proceso).
-Mejor ajuste: 300 K (sobra decir el por qu).
-Peor ajuste: 600 K (se busca la particin libre ms grande, y si el proceso se puede cargar en ella,
se carga).

Se "elimina" de la lista de particiones la particin que acabamos de asignar en el paso anterior, y
repetimos con las restantes el procedimiento para los subsiguientes procesos.

Continuamos con el de 417 K:

-Primer ajuste: tenemos las particiones de 100 K, 200 K (la de 500 K ya la habamos asignado), la
de 300 K y la de 600 K. Por tanto, para este proceso y por este mtodo asignamos la de 600 K.

-Mejor ajuste: La lista actualizada de particiones es: 100 K, 500 K, 200 K y 600 K. Por tanto,
asignamos la de 500 K a este proceso.

-Peor ajuste: La lista actualizada de particiones es: 100 K, 500 K, 200 K y 300 K. Por tanto,
asignamos la de 500 K a este proceso.

Y as se contina con el ejercicio, hasta asignar memoria a todos los procesos. Tericamente, el
algoritmo que mejor aprovecha la memoria es el de "mejor ajuste".

"Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son mejores que el
peor ajuste en cuanto a minimizar tanto el tiempo del almacenamiento. Ni el primer o el mejor
ajuste es claramente el mejor en trminos de uso de espacio, pero por lo general el primer ajuste
es ms rpido."


















Algoritmo: Gestin en Memoria Dinmico, Mejor Ajuste (Best Fit)

Variable Entero c,i,j,k,n,l;
Variable Entero m[10],p[10],po[20];
Variable Entero flag,z,y;

INICIO
Escribir: "********** MEMORIA DINAMICA **********";

Escribir: "Cantidad de Particiones: ";
Leer: n;

Escribir: Tamao de las Particiones (KB)";

Para (i->1 hasta i<=n hacer i++)
Inicio Para
Escribir: PARTICION "<- i <- " :";
Leer: m[i];
po[i] -> i;
Fin Para

Escribir: "Cantidad de Procesos: ";
Leer: j;

Escribir: "Tamao de los Procesos (KB)";

Para (i->1 hasta i<=j hacer i++)
Inicio Para
Escribir: "PROCESO "<- i <-" :";
Leer: p[i];
Fin Para

Escribir: "******** BIENVENIDO MEJOR AJUSTE **********";

Escribir: "Precione 1 para ver el Mejor Ajuste en la Memoria: ";
Leer: c;

Decisin del Caso (c)
Inicio Desicin del Caso
caso 1:
Para (i->1 hasta i<=j hacer i++)
Inicio Para
flag -> 1;
Para (k->1 hasta k<=n hacer k++)
Inicio Para
Si (p[i]<=m[k])
Inicio Si
Mostrar: "Proceso "<- i;
Mostrar: "tamao del
almacenamiento "<- p[i];
Mostrar: "KB asignado a la
Particin: "<-po[k];
m[k]->m[k]-p[i];
detener;
Fin Si
Sino
Inicio Sino
flag++;
Fin Sino
Fin Para
Si (flag>n)
Inicio Si
Mostrar: "Proceso "<- i;
Mostrar: "tamao del almacenamiento "<-
p[i];
Mostrar: "KB no puede ser
Particionado!!!!";
Fin Si
Fin Para
detener;
Fin Desicin del Caso
Pausa;
retornar 0;
FIN


Programa C++: Mejor Ajuste (Best Fit)

#include <conio>
#include <iostream>

int main()
{
int c,i,j,k,n,l,m[10],p[10],po[20],flag,z,y;
cout<<"********** MEMORIA DINAMICA **********";
cout<<"\n\nCantidad de Particiones:\t";
cin>>n;
cout<<"\nTamao de las Particiones (KB)\n";
for(i=1;i<=n;i++)
{
cout<<"\nPARTICION "<<i<<" :\t";
cin>>m[i];
po[i]=i;
}
cout<<"\nCantidad de Procesos:\t";
cin>>j;
cout<<"\nTamao de los Procesos (KB)\n";
for(i=1;i<=j;i++)
{
cout<<"\nPROCESO "<<i<<" :\t";
cin>>p[i];
}
cout<<"\n******** BIENVENIDO MEJOR AJUSTE **********\t";
cout<<"\n\nPrecione 1 para ver el Mejor Ajuste en la Memoria: \t";
cin>>c;
switch(c)
{
case 1:
for(i=1;i<=j;i++)
{
flag=1;
for(k=1;k<=n;k++)
{
if(p[i]<=m[k])
{
cout<<"\nProceso "<<i<<" tamao del almacenamiento "<<p[i]<<"KB asignado a la
Particion:\t"<<po[k];
m[k]=m[k]-p[i];
break;
}
else
{
flag++;
}
}
if(flag>n)
{
cout<<"\nProceso "<<i<<" tamao del almacenamiento "<<p[i]<<"KB no puede ser
Particionado!!!!";
}
}
break;
}
getch();
return 0;
}