Chiama di sistema futex in c

Chiama di sistema futex in c
In generale, le primitive di sincronizzazione dei thread richiedono l'uso delle chiamate di sistema da parte dei programmi di spazio utenti. La chiamata di sistema è intrinsecamente inevitabile per posizionare un filo per dormire e aspettare un altro filo o svegliare un filo dal sonno. Ottenere un blocco inccontentato, ad esempio, non richiede una chiamata di sistema, almeno non naturalmente. Il Futex è il rimedio a questa sfida. Un futex è semplicemente un indirizzo intero istantaneo. L'indirizzo viene utilizzato per identificare una coda di thread in attesa di essere elaborati. Il valore dell'intero in quella posizione viene utilizzato per eseguire il percorso veloce con operazioni atomiche, se disponibile, nonché per gestire le situazioni di gara d'angolo in caso di conflitto. La chiamata di sistema Futex () consente a un programma di attendere il cambiamento di un valore a un determinato indirizzo, oltre a svegliare chiunque in attesa di quell'indirizzo. È più comunemente usato per implementare il caso discutibile di un blocco di memoria condiviso, come menzionato in Futex (7). Quando un'azione FUTEX (7) in Userspace non riesce a completare senza errori, è richiesta una chiamata al kernel per risolvere il problema. L'arbitrato può essere usato per mettere a dormire il processo di chiamata o per svegliare un processo di attesa. La semantica definita nel Futex dovrebbe essere seguita da chiamanti di questa funzione (7).

Poiché queste semantiche richiedono istruzioni di assemblaggio non portabili, la maggior parte degli utenti sarà probabilmente autori di biblioteche piuttosto che sviluppatori di applicazioni ordinarie. Futex è una chiamata di un singolo sistema che esegue molte operazioni. Può sembrare strano, persino sconcertante, se non decisamente. Cioè, tuttavia, procedura standard per una chiamata di sistema unica nel suo genere: la chiamata di sistema "IOCTL" contiene notevolmente più operazioni di Futex. Per un'altra istanza, è improbabile che i programmatori scoponino perché GLIBC lo nasconde, sebbene il sistema di chiamate a presa singola implementa tutte le funzioni correlate all'ita. Di conseguenza, se i thread lo accedono in un singolo processo, può essere specificato come variabile globale o memorizzata in un segmento di memoria condiviso se i thread da vari processi lo utilizzano. Uno stato aggiornato nello spazio utenti utilizzando le operazioni atomiche è archiviato nella variabile condivisa. Non è necessario una chiamata di sistema quando lo stato dice che non vi è alcun conflitto. Se la condizione indica una contesa, dall'altra parte, viene effettuata una chiamata di sistema Futex per far dormire l'attività di chiamata.

Esempio per spiegare il sistema di sistema Futex () in lingua C

Per capire la chiamata di sistema Futex () in lingua C, abbiamo installato Ubuntu 20.04 Sistema operativo Linux. Crea un file intitolato "FC.C". Il titolo del file può essere modificato, ma l'estensione rimarrà la stessa. Quindi in primo luogo, apri la shell dell'Ubuntu 20 installato.04 Sistema operativo Linux trovandolo nella chiave "Applicazioni" o controllando il tasto "Ctrl+Alt+T". Una volta aperto, eseguire l'istruzione fissa nel terminale di Ubuntu 20 installato.04 Sistema operativo Linux.

$ nano fc.C

Puoi confermare la riuscita esecuzione del file solo se si ottiene l'editor GNU Nano sullo schermo. Ora devi scrivere il codice visualizzato nello screenshot allegato. Questo è uno degli esempi più elementari della chiamata di sistema Futex ().

è un file contenente dichiarazioni per varie funzioni e macro richieste per ricevere input dagli input e visualizzare l'output sulla finestra di output del programma C. Non è necessario aggiungere "stdio. h "perché possiamo fornire input al programma C utilizzando qualsiasi altro programma, come DOS, e i risultati di archiviazione. L'intestazione fornisce e dichiara una varietà di costanti e tipi simboliche, nonché una varietà di funzioni. Syscall () è una piccola funzione di libreria che chiama la chiamata di sistema con la quantità richiesta di argomenti e l'interfaccia del linguaggio dell'assembly. Una volta compreso il codice sopra visualizzato, sei pronto a controllare l'output. Abbiamo installato un compilatore GCC per la compilazione del codice. Il compilatore GNU C, o GCC, è il compilatore più famoso e ampiamente usato tra i programmatori che usano C come linguaggio di programmazione. GCC è un compilatore accessibile fornito con tutte le distribuzioni Linux gratuitamente. Ora esegui il comando aggiunto nel terminale di Ubuntu 20.04 Sistema Linux.

$ GCC FC.C
$ ./UN.fuori

L'output può essere visto nell'immagine sopra attaccata.

Conclusione

Questo articolo ha fornito una breve introduzione del sistema di sistema Futex () in linguaggio di programmazione C. Abbiamo un esempio semplice e breve di una chiamata di sistema futex (). L'implementazione degli stessi esempi e l'aggiunta di piccole modifiche può aiutarti a capire la chiamata di sistema Futex () in linguaggio di programmazione C.