Appel du système Futex dans C

Appel du système Futex dans C
En général, les primitives de synchronisation des threads nécessitent l'utilisation des appels système par des programmes d'espace utilisateur. L'appel du système est intrinsèquement inévitable pour placer un fil pour dormir et attendre un autre fil ou réveiller un fil de sommeil. L'obtention d'une serrure non contractée, par exemple, ne nécessite pas un appel système, du moins pas naturellement. Le Futex est le remède à ce défi. Un Futex est simplement une adresse entière instantanée. L'adresse est utilisée pour identifier une file d'attente de threads qui attendent d'être traités. La valeur de l'entier à cet endroit est utilisée pour exécuter le chemin rapide avec les opérations atomiques si disponibles, ainsi que pour gérer les situations de course de cas d'angle en cas de conflit. L'appel système Futex () permet à un programme d'attendre une valeur à une adresse particulière pour changer, ainsi que de réveiller toute personne attendant cette adresse. Il est le plus souvent utilisé pour implémenter le cas discutable d'un verrouillage de mémoire partagé, comme mentionné dans Futex (7). Lorsqu'une action Futex (7) dans l'espace utilisateur ne se termine pas sans erreur, un appel au noyau est requis pour résoudre le problème. L'arbitrage peut être utilisé pour endormir le processus d'appel ou pour réveiller un processus d'attente. La sémantique définie dans le Futex devrait être suivie par les appelants de cette fonction (7).

Étant donné que ces sémantiques nécessitent une création d'instructions d'assemblage non portables, la plupart des utilisateurs seront probablement des auteurs de bibliothèques plutôt que des développeurs d'applications ordinaires. Futex est un seul appel système qui effectue de nombreuses opérations. Cela peut sembler étrange, même perplexe, sinon carrément. Autrement dit. Pour une autre instance, il est peu probable que les programmeurs découvrent car GLIBC le cache, bien que le système d'appel à douille unique implémente toutes les fonctions liées à la prise. En conséquence, si les threads y accédent en un seul processus, il peut être spécifié en tant que variable globale ou stocké dans un segment de mémoire partagé si les threads de divers processus l'utilisent. Un état mis à jour dans l'espace utilisateur à l'aide des opérations atomiques est stocké dans la variable partagée. Il n'y a pas besoin d'un appel système lorsque l'État dit qu'il n'y a pas de conflit. Si la condition indique une affirmation, de l'autre côté, un appel système Futex est fait pour endormir la tâche d'appel.

Exemple pour expliquer l'appel du système Futex () dans le langage C

Pour comprendre l'appel du système Futex () dans le langage C, nous avons installé Ubuntu 20.04 Système d'exploitation Linux. Créer un fichier intitulé «FC.C ". Le titre du fichier peut être modifié, mais l'extension restera la même. Alors d'abord, ouvrez la coque de l'ubuntu 20 installé.04 Système d'exploitation Linux en le trouvant dans la «applications» ou en vérifiant la clé «Ctrl + Alt + T». Une fois ouvert, exécutez l'instruction apposée dans le terminal de l'ubuntu 20 installé.04 Système d'exploitation Linux.

$ nano fc.c

Vous ne pouvez confirmer l'exécution réussie du fichier que si vous obtenez l'éditeur GNU Nano sur votre écran. Vous devez maintenant écrire le code affiché dans la capture d'écran ci-jointe. Ceci est l'un des exemples les plus élémentaires d'appel du système Futex ().

est un fichier contenant des déclarations pour diverses fonctions et macros qui sont nécessaires pour recevoir les entrées des entrées et afficher la sortie de la fenêtre de sortie du programme C. Il n'est pas nécessaire d'ajouter «stdio. H ”car nous pouvons fournir des commentaires au programme C à l'aide de tout autre programme, tel que DOS, et de stocker les résultats. L'en-tête fournit et déclare une variété de constantes et de types symboliques, ainsi qu'une variété de fonctions. SyScall () est une petite fonction de bibliothèque qui appelle l'appel système avec le montant demandé des arguments et l'interface de langue d'assemblage donnée. Une fois que vous comprenez le code ci-dessus, vous êtes prêt à vérifier la sortie. Nous avons installé un compilateur GCC pour la compilation du code. Le compilateur GNU C, ou GCC, est le compilateur le plus célèbre et le plus utilisé parmi les programmeurs qui utilisent C comme langage de programmation. GCC est un compilateur accessible qui est livré avec toutes les distributions Linux gratuitement. Exécutez maintenant la commande annexe dans le terminal de l'ubuntu 20.04 Système Linux.

$ gcc fc.c
$ ./un.dehors

La sortie peut être vue dans l'image ci-dessus.

Conclusion

Cet article a fourni une brève introduction de l'appel du système Futex () dans le langage de programmation C. Nous avons un exemple simple et bref d'appel système Futex (). La mise en œuvre des mêmes exemples et l'ajout de peu de modifications peuvent vous aider à comprendre l'appel du système Futex () dans le langage de programmation C.