Linux komunikacja między procesami (ipc)



Pobieranie 449,91 Kb.
Strona1/6
Data22.12.2017
Rozmiar449,91 Kb.
  1   2   3   4   5   6


LINUX

Komunikacja między procesami (IPC)




Komunikacja IPC

Wprowadzenie


  • Aby dwa procesy komunikowały się ze sobą, muszą obydwa się na to zgodzić, a system operracyjny musi dostraczyć narzędzi przeznaczonych do komunikacji między procesami (ang. Interprocess communication, IPC).

  • Komunikacja między procesami nie dotyczy jedynie wymiany informacji pomiędzy procesami w sieci, ale przede wszystkim procesów wykonywanych w jednym systemie w jednym systemie komputerowym (patrz rys.1).

Rys.1 Komunikacja między dwoma procesami w jednym systemie

  • Widzimy, że komunikacja między dwoma procesami odbywa się za pośrednictwem jądra. Jest to sytuacja typowa, ale nie jest to wymóg.

  • Komunikacja między procesami w tym samym systemie może być realizowana na kilka róznych sposobów:

  • Pół-dupleksowe łącza komunikacyjne (ang. half-duplex UNIX pipes),

  • Kolejki FIFO (łącza nazwane, ang. named pipes),

  • Kolejki komunikatów (ang.SYS V style message queues),

  • Zbiory semaforów (ang.SYS V style semaphore sets),

  • Pamięć współdzielona (ang.SYS V shared memory segments),

  • Pełno-dupleksowe łacza komunikacyjne (amg. Full-duplex pipes, STREAMS pipes).

  • Komunikacja między procesami wykonywanymi w różnych systemach przy użyciu jakiejś sieci łączącej systemy może wygldać tak jak na rys.2.

Rys.2 Komunikacja między dwoma procesami w różnych systemach

  • Komunikacja między procesami znajdującymi się w różnych systemach realizowana jest za pośrednictwem gniazd (ang networking socets, Berkley style).

Łącza komunikacyjne (ang. pipes)


  • Łącze komunikacyjne jest metodą, która umożliwia połączenie standardowego wyjścia jednego z procesów do standardowego wejścia innego lub tego samego procesu. Łącze komunikacyjne umożliwia przepływ danych tylko w jednym kierunku (stąd nazwa pół-duplex).

Rys.3 Łącze komunikacyjne w jednym procesie

  • Schemat zastosowania łącza komunikacyjnego w jednym i tym samym procesie pokazano na rys.3. Zasady czytania danych z łącza, w którym nie ma żadnych danych oraz pisanie do łącza wówczas, gdy jest zapełnione podamy dalej, przy okazji omawiania łączy nazwanych.

Rys.4 Łącze komunikacyjne w jednym procesie bezposrednio po wywołaniu funkcji fork

  • Możliwość wymiany przez proces informacji tylko z sobą jest mało interesująca, chociaż czasami może być przydatna, np. w razie konieczności kolejkowania informacji.

  • Typowym zsatosowaniem łączy komunikacyjnych jest komunikowanie się dwóch róznych procesów w następujący sposób. Najpierw proces tworzy łacze komunikacyjne, następnie zaś wywołuje funkcje systemową fork, aby utworzyć swoją kopię (patrz rys.4).

Rys.5 Łącze komunikacyjne między dwoma procesami

  • Następnie proces macierzysty zamyka np. koniec łącza służący do czytania, a proces potomny zamyka koniec łącza służący do pisania. Powstaje w ten sposób jednokierunkowy przepływ informacji między dwoma procesami (rys.5).

  • Gdy użykownik wprowadzi na przykład z poziomu shell’a następujące polecenie:

who | sort | lpr

Wówczas shell utworzy po kolei trzy procesy i dwa łącza pomiędzy nimi. Utworzony w ten sposób tzw. potok (ang. pipeline) przedstawiony jest na rys.6.



Rys.6 Łącza komunikacyjne między dwoma procesami tworza potok

  • Wszystkie omawiane łącza były jednokierunkowe, a więc umożliwiały przepływ danych tylko w jedną stronę. Jeśli chcemy uzyskać przepływ danych w obie strony, to musimy stworzyć dwa łącza komunikacyjne skierowane przeciwnie. Trzeba w tym celu wykonać następujące kroki:

  • Utwórz łacze 1, utwórz łacze 2,

  • Wywołaj funkcję systemową fork,

  • Przodek zamyka łącze 1 do czytania,

  • Przodek zamyka łącze 2 do pisania,

  • Potomek zamyka łącze 1 do pisania,

  • Potomek zamyka łącze 2 do czytania.

  • Schemat konstrukcji przedstawiono na rys.7. Od tego momentu oba procesy posiadają pseudo pełno-duplexowe łącze komunikacyjne.

Rys.7 Dwa łącza komunikacyjne umożliwiają dwukierunkowy przepływ informacji



  1   2   3   4   5   6


©operacji.org 2019
wyślij wiadomość

    Strona główna