Futex System Call in c

Futex System Call in c
Zasadniczo Prymitywa synchronizacji wątków wymagają korzystania z połączeń systemowych przez programy użytkowników. Połączenie systemowe jest z natury nieuniknione, aby umieścić nitkę do spania i czekanie na kolejną nitkę lub przebudzenie nić od snu. Na przykład uzyskanie niekwestionowanego zamka nie wymaga połączenia systemowego, przynajmniej nie naturalnie. FUTEX jest lekarstwem na to wyzwanie. FUTEX to po prostu natychmiastowy adres liczb całkowitych. Adres służy do identyfikacji kolejki wątków, które czekają na przetworzenie. Wartość liczby całkowitej w tej lokalizacji jest wykorzystywana do wykonywania szybkiej ścieżki z operacjami atomowymi, jeśli jest dostępna, a także do radzenia sobie z sytuacjami wyścigowymi przypadków narożnych w przypadku konfliktu. Połączenie systemowe FUTEX () pozwala programowi czekać na zmianę na określonym adresie, a także obudzić każdego czekającego na ten adres. Jest najczęściej używany do wdrożenia dyskusyjnego przypadku śluzy współużytkowanej, jak wspomniano w FUTEX (7). Gdy akcja FUTEX (7) w przestrzeni użytkowników nie ukończy się bez błędu, wymagane jest wywołanie jądra. Arbitraż można wykorzystać do uśpienia procesu połączenia lub przebudzenia procesu oczekiwania. Oczekuje się, że semantyka zdefiniowana w FUTEX następują dzwoniący z tej funkcji (7).

Ponieważ semantyka te wymagają tworzenia instrukcji montażowych niezmiennych, większość użytkowników najprawdopodobniej będzie autorów biblioteki, a nie zwykłych programistów aplikacji. FUTEX to pojedyncze wywołanie systemowe, które wykonuje wiele operacji. To może wydawać się dziwne, a nawet kłopotliwe, jeśli nie wręcz. To znaczy jednak standardowa procedura jedynego w swoim rodzaju połączenia systemowego: połączenie systemowe „IOCTL” zawiera znacznie więcej operacji niż Futex. W innym przypadku programiści raczej nie odkryją, ponieważ GLIBC go ukrywa, chociaż system wywołania jednego gniazda implementuje wszystkie funkcje związane z gniazdem. W rezultacie, jeśli wątki mają dostęp do niego w jednym procesie, można go określić jako zmienną globalną lub przechowywane w segmencie pamięci współdzielonej. Stan zaktualizowany w przestrzeni użytkowników za pomocą operacji atomowych jest przechowywana w zmiennej udostępnionej. Nie ma potrzeby wywołania systemu, gdy państwo mówi, że nie ma konfliktu. Jeśli warunek wskazuje na rywaliza.

Przykład wyjaśnienia wywołania systemu futex () w języku c

Aby zrozumieć połączenie systemowe FUTEX () w języku C, zainstalowaliśmy Ubuntu 20.04 system operacyjny Linux. Utwórz plik zatytułowany „FC.C". Tytuł pliku można zmodyfikować, ale rozszerzenie pozostanie takie same. Najpierw otwórz powłokę zainstalowanego Ubuntu 20.04 System operacyjny Linux, znajdując go w „Aplikacjach” lub sprawdzając klucz „Ctrl+Alt+T”. Po otwarciu uruchom umieszczoną instrukcję w terminalu zainstalowanego Ubuntu 20.04 system operacyjny Linux.

$ nano fc.C

Możesz potwierdzić pomyślne wykonanie pliku tylko wtedy, gdy otrzymasz edytor GNU Nano na ekranie. Teraz musisz napisać kod wyświetlany na załączonym zrzucie ekranu. To jeden z najbardziej podstawowych przykładów połączenia systemowego Futex ().

to plik zawierający deklaracje dla różnych funkcji i makr, które są wymagane do odbierania danych wejściowych i wyświetlania wyświetlania w oknie wyjściowym programu C. Dodanie „Stdio nie jest konieczne. h ”, ponieważ możemy dostarczyć dane wejściowe do programu C przy użyciu dowolnego innego programu, takiego jak DOS, i przechowywać wyniki. Nagłówek zapewnia i deklaruje różnorodne stałe i typy, a także różnorodne funkcje. SYSCALL () to niewielka funkcja biblioteczna, która wywołuje wywołanie systemowe z żądaną ilością argumentów i danym interfejsem języka asemblera. Po zrozumieniu powyższego kodu, możesz sprawdzić wyjście. Zainstalowaliśmy kompilator GCC do kompilacji kodu. Kompilator GNU C, czyli GCC, jest najbardziej znanym i szeroko stosowanym kompilatorem wśród programistów, którzy używają C jako języka programowania. GCC to dostępny kompilator, który jest dostarczany ze wszystkimi dystrybucjami Linux za darmo. Teraz wykonaj dołączone polecenie w terminalu Ubuntu 20.04 System Linux.

$ gcc fc.C
$ ./A.na zewnątrz

Dane wyjściowe można zobaczyć na powyższym obrazie.

Wniosek

W tym artykule zawiera krótkie wprowadzenie połączenia systemowego FUTEX () w języku programowania C. Mamy prosty i krótki przykład połączenia systemowego Futex (). Wdrożenie tych samych przykładów i dodanie niewielkich zmian może pomóc Ci zrozumieć połączenie systemowe FUTEX () w języku programowania C.