Función mlock 2 c

Función mlock 2 c
Las páginas físicas vinculadas al rango de direcciones virtualizados que comienzan en el ADDR están bloqueadas en RAM para caracteres LEN principalmente por la función del sistema MLOCK. Las páginas que se han restringido a través de uno o incluso más métodos de MLOCK están desbloqueadas por la función Munlock (). La memoria debe asignarse en todo su rango. Las páginas especificadas después de dicha llamada de Mlock no darán lugar a las páginas erróneas o los problemas de traducción de la dirección a menos que se liberen. En sistemas con TLB de herramientas de desarrollo, podrían dar como resultado fallas de protección-violación o problemas de TLB-Miss. Una vez que se eliminan todas las asignaciones restringidas para las páginas, las páginas reales se mantienen almacenadas.

A través de sus traducciones de dirección virtual, las diferentes operaciones pueden bloquear las mismas páginas reales. A través de varias traducciones virtuales de las mismas páginas o solicitudes de mlock apiladas en el rango de direcciones muy idéntico, un método solitario también puede tener varias páginas bloqueadas. Una función de invocación a munmap () que elimina el rango de direcciones no contratado hace el desbloqueo de forma expresa o implícita.

Después de solo una bifurcación, las traducciones bloqueadas no se transmiten al proceso infantil. Los hilos solo pueden cerrar una cierta cantidad de RAM física, ya que es una mercancía relativamente escasa. Tanto la restricción de activo RLIMIT_MEMLOCK por proceso como la limitación de "páginas con cable" se pueden bloquear mediante un solo hilo. Aunque las implementaciones de NetBSD redondearían al múltiplo más cercano del número de páginas, el código transportable debe asegurarse de que quizás los argumentos ADDR y LEN estén sincronizados a uno.

Valores de devolución

Volver 0 significa que la llamada es exitosa y casi todas las páginas del alcance fueron bloqueadas o liberadas. El estado de bloqueo de cada página en el dominio permanece inalterado si el valor numérico es -1, lo que indica una excepción. El error se indica en esta situación estableciendo la ubicación global errno.

Errores

La función mlock () puede fallar debido a varias razones. Dentro de esta parte del artículo, discutiremos el número de excepciones que obtuvimos después de la falla de la función mlock () junto con sus razones para suceder en la ejecución. Aquí hay algunos de los errores que podemos encontrar hasta ahora:

  • EAGAIN: Este error puede ocurrir al bloquear el rango especificado iría más allá del umbral del servidor o por proceso para el almacenamiento restringido, por lo tanto, el mlock () se bloquea en tal caso.
  • Einval: Este error puede ocurrir cuando la dirección proporcionada, sino la longitud no está coordinada. En este caso, la solución no funciona como debería.
  • Enomem: La falla de una página o el problema de traducción se produce cuando se encuentra este error. Es porque puede haber algunas direcciones no asignadas en varios de los rangos de dirección proporcionados.
  • Eperm: El error de EPERM se encuentra hasta ahora en una plataforma en la que no es compatible con la contabilidad de la página de bloqueo y la función mlock () es invoca por algún usuario no raíz.

La función munlock () que se usa simultáneamente con la función mlock () puede fallar debido a varias razones. Dentro de esta parte del artículo, discutiremos el número de excepciones que obtenemos después del fracaso de la función munlock () junto con sus razones para suceder en la ejecución. Estos son algunos de los errores que podemos encontrar hasta ahora:

  • Einval: La solución no redondea y ni la dirección ni la longitud proporcionada están alineadas.
  • Enomem: Hay direcciones no asignadas en varios de los rangos de dirección proporcionados. El rango de direcciones dado no está completamente restringido.

Ejemplo:

Para comprender el concepto de la función mlock () c, echamos un vistazo a un ejemplo simple. Creamos un nuevo archivo C llamado "MSEG.C "dentro de la carpeta" Works "de Kali Linux.

Comenzamos este código con el uso de las bibliotecas C estándar requeridas para la ejecución sin problemas del código C, I.mi. stdio.H y unistd.H. El sys/mman.El encabezado H se utiliza para permitir el uso de las funciones de bloqueo de memoria. Después de esto, la ejecución comienza desde la inicialización de una variable Integer data_size a 2048. La matriz de caracteres "data_lock" de data_size se define y se pasa a la función de memoria_lock () definida por el usuario junto con la variable data_size como un argumento dentro de la primera instrucción "si".

La función Memory_Lock () definida por el usuario se ejecuta y obtiene el tamaño de una página en la variable Page_Size. Se calcula la página_offset y la dirección se ajusta al límite de la página. El tamaño se ajusta con la función Page_offset y la función mlock () se invoca y devuelve utilizando las variables "Tamaño" y "Dirección". El método de la instrucción "IF" Perror () lanzará un error "Lock_Memory" si el resultado devuelto es igual a -1. De lo contrario, la instrucción delse imprimirá la "memoria está bloqueada en RAM" a través de la función printf.

Otra declaración "if-else" se usa para liberar el bloqueo. La función Memory_Unlock () se invoca dentro de la instrucción "IF" al pasar el Data_Lock y Data_Size como sus argumentos. El mismo procedimiento es seguido por esta función que seguimos dentro de la función Memory_lock (). El único cambio es el uso de la función munlock () con los mismos argumentos para liberar el bloqueo y devolver el resultado. La segunda instrucción "if" lanzará una excepción "desbloquear_memory" usando la función Perror si el resultado es equivalente a -1. De lo contrario, la instrucción Else mostrará que "la memoria se desbloquea" utilizando la función printf.

Creamos un archivo de objeto de este archivo C utilizando la opción "-O" de los compiladores GCC.

Después de ejecutar el archivo de objeto, recibimos los mensajes de visualización a medida que la memoria fue bloqueada y desbloqueada mediante el uso de las funciones mlock () y munlock ().

Conclusión

Se trata del uso de la función MLOCK de C en el sistema operativo Kali Linux para mostrarle la demostración de cómo una memoria se puede bloquear y desbloquear sin ningún problema. Agregamos la explicación, la sintaxis, los errores y el valor de retorno de la función mlock junto con un ejemplo detallado. Este tutorial sería suficiente para que los usuarios tengan sus manos con esta función en el lenguaje de programación C.