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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" Copyright (C) 2001 David Gmez <davidge@jazzfree.com>
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date. The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein. The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
.\" Based on comments from mm/filemap.c. Last modified on 10-06-2001
.\" Modified, 25 Feb 2002, Michael Kerrisk, <mtk16@ext.canterbury.ac.nz>
.\" Added notes on MADV_DONTNEED
.\"
.\" Traducido por Miguel Pérez Ibars <mpi79470@alu.um.es> el 5-julio-2004
.\"
.TH MADVISE 2 "10 junio 2001" "Linux 2.4.5" "Manual del Programador de Linux"
.SH NOMBRE
madvise \- aconseja sobre el uso de memoria
.SH SINOPSIS
.br
.B #include <sys/mman.h>
.sp
.BI "int madvise(void *" start ", size_t " length ", int " advice );
.SH DESCRIPCIÓN
La llamada al sistema
.B madvise
aconseja al núcleo sobre como manejar la paginación de entrada/salida en
el rango de direcciones que comienza en
.I start
y tiene de longitud
.I length
bytes. Permite a una aplicación decirle al núcleo como espera usar
algunas zonas de memoria compartida o mapeada, para que así el núcleo pueda
elegir las técnicas apropiadas de pre-lectura y caché.
Esta llamada no influye en la semántica de la aplicación
(excepto en el caso de
.BR MADV_DONTNEED ),
pero puede
influir en su rendimiento. El núcleo puede ignorar libremente este consejo.
.LP
El consejo se indica en el parámetro
.I advice
que puede tomar los valores
.TP
.B MADV_NORMAL
Trato no especial. Éste es el valor por defecto.
.TP
.B MADV_RANDOM
Espera las referencias a páginas en orden aleatorio.
(Por tanto, la pre-lectura puede ser menos útil de lo habitual.)
.TP
.B MADV_SEQUENTIAL
Espera las referencias a páginas en orden secuencial.
(Por tanto, las páginas en el rango dado pueden ser accedidas
con pre-lectura y liberadas poco después del acceso.)
.TP
.B MADV_WILLNEED
Espera algún acceso en un futuro cercano.
(Por tanto, sería buena idea leer algunas páginas por adelantado.)
.TP
.B MADV_DONTNEED
No esperes ningún acceso en un futuro cercano (por el momento, la
aplicación ha terminado de usar el rango especificado, por lo que el
núcleo puede liberar recursos asociados a la misma).
Los accesos siguientes a páginas en este rango tendrán exito, pero
producirán o bien que se vuelva a cargar el contenido de memoria desde el
fichero mapeado subyacente (véase \fBmmap\fP) o bien páginas llenas
de ceros para mapeos sin fichero subyacente.
.SH "VALOR DEVUELTO"
En caso de éxito
.B madvise
devuelve cero. En caso de error, devuelve \-1 y modifica
.I errno
con el valor apropiado.
.SH ERRORES
.TP
.B EINVAL
el valor
.IR len
es negativo,
.\" .I len
.\" is zero,
.I start
no se encuentra en un límite de página,
.I advice
no es un valor válido, o la aplicación está intentado
liberar páginas bloqueadas o compartidas (con MADV_DONTNEED).
.TP
.B ENOMEM
las direcciones en el rango especificado no están
mapeadas actualmente, o están fuera del rango de direcciones del proceso.
.TP
.B ENOMEM
(para MADV_WILLNEED) Memoria insuficiente - paginación fallida.
.TP
.B EIO
(para MADV_WILLNEED) La paginación de esta área excedería el
tamaño máximo para el conjunto residente.
.TP
.B EBADF
existe la correspondencia, pero el área mapeada no se corresponde con un fichero.
.TP
.B EAGAIN
un recurso del núcleo está temporalmente no disponible.
.SH "OBSERVACIONES LINUX"
.LP
La implementación actual de Linux (2.4.0) ve esta llamada al sistema
más como una orden que como un consejo y por lo tanto puede devolver
un error cuando no puede llevar a cabo lo que habitualmente podría
en respuesta a este consejo. (Véase la descripción de ERRORES arriba.)
Éste es un comportamiento no éstandar.
.LP
La implementación de Linux requiere que la dirección
.I start
comienze en un límite de página, y permite que
.I length
sea cero. Si algunas partes del rango de direcciones especificado
no están mapeadas, la versión de Linux de
.B madvise
las ignora y aplica la llamada sobre el resto (pero devuelve
.B ENOMEM
como debería ser).
.SH HISTORIA
La función
.B madvise
apareció por primera vez en 4.4BSD.
.SH "CONFORME A"
POSIX.1b (POSIX.4).
POSIX 1003.1-2001 describe
.B posix_madvise
con las constantes POSIX_MADV_NORMAL, etc.,
con un comportamiento parecido al descrito aquí. Hay un
.I posix_fadvise
similar para acceso a ficheros.
.SH "VÉASE TAMBIÉN"
.BR getrlimit (2),
.BR mmap (2),
.BR mincore (2),
.BR mprotect (2),
.BR msync (2),
.BR munmap (2)
|