IPC: Kolejki komunikatów Systemy Operacyjne 2 laboratorium Mateusz Hołenko 7 listopada 2011
Plan zajęć 1 Mechanizmy IPC kolejki komunikatów pamięć współdzielona semafory 2 Kolejki komunikatów kolejka komunikat 3 Funkcje systemowe tworzenie kolejki wysyłanie komunikatu odbiór komunikatu zarządzanie kolejką 4 Zadania praktyczne Mateusz Hołenko IPC: Kolejki komunikatów [1/16]
Mechanizmy IPC
IPC Inter Process Communication Grupa mechanizmów do komunikacji i synchronizacji procesów: 1 Kolejki komunikatów umożliwiają przekazywanie określonych porcji danych między procesami 2 Pamięć współdzielona umożliwia współdzielenie przez wiele procesów tego samego fragmentu wirtualnej przestrzeni adresowej 3 Semafory umożliwiają synchronizację procesów w dostępie do współdzielonych zasobów (np. pamięci współdzielonej) Mateusz Hołenko IPC: Kolejki komunikatów [3/16]
IPC Inter Process Communication Grupa mechanizmów do komunikacji i synchronizacji procesów: 1 Kolejki komunikatów umożliwiają przekazywanie określonych porcji danych między procesami 2 Pamięć współdzielona umożliwia współdzielenie przez wiele procesów tego samego fragmentu wirtualnej przestrzeni adresowej 3 Semafory umożliwiają synchronizację procesów w dostępie do współdzielonych zasobów (np. pamięci współdzielonej) Mateusz Hołenko IPC: Kolejki komunikatów [3/16]
IPC Inter Process Communication Grupa mechanizmów do komunikacji i synchronizacji procesów: 1 Kolejki komunikatów umożliwiają przekazywanie określonych porcji danych między procesami 2 Pamięć współdzielona umożliwia współdzielenie przez wiele procesów tego samego fragmentu wirtualnej przestrzeni adresowej 3 Semafory umożliwiają synchronizację procesów w dostępie do współdzielonych zasobów (np. pamięci współdzielonej) Mateusz Hołenko IPC: Kolejki komunikatów [3/16]
IPC Inter Process Communication Grupa mechanizmów do komunikacji i synchronizacji procesów: 1 Kolejki komunikatów umożliwiają przekazywanie określonych porcji danych między procesami 2 Pamięć współdzielona umożliwia współdzielenie przez wiele procesów tego samego fragmentu wirtualnej przestrzeni adresowej 3 Semafory umożliwiają synchronizację procesów w dostępie do współdzielonych zasobów (np. pamięci współdzielonej) Mateusz Hołenko IPC: Kolejki komunikatów [3/16]
Zarządzanie IPC polecenia systemowe z rodziny ipc: ipcs informacje o utworzonych zasobach IPC ipcmk tworzenie nowych zasobów IPC ipcrm usuwanie zasobów IPC funkcje systemowe o nich później Mateusz Hołenko IPC: Kolejki komunikatów [4/16]
Zarządzanie IPC polecenia systemowe z rodziny ipc: ipcs informacje o utworzonych zasobach IPC ipcmk tworzenie nowych zasobów IPC ipcrm usuwanie zasobów IPC funkcje systemowe o nich później Mateusz Hołenko IPC: Kolejki komunikatów [4/16]
Kolejki komunikatów
Kolejki komunikatów pozwalają na przesyłanie komunikatów między procesami komunikaty można wysyłać do kolejek nawet, jeśli brak jest zarejestrowanych odbiorców kolejka przechowuje komunikaty nawet po zakończeniu działania procesu nadawcy nieodebrane komunikaty są buforowane odebrany komunikat jest usuwany z kolejki każdy komunikat musi mieć określoną strukturę (długość) oraz zdefiniowany typ Mateusz Hołenko IPC: Kolejki komunikatów [6/16]
Kolejki komunikatów pozwalają na przesyłanie komunikatów między procesami komunikaty można wysyłać do kolejek nawet, jeśli brak jest zarejestrowanych odbiorców kolejka przechowuje komunikaty nawet po zakończeniu działania procesu nadawcy nieodebrane komunikaty są buforowane odebrany komunikat jest usuwany z kolejki każdy komunikat musi mieć określoną strukturę (długość) oraz zdefiniowany typ Mateusz Hołenko IPC: Kolejki komunikatów [6/16]
Kolejki komunikatów pozwalają na przesyłanie komunikatów między procesami komunikaty można wysyłać do kolejek nawet, jeśli brak jest zarejestrowanych odbiorców kolejka przechowuje komunikaty nawet po zakończeniu działania procesu nadawcy nieodebrane komunikaty są buforowane odebrany komunikat jest usuwany z kolejki każdy komunikat musi mieć określoną strukturę (długość) oraz zdefiniowany typ Mateusz Hołenko IPC: Kolejki komunikatów [6/16]
Kolejki komunikatów pozwalają na przesyłanie komunikatów między procesami komunikaty można wysyłać do kolejek nawet, jeśli brak jest zarejestrowanych odbiorców kolejka przechowuje komunikaty nawet po zakończeniu działania procesu nadawcy nieodebrane komunikaty są buforowane odebrany komunikat jest usuwany z kolejki każdy komunikat musi mieć określoną strukturę (długość) oraz zdefiniowany typ Mateusz Hołenko IPC: Kolejki komunikatów [6/16]
Kolejki komunikatów pozwalają na przesyłanie komunikatów między procesami komunikaty można wysyłać do kolejek nawet, jeśli brak jest zarejestrowanych odbiorców kolejka przechowuje komunikaty nawet po zakończeniu działania procesu nadawcy nieodebrane komunikaty są buforowane odebrany komunikat jest usuwany z kolejki każdy komunikat musi mieć określoną strukturę (długość) oraz zdefiniowany typ Mateusz Hołenko IPC: Kolejki komunikatów [6/16]
Kolejki komunikatów pozwalają na przesyłanie komunikatów między procesami komunikaty można wysyłać do kolejek nawet, jeśli brak jest zarejestrowanych odbiorców kolejka przechowuje komunikaty nawet po zakończeniu działania procesu nadawcy nieodebrane komunikaty są buforowane odebrany komunikat jest usuwany z kolejki każdy komunikat musi mieć określoną strukturę (długość) oraz zdefiniowany typ Mateusz Hołenko IPC: Kolejki komunikatów [6/16]
Komunikat ogólna struktura komunikatu struct msgbuf { long mtype; // typ komunikatu (wartość > 0) char mcontent[1024]; // treść komunikatu } przez rozmiar komunikatu rozumie się rozmiar pola mcontent treść komunikatu może być dowolną strukturą (niekoniecznie tablicą zmiennych typu char) pole mtype określa typ komunikatu; typ ten może zostać wykorzystany do selektywnego oczekiwania na wiadomości w kolejce Mateusz Hołenko IPC: Kolejki komunikatów [7/16]
Komunikat ogólna struktura komunikatu struct msgbuf { long mtype; // typ komunikatu (wartość > 0) char mcontent[1024]; // treść komunikatu } przez rozmiar komunikatu rozumie się rozmiar pola mcontent treść komunikatu może być dowolną strukturą (niekoniecznie tablicą zmiennych typu char) pole mtype określa typ komunikatu; typ ten może zostać wykorzystany do selektywnego oczekiwania na wiadomości w kolejce Mateusz Hołenko IPC: Kolejki komunikatów [7/16]
Komunikat ogólna struktura komunikatu struct msgbuf { long mtype; // typ komunikatu (wartość > 0) char mcontent[1024]; // treść komunikatu } przez rozmiar komunikatu rozumie się rozmiar pola mcontent treść komunikatu może być dowolną strukturą (niekoniecznie tablicą zmiennych typu char) pole mtype określa typ komunikatu; typ ten może zostać wykorzystany do selektywnego oczekiwania na wiadomości w kolejce Mateusz Hołenko IPC: Kolejki komunikatów [7/16]
Komunikat ogólna struktura komunikatu struct msgbuf { long mtype; // typ komunikatu (wartość > 0) char mcontent[1024]; // treść komunikatu } przez rozmiar komunikatu rozumie się rozmiar pola mcontent treść komunikatu może być dowolną strukturą (niekoniecznie tablicą zmiennych typu char) pole mtype określa typ komunikatu; typ ten może zostać wykorzystany do selektywnego oczekiwania na wiadomości w kolejce Mateusz Hołenko IPC: Kolejki komunikatów [7/16]
Funkcje systemowe
Tworzenie kolejki int msgget(key_t key, int msgflg) key klucz identyfikujący kolejkę IPC_PRIVATE kolejka prywatna msgflg prawa dostępu do kolejki oraz flagi tworzenia kolejki IPC_CREAT utwórz jeśli nie istnieje IPC_EXCL w połączeniu z IPC_CREAT, zgłoś błąd jeśli istnieje Mateusz Hołenko IPC: Kolejki komunikatów [9/16]
Wysyłanie komunikatu int msgsnd(int msgid, const void *msgp, size_t msgsz, int msgflg) msgid identyfikator kolejki (uzyskany z funkcji msgget) msgp wskaźnik na obszar pamięci zawierający treść komunikatu msgsz rozmiar treści komunikatu msgflg flagi obsługi kolejki IPC_NOWAIT nie czekaj na zwolnienie miejsca w kolejce Mateusz Hołenko IPC: Kolejki komunikatów [10/16]
Odbiór komunikatu int msgrcv(int msgid, void *msgp, size_t msgsz, long msgtyp, int msgflg) msgid identyfikator kolejki (uzyskany z funkcji msgget) msgp obszar pamięci, gdzie zapisany ma zostać komunikat msgsz maksymalny dopuszczalny rozmiar komunikatu msgtyp 0 pierwszy komunikat z kolejki > 0 komunikat o typie zgodnym z msgtyp < 0 komunikat o typie nie większym niż msgtyp msgflg flagi obsługi kolejki IPC_NOWAIT nie czekaj na wiadomość w kolejce MSG_EXCEPT wiadomość typu innego niż msgtyp MSG_NOERROR brak błędu przy przekroczeniu msgsz Mateusz Hołenko IPC: Kolejki komunikatów [11/16]
Zarządzanie kolejką int msgctl(int msgid, int cmd, struct msqid_ds *buf) msgid identyfikator kolejki (uzyskany z funkcji msgget) cmd operacja do wykonania IPC_STAT informacja o stanie kolejki komunikatów IPC_SET zmienia ograniczenia kolejki IPC_RMID usuwa kolejkę z sytemu buf parametry operacji Mateusz Hołenko IPC: Kolejki komunikatów [12/16]
Zadania praktyczne
Zadania Zadanie 1 Napisz program tworzący dwa procesy komunikujące się poprzez kolejkę komunikatów. Komunikacja polega na przesłaniu komunikatu Hello. Zadanie 2 Napisz program tworzący dwa procesy komunikujące się poprzez kolejkę komunikatów. Komunikacja polega na przesłaniu komunikatów różnego typu. Proces odbierający powinien odbierać tylko komunikaty typu podanego jako argument wejściowy (zakładamy że typ komunikatu jest liczbą z przedziału <1,10>). Mateusz Hołenko IPC: Kolejki komunikatów [14/16]
Zadania Zadanie 1 Napisz program tworzący dwa procesy komunikujące się poprzez kolejkę komunikatów. Komunikacja polega na przesłaniu komunikatu Hello. Zadanie 2 Napisz program tworzący dwa procesy komunikujące się poprzez kolejkę komunikatów. Komunikacja polega na przesłaniu komunikatów różnego typu. Proces odbierający powinien odbierać tylko komunikaty typu podanego jako argument wejściowy (zakładamy że typ komunikatu jest liczbą z przedziału <1,10>). Mateusz Hołenko IPC: Kolejki komunikatów [14/16]
Zadania Zadanie 3 Napisz programy klienta i serwera realizujące następujący scenariusz: Klient przesyła dowolny ciąg znaków do serwera, serwer w odpowiedzi odsyła ten sam ciąg po zamianie wszystkich małych liter na duże. Zadanie 4 Napisz programy klienta i serwera realizujące następujący scenariusz: Serwer sumuje liczby wysyłane przez klienta. Liczby są przesyłane jako komunikat typu M_DATA, a ostatnia z liczb jest wysyłana jako komunikat M_END. Po otrzymaniu tego komunikatu serwer odsyła wynik sumowania komunikatem typu M_RESULT. Mateusz Hołenko IPC: Kolejki komunikatów [15/16]
Zadania Zadanie 3 Napisz programy klienta i serwera realizujące następujący scenariusz: Klient przesyła dowolny ciąg znaków do serwera, serwer w odpowiedzi odsyła ten sam ciąg po zamianie wszystkich małych liter na duże. Zadanie 4 Napisz programy klienta i serwera realizujące następujący scenariusz: Serwer sumuje liczby wysyłane przez klienta. Liczby są przesyłane jako komunikat typu M_DATA, a ostatnia z liczb jest wysyłana jako komunikat M_END. Po otrzymaniu tego komunikatu serwer odsyła wynik sumowania komunikatem typu M_RESULT. Mateusz Hołenko IPC: Kolejki komunikatów [15/16]
Zadania Zadanie 5 Napisz program (programy) komunikujące się za pomocą kolejki komunikatów. Każdy z programów wysyła wiadomości wpisywane z klawiatury, a po odbiorze komunikatu z kolejki wypisuje jego treść na ekran. Operacje odczytu i zapisu powinny być wykonywane w sposób asynchroniczny. Program kończy się po otrzymaniu wiadomości o treści exit. Mateusz Hołenko IPC: Kolejki komunikatów [16/16]