Descripcion del problema - dacunamo/Proyecto1 GitHub Wiki

Descripcion del problema

El proyecto consiste en el diseño e implementación de un nuevo tipo de dato en C++ denominado MPointer. Este es una clase template (MPointer) que encapsula un puntero. Por lo tanto el proyecto consiste en crear una biblioteca para MPointer que pueda ser utilizada por cualquier programador para el desarrollo de una aplicación en C++. Se investiga la sobrecarga de operadores como, & y * para MPointer, el proyecto sera realizado en dos iteraciones.

Primera Iteracion

MPointer tiene al menos un atributo de tipo T*. El programador que utiliza la biblioteca, puede crear un MPointer,se reserva la memoria para MPointer y tambien para el dato int. El programador puede almacenar un dato. El operador * es sobrecargado y almacena el valor en la memoria recervada para el int, tambien sse puede obtener el bvalor almacenado.

Se puede verificr el tipo de los operandos con el operador =. Si ambos son MPointer, copia e puntero y el id de MPointer dentro del GC. Si el operando de la derecha es distinto a MPointer, se verifica si el tipo es igual alvalor del MPointer, si se cuple se guarda como nueva variable.

El operador & se sobrecarga y se obtiene el valor guardado. MPointer tiene un destructor que se encarga de liberar la memoria del pointer guardado internamente.

MPointer no requiere de ningún runtime especial. Sin embargo, antes de usar MPointer, el programador debe inicializar la clase singleton MPointerGC que se ejecuta como un thread cada n segundos. Cada vez que se llama el método New de MPointer, se guarda la dirección de memoria de la instancia de MPointer dentro de la clase MPointerGC.

MPointerGC tiene una lista enlazada donde guarda direcciones de memoria de los MPointer conocidos. MPointerGC le da a la instancia de MPointer, un Id autogenerado.

El destructor de MPointer llama a MPointerGC para indicar que la referencia se ha destruido. Una vez que el conteo de referencias de un MPointer llegue a cero, el MPointerGC lo libera, evitando memory leaks.

Para probar la funcionalidad de MPointer, deberá implementar QuickSort, BubbleSort e InsertionSort utilizando listas doblemente enlazadas que utilizan MPointers internamente.

Segunda Iteracion

En esta iteración, se tendrá memoria distribuida. En esta modalidad, la biblioteca MPointers se usa de la siguiente forma:

  1. El server se inicia, pasando como parámetro la cantidad de bytes que debe reservar. El server hace un único malloc y guarda la referencia al inicio de la memoria reservada.

  2. El programador llama a MPointer_init pasando como parámetro el IP y puerto donde está el servidor.

  3. Cuando el programador llama al método New de MPointer, en vez de hacer malloc para el dato, va a enviar un mensaje al servidor solicitando memoria para almacenar el dato.

  4. El servidor cuando recibe una solicitud de creación de memoria, utiliza el mapa de memoria para encontrar un espacio en el heap y crea una nueva entrada en el mapa de memoria

  5. Cuando el programador asigna un valor al MPointer, se envia un mensaje al server indicando que salve el valor en memoria.