Lokalna komunikacja procesów
Komunikacja międzyprocesowa
Jest to zbiór mechanizmów służących do komunikacji i synchronizacji między procesami
Systemy operacyjne
Komunikację realizuje się za pomocą systemu przekazywania komunikatów
-lokalna komunikacja procesów-
Jeśli P i Q chcą się ze sobą komunikować, to potrzebują:
ustanowić między sobą łącze komunikacyjne
wymiany informacji z użyciem funkcji:
wyślij ( send)
dr inż. Zbigniew Suski
odbierz ( receive)
Implementacja łącza komunikacyjnego:
fizyczna (np. szyna sprzętowa lub sieć)
logiczna (np. logiczne właściwości)
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
1
Zbigniew Suski
2
Problemy implementacyjne
Komunikacja bezpośrednia ( direct communication)
W jaki sposób ustanawiane są łącza komunikacyjne
Procesy muszą się nawzajem jednoznacznie
(kanały komunikacyjne)?
identyfikować:
Czy jeden kanał komunikacyjny może być skojarzony z
send (P, komunikat) – wysyła komunikat do procesu P
więcej niż dwoma procesami?
receive (Q, komunikat) – odbiera komunikat od procesu Q
Jak wiele kanałów komunikacyjnych może istnieć
Właściwości kanału komunikacyjnego:
pomiędzy jedną parą komunikujących się procesów?
kanał jest zestawiany automatycznie
Jaka jest pojemność kanału komunikacyjnego?
kanał jest zestawiany dokładnie dla jednej pary procesów
Czy stosowane jest buforowanie?
między parą procesów istnieje dokładnie jedno łącze
Czy rozmiar komunikatu, który może pomieścić kanał
kanał może być jednokierunkowy lub dwukierunkowy komunikacyjny jest wielkością stałą czy zmienną?
brak komunikatu wstrzymuje proces odbiorcy
Czy kanał komunikacyjny jest jedno czy dwukierunkowy?
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
3
Zbigniew Suski
4
Komunikacja pośrednia
Komunikacja pośrednia
Komunikaty są kierowane i odbierane za pośrednictwem
Operacje:
skrzynek pocztowych ( mailboxes) lub inaczej portów:
tworzenie nowego kanału
każda skrzynka ma unikalny identyfikator
wysyłanie i odbieranie komunikatów poprzez kanał
procesy mogą się komunikować tylko jeśli mają
likwidacja kanału
wspólną skrzynkę
Właściwości kanału komunikacyjnego:
Współdzielenie kanału:
kanał jest zestawiany tylko wtedy, gdy procesy współdzielą skrzynkę pocztową
P1, P2, P3 to procesy, które współdzielą kanał
komunikacyjny A
kanał może być skojarzony z wieloma procesami
proces P1 wysyła, a procesy P2 i P3 odbierają
każda para procesów może dzielić kilka kanałów komunikaty
komunikacyjnych – każdy odpowiada jakiejś
skrzynce
Kto dostanie wiadomość?
kanały mogą być jedno lub dwukierunkowe
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
5
Zbigniew Suski
6
Opracował: Zbigniew Suski
1
Lokalna komunikacja procesów
Buforowanie
Sytuacje wyjątkowe
Kanał komunikacyjny charakteryzuje się pewną
pojemnością określającą ilość komunikatów, które mogą w nim czasowo przebywać:
Zakończenie procesu przed
zakończeniem przetwarzania komunikatu
Zerowa pojemność – 0 komunikatów w kolejce.
– może dojść do zablokowania drugiego
Nadawca musi czekać na odbiorcę ( randezvous) –
z procesów
system bez buforowania
Utrata komunikatów – wykrywanie awarii,
Ograniczona pojemność – skończona długość kolejki powiadamianie, retransmisja
= n komunikatów. Czekanie nadawcy tylko w
Zniekształcanie komunikatów –
przypadku zapełnienia kolejki
wykrywanie, retransmisja
Nieograniczona pojemność – nieograniczona
długość. Nadawca nigdy nie jest opóźniany
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
7
Zbigniew Suski
8
Pamięć współdzielona
Pamięć współdzielona
Pamięć współdzielona jest specjalnie utworzonym
każdy proces uzyskuje dostęp do pamięci
segmentem przestrzeni adresowej, do którego dostęp współdzielonej względem miejsca wyznaczonego
może mieć wiele procesów.
przez jego adres dowiązania, stąd każdy proces
Jest to najszybszy sposób komunikacji pomiędzy korzystając z tych samych danych używa innego procesami. Podstawowy schemat korzystania:
adresu dowiązania
jeden z procesów tworzy segment pamięci
konieczne jest synchronizowanie dostępu np. za współdzielonej, dowiązuje go powodując jego
pomocą semaforów. Kończąc wykorzystywanie
odwzorowanie w bieżący obszar danych procesu
segmentu pamięci proces może ten segment
odwi
ązać, czyli usunąć jego dowiązanie
w zależności od praw dostępu inne procesy mogą odczytywa
jeden proces powinien usunąć segment pamięci ć i/lub zapisywać wartości w pamięci
współdzielonej
współdzielonej
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
9
Zbigniew Suski
10
UNIX – pamięć współdzielona
UNIX – pamięć współdzielona
struct bufor *wiadomosc;
int shmget( key_y klucz, int rozmiar, int flagi); if ((M=shmget(IDE_PAM,ROZM_PAM,IPC_CREAT | 0666)) < 0){
write(STDERR_FILENO,ER_PAM1,strlen(ER_PAM1)); char *shmat( int
identyfikator_segmentu_pami
return 1; }
ęci,
if ((wiadomosc=(struct bufor *) shmat(M,0,0))==NULL){
char
*adres, int flagi);
write(STDERR_FILENO,ER_PAM2,strlen(ER_PAM2)); return 1; }
int shmdt( char
* adres_segmentu);
... wiadomosc->znak ... /* odwołanie do pamięci */
if ((shmdt((char *) wiadomosc)) < 0) {
write(STDERR_FILENO,ER_PAM3,strlen(ER_PAM3)); int shmctl( int identyfikator_segmentu_pamięci, return 1; }
int polecenie, struct shmid_ds *bufor); if (shmctl(M,IPC_RMID,0) <0) {
write(STDERR_FILENO,ER_PAM4,strlen(ER_PAM4)); return 1; }
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
11
Zbigniew Suski
12
Opracował: Zbigniew Suski
2
Systemy operacyjne
Lokalna komunikacja procesów
UNIX - kolejki komunikatów (IPC)
UNIX - kolejki komunikatów (IPC)
Umożliwiają przesyłanie pakietów danych, nazywanych komunikatami, pomiędzy różnymi procesami
Komunikaty są buforowane w kolejce oczekiwania
Komunikat jest zbudowany jako struktura msgbuf, jego
Przy odbiorze komunikatu, odbiorca może oczekiwać na definicja znajduje się w pliku sys/msg.h
pierwszy przybyły komunikat lub na pierwszy komunikat
Każdy komunikat ma określony typ i długość. Typ jest określonego typu
określany przez proces inicjujący komunikat
Odczyt powoduje usunięcie danych
Komunikaty są umieszczane w kolejce w kolejności ich wysyłania
Komunikaty w kolejce są przechowywane nawet po zakończeniu procesu nadawcy, tak długo, aż nie zostaną
Nadawca może wysyłać komunikaty, nawet wówczas gdy odebrane lub kolejka nie zostanie zlikwidowana żaden z potencjalnych odbiorców nie jest gotów do ich odbioru
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
13
Zbigniew Suski
14
UNIX - kolejki komunikatów (IPC)
UNIX – kolejki komunikatów (IPC)
int msgget(
key_t nr_kanału, int flagi); int msgctl(
int id_kolejki, int polecenie, struct msqid_ds *opis_kolejki);
struct msgbuf {
long
mtype;
/* typ komunikatu ( >0 ) */
kolejka komunikatów
char
mtext[1];
/* dane komunikatu*/ };
int msgsnd( int id_kolejki, struct msgbuf *komunikat, int długość, int flagi);
int msgrcv(
int id_kolejki, struct msgbuf
*komunikat,
int długość, int typ, int flagi); SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
15
Zbigniew Suski
16
UNIX – kolejki komunikatów (IPC)
UNIX – łącza nienazwane ( pipes)
Są plikami specjalnymi, służącymi do komunikacji pomiędzy procesami
Mają kilka cech typowych dla plików zwykłych, czyli KOLEJKI-PRZYKŁAD
posiadają swój i-węzeł, posiadają bloki z danymi (chociaż ograniczoną ilość), na otwartych łączach można wykonywać operacje zapisu i odczytu – tylko sekwencyjnie
Odczyt powoduje usunięcie danych
Nie mają dowiązania w systemie plików i nie można ich identyfikować przez nazwę
Istnieją tak długo, jak długo pozostają otwarte. Po zamknięciu wszystkich deskryptorów łącze
nienazwane przestaje istnieć i zwalniany jest jego i-węzeł oraz wszystkie bloki dyskowe
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
17
Zbigniew Suski
18
Opracował: Zbigniew Suski
3
Systemy operacyjne
Lokalna komunikacja procesów
UNIX – łącza nienazwane ( pipes) UNIX – łącza nienazwane ( pipes) Po zamknięciu deskryptorów
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
19
Zbigniew Suski
20
UNIX – łącza nienazwane ( pipes) UNIX – łącza nienazwane ( pipes) int deskryptor[2];
#define LEN 100
Komunikacja dwukierunkowa
char buf[LEN]
int main()
{ if (pipe(deskryptor) < 0) return(1);
---------------------------------------------------
if ((f=fork())==0) {/* POTOMNY: konsument */
close(deskryptor[1]);
Tworzenie łącza 1 i łącza 2.
while( read(deskryptor[0],buf,LEN)) uzyj(buf);
}
Wywołanie funkcji fork.
close(deskryptor[0]);
return(0);
Przodek zamyka łącze 1 do czytania.
} else if (f == -1) {
printf("\nBlad powolania procesu \n"); return(1);
Przodek zamyka łącze 2 do pisania.
} else {
/* MACIERZYSTY: producent */
close(deskryptor[0]);
Potomek zamyka łącze 1 do pisania.
while !koniec_produkcji() {
produkuj(buf);
Potomek zamyka łącze 2 do czytania.
write(deskryptor[1],buf,LEN);
}
close(deskryptor[1]);
return(0); }
}
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
21
Zbigniew Suski
22
UNIX – łącza nienazwane ( pipes) UNIX – łącza nienazwane
Komunikacja dwukierunkowa
PIPE-PRZYKŁAD
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
23
Zbigniew Suski
24
Opracował: Zbigniew Suski
4
Systemy operacyjne
Lokalna komunikacja procesów
UNIX – łącza nazwane
UNIX – łącza nazwane
S
int mknod ( char *ścieżka,
int tryb,
int urządzenie)
ą plikami specjalnymi, służącymi do komunikacji tryb = S_IFIFO | 0666
(przykładowo)
pomiędzy procesami
int mkfifo ( char * ścieżka, mode_t prawa_dostępu)
Mają kilka cech typowych dla plików zwykłych, czyli producent
posiadają swój i-węzeł, posiadają bloki z danymi int fh;
(chociaż ograniczoną ilość), na otwartych łączach char buf[LEN];
można wykonywać operacje zapisu i odczytu – tylko if ((fh = open("\tmp\fifo1", O_WRONLY) < 0)) exit(1); sekwencyjnie
while (!koniec_produkcji()) {
Odczyt powoduje usunięcie danych
produkuj(buf);
write(fh, buf, LEN); }
Mają dowiązania w systemie plików (plik w jakimś close(fh);
konsument
katalogu)i można je identyfikować przez nazwę int fh;
Po zamknięciu wszystkich deskryptorów łącze char buf[LEN];
nazwane dalej istnieje – dalej przydzielony jest jego i-if ((fh = open("\tmp\fifo1", O_RDONLY) < 0)) exit(1); węzeł, natomiast zwalniane są wszystkie bloki while (read(fh,buf,LEN)) użyj(buf); dyskowe
close(fh);
SO – komunikacja lokalna
SO – komunikacja lokalna
Zbigniew Suski
25
Zbigniew Suski
26
UNIX – łącza nazwane
FIFO-PRZYKŁAD
SO – komunikacja lokalna
Zbigniew Suski
27
Opracował: Zbigniew Suski
5