Chamada do sistema Futex em C

Chamada do sistema Futex em C
Em geral, as primitivas de sincronização de threads exigem o uso de chamadas do sistema por programas de espaço de usuários. A chamada do sistema é inerentemente inevitável para colocar um fio para dormir e esperar por outro fio ou acordar um fio do sono. Obter uma trava não contendida, por exemplo, não requer uma chamada de sistema, pelo menos não naturalmente. O Futex é o remédio para este desafio. Um futex é simplesmente um endereço inteiro instantâneo. O endereço é usado para identificar uma fila de threads que estão esperando para serem processados. O valor do número inteiro nesse local é utilizado para executar o caminho rápido com operações atômicas, se disponível, além de lidar com situações de corrida de casos de canto em caso de conflito. A chamada do sistema futex () permite que um programa aguarde um valor em um determinado endereço para mudar, bem como acordar qualquer pessoa que aguarde esse endereço. É mais comumente usado para implementar o caso discutível de um bloqueio de memória compartilhado, como mencionado no Futex (7). Quando uma ação de Futex (7) no Usuário Space falha ao concluir sem erro, é necessário uma chamada para o kernel para resolver o problema. A arbitragem pode ser usada para colocar o processo de chamada para dormir ou para acordar um processo de espera. Espera -se que a semântica definida no Futex seja seguida pelos chamadores desta função (7).

Como essas semânticas exigem instruções de montagem não portáveis, a maioria dos usuários provavelmente serão autores de bibliotecas, em vez de desenvolvedores de aplicativos comuns. Futex é uma chamada única que executa muitas operações. Isso pode parecer estranho, até desconcertante, se não absolutamente. Ou seja, no entanto, procedimento padrão para uma chamada de sistema única: a chamada do sistema “ioctl” contém consideravelmente mais operações do que a Futex. Por outro lado, é improvável que os programadores descubram porque o glibc o esconde, embora o sistema de chamada de soquete único implemente todas as funções relacionadas ao soquete. Como resultado, se os threads o acessarem em um único processo, ele poderá ser especificado como uma variável global ou armazenada em um segmento de memória compartilhado se os threads de vários processos o utilizarem. Um estado atualizado no espaço de usuários usando operações atômicas é armazenado na variável compartilhada. Não há necessidade de uma chamada do sistema quando o estado diz que não há conflito. Se a condição indicar uma disputa, por outro lado, uma chamada do sistema Futex será feita para colocar a tarefa de chamada para dormir.

Exemplo para explicar a chamada do sistema futex () na linguagem C

Para entender a chamada do sistema futex () em linguagem C, instalamos o Ubuntu 20.04 Sistema operacional Linux. Crie um arquivo intitulado “FC.C ”. O título do arquivo pode ser modificado, mas a extensão permanecerá a mesma. Então, em primeiro lugar, abra a concha do Ubuntu 20 instalado 20.04 Sistema operacional Linux, encontrando -o nos “Applications” ou verificando a tecla “Ctrl+Alt+T”. Uma vez aberto, execute as instruções afixadas no terminal do Ubuntu instalado 20.04 Sistema operacional Linux.

$ nano fc.c

Você pode confirmar a execução bem -sucedida do arquivo apenas se você receber o editor do GNU Nano na sua tela. Agora você tem que escrever o código exibido na captura de tela em anexo. Este é um dos exemplos mais básicos da chamada do sistema futex ().

é um arquivo que contém declarações para várias funções e macros necessários para receber informações de entradas e exibir saída na janela de saída do programa C. Não é desnecessário adicionar “stdio. H ”porque podemos fornecer informações ao programa C usando qualquer outro programa, como DOS, e os resultados da loja. O cabeçalho fornece e declara uma variedade de constantes e tipos simbólicos, bem como uma variedade de funções. syscall () é uma pequena função da biblioteca que chama o sistema chamado com a quantidade solicitada de argumentos e a interface de linguagem de montagem fornecida. Depois de entender o código acima do display, você estará pronto para verificar a saída. Instalamos um compilador GCC para a compilação do código. O compilador GNU C, ou GCC, é o compilador mais famoso e amplamente usado entre os programadores que usam C como sua linguagem de programação. O GCC é um compilador acessível que vem com todas as distribuições Linux gratuitamente. Agora execute o comando anexado no terminal do Ubuntu 20.04 Sistema Linux.

$ GCC FC.c
$ ./a.fora

A saída pode ser vista na imagem acima ligada.

Conclusão

Este artigo forneceu uma breve introdução da chamada do sistema futex () na linguagem de programação C. Temos um exemplo simples e breve de uma chamada do sistema futex (). Implementar os mesmos exemplos e adicionar poucas mudanças pode ajudá -lo a entender o sistema Futex () System na linguagem de programação C.