Provided by:
manpages-es_1.55-9_all 
NOMBRE
mlockall - desactiva la paginación para el proceso invocador
SINOPSIS
#include <sys/mman.h>
int mlockall(int flags);
DESCRIPCIÓN
mlockall desactiva la paginación para todas las páginas asociadas en el
espacio de direcciones del proceso que hace la llamada. Esto incluye
las páginas del código, de los datos y del segmento de pila, así como
las bibliotecas compartidas, datos de núcleo en espacio de usuario,
memoria compartida y ficheros asociados a memoria. Se garantiza que
todas las páginas asociadas estarán en RAM cuando la llamada al sistema
mlockall regrese con éxito, y se garantiza que permanecerán en RAM
hasta que las páginas se desbloqueen de nuevo mediante munlock o
munlockall o hasta que el proceso termine o empiece otro programa
debido a la llamada exec. Los procesos hijos no heredan bloqueos de
página a través de un fork.
El bloqueo de memoria tiene dos aplicaciones principales: algoritmos de
tiempo real y procesamiento de datos de alta seguridad. Las
aplicaciones en tiempo real requieren tiempos deterministas, y, como la
planificación, la paginación es una de las principales causas de
retrasos inesperados en la ejecución de programas. Las aplicaciones de
tiempo real normalmente también cambiarán a un planificador de tiempo
real con sched_setscheduler. Los programas de seguridad criptográficos
a menudo manejan bytes críticos como contraseñas o claves secretas como
estructuras de datos. Como resultado de la paginación, estos datos
secretos pueden transferirse a un medio de almacenamiento permanente
como resultado del trasiego (swap), donde podrían ser accesibles al
enemigo bastante tiempo después de que el programa de seguridad hubiera
terminado y borrado los datos secretos de la RAM. Para aplicaciones de
seguridad, sólo tienen que bloquearse partes pequeñas de la memoria,
para lo cual se dispone de mlock.
El parámetro flags puede construirse aplicando el operador lógico de
bits O (OR) a las siguientes constantes:
MCL_CURRENT Bloquea todas las páginas que están asociadas actualmente
en el espacio de direcciones del proceso.
MCL_FUTURE Bloquea todas las páginas que en el futuro se asociarán en
el espacio de direcciones del proceso. Éstas podrían ser,
por ejemplo, páginas nuevas requeridas por una pila y
montón crecientes así como nuevos ficheros asociados a
memoria o regiones de memoria compartida.
Si se ha especifiado MCL_FUTURE y el número de páginas bloqueadas
excede el límite superior de las páginas bloqueadas permitidas,
entonces la llamada al sistema que haya causado la nueva asociación
fallará con ENOMEM. Si estas nuevas páginas han sido asociadas por la
pila creciente, entonces el núcleo denegará la expansión de la pila y
mandará una señal SIGSEGV.
Los procesos en tiempo real deberían reservar bastantes páginas
bloqueadas antes de entrar en la sección crítica de tiempo, de forma
que ninguna llamada a función pueda provocar un fallo de página. Esto
puede lograrse llamando a una función que tenga una variable automática
suficientemente grande y que escriba en la memoria ocupada por este
vector grande, para tocar estas páginas de la pila. De esta forma, se
asociarán bastantes páginas para la pila y se pueden bloquear en la
RAM. Las escrituras falsas asegurarán que ni siquiera ocurran fallos de
página de copia-en-escritura en la sección crítica.
Los bloqueos de memoria no se apilan; esto es, las páginas que hayan
sido bloqueadas varias veces mediante llamadas a mlockall o a mlock se
desbloquearán con una simple llamada a munlockall. Las páginas que
estén asociadas a varias localizaciones o por varios procesos
permanecen bloqueadas en RAM mientras que estén bloqueadas al menos en
una localización o al menos por un proceso.
En sistemas POSIX en los cuales estén disponibles mlockall y
munlockall, se define _POSIX_MEMLOCK en <unistd.h>.
VALOR DEVUELTO
En caso de éxito, mlockall devuelve cero. En caso de error, se devuelve
-1 y se pone un valor apropiado en errno.
ERRORES
ENOMEM El proceso intentó excederse en el número máximo de páginas
bloqueadas permitido.
EPERM El proceso que hace la llamada no tiene los privilegios
apropiados. Sólo los procesos de root tienen permiso para
bloquear páginas.
EINVAL Se han especificado flags desconocidos.
CONFORME A
POSIX.1b, SVr4. SVr4 documenta un código de error adicional, EAGAIN.
VÉASE TAMBIÉN
munlockall(2), mlock(2), munlock(2)