Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Podobne dokumenty
IPC: Kolejki komunikatów

Mechanizmy z grupy IPC

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Temat zajęć: Mechanizmy IPC: kolejki komunikatów.

Programowanie Współbieżne. Komunikacja między procesowa IPC

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

KOLEJKI KOMUNIKATÓW IPC

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Mechanizmy z grupy IPC

Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot

Pamięć współdzielona

Instytut Teleinformatyki

Kolejki FIFO (łącza nazwane)

Ę Ą Ż Ż Ę Ą

ć ż ż ć Ą ż ż Ł ć Ż ż Ż Ż Ż Ż

ę ź ć ź

Ę

ź ć

ź ź ŁĄ ź Ę Ę Ę Ę ź ź Ę Ę Ł ź

Ą Ą

Ż Ć Ź Ź Ż Ą Ą ć Ź Ź Ć Ę

ć Ę ć ć ć ć ą

Ą Ą Ł

Ę Ą Ż ć Ę Ż Ł ź

ć Ę Ę ć Ę ć Ę Ę Ę

Ę Ą Ł Ę Ł ć

ż

Ć Ź ć Ę ć Ę Ć Ź Ź Ć

ć ć Ł

Ź Ć Ó Ó

Opis protokołu RPC. Grzegorz Maj nr indeksu:

ż ć ć ć ż ń ć ż ć ż Ę ć ż

Ż ć Ć ć Ś Ś Ż Ć ć ć ć

Ę ż ć ŁĄ

Ę

Ż Ę Ę Ę Ę Ę Ź Ż

ż ą ż ż ż ż Ł ż ż Ą Ł ż ż ż ą ż ń ą ń ą ż ż ż ż ż ż

Ę ź Ż Ę ź ć ź ć Ą ć ć ć ć ć ż ź

Ż Ś ś Ę Ż

Ł ś ś ś Ą ż Ą Ń Ł Ł

ŁĄ Ł

Ł Ó Ł

ż ć Ę ż ż ż Ń Ł ż ż ż ż ż ż ż ż

1. Utwórz blok pamięci współdzielonej korzystając z poniższego kodu:


ć Ę ć Ę ź Ę

Ę Ż ż Ł ź ż ż ż ż

ź Ć Ż

Ż ź Ł

ć ć ć

Ą Ę Ł Ą Ż

ź Ź Ź ć ć ć ź ć ć ć ć ć Ź

Ę ź Ą

Ą ŚĆ Ś Ś Ę ć

ż ą Ę ą ą Ż ą ż ż ą Ż Ż ż ą ą ż ć Ż Ź ż ż ą ą Ł ć Ó ż Ó Ć

Ł Ą Ł Ł ć

Ł

Ł

Ą Ą Ł Ą

Ę

ś ś ś ź ć ś ś

ż ż ć ć ć ć ć ć ć ż ż ź ć Ą Ą ż ć ć ź

Ł ó ż ż Ż Ż Ż Ż Ż Ż Ż Ź Ź ż

Ł Ą Ż Ż Ó ż ć

ś ś ś ś ś ś ś ś ś ś ć ś Ż Ż ć ś ś Ż ć

ż ź ż ć ż ć

Ż Ł Ó Ę

ś ść ść ś ść ść ś ś ś ś ść ś ś ś ść ść

ń ż Ż

ń Ź Ż ć Ż Ą ż Ą ż

ż Ć ż

ń ń ń ń ń Ń ń ć ź

ŁĄ Ś Ą ĄĄ Ś Ż Ś Ś Ś Ą

ń

ŁĄ

ć ź ć Ó

Ł Ą Ó Ł ć Ą ć ć

Ó Ż ż Ć ż ż ż Ó Ę Ę Ó Ó ż Ó Ł ż Ł

ż Ę Ę ż ż

Ó Ó ć

ć ć ć ć Ą ć Ę Ę Ą ć ĄĘ

Ł Ł Ę Ż ć ć ą Ź ą Ś Ę ą Ź Ą Ż Ą ą ź ą Ł Ą Ś Ą ą

ć ż ż ć ż Ł ć ż ć

Ż ć Ż ż ć ż Ż Ż Ż ć ż Ż Ż ć

Ż ć

Ą

Ź Ć Ż Ż Ź Ź ż ż Ć Ć

Ą Ł Ą Ę Ą Ę Ą Ą Ń Ń Ą Ł Ł ŁĄ Ą

Ł Ń ś ń ć Ź ś ń


Ń Ą Ń Ń Ń

Instrukcja do programu DoDHL 1.5

ę Ó ę ę ą ć Óę ą Ś ę ę ą ę ą ą ęś ę Ó

ą ą Ź Ą Ó Ó Ó ż ą Ź Ó Ę ą

Ś Ó Ą Ó Ó Ż ć Ó Ż Ó Ą Ź Ź Ó Ó Ó Ź Ó Ź Ó

