bionic (2) mlockall.2.gz

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

NOMBRE

       mlockall - desactiva la paginación para el proceso invocador

SINOPSIS

       #include <sys/mman.h>

       int mlockall(int flags);

DESCRIPCIÓN

       mlockall  desactiva  la  paginación  para  todas  las  páginas asociadas en el espacio de direcciones del
       proceso que hace la llamada. Esto incluye las páginas del código, de los datos y del  segmento  de  pila,
       así  como  las  bibliotecas  compartidas,  datos  de  núcleo  en espacio de usuario, memoria compartida y
       ficheros asociados a memoria. Se garantiza que todas las páginas  asociadas  estarán  en  RAM  cuando  la
       llamada  al  sistema  mlockall  regrese  con  éxito, y se garantiza que permanecerán en RAM hasta que las
       páginas se desbloqueen de nuevo mediante munlock o munlockall o hasta que el proceso  termine  o  empiece
       otro  programa debido a la llamada exec.  Los procesos hijos no heredan bloqueos de página a través de un
       fork.

       El bloqueo de memoria tiene dos aplicaciones principales: algoritmos de tiempo real  y  procesamiento  de
       datos  de  alta  seguridad.  Las  aplicaciones en tiempo real requieren tiempos deterministas, y, como la
       planificación, la paginación es una de las principales causas de retrasos inesperados en la ejecución  de
       programas. Las aplicaciones de tiempo real normalmente también cambiarán a un planificador de tiempo real
       con sched_setscheduler.  Los programas de seguridad criptográficos a menudo manejan bytes  críticos  como
       contraseñas  o  claves  secretas  como estructuras de datos. Como resultado de la paginación, estos datos
       secretos pueden transferirse a un medio de almacenamiento permanente como resultado del trasiego  (swap),
       donde  podrían  ser accesibles al enemigo bastante tiempo después de que el programa de seguridad hubiera
       terminado y borrado los datos secretos de la  RAM.  Para  aplicaciones  de  seguridad,  sólo  tienen  que
       bloquearse partes pequeñas de la memoria, para lo cual se dispone de mlock.

       El  parámetro  flags  puede  construirse  aplicando  el  operador  lógico de bits O (OR) a las siguientes
       constantes:

       MCL_CURRENT Bloquea todas las páginas que están asociadas actualmente en el espacio  de  direcciones  del
                   proceso.

       MCL_FUTURE  Bloquea  todas  las  páginas  que  en el futuro se asociarán en el espacio de direcciones del
                   proceso. Éstas podrían ser, por ejemplo, páginas nuevas requeridas  por  una  pila  y  montón
                   crecientes así como nuevos ficheros asociados a memoria o regiones de memoria compartida.

       Si  se  ha  especifiado  MCL_FUTURE  y  el  número de páginas bloqueadas excede el límite superior de las
       páginas bloqueadas permitidas, entonces la llamada al  sistema  que  haya  causado  la  nueva  asociación
       fallará con ENOMEM.  Si estas nuevas páginas han sido asociadas por la pila creciente, entonces el núcleo
       denegará la expansión de la pila y mandará una señal SIGSEGV.

       Los procesos en tiempo real deberían reservar bastantes páginas bloqueadas antes de entrar en la  sección
       crítica  de  tiempo, de forma que ninguna llamada a función pueda provocar un fallo de página. Esto puede
       lograrse llamando a una función que tenga una variable automática suficientemente grande y que escriba en
       la  memoria  ocupada  por  este  vector  grande,  para  tocar estas páginas de la pila. De esta forma, se
       asociarán bastantes páginas para la pila y se pueden bloquear en la RAM. Las escrituras falsas asegurarán
       que ni siquiera ocurran fallos de página de copia-en-escritura en la sección crítica.

       Los  bloqueos  de  memoria  no  se  apilan;  esto  es, las páginas que hayan sido bloqueadas varias veces
       mediante llamadas a mlockall o a mlock se desbloquearán con una simple llamada a munlockall.  Las páginas
       que  estén  asociadas a varias localizaciones o por varios procesos permanecen bloqueadas en RAM mientras
       que estén bloqueadas al menos en una localización o al menos por un proceso.

       En sistemas POSIX en los cuales estén disponibles mlockall y  munlockall,  se  define  _POSIX_MEMLOCK  en
       <unistd.h>.

VALOR DEVUELTO

       En  caso  de éxito, mlockall devuelve cero. En caso de error, se devuelve -1 y se pone un valor apropiado
       en errno.

ERRORES

       ENOMEM El proceso intentó excederse en el número máximo de páginas bloqueadas permitido.

       EPERM  El proceso que hace la llamada no tiene los privilegios apropiados.  Sólo  los  procesos  de  root
              tienen permiso para bloquear páginas.

       EINVAL Se han especificado flags desconocidos.

CONFORME A

       POSIX.1b, SVr4.   SVr4 documenta un código de error adicional, EAGAIN.

VÉASE TAMBIÉN

       munlockall(2), mlock(2), munlock(2)