.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" Copyright (c) 1996 Tom Bjorkholm .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. .\" .\" 1996-04-11 Tom Bjorkholm .\" First version written (1.3.86) .\" 1996-04-12 Tom Bjorkholm .\" Update for Linux 1.3.87 and later .\" .\" Translated into Spanish on Thu Aug 20 1998 by Gerardo Aburruzaga .\" García .\" .TH MREMAP 2 "12 Abril 1996" "Linux 1.3.87" "Manual del Programador de Linux" .SH NOMBRE mremap \- re-asocia una dirección de memoria virtual .SH SINOPSIS .B #include .br .B #include .sp .BI "void *mremap(void *" vieja_dir ", size_t " viejo_tam .BI ", size_t " nuevo_tam ", unsigned long " flags ); .fi .SH DESCRIPCIÓN \fBmremap\fR expande (o encoge) una asociación existente de memoria, moviéndola potencialmente a la vez (según se controle por el argumento \fIflags\fR y según el espacio de direcciones virtuales disponible). \fIvieja_dir\fR es la dirección antigua del bloque de memoria virtual que Ud. quiere expandir (o encoger). Observe que \fIvieja_dir\fR tiene que tener alineamiento de página. \fIviejo_tam\fR es el antiguo tamaño del bloque de memoria virtual. \fInuevo_tam\fR es el tamaño pedido del bloque de memoria virtual tras el cambio de tamaño. El argumento \fIflags\fR 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. \fBmremap\fR emplea el esquema de tabla de páginas de Linux. \fBmremap\fR cambia la asociación entre direcciones virtuales y páginas de memoria. Esto puede emplearse para implementar un \fBrealloc\fR muy eficiente. .SH FLAGS .TP .B MREMAP_MAYMOVE indica si la operación, en vez de fallar, debería cambiar la dirección virtual si el cambio de tamaño no puede hacerse en el espacio virtual actual. .SH VALOR DEVUELTO En caso de éxito, \fBmremap\fR devuelve un puntero a la nueva área de memoria virtual. En caso de error, se devuelve \-1 y se pone un valor apropiado en \fIerrno\fR. .SH ERRORES .TP .B EINVAL Se ha dado un argumento inválido. Lo más probable es que \fIvieja_dir\fR no tenga alineamiento de página. .TP .B EFAULT "Segmentation fault", o sea, "fallo de segmento". Alguna dirección del rango \fIvieja_dir\fP a \fIvieja_dir\fP+\fIviejo_tam\fP es una dirección de memoria virtual inválida para este proceso. También uno puede obtener EFAULT incluso si existen asociaciones que cubren el espacio entero pedido, pero esas asociaciones son de tipos diferentes. .TP .B EAGAIN El segmento de memoria está bloqueado y no puede re-asociarse. .TP .B ENOMEM El área de memoria no puede expandirse en la dirección virtual en curso, y la opción .B MREMAP_MAYMOVE no está puesta en \fIflags\fP. O bien, no hay bastante memoria (virtual) disponible. .SH OBSERVACIONES Con las cabeceras actuales de glibc, para obtener la definición de .BR MREMAP_MAYMOVE , necesita definir _GNU_SOURCE antes de incluir . .SH "CONFORME A" 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) .BR mremap (2) con una semántica completamente diferente. .SH VÉASE TAMBIÉN .BR getpagesize (2), .BR realloc (3), .BR malloc (3), .BR brk (2), .BR sbrk (2), .BR mmap (2) .P Su libro de texto favorito de Sistemas Operativos para más información sobre la memoria paginada. Por ejemplo: \fISistemas Operativos Modernos\fR por Andrew S. Tannenbaum, \fIInside Linux\fR por Randolf Bentson, o \fIThe Design of the UNIX Operating System\fR por Maurice J. Bach.