Ę Ę ć ć Ę Ą ć ć

Ę Ę ć ć Ę Ą Ę Ą Ę Ę Ę Ę Ę Ę ź Ę Ż Ę Ę Ę Ę ć Ę Ę ć Ę ć

Ę Ć Ś Ż ź Ż ć ć ć ć Ś ć ć ż ż Ź ć Ż ć

Ś Ę Ą Ł Ś Ł Ł Ł Ł Ł Ś Ś Ł Ł Ł Ą Ł Ł Ł Ł Ł Ą Ą Ł

Transkrypt:

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie czwarte (dwa zajęcia) Temat: Komunikacja IPC kolejki komunikatów Opracowanie: mgr in ż. Arkadiusz Chrobot dr in ż. Grzegorz Łukawski

1. Wprowadzenie System Linux, podobnie jak inne systemy wywodzące si ę z Uniksa, udo- stępnia procesom użytkownika mechanizmy komunikacji, nazywane w skrócie IPC (ang. Interprocess Communication). W skład tych mecha- nizmów wchodz ą kolejki komunikatów. Cho ć możliwe jest, że ten me- chanizm zostanie zmieniony lub częściowo zastą piony innym w przyszłych specyfikacjach standardu, to obecnie stanowi on dogodny sposób komunikacji mię dzy procesami. W systemach uniksowych istniej ą dwa polecenia dostę pne z poziomu powłoki użytkownika zwią zane z obsługą komunikacji IPC. Pierwsze z nich to ipcs (szczegóły: man ipcs), które wyś wietla informacje na temat utworzonych w systemie kolejek, semaforów i pamięci dzielonych. Drugie ipcrm (szczegóły: man ipcrm) służy do ręcznego usuwania z systemu zasobów IPC. W systemie Li- nux istnieje równie ż zbiorcza dokumentacja poświęcona komunikacji IPC, wyświetlana poleceniem man 5 ipc. 2. Kolejki komunikatów Kolejki komunikatów s ą tworzone w przestrzeni jądra systemu. Proces użytkownika ma do nich dostęp poprzez odpowiednie wywołania sys- temowe (dokładniej, poprzez odpowiednie funkcje biblioteczne języka C). Każda kolejka ma swój unikatowy identyfikator. Obsługa kolejek jest mniej skomplikowana ni ż łączy nazwanych. Ponadto sposób prze- syłania informacji jest bardziej elastyczny. Jedna kolejka może służyć kilku procesom. Procesy mog ą odbiera ć wszystkie komunikaty przecho- dzące przez kolejk ę, lub tylko wybrane. Komunikaty podlegają ograniczeniom zarówno pod względem wielkości jednego komunikatu, jak i sumarycznej wielkości wszystkich komunikatów. W systemie Linux pierwszy limit wynosi 4KB (stała MSGMAX), a drugi 16KB (stała MSGMNB). 3. Pliki nagłówkowe związane z obsług ą kolejek Każdy program obsługujący kolejk ę musi mie ć włączone do swojego kodu źródłowego następujące plik nagłówkowe: sys/types.h definicje typów, sys/ipc.h - funkcje i struktury wspólne dla wszystkich mechanizmów IPC, sys/msg.h funkcje i struktury przeznaczone do obsługi kolejek komunikatów.

