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