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



Podobne dokumenty
Mechanizmy z grupy IPC

ezykach wysokiego poziomu (Dijkstra, 1965). semaphore semaphore S; Operacje na semaforze:

IPC: Kolejki komunikatów

Temat zajęć: Mechanizmy IPC: semafory

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

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

Mechanizmy z grupy IPC

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

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

problemu producenta i konsumenta z ograniczonym buforem cyklicznym. Wszystkie funkcje dotyczace

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

Krótki kurs programowania współbieżnego (2)

Pamięć współdzielona

Systemy Operacyjne 1 Laboratorium 2 Procesy i sygnały w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot

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

Semafory w systemie Unix

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

2 Implementacja w systemie Linux 2.4

Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne

Komunikacja za pomocą potoków. Tomasz Borzyszkowski

w odróżnieniu od procesów współdzielą przestrzeń adresową mogą komunikować się za pomocą zmiennych globalnych

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

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

Liczby pseudolosowe. #include <stdio.h> #include <stdlib.h> int main() { printf("%d\n", RAND_MAX); return 0; }

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Podstawy Programowania Podstawowa składnia języka C++

Multiprocessor Shared-Memory Information Exchange. Damian Klata, Adam Bułak

Funkcje jadra systemu operacyjnego UNIX

Laboratorium podstaw elektroniki

Podstawy i języki programowania

Funkcje jadra systemu operacyjnego UNIX

Futex (Fast Userspace Mutex) Łukasz Białek

2 Przygotował: mgr inż. Maciej Lasota

Pomoc dla użytkowników systemu asix 6 i 7. Drajwer Bufor. Dok. Nr PLP6021 Wersja:

Programowanie obiektowe - zadania

Technologie i usługi internetowe cz. 2

Przeciążanie operatorów

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.

Kolejki FIFO (łącza nazwane)

Warsztaty dla nauczycieli

Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2

Wielozadaniowość w systemie Microsoft Windows

Instytut Teleinformatyki

Systemy Operacyjne 2: Wątki pthreads. dr inż. Arkadiusz Chrobot

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Struktury, unie, formatowanie, wskaźniki

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

4. Funkcje. Przykłady

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Podstawy Programowania C++

Spis treści. 1 Moduł RFID (APA) 3

EGZAMIN MATURALNY Z INFORMATYKI WYBRANE: ... (system operacyjny) ... (program użytkowy) ... (środowisko programistyczne)

ZAGADNIENIE TRANSPORTOWE

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Wykład 8: klasy cz. 4

Organizacja typowego mikroprocesora

Projekt z przedmiotu Systemy akwizycji i przesyłania informacji. Temat pracy: Licznik binarny zliczający do 10.

Wykład 7 Podręczna pamięć buforowa (ang. buffer cache) w systemie Linuks. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB

Wykład 3 Składnia języka C# (cz. 2)

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

KOLEJKI KOMUNIKATÓW IPC

Kamil Wróbel* Politechnika Lubelska, Instytut Informatyki, Nadbystrzycka 36B, Lublin, Polska

Mechanizmy pracy równoległej. Jarosław Kuchta

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Języki programowania wysokiego poziomu. PHP cz.2.

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

4.2 Sposób korzystania z l acza

Temat zajęć: Tworzenie i obsługa wątków.

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Programowanie równoległe w POSIX API. PRiR, wykład 3

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

W. Guzicki Zadanie 41 z Informatora Maturalnego poziom podstawowy 1

Architektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Pętle. Dodał Administrator niedziela, 14 marzec :27

Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011

Wskazówki dotyczące zmiennych, tablic i procedur 1

ZASADY PROGRAMOWANIA KOMPUTERÓW

Etap 1 Projektowanie tabeli która będzie przechowywać informacje na temat książek.

I. Podstawy języka C powtórka

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Struktury Struktura polami struct struct struct struct

Standardy programowania protokołów komunikacyjnych Laboratorium nr 5 komunikacja multicastowa IPv6

4. Procesy pojęcia podstawowe

Klasyczne problemy synchronizacji

Podstawy programowania skrót z wykładów:

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Transkrypt:

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie piąte (jedne zajęcia) Temat: Semafory Opracowanie: mgr in ż. Arkadiusz Chrobot dr in ż. Grzegorz Łukawski

