SO2 kolokwium1 tresci sci

Lab2

1. Napisz program, który utworzy dwa procesy: macierzysty i potomny. Proces rodzicielski powinien wypisać swoje PID i PID potomka, natomiast proces potomny powinien wypisać swoje PID i PID rodzica.

2. Zademonstruj w jaki sposób mogą powstać w systemie procesy zombie.

3. Napisz program, który stworzy dwa procesy. Proces macierzysty powinien poczekać na wykonanie procesu potomnego i zbadać status jego wyjścia.

4. Napisz program, który w zależności od wartości argumentu podanego w linii poleceń wygeneruje odpowiednią liczbę procesów potomnych, które będą się wykonywały współbieżnie. Każdy z procesów potomnych powinien wypisać 4 razy na ekranie swój PID, PID swojego rodzica oraz numer określający, którym jest potomkiem rodzica (1, 2, 3 ...), a następnie usnąć na tyle sekund, ile wskazuje ten numer(pierwszy – 1 sekunda, 2 – dwie sekundy, trzeci - 3 sekundy). Proces macierzysty powinien poczekać na zakończenie wykonania wszystkich swoich potomków.

5. Napisz dwa programy. Program pierwszy stworzy dwa procesy, a następnie program procesu potomnego zastąpi programem drugim.

6. Napisz program, który wyśle do siebie sygnał SIGALRM i obsłuży go.

7. Napisz program, który stworzy dwa procesy. Proces rodzicielski wyśle do potomka sygnał SIGINT (można go wysłać „ręcznie” naciskając na klawiaturze równocześnie Ctrl + C). Proces potomny powinien ten sygnał obsłużyć za pomocą napisanej przez Ciebie funkcji.

8. Napisz cztery osobne programy. Każdy z nich powinien obsługiwać wybrany przez Ciebie sygnał. Pierwszy z procesów będzie co sekundę wysyłał sygnał do drugiego procesu, drugi proces pod odebraniu sygnału powinien wypisać na ekranie komunikat, a następnie przesłać sygnał do procesu trzeciego. Proces trzeci powinien zachowywać się podobnie jak drugi, a proces czwarty powinien jedynie wypisywać komunikat na ekranie. Odliczanie czasu w pierwszym procesie należy zrealizować za pomocą SIGALARM.

9. Napisz program, który udowodni, że obszar danych jest współdzielony między procesem potomnym i macierzystym do chwili wykonania modyfikacji danych przez jednego z nich.

10. Ze względów bezpieczeństwa zaleca się, aby w ramach funkcji obsługującej sygnał wykonywane były tylko proste czynności, jak np. ustawienie flagi informującej o otrzymaniu sygnału, a skomplikowane czynności żeby były wykonywane w osobnym kodzie. Przedstaw schemat takiego rozwiązania stosując proces macierzysty i potomny.

11. Pokaż w jaki sposób sygnały mogą być przez proces blokowane lub ignorowane.

12. Aby procesy potomne nie stawały się procesami zombie wystarczy, żeby proces macierzysty ignorował sygnał SIGCHLD. Napisz program, który sprawdzi, czy rzeczywiście tak się dzieje i co w takim przypadku zwraca wait() lub waitpid() po zakończeniu potomka.

Lab3

1. Napisz program, który wywoła polecenie „sort nazwa.c”, gdzie nazwa.c jest nazwą pliku z kodem źródłowym programu, a następnie odczyta 20 znaków zwróconych przez to polecenie i wyświetli je na ekran.

2. Napisz program, który uruchomi polecenie „wc” i przekaże mu na standardowe wejście dowolny ciąg znaków.

3. Napisz program, który stworzy potok, i wykorzysta go do przesyłania danych w obrębie jednego procesu.

4. Napisz program, który stworzy potok i wykorzysta go do komunikacji między dwoma spokrewnionymi procesami. Zadanie wykonaj dla dwóch przypadków: z ustawioną flagą O_NONBLOCK i bez.

5. Napisz program, który podzieli się na dwa procesy komunikujące się przy pomocy potoków. Komunikacja musi być dwukierunkowa.

