Provided by: manpages-es_1.55-10_all bug

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)