Wprowadzenie 1. Semafory Synchronizacja komunikujących si ę ze sob ą procesów jest jednym z najważniejszych zagadnie ń w dziedzinie programowania współbieżnego, dlatego twórcy mechanizmów IPC dodali do nich semafory mimo, że nie słu żą one do przekazywania komunikatów. Semafor jest abstrakcyjnym typem danych, dla którego zdefiniowano dwie niepodzielne operacje: P oczekuj i V sygnalizuj. Rozważmy najprostszy rodzaj semafora, czyli semafor binarny. Jest to zmienna przyjmująca tylko dwie wartości: 0 i 1, dostępna tylko poprzez operacje V i P. Operacja P działa następu- jąco: jeśli warto ść semafora jest większa od zera, to zmniejsz j ą o jeden. Jeśli warto ść ta wynosi zero, to zawie ś wykonanie procesu. Wykonanie operacji V przebiega w ten sposób: jeśli inny proces zosta ł zawieszony w oczekiwaniu na semafor, to wznów jego wykonanie. Jeśli żaden proces nie zosta ł zawieszony w oczekiwaniu na semafor, to zwiększ wartość semafora o jeden. Z powyższego opisu można wyciągn ąć dwa wnioski. Po pierwsze semafor musi by ć dostępny dla wszystkich procesów ubiegających si ę o dostęp do zasobu strzeżonego przez ten semafor, a więc nie może by ć zmienn ą umieszczon ą w przestrzeni adresowej do której dostęp ma tylko jeden proces. Po drugie zmiana wartości semafora musi si ę odbywa ć w sposób niepodzielny, tzn. jeśli proces roz- pocznie operacje zmiany wartości semafora, to nie może zosta ć wywłasz- czony i żaden inny proces w tym samym przedziale czasu nie może manipulowa ć semaforem. Aby obydwa wymagania były spełnione semafory s ą tworzone w przestrzeni adresowej jądra i dostępne poprzez odpowiednie wywołania systemowe. Mechanizm IPC dostarcza interfej- su dla tych wywoła ń systemowych dla procesów pracujących w prze- strzeni użytkownika. Semafory w Linuksie (Uniksie) mog ą przyjmować większy zbiór wartości ni ż tylko 0 i 1. Należy oczywiście zadba ć, aby wszystkie procesy, których działanie chcemy synchronizowa ć prze- strzegały odpowiedniego protokołu dostępu do zasobu (tzn. należy nie wolno dopuści ć do sytuacji, w której proces uzyskuje dostęp do zasobu z pominięciem semafora lub kiedy nieodpowiednio posługuje się semaforem).

2. Funkcje i struktury danych funkcja semget() - funkcja ta tworzy zbiór semaforów i zwraca jego identyfikator lub zwraca identyfikator istniejącego zbioru semaforów. Jako argumenty wywołania przyjmuje klucz, który może by ć zwrócony przez funkcj ę ftok() (patrz poprzednia instruk- cja), liczb ę semaforów w zbiorze i flagi związane ze sposobem two- rzenia i prawami dostępu do semafora. Szczegóły: man semget. funkcja semop() - umożliwia przeprowadzenie operacji na wartości semafora w sposób niepodzielny. Funkcja ta pobiera trzy argumenty. Pierwszym argumentem przyjmowanym przez t ę funkcj ę jest identyfikator zbioru semaforów. Następnym jest wskaźnik na tablic ę zawierając ą elementy o następującej strukturze: struct sembuf { unisgned sem_num; short sem_op; short sem_flg; }; Pole sem_num zawiera numer semafora w zbiorze (semafory s ą nu- merowane od zera), którego ma dotyczy ć operacja. Pole sem_op okre- śla jaka operacja zostanie na semaforze przeprowadzona. Jeśli war- to ść tego pola jest dodatnia, to zostanie ona dodana do bieżącej war- tości semafora. Jeśli warto ść ta wynosi zero, to proces wykonujący tę operacj ę będzie czeka ł do czasu a ż semafor osiągnie warto ść zero. Je- śli warto ść pola sem_op jest ujemna, to proces będzie czeka ł do momentu kiedy semafor osiągnie warto ść większ ą lub równ ą bez- względnej wartości pola sem_op, a następnie dodaje t ą ujemn ą war- to ść do bieżącej wartoś ci semafora. Pole sem_flg może przyjmować dwie wartości SEM_UNDO i IPC_NOWAIT. Ostatnia flaga oznacza, że proces nie będzie czeka ł na zakończenie operacji, natomiast pierw- sza oznacza, że operacja zostanie automatycznie cofnięta po za- kończeniu procesu, który j ą wykona ł. Trzeci argument funkcji semop () określa ile jest elementów w tablicy, której wskaźnik jest przekazy- wany jako drugi argument wywołania funkcji. Szczegóły: man semop. funkcja semctl() służy do sterowania zbiorem semaforów. Jako pierw-