6. Napisz dwa niezależne programy, które będą się komunikowały przy pomocy kolejki FIFO. Zadanie wykonaj w dwóch wariantach, tak jak zadanie 4. Po zakończeniu komunikacji kolejkę należy usunąć.

7. Napisz program, w którym komunikacja między spokrewnionymi procesami będzie odbywała się w jednym kierunku za pomocą łącza nienazwanego, a w drugim za pomocą łącza nazwanego.

8. Stwórz programy do dialogu między dwoma użytkownikami w systemie. Do komunikacji użyj łącza FIFO stworzonego za pomocą funkcji mknod.

9. Napisz program, który wygeneruje cztery procesy. Każdy z tych procesów będzie się komunikował z następnym za pomocą łącza nienazwanego. Pierwszy proces wyśle przez swoje łącze liczby 1,2,3 i 4. Każdy kolejny zwiększy każdą z nich o 1, a ostatni wypisze je na ekranie.

10. Napisz trzy programy komunikujące się przez łącza FIFO. Pierwszy program będzie wysyłał kolejne liczby parzyste, drugi kolejne liczby nieparzyste, a trzeci będzie odbierał te liczby i je sumował. Wszystkie procesy powinny wyświetlać wyniki pracy na ekranie.

Lab4

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 msgrcv(), w zależności od tego, czy otrzyma flagę IPC_NOWAIT, czy nie.

5. Napisz dwa programy: pierwszy wyśle kilka komunikatów o losowo wybranym 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 odwrotnej kolejności do tej z jaką wysłał je pierwszy program.

7. Napisz trzy programy, które komunikowałyby się przez wspólną kolejkę. Komunikacja musi być dwukierunkowa. Każdy program musi odbierać informacje przeznaczone tylko dla niego, ale może wysyłać informacje 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łania wszystkie kolejki komunikatów z jakich one korzystają powinny zostać usunięte.

Lab2

1. Napisz program, który utworzy dwa procesy: macierzysty i potomny. Proces rodzicielski powinien wypisać swoje PID i PID potomka, natomiast proces potomny powinien wypisać swoje PID i PID rodzica.

2. Zademonstruj w jaki sposób mogą powstać w systemie procesy zombie.

3. Napisz program, który stworzy dwa procesy. Proces macierzysty powinien poczekać na wykonanie procesu potomnego i zbadać status jego wyjścia.

4. Napisz program, który w zależności od wartości argumentu podanego w linii poleceń wygeneruje odpowiednią liczbę procesów potomnych, które będą się wykonywały współbieżnie. Każdy z procesów potomnych powinien wypisać 4 razy na ekranie swój PID, PID swojego rodzica oraz numer określający, którym jest potomkiem rodzica (1, 2, 3 ...), a następnie usnąć na tyle sekund, ile wskazuje ten numer(pierwszy – 1 sekunda, 2 – dwie sekundy, trzeci - 3 sekundy). Proces macierzysty powinien poczekać na zakończenie wykonania wszystkich swoich potomków.

5. Napisz dwa programy. Program pierwszy stworzy dwa procesy, a następnie program procesu potomnego zastąpi programem drugim.

6. Napisz program, który wyśle do siebie sygnał SIGALRM i obsłuży go.

7. Napisz program, który stworzy dwa procesy. Proces rodzicielski wyśle do potomka sygnał SIGINT (można go wysłać „ręcznie” naciskając na klawiaturze równocześnie Ctrl + C). Proces potomny powinien ten sygnał obsłużyć za pomocą napisanej przez Ciebie funkcji.

8. Napisz cztery osobne programy. Każdy z nich powinien obsługiwać wybrany przez Ciebie sygnał. Pierwszy z procesów będzie co sekundę wysyłał sygnał do drugiego procesu, drugi proces pod odebraniu sygnału powinien wypisać na ekranie komunikat, a następnie przesłać sygnał do procesu trzeciego. Proces trzeci powinien zachowywać się podobnie jak drugi, a proces czwarty powinien jedynie wypisywać komunikat na ekranie. Odliczanie czasu w pierwszym procesie należy zrealizować za pomocą SIGALARM.

9. Napisz program, który udowodni, że obszar danych jest współdzielony między procesem potomnym i macierzystym do chwili wykonania modyfikacji danych przez jednego z nich.

