Provided by: manpages-es_1.55-9_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)