szy argument pobiera identyfikator zbioru semaforów. Drugim argumentem jest jest numer semafora w zbiorze (patrz opis funkcji semop). Trzeci argument określa rodzaj operacji jaka ma by ć wy- konana. Warto ść IPC_RMID powoduje usunięcie zbioru semaforów z systemu (drugi argument jest ignorowany). Warto ść GETVAL powoduje, ze wywoł anie funkcji semctl() zwróci warto ść określonego w jej argumentach semafora. Warto ść SETVAL może by ć użyta do zainicjowania semafora określon ą wartości ą. Jej użycie wymaga przekazania do funkcji czwartego argumentu o typie określonym przez następując ą uni ę: union semun { int val; struct semid_ds *buff; unsigned short *array; struct seminfo * buf; } arg; Pierwsze pole jest wykorzystywane przez operacj ę SETVAL, drugie pole jest wykorzystywane przez IPC_STAT i IPC_SET, trzecie przez SETALL i GETALL, natomiast ostatnie jest specyficzne dla Linuksa i używane przez IPC_INFO. Pełny opis operacji wymienionych w opisie unii oraz szczegóły dotyczące działanie semctl() znajduj ą się w podręczniku systemowym: man semctl. Do zarządzania semaforami można uży ć tych samych polece ń sys- temowych co w przypadku kolejek komunikatów, tj. ipcs i ipcrm. Zadania 1. Napisz dwa programy. Pierwszy stworzy semafor i zainicjuje go wartości ą dodatni ą, a następnie poczeka, a ż drugi program ustawi wartość tego semafor na zero i dopiero wtedy zakończy si ę. 2. Napisz program, który stworzy zbiór dziesięciu semaforów, o wartości początkowej równej jeden, a następnie stworzy dziesi ęć procesów potom- nych, które wstępnie zostan ą uśpione na sekund ę, a następnie ustawią warto ść odpowiadającego im semafora na zero. Proces rodzicielski może si ę zakończy ć dopiero wtedy, kiedy ostatni semafor ze zbioru osiągnie warto ść zero.

3. Zmodyfikuj zadanie drugie tak, aby tworzony by ł jeden semafor o wartości początkowej zero, a procesy potomne zwiększał y go o jeden, w określonym porządku. Proces pierwszy bezwarunkowo zwiększy warto ść semafora, proces drugi będzie czeka ł a ż semafor będzie miał warto ść dwa i zwiększy j ą do trzech, itd. Warto ść końcowa semafora powinna wynosi ć pi ęć. 4. Zademonstruj synchronizacj ę operacji zapisu i odczytu dla łącza nazwa- nego, przy pomocy semaforów. 5. Poka ż w jaki sposób może doj ść do zakleszczenia ( ang. deadlock) procesów synchronizowanych przy pomocy semaforów. 6. Zademonstruj działanie operacji SEM_UNDO. 7. Zademonstruj działanie operacji SETALL, GETALL, IPC_STAT, GETPID, GETZCNT. 8. Stwórz kolejk ę komunikatów z której będzie korzystało kilka procesów, z których cz ęść będzie pisarzami, a cz ęść czytelnikami. Operacj ę zapisu i odczytu z tej kolejki należy zsynchronizowa ć za pomoc ą dwóch semaforów, tzn.: semafor pierwszy będzie zajmowany przez proces przed operacj ą odczytu, a zwalniany zaraz po jej wykonaniu, natomiast semafor drugi będzie zajmowany przez proces przed operacj ą zapisu i podobnie jak wyżej, zwalniany po jej wykonaniu. Załó ż, że wiele procesów może odczytywa ć współbieżnie dane z kolejki, ale tylko jeden moż e w danym czasie do niej pisa ć. 9. Napisz program, który podzieli si ę na dwa procesy komunikujące się przez łącze nienazwane (pipe). Oba te procesy będ ą równie ż miały do- stęp do wspólnego semafora, któremu będzie nadana warto ść począt- kowa większa od zera. Proces pierwszy będzie wysyła ł liczby od 1 do 10 do procesu drugiego. Proces drugi będzie wyświetla ł je na ekran, a po otrzymaniu liczby 10 wyzeruje semafor. Po wyzerowaniu semafora oba procesy powinny si ę zakończy ć. Uwaga: We wszystkich programach tu ż przed zakończeniem ich działa- nia wszystkie semafory i inne zasoby IPC z jakich one korzystaj ą powi- nny zosta ć usunięte.