1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" Copyright (c) 1996 Tom Bjorkholm <tomb@mydata.se>
.\"
.\" 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 <tomb@mydata.se>
.\" First version written (1.3.86)
.\" 1996-04-12 Tom Bjorkholm <tomb@mydata.se>
.\" Update for Linux 1.3.87 and later
.\"
.\" Translated into Spanish on Thu Aug 20 1998 by Gerardo Aburruzaga
.\" García <gerardo@cica.es>
.\"
.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 <unistd.h>
.br
.B #include <sys/mman.h>
.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 <sys/mman.h>.
.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.
|