Provided by:
manpages-es_1.55-9_all 
NOMBRE
mlock - desactiva la paginación para algunas zonas de memoria
SINOPSIS
#include <sys/mman.h>
int mlock(const void *addr, size_t len);
DESCRIPCIÓN
mlock desactiva la paginación para la memoria en el grupo de
direcciones que comienza en la dirección addr con longitud len bytes.
Se garantiza que todas las páginas que contienen algunas de esas
direcciones estarán residentes en RAM cuando la llamada al sistema
mlock termine sin error y permanecerán en RAM hasta que dichas páginas
sean desbloquedadas con munlock o munlockall, hasta que las páginas
sean desalojadas vía munmap, o hasta que termine el proceso o comience
otro programa con exec. Los procesos hijos creados mediante fork no
heredan los bloqueos de páginas.
El bloqueo de memoria tiene dos aplicaciones fundamentales: algoritmos
en tiempo real y procesado de datos de alta seguridad. Las aplicaciones
en tiempo real requieren una temporización determinista, y la
paginación es una de las causas principales de retardos inesperados en
la ejecución de programas, junto con la planificación (scheduling). Las
aplicaciones en tiempo real suelen conmutar a un planificador en tiempo
real con sched_setscheduler. El software de seguridad criptográfico a
menudo trabaja con bytes críticos tales como contraseñas o claves
secretas. Como resultado de la paginación, estos secretos pueden ser
transferidos a un medio de almacenamiento de intercambio persistente,
donde podría ser leído por el enemigo mucho después de que el programa
de seguridad haya borrado los secretos de la RAM y terminado.
Los bloqueos de memoria no son acumulativos, es decir, si una página ha
sido bloqueda varias veces mediante llamadas a mlock o mlockall será
desbloqueada con una simple llamada a munlock para el rango
correspondiente o con munlockall. Las páginas que son asociadas a
varias zonas o a varios procesos permanecen bloqueadas en RAM mientras
lo estén por alguna zona o proceso.
En los sistemas POSIX con mlock y munlock disponibles, se define
_POSIX_MEMLOCK_RANGE en <unistd.h> y el valor de PAGESIZE de <limits.h>
indica el número de bytes por página.
OBSERVACIONES
Con la llamada al sistema de Linux, addr se redondea hacia abajo
automáticamente hacia el límite de página más cercano. Sin embargo,
POSIX 1003.1-2001 permite una implementación que requiere que addr esté
en situado un límite de página, por lo que las aplicaciones deberían
asegurar este requisito.
VALOR DEVUELTO
En caso de éxito, mlock devuelve cero. Si hay error, se devuelve -1,
errno se activa convenientemente y no se realiza ningún cambio en
ningún bloqueo en el espacio de direcciones del proceso.
ERRORES
ENOMEM Alguna parte del rango de direcciones no corresponde a páginas
asociadas en el espacio de direcciones del proceso o el proceso
intentó exceder el número máximo de páginas bloqueadas
permitido.
EPERM El proceso invocador no tiene los privilegios necesarios. Sólo
se permite bloquear páginas a los procesos del superusuario.
EINVAL len no era un número positivo.
CONFORME A
POSIX.1b, SVr4. SVr4 añade un código de error adicional (EAGAIN).
VÉASE TAMBIÉN
mlockall(2), munlock(2), munlockall(2), munmap(2), setrlimit(2)