4. Najważniejsze struktury związane z kolejkami Każdy komunikat opisany jest struktur ą, w której znajduje si ę obowiąz- kowe pole określające typ komunikatu. Dalsza cz ęść definicji struktury komunikatu jest dowolna. Najczęściej podawana jest taka oto przykła- dowa struktura komunikatu: struct msgbuf { long mtype; char mtext[1]; }; Jądro systemu, dla każdej kolejki utrzymuje struktur ę msqid_ds, którą można częściowo modyfikowa ć za pomoc ą funkcji msgctl(), głównie do- tyczy to pól struktury zagnieżdżonej msg_perm: uid identyfikatora użytkownika dla właściciela, guid identyfikator grupy dla właściciela oraz pola mode, które obejmuje 9 najmłodszych bitów określających tryb dostępu do kolejki. Najważniejsze funkcje obsługujące kolejki komunikatów ftok() funkcja zwraca unikatowy 1 identyfikator, który można użyć do tworzenia kolejki komunikatu. Aby dwa niespokrewnione procesy mogły korzysta ć z tego samego kanału komunikacyjnego muszą poda ć te same argumenty dla wywołania tej funkcji ( tj. ścieżk ę do- stępu do dowolnie wybranego pliku i naturaln ą liczbę ośmiobitową 2. Szczegóły: man ftok. msgget() funkcja tworząca kolejk ę komunikatów i zwracająca jej identyfikator lub zwraca identyfikator kolejki istniejącej. Kolejka jest tworzona na podstawie unikatowego klucza zwracanego przez funkcj ę ftok(), lub dobranego przez programist ę. Jeśli kolejka ma by ć stworzona tylko i wyłącznie na użytek jednego procesu, to jako klucz podaje si ę sta łą IPC_PRIVATE. Drugi argument wywołania tej funkcji określa tryb dostępu (czterocyfrowa liczba ósemkowa zaczynająca si ę od zera, lub odpowiednia kombinacja stałych MSG_R i MSG_W) oraz może określa ć w jaki sposób ma by ć uzyskany iden- tyfikator kolejki (IPC_CREAT i IPC_EXCL). Szczegóły: man 1 Jest to założenie idealne, ale w praktyce zdarzaj ą si ę kolizje. Oznacza to, ze dla dwóch różnych par argumentów wywołania funkcja ftok() może zwróci ć takie same wartości. 2 Chociaż typem argumentu jest long, to branych jest pod uwag ę tylko osiem najmłod- szych bitów wartości argumentu.

msgget msgsnd() funkcja umożliwia dodanie komunikatu do kolejki. W zależności od wartości ostatniego argumentu moż e, w przypadku kiedy kolejka jest zapełniona, oczekiwa ć na zwolnienie miejsca lub zwraca ć błąd (IPC_NOWAIT). Szczegóły: man msgsnd msgrcv() funkcja umożliwia odbiór komunikatu z kolejki. Możli- we jest selektywne odbieranie komunikatów, w zależności od war- tości argumentu funkcji określającego typ odbieranego komunikatu. Jeśli będzie on mia ł warto ść zero, to będzie odebrany pierwszy komunikat znajdujący si ę w kolejce. Jeśli warto ść dodat- ni ą, to odebrany będzie pierwszy komunikat o takim samym typie. Jeśli natomiast argument będzie mia ł warto ść ujemn ą, to odebra- ny będzie komunikat o typie takim samym lub mniejszym co do wartości bezwzględnej od podanego argumentu. Szczegóły: man msgrcv. msgctl() funkcja umożliwiająca sterowanie istniejąc ą kolejką komunikatów. Może ona wykona ć trzy operacje: IPC_STAT pobranie do struktury msqid_ds informacji o kolejce, IPC_SET ustawienie danych kolejki na podstawie zawartości struktury msqid_ds i IPC_ RMID usunięcie kolejki. Ostatnia operacja jest możliwa tylko wtedy, kiedy procesy korzystające z kolejki za- kończyły operacje pisania i czytania. Szczegóły: man msgctl. Zadania 1. Napisz program, który utworzy prywatn ą kolejk ę i będzie przesyła ł nią komunikaty. 2. Zmodyfikuj zadanie pierwsze, tak aby proces tworzy ł potomka i komunikowa ł si ę z nim przy użyciu kolejki. 3. Napisz dwa programy (procesy niespokerwnione), które będą komunikowa ć si ę przy pomocy kolejki komunikatów. Do wygenerowania klucza użyj funkcji ftok(). 4. Zmodyfikuj programy z zadania trzeciego tak, aby zbada ć jak si ę będzie zachowywała funkcja IPC_NOWAIT, czy nie. msgrcv(), w zależności od tego, czy otrzyma flagę 5. Napisz dwa programy: pierwszy wyśle kilka komunikatów o losowo wy-

branym typie (przyjmijmy, że typy komunikatów nale żą do przedziału [1,5]), a drugi będzie je odbierze w porządku malejącym lub rosnącym, ze względu na warto ść typu. 6. Napisz dwa programy: pierwszy wyśle dziesi ęć komunikatów, a drugi w zależności od parametru wywołania odbierze je w takiej samej lub od- wrotnej kolejności do tej z jak ą wysła ł je pierwszy program. 7. Napisz trzy programy, które komunikowałyby si ę przez wspóln ą kolej- k ę. Komunikacja musi by ć dwukierunkowa. Każdy program musi od- biera ć informacje przeznaczone tylko dla niego, ale może wysyła ć infor- macje do obu pozostałych programów. 8. Za pomoc ą kolejki komunikatów programy mog ą przesyła ć wiadomości o różnej długości. Napisz dwa programy komunikujące si ę przez jedną kolejk ę, ale przesyłające między sob ą komunikaty o zmiennej długości. Załó ż, że każdy właściwy komunikat będzie poprzedzany komunikatem o ustalonym formacie, który będzie informowa ł o wielkości następującego po nim komunikatu. 9. Napisz trzy programy. Pierwszy niech zapisuje do kolejki liczby parzyste, drugi nieparzyste, a trzeci niech odczytuje kolejne pary liczb z kolejki i niech je sumuje. Uwaga: We wszystkich programach tu ż przed zakończeniem ich działa- nia wszystkie kolejki komunikatów z jakich one korzystaj ą powinny zosta ć usunięte.