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)