Provided by:
manpages-es_1.55-10_all 
NOMBRE
mlock - desactiva la paginacion para algunas zonas de memoria
SINOPSIS
#include <sys/mman.h>
int mlock(const void *addr, size_t len);
DESCRIPCI'ON
mlock desactiva la paginacion para la memoria en el grupo de
direcciones que comienza en la direccion addr con longitud len bytes.
Se garantiza que todas las paginas que contienen algunas de esas
direcciones estaran residentes en RAM cuando la llamada al sistema
mlock termine sin error y permaneceran en RAM hasta que dichas paginas
sean desbloquedadas con munlock o munlockall, hasta que las paginas
sean desalojadas via munmap, o hasta que termine el proceso o comience
otro programa con exec. Los procesos hijos creados mediante fork no
heredan los bloqueos de paginas.
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 temporizacion determinista, y la
paginacion es una de las causas principales de retardos inesperados en
la ejecucion de programas, junto con la planificacion (scheduling). Las
aplicaciones en tiempo real suelen conmutar a un planificador en tiempo
real con sched_setscheduler. El software de seguridad criptografico a
menudo trabaja con bytes criticos tales como contrasenas o claves
secretas. Como resultado de la paginacion, estos secretos pueden ser
transferidos a un medio de almacenamiento de intercambio persistente,
donde podria ser leido por el enemigo mucho despues 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 pagina ha
sido bloqueda varias veces mediante llamadas a mlock o mlockall sera
desbloqueada con una simple llamada a munlock para el rango
correspondiente o con munlockall. Las paginas que son asociadas a
varias zonas o a varios procesos permanecen bloqueadas en RAM mientras
lo esten 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 numero de bytes por pagina.
OBSERVACIONES
Con la llamada al sistema de Linux, addr se redondea hacia abajo
automaticamente hacia el limite de pagina mas cercano. Sin embargo,
POSIX 1003.1-2001 permite una implementacion que requiere que addr este
en situado un limite de pagina, por lo que las aplicaciones deberian
asegurar este requisito.
VALOR DEVUELTO
En caso de exito, mlock devuelve cero. Si hay error, se devuelve -1,
errno se activa convenientemente y no se realiza ningun cambio en
ningun bloqueo en el espacio de direcciones del proceso.
ERRORES
ENOMEM Alguna parte del rango de direcciones no corresponde a paginas
asociadas en el espacio de direcciones del proceso o el proceso
intento exceder el numero maximo de paginas bloqueadas
permitido.
EPERM El proceso invocador no tiene los privilegios necesarios. Solo
se permite bloquear paginas a los procesos del superusuario.
EINVAL len no era un numero positivo.
CONFORME A
POSIX.1b, SVr4. SVr4 anade un codigo de error adicional (EAGAIN).
V'EASE TAMBI'EN
mlockall(2), munlock(2), munlockall(2), munmap(2), setrlimit(2)