Komunikacja między procesami

W informatyce , komunikacja między procesami ( komunikacja między procesami , IPC, w języku angielskim) zrzesza szereg mechanizmów pozwalających jednoczesnych procesów komunikowania. Mechanizmy te można podzielić na trzy kategorie:

Wymiana danych

Te pliki mogą być wykorzystywane do wymiany danych między wieloma procesów współbieżnych. Procesy, które chcą wysłać dane do jednego (lub więcej) plików w określonych pozycjach; procesy, które chcą otrzymać te dane, ustawiają się na tych pozycjach w pliku (-ach) i odczytują je. Ten typ wymiany jest możliwy między lokalnymi współbieżnymi procesami korzystającymi z lokalnego systemu plików lub zdalnymi współbieżnymi procesami korzystającymi z rozproszonego systemu plików, takiego jak NFS .

Pamięci głównej z komputera może być również używany do wymiany danych pomiędzy kilku równoczesnych procesów. W zależności od rodzaju procesu stosowane mechanizmy nie są takie same:

W obu przypadkach wymiany odbywają się poprzez umieszczenie danych w pamięci w zmiennych współdzielonych przez procesy.

Niezależnie od metody wymiany danych (pliki lub pamięć główna) ten rodzaj komunikacji stwarza problem w sekcjach krytycznych: kiedy procesy uzyskują dostęp do współdzielonych danych. Rzeczywiście, jeśli dwa procesy uzyskują dostęp do wspólnych danych w tym samym czasie, mogą wystąpić różne wyniki:

Podczas korzystania z plików najczęściej spotykamy się z drugim lub trzecim przypadkiem. Jeśli jest podana, proces może czekać (10 milisekund, 1 sekunda itd.), A później wznowić dostęp do danych. Jednak to rozwiązanie nie zawsze jest możliwe w sieci, ponieważ pliki nie zawsze są wydawane poprawnie.

Korzystając z pamięci głównej, raczej opieramy się na pierwszym przypadku. Jeśli jest podana, proces może wykonywać wyłączne synchronizacje odczytu / zapisu. We wszystkich przypadkach udostępnianie danych w pamięci jest możliwe tylko na jednym i tym samym komputerze.

Synchronizacja

Mechanizmy synchronizacji służą do rozwiązywania problemów z sekcjami krytycznymi, a bardziej ogólnie do blokowania i odblokowywania procesów w określonych warunkach.

Te zamki mogą blokować całości lub części pliku. Te blokady mogą być wykonywane zarówno dla operacji odczytu, jak i zapisu, lub dla obu.

Semafor jest ogólny mechanizm, nie są one związane z konkretnym typem zasobu i może ograniczyć jednoczesnego dostępu do sekcji krytycznej do szeregu procesów. Aby to zrobić, semafory używają dwóch funkcji: P i V oraz licznika. Funkcja P zmniejsza licznik, jeśli licznik jest zerowy, proces jest blokowany. Funkcja V zwiększa licznik i odblokowuje jeden z zablokowanych procesów.

Te sygnały są pierwotnie przeznaczone do zabicia (zakończenie) procesu, pod pewnymi warunkami, na przykład sygnał SIGSEGV zabija proces, który jest z dostępem do obszaru pamięci, że nie przyznała. Jednak sygnały mogą być kierowane do innych funkcji. Blokowanie procesu odbywa się wówczas poprzez zapytanie o oczekiwanie na nadejście sygnału, a odblokowanie polega na wysłaniu komunikatu do procesu.

Problem z mechanizmami synchronizacji polega na tym, że procesy są blokowane tylko wtedy, gdy ich używają. Ponadto ich użycie jest utrudnione i powoduje problemy z zakleszczeniami (wszystkie procesy są blokowane).

Podczas współpracy międzyprocesowej zwykle występują sytuacje synchronizacji:

Wymiana i synchronizacja danych

Mechanizmy te łączą możliwości dwóch poprzednich kategorii i są łatwiejsze w użyciu.

Ideą tego typu mechanizmu jest komunikacja na zasadzie kolejek, procesy, które chcą przesłać informacje, umieszczają je w kolejce; ci, którzy chcą je otrzymać, otrzymują je w tej samej linii. Operacje zapisu i odczytu w kolejce blokują i dlatego umożliwiają synchronizację.

Zasada ta jest używana przez kolejki komunikatów ( kolejka komunikatów w języku angielskim) w systemie Unix, przez gniazda Unix lub Internet, lampy , wyznaczone lub nie, oraz transmisję komunikatów ( Message Passing English).