Asignacion de memoria virtual

Iniciado por dokomaster, 10 Septiembre 2016, 02:28 AM

0 Miembros y 1 Visitante están viendo este tema.

dokomaster

debo hacer un programa que a partir de un vector de caracteres asignado con new
simule el comportamiento del sistema operativo cuando las funciones antes mencionadas son invocadas. Para ello debe pensar que:
El vector creado es la memoria ram.
Las funciones malloc, realloc, free y memset deberan ser implementadas pensando en el
punto anterior.
Los punteros void que usan algunas funciones, seran simplemente una estructura (struct), que almacenara el nombre del puntero, donde comienza en el vector "memoria ram" y que tamaño tiene.
Debe salvaguardar la integridad de la memoria, por lo que cada nueva asignacion de
esta (malloc,realloc) debe verificar que la nueva memoria asignada esta libre (no ha sido asignada previamente) y que existe espacio suficiente en la memoria.
Las funciones a ejecutar en este "sistema de memoria" seran entregadas al programa a
traves de un archivo de texto, obviamente yo haré el archivo de texto asique es lo de menos, mas que nada necesito ayuda el los puntos entregados.

La primera linea contiene el numero de elementos del vector "memoria ram".
A partir de ahi tendra una serie de funciones codificadas con un numero diferente en
cada linea con el siguiente formato:
• Para malloc el codigo es 1, seguido de un string con el nombre del puntero y un
numero que indicar´a size. Ej: asignar 8 bytes = 1 ptr 8.
• Para realloc el codigo es 2, seguido de un string que es el nombre del puntero que
debe ser modificado y un numero que es el nuevo size. Ej: reasignar a ptr 10 bytes
= 2 ptr 10.
• Para free el codigo es 3, seguido de un string que es el puntero a eliminar. Ej:
liberar ptr = 3 ptr.
• Para memset el codigo es 4, seguido de un string que indica el puntero, un numero
que indica el value y otro n´umero que indica el num. Ej: setear a 0 la memoria
asignada por ptr las siguientes 2 posiciones = 4 ptr 0 2.
• Una linea que comienza con 0, finaliza el programa.
Un ejemplo de este archivo de entrada serıa:
100
1 ptr1 10
1 ptr2 10
1 ptr3 10
2 ptr1 50
3 ptr2
4 ptr1 0 10
0

aca tengo las funciones ya definidas:

   void malloc(string ptr, int size)
{
...

}
void realloc(tring ptr, int size)
{
...

}
void free(string ptr)
{
...

}
void memset(sting ptr, int value, int n)
{
...

}
void print_ram()
{
for(int i=0; i<memtotal; i++)
{
cout<<(int)memoriaram[i]<<" ";

}
cout << endl;
exit(0);
}
}


obviamente con los switch case mas arriba, solo puse las funciones ya definidas para que me ayuden o iluminen un poco como usarlas. si necesitan mas codigo de las variables globales y locales me lo piden ya que las tengo puestas mas arriba del codigo.

MOD EDIT: Etiquetas GeSHi.