Section: Manual del Programador de Linux (2)
Updated: 12 Abril 1996
Index Return to Main
Contents
mremap - re-asocia una dirección de memoria virtual
void *mremap(void *vieja_dir, size_t viejo_tam , size_t nuevo_tam, unsigned long flags);
expande (o encoge) una asociación existente de memoria, moviéndola potencialmente a la vez (según se controle por el argumento flags y según el espacio de direcciones virtuales disponible).
vieja_dir es la dirección antigua del bloque de memoria virtual que Ud. quiere expandir (o encoger). Observe que vieja_dir tiene que tener alineamiento de página. viejo_tam es el antiguo tamaño del bloque de memoria virtual. nuevo_tam es el tamaño pedido del bloque de memoria virtual tras el cambio de tamaño.
El argumento flags es un mapa de bits de opciones.
En Linux la memoria se divide en páginas. Un proceso de usuario tiene (uno o) varios segmentos de memoria virtual lineales. Cada segmento de memoria virtual tiene una o más asociaciones a páginas de memoria real (en la tabla de páginas). Cada segmento de memoria virtual tiene su propia protección (derechos de acceso), que pueden producir una violación de segmento si a la memoria se accede incorrectamente (p.ej., por escribir en un segmento de lectura exclusiva). Acceder a memoria virtual fuera de los segmentos también producirá una violación de segmento.
mremap emplea el esquema de tabla de páginas de Linux. mremap cambia la asociación entre direcciones virtuales y páginas de memoria. Esto puede emplearse para implementar un realloc muy eficiente.
En caso de éxito, mremap devuelve un puntero a la nueva área de memoria virtual. En caso de error, se devuelve -1 y se pone un valor apropiado en errno.
Esta llamada es específica de Linux, y no debería emplearse en programas que se pretendan transportables. 4.2BSD tenía una llamada igual (nunca implementada realmente) mremap(2) con una semántica completamente diferente.
(2), realloc(3), malloc(3), brk(2), sbrk(2), mmap(2) Su libro de texto favorito de Sistemas Operativos para más información sobre la memoria paginada. Por ejemplo: Sistemas Operativos Modernos por Andrew S. Tannenbaum, Inside Linux por Randolf Bentson, o The Design of the UNIX Operating System por Maurice J. Bach.
This document was created by man2html, using
the manual pages.
Time: 06:16:19 GMT, January 22, 2005