10. Ze względów bezpieczeństwa zaleca się, aby w ramach funkcji obsługującej sygnał wykonywane były tylko proste czynności, jak np. ustawienie flagi informującej o otrzymaniu sygnału, a skomplikowane czynności żeby były wykonywane w osobnym kodzie. Przedstaw schemat takiego rozwiązania stosując proces macierzysty i potomny.

11. Pokaż w jaki sposób sygnały mogą być przez proces blokowane lub ignorowane.

12. Aby procesy potomne nie stawały się procesami zombie wystarczy, żeby proces macierzysty ignorował sygnał SIGCHLD. Napisz program, który sprawdzi, czy rzeczywiście tak się dzieje i co w takim przypadku zwraca wait() lub waitpid() po zakończeniu potomka.

Lab3

1. Napisz program, który wywoła polecenie „sort nazwa.c”, gdzie nazwa.c jest nazwą pliku z kodem źródłowym programu, a następnie odczyta 20 znaków zwróconych przez to polecenie i wyświetli je na ekran.

2. Napisz program, który uruchomi polecenie „wc” i przekaże mu na standardowe wejście dowolny ciąg znaków.

3. Napisz program, który stworzy potok, i wykorzysta go do przesyłania danych w obrębie jednego procesu.

4. Napisz program, który stworzy potok i wykorzysta go do komunikacji między dwoma spokrewnionymi procesami. Zadanie wykonaj dla dwóch przypadków: z ustawioną flagą O_NONBLOCK i bez.

5. Napisz program, który podzieli się na dwa procesy komunikujące się przy pomocy potoków. Komunikacja musi być dwukierunkowa.

6. Napisz dwa niezależne programy, które będą się komunikowały przy pomocy kolejki FIFO. Zadanie wykonaj w dwóch wariantach, tak jak zadanie 4. Po zakończeniu komunikacji kolejkę należy usunąć.

7. Napisz program, w którym komunikacja między spokrewnionymi procesami będzie odbywała się w jednym kierunku za pomocą łącza nienazwanego, a w drugim za pomocą łącza nazwanego.

8. Stwórz programy do dialogu między dwoma użytkownikami w systemie. Do komunikacji użyj łącza FIFO stworzonego za pomocą funkcji mknod.

9. Napisz program, który wygeneruje cztery procesy. Każdy z tych procesów będzie się komunikował z następnym za pomocą łącza nienazwanego. Pierwszy proces wyśle przez swoje łącze liczby 1,2,3 i 4. Każdy kolejny zwiększy każdą z nich o 1, a ostatni wypisze je na ekranie.

10. Napisz trzy programy komunikujące się przez łącza FIFO. Pierwszy program będzie wysyłał kolejne liczby parzyste, drugi kolejne liczby nieparzyste, a trzeci będzie odbierał te liczby i je sumował. Wszystkie procesy powinny wyświetlać wyniki pracy na ekranie.

Lab4

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 msgrcv(), w zależności od tego, czy otrzyma flagę IPC_NOWAIT, czy nie.

5. Napisz dwa programy: pierwszy wyśle kilka komunikatów o losowo wybranym 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 odwrotnej kolejności do tej z jaką wysłał je pierwszy program.

7. Napisz trzy programy, które komunikowałyby się przez wspólną kolejkę. Komunikacja musi być dwukierunkowa. Każdy program musi odbierać informacje przeznaczone tylko dla niego, ale może wysyłać informacje 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łania wszystkie kolejki komunikatów z jakich one korzystają powinny zostać usunięte.


Wyszukiwarka

Podobne podstrony:
SO2 kolokwium1 programy sci
SO2 kolokwium1 sci
Treści zadań kolokwium?rczak+ROZW
chemia nieorganiczna - kolokwium III, tresci zadan
Zadania z treścia
do kolokwium interna
1 treści programoweid 8801 ppt
WODA PITNA kolokwium
KOLOKWIUM 2 zadanie wg Adamczewskiego na porownawczą 97
kolokwium 1
Materiały do kolokwium III
Podstawowa opieka zdrowotna w realizacji treści zdrowia publicznego
Fizjologia krążenia zagadnienia (II kolokwium)

więcej podobnych podstron