MLOCK(2)

NOMBRE
mlock - desactiva el paginado para algunas zonas de memoria

SINOPSIS
#include <sys/mman.h>

int mlock(const void *addr, size_t len);

DESCRIPCIÓN
mlock desactiva el paginado 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 retorne sin error y permanecerán en RAM hasta que dichas páginas sean desbloquedadas con munlock o munlockall, 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 un temporizado determinista, y el paginado es una de las causas principales de retardos inesperados en la ejecución de programas, junto con el gestionado (scheduling). Las aplicaciones en tiempo real suelen conmutar a un gestor 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 del paginado, 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 en la RAM y terminado. Los bloqueos de memoria no son acumulativos, i.e., 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 mapeadas a varias zonas o por 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.

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 mapeadas 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 llamante no tiene los privilegios necesarios. Sólo se permite bloquear páginas a los procesos del root.

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
munlock(2), mlockall(2), y munlockall(2).