Systemy operacyjne

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

Systemy operacyjne

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