• Artykuły
  • Forum
  • Ciekawostki
  • Encyklopedia
  • Komunikacja międzyprocesowa

    Przeczytaj także...
    Wątek (ang. thread) – część programu wykonywana współbieżnie w obrębie jednego procesu; w jednym procesie może istnieć wiele wątków.Pamięć – zdolność do rejestrowania i ponownego przywoływania wrażeń zmysłowych, skojarzeń, informacji, występująca u ludzi, niektórych zwierząt i w komputerach. W każdym z tych przypadków proces zapamiętywania ma całkowicie inne podłoże fizyczne oraz podlega badaniom naukowym w oparciu o różne zestawy pojęć.
    Pamięć dzielona - w informatyce rodzaj pamięci, z którego może jednocześnie korzystać wiele programów. Służy do umożliwienia komunikacji pomiędzy nimi lub uniknięcia redundantnych kopii. W zależności od kontekstu, programy mogą być uruchamiane na pojedynczym lub wielu osobnych procesorach. Pamięć wykorzystywana do komunikacji w obrębie pojedynczego programu, na przykład pomiędzy jego wieloma wątkami, zwykle nie jest nazywana pamięcią dzieloną.

    Komunikacja międzyprocesowa (ang. inter-process communication, IPC) – umowna nazwa zbioru sposobów komunikacji pomiędzy procesami systemu operacyjnego.

    Procesy mogą używać różnych sposobów komunikacji, a najpowszechniejsze z nich to:

  • pliki i blokady – najprostsza i najstarsza forma IPC
  • sygnały (ang. signals) – w niektórych systemach (jak np. DOS) znane jako przerwania programowe
  • semafory (ang. semaphores)
  • potoki nienazwane (ang. pipes) – znane też jako łącza komunikacyjne
  • potoki nazwane (ang. named pipes) – znane też jako nazwane łącza komunikacyjne
  • systemy kolejkowe (ang. message queues)
  • pamięć dzieloną (ang. shared memory) – znane też jako segmenty pamięci dzielonej (ang. shared memory segments)
  • gniazda dziedziny Uniksa (ang. Unix domain sockets)
  • Ponieważ procesy mogą komunikować się nie tylko w obrębie jednego systemu, możemy wyróżnić też:

    Plik (ang. file) – uporządkowany zbiór danych o skończonej długości, posiadający szereg atrybutów i stanowiący dla użytkownika systemu operacyjnego całość. Nazwa pliku nie jest częścią tego pliku, lecz jest przechowywana w systemie plików.Sekcja krytyczna - w programowaniu współbieżnym fragment kodu programu, w którym korzysta się z zasobu dzielonego, a co za tym idzie w danej chwili może być wykorzystywany przez co najwyżej jeden wątek. System operacyjny dba o synchronizację, jeśli więcej wątków żąda wykonania kodu sekcji krytycznej, dopuszczany jest tylko jeden wątek, pozostałe zaś są wstrzymywane. Dąży się do tego, aby kod sekcji krytycznej był krótki - by wykonywał się szybko. Poprzez ostrożne kontrolowanie, które zmienne są modyfikowane wewnątrz i poza sekcją krytyczną (zwykle poprzez uzyskiwanie dostępu do istotnego stanu tylko z zewnątrz), zapobiega się współbieżnemu dostępowi do tego stanu. Sekcja krytyczna jest zwykle używana kiedy program wielowątkowy musi uaktualnić wiele powiązanych zmiennych, tak żeby inny wątek nie dokonał szkodliwych zmian tych danych. W odnośnej sytuacji, sekcja krytyczna może być użyta ażeby zagwarantować, że wspólny zasób, na przykład drukarka, jest używana tylko przez jeden proces w określonym czasie.
  • gniazda (ang. sockets)
  • RPC
  • Mechanizmy IPC opierają się na budowaniu w pamięci lub na nośniku dynamicznych struktur, które są używane w celu przesyłania pomiędzy procesami komunikatów, np. o blokadzie obiektów systemowych, stanie wykonywanych wątków, wzbudzania zaprogramowanych w aplikacjach procedur i innych.

    Remote Procedure Call (RPC - zdalne wywołanie procedury) to protokół zdalnego wywoływania procedur, stworzony przez firmę Sun i swego czasu dość popularny na Uniksach, obsługiwany w bibliotekach języka Java. Współcześnie wypierany przez bardziej rozbudowane protokoły takie jak CORBA, XML-RPC, czy JSON-RPC.Aplikacja, program użytkowy - konkretny, ze względu na oferowaną użytkownikom funkcjonalność, element oprogramowania użytkowego.

    IPC nie posiada sztywnej specyfikacji. System operacyjny udostępnia niezbędne obiekty (jak semafor), zaś programista wykorzystuje je w celu przekazania komunikatu, którego znaczenie dla aplikacji ustala samodzielnie, zgodnie z przyjętą koncepcją architektury programu, a więc inaczej niż w wypadku np. protokołów sieciowych, gdzie znaczenie poszczególnych flag w nagłówku pakietu jest określone przez specyfikację protokołu.

    System operacyjny (ang. Operating System, skrót OS) – oprogramowanie zarządzające systemem komputerowym, tworzące środowisko do uruchamiania i kontroli zadań użytkownika.Jądro systemu operacyjnego (ang. kernel) – podstawowa część systemu operacyjnego, która jest odpowiedzialna za wszystkie jego zadania.

    IPC używa się najczęściej w rozbudowanych wielowątkowych aplikacjach (np. bazach danych, serwerach WWW, czy serwerach aplikacyjnych).

    IPC zostało wprowadzone jako część jądra systemu operacyjnego w systemie operacyjnym System V. W podobny sposób zbudowana została implementacja IPC w jądrze Linux. Z uwagi na implementację w jądrze cała komunikacja wykonywana jest w kontekście jądra, co z jednej strony ułatwia synchronizację, z drugiej zaś powoduje obniżenie wydajności. Każda operacja IPC wymaga przełączenia kontekstu, co obarczone jest sporym narzutem czasu (przy założeniu, że przełączanie kontekstów jest sporym narzutem). Implementacja w jądrze ma jednak tę zaletę, że komunikacja IPC jest bardziej niezawodna, a w niektórych przypadkach (np. semafory) wydaje się jedyną słuszną strategią, gdyż zapewnia atomowość operacji, zapobiegając powstawaniu sytuacji kolizji w dostępie czy sytuacji wyścigu o nieustalonym rezultacie.

    Wielozadaniowość – cecha systemu operacyjnego umożliwiająca mu równoczesne wykonywanie więcej niż jednego procesu. Zwykle za poprawną realizację wielozadaniowości odpowiedzialne jest jądro systemu operacyjnego.Proces – jedno z podstawowych pojęć w informatyce, definiowane jako egzemplarz wykonywanego programu. Każdy nowo powstały proces otrzymuje unikatowy numer, który go jednoznacznie identyfikuje, tzw. PID (od (ang.) process identifier).

    Pojęcie komunikacji międzyprocesowej może odnosić się do wymiany informacji między procesami w obrębie jednego systemu operacyjnego, klastra, a nawet systemów odległych (połączonych siecią). W przypadku tej ostatniej kategorii potrzebne są metody, które pozwolą jednoznacznie identyfikować zdalne procesy. Najczęściej używane strategie to użycie numerów portów (dla gniazd działających w warstwach transportowych modelu TCP/IP, np. TCP lub UDP) lub użycie zdefiniowanych wcześniej unikalnych nazw (dla RPC).

    Sieć komputerowa (w skrócie: sieć) – zbiór komputerów i innych urządzeń połączonych ze sobą kanałami komunikacyjnymi. Sieć komputerowa umożliwia wzajemne przekazywanie informacji oraz udostępnianie zasobów własnych między podłączonymi do niej urządzeniami, tzw. "punktami sieci".Zakleszczenie, blokada wzajemna (ang. deadlock) jest pojęciem opisującym sytuację, w której co najmniej dwie różne akcje czekają na siebie nawzajem, więc żadna nie może się zakończyć. Gracze zdobyli pewne unikatowe warunki niezbędne do wykonania kolejnego ruchu, ale żaden nie ma wszystkich i gra nie może być kontynuowana. Zakleszczenie może być zobrazowane przykładem ludzi rysujących wykresy. Dwie osoby pragną narysować wykres, do czego jest potrzebna linijka i ołówek. W momencie, kiedy jedna z nich zabierze ołówek, druga zaś linijkę dochodzi do sytuacji konfliktowej. Pierwsza osoba potrzebuje linijki, drugi zaś ołówka. Oba żądania nie mogą być spełnione – powstaje zakleszczenie, które to zazwyczaj jest kłopotliwe, gdyż nie ma pewnych i zawsze sprawdzonych rozwiązań, ażeby go uniknąć.

    Zobacz też[]

  • sekcja krytyczna
  • zakleszczenie
  • wielozadaniowość



  • w oparciu o Wikipedię (licencja GFDL, CC-BY-SA 3.0, autorzy, historia, edycja)

    Warto wiedzieć że... beta

    DOS (ang. Disk Operating System) – pierwszy przenośny (Disk) system operacyjny OS komputerów PC i mikrokomputerów lat 80. rezydujący nad BIOS-em, zawierający m.in. rozszerzenia programowe procedur sprzętowych BIOSu i interpreter komend. DOS zawiera niektóre doświadczenia systemu klasy CP/M.
    Port protokołu – pojęcie związane z protokołami używanymi w Internecie do identyfikowania procesów działających na odległych systemach. Jest to jeden z parametrów gniazda.
    Potok (ang. pipe) – jeden z mechanizmów komunikacji międzyprocesowej umożliwiający wymianę danych pomiędzy dwoma procesami. Odbywa się to najczęściej poprzez połączenie standardowego wyjścia jednego procesu ze standardowym wejściem drugiego.
    Baza danych – zbiór danych zapisanych zgodnie z określonymi regułami. W węższym znaczeniu obejmuje dane cyfrowe gromadzone zgodnie z zasadami przyjętymi dla danego programu komputerowego specjalizowanego do gromadzenia i przetwarzania tych danych. Program taki (często pakiet programów) nazywany jest „systemem zarządzania bazą danych” (ang. database management system, DBMS).
    Gniazdo w telekomunikacji (ang. socket) – pojęcie abstrakcyjne reprezentujące dwukierunkowy punkt końcowy połączenia. Dwukierunkowość oznacza możliwość wysyłania i odbierania danych. Wykorzystywane jest przez aplikacje do komunikowania się przez sieć w ramach komunikacji międzyprocesowej.
    Transmission Control Protocol (TCP) – połączeniowy, niezawodny, strumieniowy protokół komunikacyjny wykorzystywany do przesyłania danych pomiędzy procesami uruchomionymi na różnych maszynach, będący częścią szeroko wykorzystywanego obecnie stosu TCP/IP - korzysta z usług protokołu IP do wysyłania i odbierania danych oraz ich fragmentacji wtedy, gdy jest to konieczne. Protokół TCP operuje w warstwie transportowej modelu OSI. Opracowano go na podstawie badań Vintona Cerfa oraz Roberta Kahna. Został opisany w dokumencie RFC793.
    Nośnik danych – przedmiot fizyczny, na którym możliwe jest zapisanie informacji i z którego możliwe jest późniejsze odczytanie tej informacji. Pojęcie nośnika danych jest ściśle związane z informatyką i komputerami, choć definicja powyższa nie wyklucza uznania za nośnik danych np. kartki papieru.

    Reklama