Está en la página 1de 4

SERVICIOS DE LA GESTIN DE MEMORIA Servicios genricos de memoria Las labore que lleva a cabo el sistema de gestin de memoria son

ms bien de carcter interno. Los principales servicios estn relacionados con la proyeccin de archivos. Tpicamente existirn dos servicios. Proyectar un archivo: permite incluir en el mapa de memoria de un proceso un archivo o parte del mismo. Con esta operacin, se crea una regin asociada al objeto de memoria almacenado en el archivo. Normalmente, se pueden especificar algunas propiedades de esta nueva regin o Por ejemplo el tipo de proyeccin Regin privada Regin compartida Desproyectar un archivo: eliminar una proyeccin previa o parte de la misma

Servicio de memoria POSIX El estndar POSIX define un relativamente pequeo conjunto de servicios de gestin de memoria. Los servicios de gestin de memoria ms frecuentemente usados son los que corresponden con la proyeccin o desproyeccin de archivos (mmap y munmap). Servicio MMAP Tiene el siguiente prototipo: caddr_t Mmap: (caddr_t direc, size_t longitud, int protec,int indicador, int descriptor, off_t despl)

El primer parmetro indica la direccin del mapa donde se quiere que se proyecte el archivo. Generalmente, se especifica un valor nulo para indicar que se prefiere que sea el sistema el que decida dnde proyectar el archivo. En cualquier caso, la funcin devolver la direccin de proyeccin utilizada. Descriptor Corresponde con el descriptor del archivo que se pretende proyectar (que debe estar previamente abierto) Desplazamiento y longitud Establece en que zona del archivo se proyecta desde la posicin de desplazamiento hasta el final del desplazamiento ms la longitud del archivo. Proteccin Establece la proteccin sobre la regin que puede ser: o De lectura (PROT_READ) o De escritura (PROT_WRITE) o De ejecucin (PROT_EXEC) O cualquier combinacin de ellas. Esta proteccin debe ser compatible con el modo de apertura del archivo Indicador Es el que permite establecer ciertas propiedades en la regin: o MAP_SHARED La regin es compartida. Las modificaciones sobre la regin afectaran al archivo. Un proceso hijo compartir esta regin con el padre. o MAP_PRIVATE La regin es privada. Las modificaciones sobre la regin no afectaran al archivo. Un proceso hijo no compartir esta regin con el padre, ino que obtendr un duplicado de la misma. o MAP_FIXED El archivo debe proyectarse justo en la direccin especificada en el primer parmetro, siempre que ste sea distinto de cero. En el caso de que se quiera proyectar una regin sin soporte (regin annima) en algunos sistemas se puede especificar el valor. o MAP_ANOM En el parmetro indicador. Otros sistemas UNIX no ofrecen esta opcin, pero permiten proyectar el dispositivo para lograr el mismo objetivo. Esta opcin se puede usar para cargar la regin de datos sin valor inicial de una biblioteca dinmica.

Servicio MUNMAP

Cuando se requiere eliminar una proyeccin previa o parte de la misma, se usa el servicio MUNMAP cuyo prototipo es: Int munmap (caddr_t direc, size_t longitud);

El primer parmetro indica la direccin del mapa donde se quiere que se proyecte el archivo. Generalmente, se especifica un valor nulo para indicar que se prefiere que sea el sistema el que decida dnde proyectar el archivo. En cualquier caso, la funcin devolver la direccin de proyeccin utilizada. Definen una regin (o parte de una regin) que se quiere proyectar. El servicio de memoria WIN32 Son los servicios de memoria ms utilizados son, nuevamente, los de proyeccin de archivos. A diferencia de POSIX, la proyeccin de un archivo se realiza en dos pasos. En primer lugar, hay que crear una proyeccin del archivo usando la primitiva CreateFileMapping HANDLE CreateFileMapping (HANDLE archivo,LPSECURITY_ATTRIBUTES segur, DWORD prot,DWORD tamanyo_max_alta; DWORD tamanyo_max_baja,LPCTSTR nombre_proy)

Esta funcin devuelve un identificador de la proyeccin y recibe como parmetros el nombre del archivo, un valor de los atributos de seguridad, la proteccin, el tamao del objeto a proyectar (especificando la parte alta y la parte baja de este valor en dos parmetros independientes) y un nombre para la proyeccin .En cuanto a la proteccin, puede especificarse: de slo lectura (PAGE_READONLY) de lectura y escritura (PAGE_READWRITE) o privada (PAGE_WRITECOPY)

Con respecto al tamao, en el caso de que el archivo pueda crecer, se debe especificar el tamao esperado para el archivo. Si se especifica un valor 0, se usa el tamao actual del archivo. Por ltimo, el nombre de la proyeccin permite a otros procesos acceder a la misma. Si se especifica un valor nulo, no se asigna nombre a la proyeccin. Una vez creada la proyeccin, se debe crear una regin en el proceso asociada a la misma. Esta operacin se realiza mediante la funcin MapViewOfFile Cuyo prototipo es el siguiente: LPVOID MapViewOfFile (HANDLE id_proy, DWORD acceso,DWORDdesp_alta,DWORDdesp_baja,DWORDtamanyo); Esta funcin devuelve la direccin del mapa donde se ha proyectado la regin. Recibe como parmetros el identificador de la proyeccin devuelto por CreateFileMapping, el acceso solicitado (FILE_MAP_WRITE),(FILE_MAP_READ) que debe ser compatible con la proteccin especificada en la creacin, el desplazamiento con respecto al inicio del archivo a partir del que se realiza la proyeccin y el tamao de la zona proyectada (el valor cero indica todo el archivo).Por ltimo, para desproyectar el archivo se usa UnmapViewOfFile BOOL UnmapViewOfFile (LPVOID dir); Donde el parmetro indica la direccin de comienzo de la regin que se quiere desproyectar.

También podría gustarte