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
|
.\" 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., 675 Mass Ave, Cambridge, MA 02139,
.\" 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
.\" Garca <gerardo@cica.es>
.\"
.TH MREMAP 2 "12 Abril 1996" "Linux 1.3.87" "Manual del Programador de Linux"
.SH NOMBRE
mremap \- re-asocia una direccin 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 DESCRIPCIN
\fBmremap\fR expande (o encoge) una asociacin existente de memoria,
movindola potencialmente a la vez (segn se controle por el argumento
\fIflags\fR y segn el espacio de direcciones virtuales disponible).
\fIvieja_dir\fR es la direccin antigua del bloque de memoria
virtual que Ud. quiere expandir (o encoger). Observe que
\fIvieja_dir\fR tiene que tener alineamiento de
pgina. \fIviejo_tam\fR es el antiguo tamao del bloque de memoria
virtual. \fInuevo_tam\fR es el tamao pedido del bloque de memoria
virtual tras el cambio de tamao.
El argumento \fIflags\fR es un mapa de bits de opciones.
En Linux la memoria se divide en pginas. Un proceso de usuario tiene
(uno o) varios segmentos de memoria virtual lineales. Cada segmento de
memoria virtual tiene una o ms asociaciones a pginas de memoria real
(en la tabla de pginas). Cada segmento de memoria virtual tiene su
propia proteccin (derechos de acceso), que pueden producir una
violacin 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 tambin producir una violacin
de segmento.
\fBmremap\fR emplea el esquema de tabla de pginas de Linux.
\fBmremap\fR cambia la asociacin entre direcciones virtuales y
pginas de memoria. Esto puede emplearse para implementar un
\fBrealloc\fR muy eficiente.
.SH FLAGS
.TP
.B MREMAP_MAYMOVE
indica si la operacin, en vez de fallar, debera cambiar la direccin virtual
si el cambio de tamao 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 invlido. Lo ms probable es que
\fIvieja_dir\fR no tenga alineamiento de pgina.
.TP
.B EFAULT
"Segmentation fault", o sea, "fallo de segmento". Alguna direccin del
rango \fIvieja_dir\fR a
\fIvieja_dir\fR+\fIviejo_tam\fR es una direccin de memoria
virtual invlida para este proceso.
Tambin 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 direccin virtual en
curso, y la opcin \fIMREMAP_MAYMOVE\fR no est puesta en \fIflags\fR.
O bien, no hay bastante memoria (virtual) disponible.
.SH "CONFORME A"
Esta llamada es especfica de Linux, y no debera emplearse en
programas que se pretendan transportables. 4.2BSD tena una llamada igual
(nunca implementada realmente)
.BR mremap (2)
con una semntica completamente diferente.
.SH VASE TAMBIN
.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 ms informacin
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.
|