Llamada del sistema Futex en C

Llamada del sistema Futex en C
En general, las primitivas de sincronización de hilos requieren el uso de llamadas del sistema por los programas del espacio de usuarios. La llamada del sistema es inherentemente inevitable para colocar un hilo para dormir y esperar otro hilo o despertar un hilo del sueño. Obtener un bloqueo no contendido, por ejemplo, no requiere una llamada del sistema, al menos no naturalmente. El futex es el remedio de este desafío. Un futex es simplemente una dirección entera instantánea. La dirección se utiliza para identificar una cola de hilos que están esperando ser procesados. El valor del entero en esa ubicación se utiliza para ejecutar la ruta rápida con operaciones atómicas si está disponible, así como para manejar situaciones de carrera de casos en caso de conflicto. La llamada del sistema FuteX () permite que un programa espere un valor en una dirección particular para cambiar, así como despertar a cualquiera que esté esperando esa dirección. Se usa más comúnmente para implementar el caso discutible de un bloqueo de memoria compartida, como se menciona en Futex (7). Cuando una acción de Futex (7) en el espacio de usuario no se completa sin error, se requiere una llamada al núcleo para resolver el problema. El arbitraje se puede usar para poner el proceso de llamada a dormir o despertar un proceso de espera. Se espera que la semántica definida en el futex sea seguida por las personas que llaman de esta función (7).

Debido a que estas semánticas requieren autorizar instrucciones de ensamblaje no portátiles, la mayoría de los usuarios probablemente serán autores de la biblioteca en lugar de desarrolladores de aplicaciones comunes. Futex es una llamada de sistema único que realiza muchas operaciones. Que puede parecer extraño, incluso desconcertante, si no francamente. Es decir, sin embargo, el procedimiento estándar para una llamada de sistema única: la llamada del sistema "IOCTL" contiene considerablemente más operaciones que Futex. Para otro caso, es poco probable que los programadores descubran porque GLIBC lo oculta, aunque el sistema de llamadas de socket implementa todas las funciones relacionadas con el socket. Como resultado, si los subprocesos lo acceden en un solo proceso, se puede especificar como una variable global o almacenarse en un segmento de memoria compartida si los subprocesos de varios procesos lo utilizan. Un estado actualizado en el espacio de usuario utilizando operaciones atómicas se almacena en la variable compartida. No hay necesidad de una llamada del sistema cuando el estado dice que no hay conflicto. Si la condición indica una afirmación, en el otro lado, se hace una llamada del sistema Futex para dormir la tarea de llamadas.

Ejemplo para explicar la llamada del sistema Futex () en el lenguaje C

Para comprender la llamada del sistema Futex () en el idioma C, hemos instalado Ubuntu 20.04 Sistema operativo Linux. Crear un archivo titulado "FC.C". El título del archivo se puede modificar, pero la extensión seguirá siendo la misma. Entonces, en primer lugar, abra la carcasa del Ubuntu 20 instalado.04 Sistema operativo Linux al encontrarlo en las "aplicaciones" o verificar la tecla "Ctrl+Alt+T". Una vez abierto, ejecute las instrucciones fijadas en el terminal del Ubuntu 20 instalado.04 Sistema operativo Linux.

$ nano fc.C

Puede confirmar la ejecución exitosa del archivo solo si obtiene el editor GNU Nano en su pantalla. Ahora tiene que escribir el código que se muestra en la captura de pantalla adjunta. Este es uno de los ejemplos más básicos de llamada del sistema Futex ().

es un archivo que contiene declaraciones para varias funciones y macros que se requieren para recibir la entrada de las entradas y mostrar la salida en la ventana de salida del programa C. No es necesario agregar "stdio. h "porque podemos proporcionar información al programa C utilizando cualquier otro programa, como DOS, y los resultados de la tienda. El encabezado proporciona y declara una variedad de constantes y tipos simbólicos, así como una variedad de funciones. syscall () es una pequeña función de biblioteca que llama a la llamada del sistema con la cantidad de argumentos solicitados y la interfaz de lenguaje de ensamblaje dada. Una vez que comprenda el código anterior, está listo para verificar la salida. Hemos instalado un compilador GCC para la compilación del código. El compilador GNU C, o GCC, es el compilador más famoso y ampliamente utilizado entre los programadores que usan C como lenguaje de programación. GCC es un compilador accesible que viene con todas las distribuciones de Linux de forma gratuita. Ahora ejecute el comando adjunto en el terminal del Ubuntu 20.04 Sistema Linux.

$ GCC FC.C
ps ./a.afuera

La salida se puede ver en la imagen atacada.

Conclusión

Este artículo proporcionó una breve introducción de la llamada del sistema Futex () en el lenguaje de programación C. Tenemos un ejemplo simple y breve de una llamada del sistema Futex (). Implementar los mismos ejemplos y agregar pocos cambios puede ayudarlo a comprender el sistema del sistema Futex () en el lenguaje de programación C.