Programowanie współbieżne

Wielkość: px
Rozpocząć pokaz od strony:

Download "Programowanie współbieżne"

Transkrypt

1 Programowanie współbieżne

2 Spis treści 1 Podstawowe definicje i pojęcia współbieżności Podstawowe definicje współbieżności Czym jest proces? Procesy sekwencyjne Procesy współbieżne Procesy równoległe Rodzaje współbieżności Poprawność aplikacji współbieżnych Bezpieczeństwo Blokada Zagłodzenie Żywotność Procesy - pojęcia podstawowe Kanoniczne stany procesów Zawartość deskryptora Zarządzanie procesami Zarządzanie pamięcią Zarządzanie plikami Fazy wykonywania procesów Utworzenie procesu Ładowanie procesu Wykonywanie procesu Zakończenie wykonywania Atrybuty procesu Dziedziczenie procesów Procesy POSIX Tworzenie kopii procesu bieżącego - funkcja fork() Funkcje Makra Akcje przy zakończeniu procesu Pliki Atrybuty pliku Funkcje biblioteki niskiego poziomu Blokady pliku Blokada doradcza Blokada obowiązkowa Standardowa biblioteka wejścia/wyjścia Funkcje standardowej biblioteki Katalogi Funkcje Łącza nienazwane Wykorzystanie Funkcje

3 7 Łącza nazwane Wykorzystanie Funkcje mkfifo() select() Pamięć dzielona Komunikacja przez pamięć dzieloną w standardzie POSIX Funkcje Kolejki komunikatów POSIX Podstawowe cechy kolejek komunikatów Zastosowanie kolejek komunikatów Funkcje mq open mq send mq receive mq getattr mq notify Synchronizacja Wzajemne wykluczanie Operacje atomowe Sekcja krytyczna Warunki poprawnego rozwiązania sekcji krytycznej Niesystemowe metody ochrony sekcji krytycznej Blokowanie przerwań Metoda zmiennej blokującej (nieprawidłowa) Systemowe metody wzajemnego wykluczania Wirujące blokady Blokowanie przerwań Sprzętowa ochrona sekcji krytycznej Semafory Ochrona sekcji krytycznej Semafory nienazwane i nazwane POSIX Funkcje sem open sem init sem wait sem timedwait sem post Monitory Zastosowanie Oczekiwanie wewnątrz monitora Zmienne warunkowe Funkcje wait(c) signal(c) noempty(c)

4 public final void notify() public final void notifyall() Wątki Pojęcie wątku i zasoby Pojęcie wątku Właściwości wątku Zasoby wątku Tworzenie wątku i synchronizacja Tworzenie wątku Synchronizacja Funkcje pthread create pthread exit pthread join mutex init mutex lock mutex unlock Zmienne warunkowe cond init cond wait cond signal cond broadcast Bariery Blokady czytelników i pisarzy Zasada działania blokad czytelników i pisarzy Stan blokady Wirujące blokady Inicjacja wirującej blokady Zajęcie blokady Zwolnienie blokady Interfejs gniazdek Domeny Rodzina adresów AF INET Rodzina adresów AF INET Rodzina adresów AF UNIX Style komunikacji Strumienie Datagramy Protokół surowy Adresy gniazd Nazywanie gniazdka Konwersja z zapisu kropkowego na binarny Komunikacja bezpołączeniowa Odbiór danych z gniazdka Zapis do gniazdka Komunikacja połączeniowa Połączenie ze zdalnym gniazdkiem

5 Wprowadzenie serwera w stan gotowości do nawiązania połączenia Nawiązanie połączenia przez serwer Odczyt z gniazdka Zapis do gniazdka Odczyt z gniazdka Zapis do gniazdka Konfigurowanie gniazdek Serwer sekwencyjny Klient Serwer Serwer współbieżny Sygnały Sygnały i ich obsługa Instalacja handlera sygnału Blokowanie sygnałów Sygnały, a wątki Funkcje Obsługa sygnałów Funkcja pause (UNIX) Funkcja alarm

6 1 Podstawowe definicje i pojęcia współbieżności 1.1 Podstawowe definicje współbieżności Czym jest proces? Proces jest aktywną strukturą dynamiczną istniejącą tylko w środowisku działającego komputera Procesy sekwencyjne Procesy są sekwencyjne jeżeli następny proces ze zbiory procesów rozpoczyna się po zakończeniu procesu poprzedniego Procesy współbieżne Dwa procesy są współbieżne jeżeli jeden z nich rozpoczyna się przed zakończeniem drugiego Procesy równoległe Dwa procesy są równoległe jeżeli jeden z nich rozpoczyna się przed zakończeniem drugiego i wykonywane są jednocześnie na oddzielnych procesorach Rodzaje współbieżności Współbieżność konkurencyjna - procesy nie współpracują ze sobą działając w ramach aplikacji jednej współbieżnej. Komunikują i synchronizują się ze sobą w celu wykonania pewnego zadania. Współbieżność kooperacyjna - procesy współpracują ze sobą działając w ramach aplikacji jednej współbieżnej. Komunikują i synchronizują się ze sobą w celu wykonania pewnego zadania. 5

7 1.2 Poprawność aplikacji współbieżnych Bezpieczeństwo Aplikacja jest bezpieczna, jeżeli utrzymuje system w pożądanym stanie. Aplikacja nie jest bezpieczna jeżeli: Da niepoprawne wyniki - np. nie jest zachowany warunek wzajemnego wykluczania Nie będzie wykonywał pożądanych działań - ulegnie blokadzie W odniesieniu do modelu klient - serwer bezpieczeństwo oznacza, że klienci są obsługiwani w zadowalający sposób. 1. Serwer nie zaprzestał obsługi zleceń. 2. Na zlecenia odpowiadał w prawidłowy sposób Blokada Każdy z zablokowanych procesów oczekuje na zdarzenie które może być wygenerowane tylko przez któryś z zablokowanych procesów. Blokada zwana też zakleszczeniem jest typowym zagrożeniem aplikacji współbieżnych Zagłodzenie Zagłodzenie występuje gdy procesowi cały czas odmawia się dostępu do zasobów, których ten potrzebuje by wykonać zlecone mu zadanie Żywotność Aplikacja jest żywotna, jeżeli każde pożądane zdarzenie w końcu nadejdzie. W modelu klient - serwer żywotność oznacza, że każdy klient zostanie w końcu obsłużony. 2 Procesy - pojęcia podstawowe 2.1 Kanoniczne stany procesów Proces może być w jednym z trzech podstawowych stanów: Wykonywany - proces, który się aktualnie wykonuje Gotowy - proces, który się aktualnie nie wykonuje Zablokowany - proces, który na coś czeka np. na zakończenie wątku (pthread join()), podprocesu (wait()), dostępu do sprzętu Zombie - proces, który się zakończył, ale jego proces macierzysty nie wykonał funkcji wait() 6

8 Pokazane na rysunku przejścia mają miejsca w następujących sytuacjach: 1. Proces utrzymuje w pamięci struktury danych. 2. Proces żąda zasobu, który nie jest dostępny. 3. Wystąpiło przerwanie (proces został wywłaszczony lub też proces dobrowolnie zwolnił procesor. 4. Procedura szeregująca zdecydowała, że ten proces ma być wykonywany. 5. Zasób, którego brakowało do kontynuacji procesu stał się dostępny. Przejście zostało zainicjowane przez przerwanie od urządzenia wejścia/wyjścia lub też proces aktualnie wykonywany. 6. Zakończenie procesu. 2.2 Zawartość deskryptora Zarządzanie procesami Identyfikator procesu - PID ang. Process Identifier Bieżący stan procesu (wykonywany, gotowy, zablokowany, itd.) Wskaźniki do poprzedniego i następnego deskryptora w kolejce wszystkich deskryptorów Wskaźniki do poprzedniego i następnego procesu w danej kolejce (procesów gotowych, zablokowanych, itd.) Informacje dla procedur szeregowania (priorytetu procesu, typ szeregowania) Informacje dotyczące obsługi sygnałów (sygnały dostarczone, zablokowane itd.) Informacje na temat hierarchii procesów (proces macierzysty, potomne itd.) Kontekst sprzętowy procesu (rejestry procesora) Informacje rozliczeniowe o czasie procesora zużytym przez proces Nazwa pliku z którego utworzono proces Informacje uwierzytelniające jak rzeczywisty i efektywny identyfikator użytkownika i grupy (UID, GID, EUID, EGID) 7

9 2.2.2 Zarządzanie pamięcią Rozmiar segmentu kodu, danych, stosu Położenie segmentu kodu, danych, stosu Informacje o stronach zajmowanych przez proces Zarządzanie plikami Katalog bieżący Katalog macierzysty Informacja o terminalu sterującym Wzorzec tworzenia nowych plików (UMASK) Wskaźnik na tablicę deskryptorów otwartych plików 2.3 Fazy wykonywania procesów Utworzenie procesu Alokacja deskryptora procesu, przydział PID Ustalenie zmiennych otoczenia, zwykle dziedziczone z procesu macierzystego Ładowanie procesu Załadowanie segmentu kodu i danych oraz inicjacji stosu. Ładowanie wykonywane jest przez oddzielny wątek ładujący, aby nie blokować administratora procesu Wykonywanie procesu Po załadowaniu nowy proces jest umieszczany w kolejce procesów gotowych Zakończenie wykonywania Zakończenie procesu może być zainicjowane przez sam proces, gdy wykona funkcję exit() lub poprzez wysłany z zewnątrz sygnał. Zakończenie składa się z dwóch etapów. Zwolnienie zasobów - proces zwalnia wszystkie zajmowane zasoby takie jak pamięć, nazwy itd. oraz likwiduje interakcje z innymi procesami. Po wykonaniu tej fazy zajmuje tylko deskryptor. Zawiadomienie procesu macierzystego o zakończeniu - dopóki proces macierzysty nie wykona funkcji wait() lub waitpid() kończony proces pozostaje w stanie zombie. W celu uniknięcia tego można ustawić reakcję na sygnał SIGCHLD w funkcji signal na SIG IGN. 8

10 2.4 Atrybuty procesu PID - identyfikator procesu PPID - PID procesu macierzystego UID - identyfikator użytkownika GID - identyfikator grupy użytkownika SID - identyfikator sesji PGRP - identyfikator grupy procesów priorytet procesu CWD - katalog bieżący katalog główny otoczenie procesu 2.5 Dziedziczenie procesów Proces potomny dziedziczy większość atrybutów procesu macierzystego, ale ma swoje PID, PPID oraz własne kopie deskryptorów otwartych plików. 3 Procesy POSIX 3.1 Tworzenie kopii procesu bieżącego - funkcja fork() Procesy tworzone są za pomocą funkcji fork(). Funkcja fork() posiada następujący prototyp. Funkcja tworzy kopię procesu bieżącego, czyli tego procesu, który wykonuje funkcje fork(). Funkcja fork() zwraca: 0 w procesie potomnym 0 w procesie macierzystym zwracany jest PID procesu potomnego -1 błąd Funkcja fork() tworzy deskryptor nowego procesu oraz kopię segmentu danych i stosu procesu macierzystego. 3.2 Funkcje fork() - utworzenie kopii procesu bieżącego exec() - zastąpienie procesu bieżącego innym procesem system() - wykonanie programu lub skryptu exit() - zakończenie procesu wait(), waitpid() - czekanie na zakończenie procesu 9

11 3.3 Makra WIFEXITED - zwraca 0 gdy proces potomny był zakończony pomyślnie WEXITSTATUS - zwraca kod powrotu y przekazany przez funkcję exit(y) z procesu potomnego WIFSIGNALED - zwraca 0 gdy proces potomny był zakończony przez nieobsłużony sygnał WTERMSIG - zwraca numer sygnału, gdy proces był zakończony przez sygnał 3.4 Akcje przy zakończeniu procesu Należy zakończyć komunikację z innymi procesami Należy zwolnić zajmowane zasoby Należy zaczekać na zakończenie procesów potomnych (bo inaczej są one adoptowane przez init 1. Zamykane są otwarte pliki i strumienie 2. Najmłodszy bajt kodu powrotu x jest przekazywany do zmiennej odczytywanej przez funkcję wait() w procesie macierzystym. Kod powrotu zapamiętywany jest w deskryptorze. 3. Jeśli proces macierzysty wywołał wait() albo waitpid(), to zostaje on odblokowany a deskryptor jest usuwany. 4. Jeśli w/w funkcje nie zostały wywołane, to proces potomny przechodzi do stanu zombie, a kod powrotu czeka w deskryptorze. 5. Proces macierzysty otrzymuje sygnał SIGCHLD. 4 Pliki Plik jest podstawową abstrakcją używaną w systemach operacyjnych. Pozwala na traktowanie dużego zbioru zasobów w jednolity sposób. W systemie Linux prawie wszystkie zasoby są plikami. Dane i urządzenia są reprezentowane przez abstrakcję plików. Mechanizm plików pozwala na jednolity dostęp do zasobów lokalnych jak i zdalnych za pomocą poleceń i programów usługowych. Plik jest obiektem abstrakcyjnym, z którego można czytać i do którego można pisać. Oprócz zwykłych plików w systemie występują łącza symboliczne, kolejki FIFO, blok pamięci, urządzenia blokowe i znakowe. 10

12 4.1 Atrybuty pliku typ pliku - plik regularny, katalog, gniazdo, kolejka FIFO, urządzenie blokowe, urządzenie znakowe, link prawa dostępu - prawo odczytu zapisu, wykonania określone dla właściciela pliku, grupy do której on należy i innych użytkowników systemu wielkość - wielkość pliku w bajtach właściciel pliku - UID właściciela pliku grupa do której należy właściciel - GID grupy do której należy właściciel pliku czas ostatniej modyfikacji - czas, kiedy nastąpił zapis do pliku czas ostatniego dostępu - czas kiedy nastąpił odczyt lub zapis do pliku czas ostatniej modyfikacji statusu - kiedy zmieniano atrybuty takie jak prawa dostępu, właściciel itp. liczba dowiązań - pod iloma nazwami występuje dany plik identyfikacja urządzenia - identyfikator urządzenia na którym plik jest pamiętany 4.2 Funkcje biblioteki niskiego poziomu open() - funkcja otwierająca plik. Potrafi utworzyć plik, jeśli nie takowy istnieje, ale to zależy od ustawień oflag. Funkcja zwraca deskryptor pliku (uchwyt), którego używamy do identyfikacji pliku. creat() - funkcja tworząca nowy plik. W argumencie podajemy nazwę pliku i atrybuty (prawa dostępu). Funkcja, podobnie jak open(), zwraca deskryptor pliku. read() - za parametr bierze deskryptor pliku, bufor docelowy i ilość bajtów do odczytu. Czyta w bieżącej pozycji pliku. write() - parametry do deskryptora pliku, bufor zawierające dane do zapisu i ilość bajtów do zapisania. close() - zamknięcie pliku lseek() - pozwala zmieniać obecną pozycję w pliku. Argumenty to deskryptor pliku, offset stanowiący o ile mamy się przesunąć i flagę, która decyduje, czy przesuwamy się względem bieżącej pozycji, początku lub końca pliku. f,;stat() - zwraca informacje o pliku (inode, uprawnienia itd.) fcntl() - zmienia atrybuty pliku dup(), dup2() - duplikuje deskryptor pliku. 11

13 4.3 Blokady pliku W sytuacji, gdy więcej procesów korzysta współbieżnie z pliku, a przynajmniej jeden z nich pisze, może dojść do błędnego odczytu jego zawartości. Podobnie dwa (lub więcej) procesy nie powinny jednocześnie pisać do pliku. W celu zapewnienia wzajemnego wykluczania w dostępie do pliku stosuje się blokady plików Blokada doradcza Blokady doradcze działają wtedy, gdy procesy używające wspólnego pliku stosują prawidłowo mechanizmy ochrony. Gdy jeden z procesów takie mechanizmy stosuje, a inny nie, to w tym drugim operacje odczytu i zapisu nie spowodują blokady procesu Blokada obowiązkowa Blokady obowiązkowe działają nawet wtedy, gdy nie wszystkie procesy używające wspólnego pliku stosują mechanizmy obrony. W tym przypadku blokada założona na plik (F RDLCK, F WRLCK) przez jeden proces będzie działała nawet gdy inny proces nie będzie jej świadomy. W takim przypadku operacja read/write dokonana na zablokowanym pliku spowoduje zawieszenie procesu do czasu zdjęcia blokady z pliku. Od tej chwili blokada POSIX założona na ten plik będzie obowiązująca. 4.4 Standardowa biblioteka wejścia/wyjścia Zapewnia wiele rozbudowanych funkcji ułatwiających formatowanie wyjścia i skanowanie wejścia. Obsługuje buforowanie Funkcje zadeklarowane są w pliku nagłówkowym stdio.h Odpowiednikiem uchwytu jest strumień widziany w programie jako FILE* 4.5 Funkcje standardowej biblioteki fopen() - otwarcie lub utworzenie pliku, atrybutami jest nazwa pliku i sposób otwarcia pliku fprintf(), sprintf() - fprintf() pisze do strumienia zawartość kolejnych zmiennych zgodnie z łańcuchem formatującym, sprintf() pisze do bufora, atrybutami są plik/bufor, łańcuch formatujący i bufor na łańcuch wyjściowy fscanf(), sscanf() - fscanf() czyta dane ze strumienia i umieszcza je w zmiennych, których adresy wyszczególnione są jako parametry. Ważne, aby sposób zapisu pola danych był zgodny z typem zmiennej w której to pole ma być zapisane.. Funkcja sscanf() czyta z bufora. Atrybutami są plik/bufor łańcuch formatujący i bufor na łańcuch wejściowy. 12

14 5 Katalogi 5.1 Funkcje DIR* opendir(char* dirname) - funkcja zwraca wskaźnik na strukturę DIR, która wskazuje na pierwszą pozycję w katalogu. Gdy wywołanie się nie uda zwracany jest NULL. Działanie funkcji podobne jest do funkcji fopen, która otwiera strumień zwracając wskaźnik na strukturę FILE. struct dirent* readdir(dir* dirptr) - odczytuje kolejne pozycje katalogu, kiedy jest otwarty. Funkcja powoduje skopiowanie struktury dirent danych o bieżącej pozycji katalogu i przesuwa ten wskaźnik na następną pozycję. int mkdir(char* patchname) - funkcja tworzy nowy katalog (wraz ze ścieżką). Funkcja zwraca 0 gdy sukces, -1 gdy błąd. Funkcja tworzy katalog o nazwie patchname. Tworzy ona również dwa łącza:.. łącze do katalogu wyższego poziomu. łącze do bieżącego katalogu int rmdir(char* patchname) - kasowanie katalogu, 0 gdy sukces, -1 gdy błąd. Usunięty może być tylko pusty katalog. int chdir(char* patchname) - odczyt i zmiana katalogu bieżącego, funkcja zmieni katalog bieżący na patchname, 0 gdy sukces, -1 gdy błąd 6 Łącza nienazwane 6.1 Wykorzystanie Prosta komunikacja pomiędzy procesem macierzystym i potomnym, nie ma możliwości wymiany deskryptora pliku, w którym znajduje się łącze nienazwane inaczej niż gdy oba procesy są w relacji macierzysty/potomny. Ten kanał komunikacji jest jednostronny dla danego procesu, tzn. np. macierzysty tylko czyta, a potomny tylko pisze. 1. Tworzymy łącze za pomocą funkcji pipe(), której parametrem jest wskaźnik na dwuelementową tablicę int - w niej znajdują się deskryptory. 2. Tworzymy proces potomny danego programu (fork()) 3. W procesie potomnym zamykamy nieużywany deskryptor za pomocą close(), np. jeśli tylko będziemy pisać, to zamykamy deskryptor do pisania (close(fd[1])), po czym czytamy/zapisujemy jak z normalny plik 4. Robimy analogicznie to samo co w punkcie 3. dla procesu macierzystego 5. Na końcu robimy close() na pozostałych deskryptorach, z których korzystaliśmy 13

15 6.2 Funkcje pipe() - tworzy łącze nienazwane open(), read(), write(), close() - jak w przypadku plików, nie używamy open() w przypadku łącz nienazwanych, bo nie mamy pliku, który chcemy otworzyć, zamiast tego korzystamy z pipe() flock() - blokuje plik, pozwalając na synchronizację dostępu do niego pomiędzy kilkoma procesami fileno() - zwraca deskryptor pliku dla argumentu FILE* 7 Łącza nazwane 7.1 Wykorzystanie Łącza nazwane mogą być używane przez niepowiązane ze sobą procesy. Są po specjalne pliki, które są normalnie dostępne w systemie plików. Pliki te giną po wyłączeniu komputera. 1. Tworzymy plik FIFO za pomocą mkfifo() 2. Otwieramy plik open() 3. Używamy read() i write() w zależności od tego co chcemy zrobić 4. Zamykamy plik przy pomocy funkcji close() 7.2 Funkcje mkfifo() Tworzy łącze nazwane, jako argument przyjmuje nazwę pliku FIFO oraz prawa dostępu do pliku. int mkfifo(char* path, mode t mode path - nazwa pliku FIFO (ze ścieżką) mode - prawa dostępu do pliku Zwraca 0 gdy sukces, -1 gdy błąd. 14

16 7.2.2 select() Funkcja ta blokuje bieżący proces do momentu, kiedy dany deskryptor stanie się gotowy albo wystąpi błąd. Można mu ustawić timeout, bo którym zwraca błąd. 8 Pamięć dzielona 8.1 Komunikacja przez pamięć dzieloną w standardzie PO- SIX 1. Alokujemy pamięć dzieloną poprzez funkcję shm open(), w atrybutach której znajduje się nazwa segmentu pamięci dzielonej i jej atrybuty. Zwraca ona deskryptor pliku. 2. Poprzez ltrunc() lub ftruncate() ustalamy obszar zajmowanej pamięci 3. Używając mmap() inicjujemy zmienną w pamięci dzielonej, zwykle ładując tam wcześniej zdefiniowaną strukturę. Jako wynik funkcji otrzymujemy wskaźnik do zmiennej. 4. Po skończeniu używania pamięci zwalniamy nazwę pamięci dzielonej za pomocą shn unlink(nazwa). 8.2 Funkcje int shm open(char *name, inf oflag, mode t mode) - tworzenie segmentu pamięci, atrybutami jest nazwa segmentu pamięci, flaga specyfikująca tryb utworzenia i specyfikacja trybu dostępu. Gdy funkcja zwraca liczbę nieujemną jest 15

17 to uchwyt identyfikujący segment w procesie. Segment widziany jest jako plik specjalny w katalogu /dev/shmem. off t ftruncate(int fdes, off t offset) - ustala rozmiar segmentu pamięci, atrybutami są uchwyt segmentu zwracany przez poprzednią funkcję shm open i wielkość segmentu w bajtach. Funkcja zwraca wielkość segmentu lub -1 gdy błąd. void *mmap(void *addr, size t len, int prot, int flags, int fdes, off t off - odwzorowuje segment pamięci wspólnej w obszar procesu, atrybutami są zmienna wskaźnikowa w procesie, której wartość będzie przez funkcję zainicjalizowana, wielkość odwzorowywanego obszaru, specyfikacja dostępu do obszaru, specyfikacja użycia segmentu, uchwyt wspólnej pamięci i początek obszaru we wspólnej pamięci (musi mieć wielokrotność strony 4K). Funkcja zwraca adres odwzorowanego obszaru lub -1 gdy błąd. 9 Kolejki komunikatów POSIX 9.1 Podstawowe cechy kolejek komunikatów 1. Kolejki komunikatów są pośrednik obiektem komunikacyjnym widzianym jako plik specjalny. Komunikujące się procesy nie muszą znać swoich identyfikatorów. 2. Komunikaty odczytywane z kolejki zachowują strukturę - są separowane. W kolejce mogą znajdować się komunikaty różnej długości. Własności tej nie mają kolejki FIFO. 3. Można zadać maksymalną długość kolejki komunikatów. Gdy zostanie ona przekroczona, proces piszący do kolejki komunikatów zostanie zablokowany. 4. Kolejka widziana jest w systemie plików jako plik specjalny. Operacje odczytu/zapisu mogą być zabezpieczane prawami dostępu jak w przypadku plików regularnych. 5. Można testować status kolejki (np. liczbę komunikatów w kolejce). Nie jest to możliwe w przypadku plików regularnych. 6. Komunikatom można nadać priorytet. Komunikaty o wyższym priorytecie będą umieszczane na początku kolejki. 9.2 Zastosowanie kolejek komunikatów 1. Proces wysyłający komunikaty nie może być wstrzymany. 2. Proces wysyłający komunikaty nie potrzebuje szybkiej informacji zwrotnej o tym, czy komunikat dotarł do adresata. 3. Zachodzi potrzeba przekazywania danych z procesu w którym one powstają (producent) do procesu w którym są one przetwarzane (konsument). 16

18 9.3 Funkcje mq open Kolejkę komunikatów tworzy się za pomocą funkcji: mqd t mq open(char *name, int oflag) mqd t mq open(char *name, int oflag, int mode, mq attr *attr) name - łańcuch identyfikujący kolejkę komunikatów, ma się zaczynać od /. Kolejki tworzone są w katalogu bieżącym. oflag - tryb tworzenia kolejki. Tryby te są analogiczne jak w zwykłej funkcji open. mode - prawa dostępu do kolejki (r - odczyt, w - zapis) dla właściciela pliku, grupy i innych, analogicznie jak w przypadku plików regularnych. Atrybut x - wykonanie jest ignorowany Funkcja zwraca identyfikator kolejki komunikatów, -1 gdy błąd mq send Wysyłanie komunikatu do kolejki odbywa się za pomocą funkcji: int mq send(mqd t mq, char *msg, size t len, unsigned int mprio) mq - identyfikator komunikatów *msg - adres bufora wysyłanego komunikatu len - długość wysyłanego komunikatu mprio - priorytet komunikatu (od 0 do MQ PRIORITY MAX) Wywołanie funkcji powoduje przekazanie komunikatu z bufora msg do kolejki mq. Można wyróżnić dwa zasadnicze przypadki: 1. W kolejce jest miejsce na komunikaty. Wtedy wykonanie funkcji nie spowoduje zablokowania procesu bieżącego. 2. W kolejce brak miejsca na komunikaty. Wtedy wykonanie funkcji spowoduje zablokowanie procesu bieżącego. Proces ulegnie odblokowaniu, gdy zwolni się miejsce. Zachowanie się funkcji uzależnione jest od stanu flagi O NONBLOCK. Flaga ta jest domyślnie wyzerowana. Funkcja zwraca 0 gdy sukces i -1 gdy błąd mq receive Pobieranie komunikatu z kolejki komunikatów odbywa się za pomocą funkcji: int mq receive(mqd t mq, char *msg, size t len, unsigned int *mprio mq - identyfikator komunikatów 17

19 *msg - adres bufora odbieranego komunikatu len - maksymalna długość odbieranego komunikatu mprio - priorytet odebranego komunikatu 1. Gdy w kolejce znajduje się przynajmniej jeden komunikat wywołanie funkcji mq receivex nie spowoduje zablokowanie procesu bieżącego. 2. Gdy w kolejce brak komunikatów wywołanie funkcji mq receive spowoduje zablokowanie procesu bieżącego. Proces ulegnie odblokowaniu, gdy w kolejce pojawi się jakiś komunikat. W przypadku gdy więcej niż jeden proces czeka na komunikat - odblokowany będzie proces, który najdłużej czekał. Zachowanie się funkcji uzależnione jest także od stanu flagi O NONBLOCK. Funkcji zwraca rozmiar odebranego komunikatu lub -1 gdy błąd mq getattr Testowanie statusy kolejki komunikatów odbywa się poprzez wykonanie funkcji: int mq getattr(mqd t mq, struct mq attr *attr mq - identyfikator kolejki komunikatów *attr - adres bufora ze strukturą zawierającą atrybuty kolejki komunikatów mq notify 1. Można spowodować aby pojawienie się komunikatu w pustej kolejce powodowało zawiadomienie procesu bieżącego. 2. Zawiadomienie może mieć postać sygnału lub powodować uruchomienie wątku int mq notify(mqd t mq, struct sigevent *notif) mq - identyfikator kolejki komunikatów *notif - adres struktury typu sigevent specyfikującego sposób zawiadomienia 10 Synchronizacja 10.1 Wzajemne wykluczanie Wymaganie, aby ciąg operacji na pewnym zasobie (zwykle pamięci) był wykonywany w trybie wyłącznym tylko przez jeden z potencjalnie wielu procesów Operacje atomowe Operacje, które nie mogą zostać przerwane, np. przez przełączenie procesu. 18

20 10.3 Sekcja krytyczna Ciąg operacji na pewnym zasobie (zwykle pamięci), który musi wykonany w trybie wyłącznym przez tylko jeden z potencjalnie wielu procesów Warunki poprawnego rozwiązania sekcji krytycznej 1. W sekcji krytycznej może być tylko jeden proces, to znaczy instrukcje z sekcji krytycznej nie mogą być przeplatane. 2. Nie można czynić żadnych założeń co do względnym szybkości wykonywania procesów. 3. Proces może się zatrzymać w sekcji lokalnej, ale nie w sekcji krytycznej. Zatrzymanie procesu w sekcji lokalnej nie może blokować innym procesom wejścia do sekcji krytycznej. 4. Każdy z procesów musi w końcu wejść do sekcji krytycznej Niesystemowe metody ochrony sekcji krytycznej Blokowanie przerwań Metoda zapewnienia wzajemnego wykluczania poprzez blokowanie przerwań opiera się na fakcie, że proces może być połączony przez: 1. Przerwanie, które aktywuje procedurę szeregującą 2. Wywołanie wprost procedury szeregującej lub innego wywołania systemowego powodującego przełączanie procesów Gdy żaden z powyższych czynników nie zachodzi procesy nie mogą być przełączane. Metoda ochrony sekcji krytycznej poprzez blokowanie przerwań opiera się na następujących zasadach: 1. Protokół wejścia do sekcji - następuje zablokowanie przerwań 2. Protokół wyjścia z sekcji - następuje odblokowanie przerwań 3. Wewnątrz sekcji krytycznej nie wolno używać wywołań systemowych mogących spowodować przełączenie procesów Ochrona sekcji krytycznej przez blokowanie przerwań Wady metody: 1. Przełączanie wszystkich procesów jest zablokowane. 2. System nie reaguje na zdarzenia zewnętrzne co może spowodować utratę danych. 3. Skuteczne w maszynach jednoprocesorowych. Zastosowanie metody: Wewnątrz systemu operacyjnego do ochrony wewnętrznych sekcji krytycznych. 19

21 Metoda zmiennej blokującej (nieprawidłowa) Metoda polega na użyciu zmiennej o nazwie lock. Gdy zmienna lock = 0 sekcja jest wolna, gdy lock sekcja jest zajęta. Proces przy wejściu testuje wartość tej zmiennej. Gdy wynosi ona 1 to czeka, gdy zmieni się na 0 wchodzi do sekcji ustawiając wartość zmiennej lock na 1. Metoda jest niepoprawna, gdyż operacja testowania wartości zmiennej lock i ustawiania jej na 1 może być przerwana (nie jest niepodzielna). Dodatkową wadą metody jest angażowanie procesora w procedurze aktywnego czekania Systemowe metody wzajemnego wykluczania Wirujące blokady Wykorzystuje sprzętowe wsparcie w postaci instrukcji sprawdź i przypisz oraz zamień. Stosuje się je do synchronizacji wątków ze względu na mały narzut operacji systemowych Blokowanie przerwań Do ochrony wewnętrznych sekcji krytycznych systemu operacyjnego Sprzętowa ochrona sekcji krytycznej Wiele mikroprocesorów zawiera instrukcje wspierające sprzętowo wzajemne wykluczanie. Są to instrukcje typu: 1. Sprawdź i Przypisz - ang. TAS - Test And Set 2. Porównaj i zamień - ang. CAS - Compare And Swap 3. Zamień - ang. EXCH - Exchange Pozwalają one wykonać kilka operacji w sposób nieprzerywalny. Listing 1 : Instrukcja CAS int cas ( int *word, int test_value, int new_value ){ int old_ value ; atomic { old_ value = * word ; if ( * word == test_ value ) * word = new_value ; } return ( old_ value ); // Czemu kurwa wymagasz jak nie ma o tym wzmianki w pdfach. } 11 Semafory Semafor - jest obiektem abstrakcyjnym służącym do kontrolowania dostępu od ograniczonego zasobu. Semafory są szczególnie przydatne w środowisku gdzie wiele procesów lub wątków komunikuje się przez wspólną pamięć. 20

22 11.1 Ochrona sekcji krytycznej 1. Tworzymy semafor za pomocą funkcji sem init(), której pierwszym parametrem jest wskaźnik na semafor (zmienna typu semaphore), a drugim początkowa wartość semafora. 2. Wywołujemy sem wait(). Funkcja ta dekrementuje wartość semafora jeśli jest on dodatni, a jeśli jest równy 0 to blokuje proces bieżący, który zostanie odblokowany wtedy, gdy inny proces wywoła na tym samym semaforze sem post(). 3. Wywołujemy kod sekcji krytycznej. 4. Wywołujemy sem post(), który albo odblokowuje inny proces oczekujący na tym semaforze albo inkrementuje wartość semafora Semafory nienazwane i nazwane POSIX 1. Semafory nienazwane - dostęp do semafora nienazwanego następuje po adresie semafora. Stąd nazwa semafor nienazwany. 2. Semafory nazwane - identyfikowane są w procesach poprzez ich nazwę. Na semaforze nazwanym operuje się tak samo jak na semaforze nienazwanym z wyjątkiem funkcji otwarcia i zamknięcia semafora. Semafory nienazwane nadają się do synchronizacji wątków w obrębie jednego procesu. Dostęp do semafora nienazwanego następuje poprzez jego adres. Może on być także użyty do synchronizacji procesów o ile jest umieszczony w pamięci dzielonej. Dostęp do semaforów nazwanych następuje poprzez ich nazwę. Ten typ semaforów bardziej nadaje się do synchronizacji procesów niż wątków. Semafory nienazwane działają szybciej niż nazwane Funkcje sem open Funkcji używa się w celu użycia semafora nazwanego: sem t *sem open(const char *sem name, int oflags, [int mode, int value]) sem name - nazwa semafora, powinna zaczynać się od znaku / oflags - flagi trybu tworzenia i otwarcia: O RDONLY, O RDWR, O WRONLY. Gdy semafor jest tworzony należy użyć flagi O CREAT mode - prawa dostępu do semafora - takie jak do plików. Parametr jest opcjonalny. value - początkowa wartość semafora. Parametr jest opcjonalny. Funkcja zwraca identyfikator semafora. Semafor widoczny jest w katalogu /dev/sem. Funkcja tworzy semafor, gdy nie był on wcześniej utworzony i otwiera go. 21

23 sem init Przed użyciem semafor powinien być zainicjowany. int sem init(sem t *sem, int pshared, unsigned value) sem - identyfikator semafora (wskaźnik na strukturę w pamięci) pshared - gdy wartość nie jest zerem semafor może być umieszczony w pamięci dzielonej i dostępny w wielu procesorach value - początkowa wartość procesora Funkcja zwraca 0 gdy sukces, -1 gdy błąd sem wait Czekanie na semaforze. int sem wait(sem t *sem) sem - identyfikator semafora Gdy licznik semafora jest nieujemny funkcja zmniejsza go o 1. W przeciwnym wypadku proces bieżący jest zawieszany. Zawieszony proces może być odblokowany przez procedurę sem post wykonywaną w innym procesie lub sygnał. Funkcja zwraca 0 gdy sukces, -1 gdy błąd sem timedwait Ograniczone czasowo czekanie w semaforze, funkcja ta jest wersją operacji sem wait. int sem timedwait(sem t *sem, struc timespec timeout) sem - identyfikator semafora timeout - specyfikacja przeterminowania - czas absolutny Gdy licznik semafora jest nieujemny funkcja zmniejsza go o 1. W przeciwnym wypadku proces bieżący jest zawieszany. Zawieszony proces może być odblokowany przez procedurę sem post wykonywaną w innym procesie lub sygnał. Funkcja zwraca 0 gdy sukces, -1 gdy błąd. Gdy wystąpił timeout kod błędu errno wynosi ETIMEDOUT sem post Sygnalizacja na semaforze. int sem post(sem t *sem) sem - identyfikator semafora Jeśli jakikolwiek proces jest zablokowany na tym semaforze przez wywołanie funkcji sem wait zostanie on odblokowany. Gdy brak procesów zablokowanych licznik semafora zwiększany jest o 1. Funkcja zwraca 0 gdy sukces, -1 gdy błąd. 22

24 12 Monitory Monitor jest strukturalnym narzędziem synchronizacji. Zmienne i procedury, które na nich operują są zebrane w jednym module. Dostęp do zmiennych monitora jest możliwy tylko i wyłącznie za pomocą procedur monitora. Tylko jeden proces może w danej chwili wywoływać procedury monitora. Każdy inny proces chcący wywołać procedurę monitora zostanie zablokowany, aż pierwszy się nie skończy. Można wstrzymywać i wznawiać procedury monitora za pomocą zmiennych warunkowych, na których można wykonywać operacji wait() i signal() Zastosowanie wygodniejsze rozwiązanie problemu sekcji krytycznej niż semafory, ze względu na ich strukturalny charakter monitory udostępniają kolejki procesów, które mogą być używane tylko wewnątrz procesorów (FIFO) 12.2 Oczekiwanie wewnątrz monitora W trakcie procedury monitora można wywołać wait(), po czym obecny proces zostanie wstrzymany i wrzucony na koniec kolejki procesów oczekujących na mieszanie w monitorze lub jakiejś kolejki uprzywilejowanej (zależy od implementacji), a dostęp do monitora zostaje przekazany innemu procesowi. Ma to sens w przypadku, kiedy wykonujemy jakąś operację na monitorze, ale okazuje się, że musimy czekać na coś jeszcze innego. Wtedy zamiast blokować inne procesy czekające na dostęp monitora i bezczynnie czekać, możemy wpuścić kogoś samemu czekając Zmienne warunkowe W zmiennych warunkowych bez blokowania operacja powiadom nie powoduje opuszczenia monitora. Zamiast tego wątek oczekujący jest przenoszony do kolejki e, aby zaczekać, aż wątek powiadamiający zakończy swoje zadanie. Kolejka s jest niepotrzebna. Czasami dodaje się dodatkową operację powiadom wszystkie, która przenosi wszystkie oczekujące wątki do e Funkcje wait(c) Wstrzymywanie procesu bieżącego wykonującego procedurę monitora i wstawienie go na koniec kolejki związanej ze zmienną warunkową c. Jeżeli jakieś procesy czekają na wejście do monitora to jeden z nich będzie wpuszczony. 23

25 signal(c) Odblokowanie jednego z procesów czekających na zmiennej warunkowej c. Gdy brak czekających procesów operacja nie daje efektów. Operacja signal nie posiada licznika noempty(c) Funkcja zwraca true gdy kolejka c jest niepusta, false gdy jest pusta. Jeżeli nie jest to ostatnia instrukcja monitora to proces wykonujący tę operację jest wstrzymywany do chwili gdy wznowiony przezeń proces zwolni monitor. Wstrzymany tak proces może przebywać w: wejściowej kolejce procesów oczekujących na wejście do monitora kolejce uprzywilejowanej public final void notify() Metoda powoduje odblokowanie jednego z wątków zablokowanych na monitorze pewnego obiektu przez wait(). Który z czekających wątków będzie odblokowany nie jest w definicji metody określone. Odblokowany wątek nie będzie natychmiast wykonywany - musi on jeszcze zaczekać aż zwolniona będzie przez bieżący wątek blokada monitora. Odblokowany wątek będzie konkurował z innymi o nabycie blokady monitora. Wątek staje się właścicielem monitora obiektu, gdy: wykona synchronizowaną metodę instancji tego obiektu wykona synchronizowane wyrażenia tego obiektu Gdy wątek nie jest w posiadaniu monitora obiektu, generowany jest wyjątek Illegal- MonitorStateException public final void notifyall() Metoda powoduje odblokowanie wszystkich wątków zablokowanych na monitorze pewnego obiektu poprzez uprzednie wykonanie wait(). Wątki będą jednak czekały aż do chwili gdy wątek bieżący zwolni blokady monitora. Odblokowane wątki będą konkurowały o nabycie blokady monitora. Metoda notify() i notifyall() może być wykonana tylko przez wątek, który jest właścicielem monitora obiektu. 13 Wątki 13.1 Pojęcie wątku i zasoby Pojęcie wątku Wątek - elementarna jednostka szeregowania korzystająca z zasobów procesu. Wątki wykonywane w ramach jednego procesu dzielą jego przestrzeń adresową i inne zasoby procesu. W ramach jednego procesu może się wykonywać wiele wątków. 24

26 Właściwości wątku Koszt utworzenia i przełączania wątków jest mniejszy niż procesu. Dane statystyczne procesu są dla wątków działających w ramach jednego procesu wzajemnie widoczne. Wykonanie każdego wątku przebiega sekwencyjnie, każdy wątek ma swój licznik rozkazów. Wątki mogą być wykonywane na oddzielnych procesorach co umożliwia przyspieszenie obliczeń. Konieczna jest synchronizacja dostępu do wspólnych danych, z których korzystają wątki Zasoby wątku Wątek dzieli ze swym procesem macierzystym następujące zasoby: Dane statystyczne (segment danych) Deskryptory otwartych plików, blokady plików Maskę tworzenia plików (umask) Środowisko Katalog macierzysty i główny Limity zasobów (setrlimit) Timety Sesję, użytkownika, grupę, terminal sterujący Zasoby własne wątku: Identyfikator wątku (thread ID) Maska sygnałów Zmienna errno Priorytet i strategię szeregowania Atrybuty i zasoby własne wątku: 1. Identyfikator wątku TID (ang. Thread Identifier - każdy wątek ma unikalny w ramach procesu identyfikator. Jest to liczba całkowita. Pierwszy wątek ma TID 1, następny 2 itd. 2. Zestaw rejestrów (ang. Register set) - każdy wątek posiada własny obszar pamięci w którym pamiętany jest zestaw rejestrów procesora (tak zwany kontekst procesora). Gdy wątek jest wywłaszczany lub blokowany w obszarze tym pamiętane są rejestry procesora. Gdy wątek będzie wznowiony obszar ten jest kopiowany do rejestrów procesora. 25

27 3. Stos (ang. Stack) - każdy wątek ma swój własny stos umieszczony w przestrzeni adresowej zawierającego go procesu. Na stosie tym pamiętane są zmienne lokalne wątku. 4. Maska sygnałów (ang. Signal mask) - każdy wątek ma swoją własną maskę sygnałów. Maska sygnałów specyfikuje, które sygnały mają być obsługiwane, a które blokowane. Początkowa maska jest dziedziczona z procesu macierzystego. 5. Obszar TLS wątku (ang. Thread Local Storage) - każdy wątek ma pewien obszar pamięci przeznaczony na utrzymanie różnych danych administracyjnych takich jak TID, PID, początek stosu, kod ewentualnego errno i inne dane. Obszar TLS jest odpowiednikiem deskryptora procesu. 6. Procedura zakończenia (ang. Cancellation Handler - gdy wątek kończy się wykonywana jest procedura zakończenia w ramach której zwalniane są zasoby wątku Tworzenie wątku i synchronizacja Tworzenie wątku Nowy wątek tworzy się przy pomocy funkcji pthread create. Funkcja ta tworzy wątek, którego kod znajduje się w funkcji jako argument func. Wątek jest uruchamiany z parametrem arg, a informacja o nim jest umieszczana w strukturze thread Synchronizacja W bibliotece pthread.h do zapewnienia wyłączności dostępu do danych stosuje się mechanizm mutex. Nazwa ta pochodzi od słów Mutual exclusion czyli wzajemne wykluczanie Funkcje pthread create int pthread create(pthread t *thread, pthread attr t *attr, void (*func) (void*), void *arg) thread - identyfikator wątku - wartość nadawana przez funkcję attr - atrybuty wątku, gdy NULL przyjęte domyślnie func - procedura zawierająca kod wątku arg - argument przekazywany do wątku Funkcja zwraca 0 gdy sukces, -1 gdy błąd. 26

28 pthread exit Jawne zakończenie wątku następuje poprzez wywołanie funkcji: pthread exit(void *status) status - kod powrotu(będący wskaźnikiem) przekazywany jako status funkcji: pthread join(pthread t *thread, void *status) Zmienna wskazywanej w funkcji pthread exit nie może być umieszczona w pamięci lokalnej wątku, gdyż po jego zakończeniu obszar ten jest zwalniany i wartość zmiennej jest nieokreślona. Możliwe są dwa sposoby postępowania z kończonymi wątkami: 1. Z chwilą zakończeni się wątku zwalniane są wszystkie jego zasoby. 2. Zasoby zwalniane są z chwilą dołączenia wątku bieżącego do innego wątku (wykonującego funkcję pthread join). Postępowanie to uzależnione jest od ustalenia atrybutu PTHREAD CREATE JOINABLE, który ustalany jest podczas tworzenia wątku. 1. Gdy atrybut ten nie jest ustawiony, wątek zwalnia swe zasoby zaraz po zakończeniu. 2. Gdy atrybut jest ustawiony, wątek zwalnia zasoby po dołączeniu do innego wątku pthread join Proces bieżący może czekać na zakończenie wątku poprzez wywołanie funkcji: pthread join(pthread t *thread, void *status) thread - identyfikator wątku - wartość nadawana przez funkcję status - kod powrotu zwracany przez zakończony wątek Gdy wskazany jako parametr wątek nie zakończył się jeszcze, wątek bieżący jest wstrzymywany. Funkcja zwraca 0 gdy sukces, -1 gdy błąd mutex init Przed użyciem muteks musi być zainicjowany. Inicjacja następuje poprzez wykonanie funkcji: int pthread mutex init(pthread mutex t *mutex, pthread mutexattr t *attr) mutex - zadeklarowana wcześniej zmienna typu pthread mutex t attr - atrybuty muteksu, gdy attr jest równe NULL przyjęte będą wartości domyślne Funkcja zwraca 0 gdy sukces, -1 gdy błąd. Zainicjowany muteks pozostaje w stanie odblokowania. 27

29 mutex lock Przed dostępem do zasobu należy zapewnić sobie wyłączność w korzystaniu z tego zasobu. W tym celu wątek wykonuje funkcję: int pthread mutex lock(pthread mutex t *mutex) mutex - zadeklarowana wcześniej zmienna typu pthread mutex t Działanie funkcji zależy od stanu w jakim znajduje się muteks. 1. Gdy muteks jest wolny, następuje jego zablokowanie. 2. Gdy muteks jest zajęty, próba jego powtórnego zajęcia powoduje zablokowanie się wątku, który tę próbę podejmuje mutex unlock Użyty i zablokowany wcześniej zasób powinien być zwolniony. Zwolnienie zasobu odbywa się poprzez wywołanie funkcji: int pthread mutex unlock(pthread mutex t *mutex) mutex - zadeklarowana wcześniej zmienna typu pthread mutex t Działanie tej funkcji zależy od tego, czy inne wątki czekają zablokowane na muteksie. 1. Brak wątków zablokowanych na muteksie - stan muteksu zostaje zmieniony na wolny. 2. Są wątki zablokowane na muteksie - jeden z czekających wątków zostaje odblokowany Zmienne warunkowe Zmienne warunkowe są narzędziem do blokowania wątku wewnątrz sekcji krytyczne aż do momentu gdy pewien warunek zostanie spełniony. Warunek ten może być dowolny i niezależny od zmiennej warunkowej. Zmienna warunkowa musi być użyta w połączeniu z muteksem o ile konstrukcja ma zapewnić własności monitora cond init Inicjacja zmiennej warunkowej. int pthread cond init(pthread cond t *zw, pthread condattr t attr) zw - zadeklarowana wcześniej zmienna typu pthread cond t attr - atrybuty zmiennej warunkowej, gdy attr jest równe NULL przyjęte będą wartości domyślne cond wait Zawieszenie wątku w oczekiwaniu na sygnalizację. int pthread cond wait(pthread cond t *zw, pthread mutex t mutex) zw - zadeklarowana wcześniej zmienna typu pthread cond t mutex - zadeklarowana wcześniej zmienna typu pthread mutex t 28

30 Funkcja powoduje zawieszenie bieżącego wątku w kolejce związanej ze zmienną warunkową zw. Jednocześnie blokada mutex zostaje zwolniona. Obie operacje są wykonywane w sposób atomowy. Gdy inny wątek wykona operację pthread cond signal(&zw) zablokowany wątek zostanie odblokowany, a blokada mutex zwolniona cond signal Wznowienie zawieszonego wątku. int pthread cond signal(pthread cond t *zw) zw - zadeklarowana wcześniej zmienna typu pthread cond t Jeden z wątków zablokowanych na zmiennej warunkowej zw zostanie zwolniony cond broadcast Wznowienie wszystkich zawieszonych wątków. int pthread cond broadcast(pthread cond t *zw) zw - zadeklarowana wcześniej zmienna typu pthread cond t Wszystkie wątki zablokowane na zmiennej warunkowej zw zostaną zwolnione Bariery Bariera jest narzędziem do synchronizacji procesów działających w ramach grup. Wywołanie funkcji pthread barrier wait() powoduje zablokowanie zadania bieżącego do chwili gdy zadana liczba wątków nie wywoła tej procedury Blokady czytelników i pisarzy Blokady typu wzajemne wykluczanie są zbyt restrykcyjne co prowadzi do ograniczenia równoległości i spadku efektywności aplikacji. Można je osłabić wiedząc czy przeprowadzana jest operacja odczytu czy zapisu Zasada działania blokad czytelników i pisarzy Odczyt może być wykonywany współbieżnie do innych odczytów. Zapis musi być wykonywany w trybie wyłącznym względem innych zapisów lub odczytów Stan blokady Wolna Zajęta do odczytu być może przez wiele wątków czytających Zajęta do zapisu 29

31 13.7 Wirujące blokady Wirujące blokady są środkiem zabezpieczenia sekcji krytycznej. Wykorzystują jednak czekanie aktywne zamiast przełączenia kontekstu wątku jak to się dzieje w muteksach. Blokada może być w dwóch stanach: Wolna Zajęta Inicjacja wirującej blokady int pthread spin init(pthread spinlock t *blokada, int pshared) blokada - identyfikator wirującej blokady pthread spinlock t pshared - PTHREAD PROCESS SHARED - na blokadzie mogą operować wątki należące do różnych procesów PTHREAD PROCESS PRIVATE - na blokadzie mogą operować wątki należące do tego samego procesu 30

32 Funkcja inicjuje zasoby potrzebne wirującej blokadzie. Każdy proces, który może sięgnąć do zmiennej identyfikującej blokadę może jej używać Zajęcie blokady int pthread spin lock(pthread spinlock t *blokada) blokada - identyfikator wirującej blokady pthread spinlock t Działanie funkcji zależy od stanu blokady. Gdy blokada jest wolna następuje jej zajęcie. Gdy blokada jest zajęta wątek wykonujący funkcję pthread spin lock() ulega zablokowaniu do czasu, gdy inny wątek nie zwolni blokady wykonując funkcję pthread spin unlock() Zwolnienie blokady int pthread spin unlock(pthread spinlock t *blokada) blokada - identyfikator wirującej blokady pthread spinlock t Funkcja zwalnia blokadę i zajmowane przez nią zasoby. 14 Interfejs gniazdek Jednolity interfejs API (ang. Application Program Interface) do mechanizmów komunikacji sieciowej. Główna idea gniazdek polega na użyciu do komunikacji (lokalnej i zdalnej) tego samego mechanizmu, co dostępu do plików. Jest to mechanizm oparty o deskryptory plików i funkcje read i write. Termin gniazdko ma dwa znaczenie: 1. Biblioteka + funkcje interfejsowe (API) 2. Końcowy punkt komunikacji Biblioteka gniazdek maskuje mechanizmy transportu sieci. Własności gniazdek: Gniazdo jest identyfikowane przez liczbę całkowitą nazwaną deskryptorem gniazda. Gniazdo można nazwać i wykorzystywać do komunikacji z innymi gniazdami w tej samej domenie komunikacyjnej Domeny Komunikacja odbywa się w pewnej domenie. Od domeny zależy sposób adresowania w sieci. Są trzy podstawowe domeny: domena internetu wersja IPv4 - AF INET domena internetu wersja IPv6 - AF INET6 domena Unixa - AF UNIX 31

4. Procesy pojęcia podstawowe

4. Procesy pojęcia podstawowe 4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa

Bardziej szczegółowo

4. Procesy pojęcia podstawowe

4. Procesy pojęcia podstawowe 4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa

Bardziej szczegółowo

4. Procesy pojęcia podstawowe

4. Procesy pojęcia podstawowe 4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa

Bardziej szczegółowo

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1 Programowanie równoległe i rozproszone Monitory i zmienne warunku Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności Problem producentów i konsumentów: jedna grupa procesów

Bardziej szczegółowo

Komunikacja za pomocą potoków. Tomasz Borzyszkowski

Komunikacja za pomocą potoków. Tomasz Borzyszkowski Komunikacja za pomocą potoków Tomasz Borzyszkowski Wstęp Sygnały, omówione wcześniej, są użyteczne w sytuacjach błędnych lub innych wyjątkowych stanach programu, jednak nie nadają się do przekazywania

Bardziej szczegółowo

1.1 Definicja procesu

1.1 Definicja procesu 1 Procesy pojęcia podstawowe 1 1.1 Definicja procesu Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa

Bardziej szczegółowo

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

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej. Procesy Proces (zwany też zadaniem) jest jednostką aktywną, kontrolowaną przez system operacyjny i związaną z wykonywanym programem. Proces ma przydzielone zasoby typu pamięć (segment kodu, segment danych,

Bardziej szczegółowo

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację. J. Ułasiewicz Programowanie aplikacji współbieżnych 1 11 11.1 abstrakcyjne Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post

Bardziej szczegółowo

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

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów Iwona Kochańska Mechanizm synchronizacji wątków/procesów Wykorzystanie semaforów zapobiega niedozwolonemu wykonaniu

Bardziej szczegółowo

5. Model komunikujących się procesów, komunikaty

5. Model komunikujących się procesów, komunikaty Jędrzej Ułasiewicz str. 1 5. Model komunikujących się procesów, komunikaty Obecnie stosuje się następujące modele przetwarzania: Model procesów i komunikatów Model procesów komunikujących się poprzez pamięć

Bardziej szczegółowo

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację. J. Ułasiewicz Programowanie aplikacji współbieżnych 1 11 Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Bardziej szczegółowo

Kolejki FIFO (łącza nazwane)

Kolejki FIFO (łącza nazwane) Kolejki FIFO (łącza nazwane) Systemy Operacyjne 2 laboratorium Mateusz Hołenko 6 listopada 2011 Plan zajęć 1 Łącza w systemie Linux kolejki FIFO vs. potoki specyfika łączy nazwanych schemat komunikacji

Bardziej szczegółowo

Programowanie współbieżne Wykład 2. Iwona Kochańska

Programowanie współbieżne Wykład 2. Iwona Kochańska Programowanie współbieżne Wykład 2 Iwona Kochańska Miary skalowalności algorytmu równoległego Przyspieszenie Stały rozmiar danych N T(1) - czas obliczeń dla najlepszego algorytmu sekwencyjnego T(p) - czas

Bardziej szczegółowo

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) wiczenie trzecie Temat: Potoki i ł cza nazwane w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Komunikacja z wykorzystaniem

Bardziej szczegółowo

9. Problem wzajemnego wykluczania i sekcji krytycznej

9. Problem wzajemnego wykluczania i sekcji krytycznej J. Ułasiewicz Programowanie aplikacji współbieżnych 1 9. Problem wzajemnego wykluczania i sekcji krytycznej 9.1 Przeplot i współużywalność zasobów Wyróżniamy dwa rodzaje zasobów: 1. Zasoby współużywalne

Bardziej szczegółowo

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików: Pliki W celu wykonania jakiejkolwiek operacji na istniejącym pliku, plik ten musi zostać otwarty, natomiast jeśli plik jeszcze nie istnieje, to musi zostać utworzony. Plik może zostać otwarty w trybie:

Bardziej szczegółowo

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int

Bardziej szczegółowo

1. Kolejki komunikatów POSIX

1. Kolejki komunikatów POSIX Jędrzej Ułasiewicz IIAiR Politechnika Wrocławska 1 1. Kolejki komunikatów POSIX 1.1 Podstawowe własności Kolejki FIFO maja następujące wady: Komunikaty pozbawione struktury Nie można testować stanu kolejki

Bardziej szczegółowo

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

SYSTEMY CZASU RZECZYWISTEGO - VxWorks WZAJEMNE WYKLUCZANIE Wiele metod. Np. wyłączanie przerwań: funkcja() //... Int blokada = intlock(); // Obszar krytyczny, któremu nie możemy przerwać intunlock(blokada); wyłączanie wywłaszczania: funkcja()

Bardziej szczegółowo

Kolejki komunikatów POSIX

Kolejki komunikatów POSIX Jędrzej Ułasiewicz IIAiR Politechnika Wrocławska 1 Kolejki komunikatów POSIX 1 Wstęp Kolejka komunikatów Q posiada następujące własności: - Posiada określoną pojemność N komunikatów (długość bufora komunikatów).

Bardziej szczegółowo

Działanie systemu operacyjnego

Działanie systemu operacyjnego Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej I NIC sieci Pamięć operacyjna Przerwania Przerwania

Bardziej szczegółowo

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

SYSTEMY OPERACYJNE WYKLAD 6 - procesy Wrocław 2007 SYSTEMY OPERACYJNE WYKLAD 6 - procesy Paweł Skrobanek C-3, pok. 323 e-mail: pawel.skrobanek@pwr.wroc.pl www.equus.wroc.pl/studia.html 1 Zasoby: PROCES wykonujący się program ; instancja programu

Bardziej szczegółowo

Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces

Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces Procesy pojęcia podstawowe 1 1.1 Jak kod źródłowy przekształca się w proces W języku wysokiego poziomu tworzy się tak zwany kod źródłowy który po zapisaniu będzie plikiem z programem źródłowym. Plik źródłowy

Bardziej szczegółowo

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować

Bardziej szczegółowo

Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów współbieżnych.

Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów współbieżnych. J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 Podstawowe definicje i pojęcia współbieżności Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów

Bardziej szczegółowo

Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1 Programowanie równoległe i rozproszone W1. Wielowątkowość Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np.

Bardziej szczegółowo

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

Mechanizmy pracy równoległej. Jarosław Kuchta Mechanizmy pracy równoległej Jarosław Kuchta Zagadnienia Algorytmy wzajemnego wykluczania algorytm Dekkera Mechanizmy niskopoziomowe przerwania mechanizmy ochrony pamięci instrukcje specjalne Mechanizmy

Bardziej szczegółowo

Mogą pracować w środowisku: Scentralizowanym -mikrokontroler Rozproszonym sieć sterująca, systemy hierarchiczne. Komunikacja z syst.

Mogą pracować w środowisku: Scentralizowanym -mikrokontroler Rozproszonym sieć sterująca, systemy hierarchiczne. Komunikacja z syst. J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 Podstawowe definicje i pojęcia współbieżności Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów

Bardziej szczegółowo

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1 Przetwarzanie wielowątkowe przetwarzanie współbieżne Krzysztof Banaś Obliczenia równoległe 1 Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np. komputery macierzowe)

Bardziej szczegółowo

Klient-Serwer Komunikacja przy pomocy gniazd

Klient-Serwer Komunikacja przy pomocy gniazd II Klient-Serwer Komunikacja przy pomocy gniazd Gniazda pozwalają na efektywną wymianę danych pomiędzy procesami w systemie rozproszonym. Proces klienta Proces serwera gniazdko gniazdko protokół transportu

Bardziej szczegółowo

Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak

Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak Laboratorium z systemów operacyjnych System plików - funkcje systemowe Anna Wojak 1 Zagadnienia do samodzielnego przygotowania: podstawowe polecenia linux, podstawy programowania w jezyku C, deskryptor

Bardziej szczegółowo

Program jest więc strukturą statyczną zapisaną na jakimś nośniku. Natomiast proces jest wykonującym się programem.

Program jest więc strukturą statyczną zapisaną na jakimś nośniku. Natomiast proces jest wykonującym się programem. J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 Podstawowe definicje i pojęcia współbieżności 1.1 Motywacja Przewiduje się że w dalszej perspektywie głównym motorem wzrostu mocy przetwarzania komputerów

Bardziej szczegółowo

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1 Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie

Bardziej szczegółowo

13. Kolejki komunikatów POSIX

13. Kolejki komunikatów POSIX J. Ułasiewicz Programowanie aplikacji współbieżnych 1 13. POSIX 13.1 Wstęp (mailboxy, bufory) są bardzo popularnym mechanizmem komunikacji międzyprocesowej. Występują w prawie każdym systemie operacyjnym.

Bardziej szczegółowo

Działanie systemu operacyjnego

Działanie systemu operacyjnego Działanie systemu operacyjnego Budowa systemu komputerowego I NIC Jednostka centralna Sterownik dysku Sterownik drukarki Sterownik sieci Szyna systemowa (magistrala danych) Sterownik pamięci operacyjnej

Bardziej szczegółowo

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy) Procesy i shell. Polecenia ps, sleep, exit, jobs, bg, fg, top, kill, bash, tcsh, which, type, whereis, touch. Metaznak & i >>. Dowiązania miękkie i twarde. Proces jest programem, który jest wykonywany

Bardziej szczegółowo

Systemy operacyjne III

Systemy operacyjne III Systemy operacyjne III WYKŁAD 2 Jan Kazimirski 1 Procesy w systemie operacyjnym 2 Proces Współczesne SO w większości są systemami wielozadaniowymi. W tym samym czasie SO obsługuje pewną liczbę zadań procesów

Bardziej szczegółowo

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

Temat zajęć: Tworzenie i obsługa wątków. Temat zajęć: Tworzenie i obsługa wątków. Czas realizacji zajęć: 180 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Tworzenie wątków, przekazywanie parametrów do funkcji wątków i pobieranie

Bardziej szczegółowo

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

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi) Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie drugie (jedne zajęcia) Temat: Procesy i sygnały w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Budowa procesu

Bardziej szczegółowo

Działanie systemu operacyjnego

Działanie systemu operacyjnego Działanie systemu operacyjnego Budowa systemu komputerowego Jednostka centralna Sterownik dysku Sterownik drukarki Sterownik sieci Szyna systemowa (magistrala danych) Sterownik pamięci operacyjnej Pamięć

Bardziej szczegółowo

Procesy, wątki i zasoby

Procesy, wątki i zasoby Procesy, wątki i zasoby Koncepcja procesu i zasobu, Obsługa procesów i zasobów, Cykl zmian stanów procesu i kolejkowanie, Klasyfikacja zasobów, Wątki, Procesy i wątki we współczesnych systemach operacyjnych.

Bardziej szczegółowo

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI plan Cechy, właściwości procesów Multitasking Scheduling Fork czym jest proces? Działającą instancją programu Program jest kolekcją

Bardziej szczegółowo

System operacyjny MACH

System operacyjny MACH Emulacja w systemie MCH System operacyjny MCH 4. SD Systemu V HP/UX MS-DOS VMS inne Mikrojądro Zbigniew Suski Zbigniew Suski Podstawowe cele projektu MCH! Dostarczenie podstawy do budowy innych systemów

Bardziej szczegółowo

Monitory. Jarosław Kuchta

Monitory. Jarosław Kuchta Monitory Jarosław Kuchta Co to jest monitor Monitor to zebrane w jednej konstrukcji programowej zmienne i operacje na tych zmiennych. Część tych operacji jest udostępnianych na zewnątrz monitora. Tylko

Bardziej szczegółowo

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX) (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX) W informatyce występują ściśle obok siebie dwa pojęcia: sprzęt (ang. hardware) i oprogramowanie

Bardziej szczegółowo

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,

Bardziej szczegółowo

Prezentacja systemu RTLinux

Prezentacja systemu RTLinux Prezentacja systemu RTLinux Podstawowe założenia RTLinux jest system o twardych ograniczeniach czasowych (hard real-time). Inspiracją dla twórców RTLinux a była architektura systemu MERT. W zamierzeniach

Bardziej szczegółowo

Działanie systemu operacyjnego

Działanie systemu operacyjnego Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej sieci Pamięć operacyjna Przerwania Przerwania Przerwanie

Bardziej szczegółowo

Współbieżność w środowisku Java

Współbieżność w środowisku Java Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych

Bardziej szczegółowo

INFORMATYKA Studia Niestacjonarne Elektrotechnika

INFORMATYKA Studia Niestacjonarne Elektrotechnika INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl

Bardziej szczegółowo

Systemy operacyjne. Zajęcia 11. Monitory

Systemy operacyjne. Zajęcia 11. Monitory Systemy operacyjne. Zajęcia 11. Monitory 1. Monitor to mechanizm zamykający całą pamięć wspólną i synchronizację w pojedynczym module. 2. Monitor posiada całą pamięć wspólną jako część 'prywatną': dostępu

Bardziej szczegółowo

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1 Wątki 1. Wątki - wprowadzenie Wątkiem nazywamy sekwencyjny przepływ sterowania w procesie, który wykonuje dany program np. odczytywanie i zapisywanie plików Program Javy jest wykonywany w obrębie jednego

Bardziej szczegółowo

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

Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011 Procesy Systemy Operacyjne 2 laboratorium Mateusz Hołenko 9 października 2011 Plan zajęć 1 Procesy w systemie Linux proces procesy macierzyste i potomne procesy zombie i sieroty 2 Funkcje systemowe pobieranie

Bardziej szczegółowo

Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Wykład 3 Procesy i wątki Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Pojęcie procesu Program = plik wykonywalny na dysku Proces = uruchomiony i wykonywany program w pamięci

Bardziej szczegółowo

Procesy i wątki. Blok kontrolny procesu. Proces. Proces - elementy. Stan procesu

Procesy i wątki. Blok kontrolny procesu. Proces. Proces - elementy. Stan procesu Proces Procesy i wątki Proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny ( w dowolnej chwili na zamówienie naszego procesu może być wykonany co najwyżej jeden rozkaz

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

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

Systemy Operacyjne 2: Wątki pthreads. dr inż. Arkadiusz Chrobot Systemy Operacyjne 2: Wątki pthreads dr inż. Arkadiusz Chrobot 18 kwietnia 2013 1. Wprowadzenie Wątki podobnie jak procesy umożliwiają współbieżną realizację czynności w wykonywanym programie. Domyślnie

Bardziej szczegółowo

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

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux. Kod szkolenia: Tytuł szkolenia: PS/LINUX Programowanie systemowe w Linux Dni: 5 Opis: Adresaci szkolenia Szkolenie adresowane jest do programistów tworzących aplikacje w systemie Linux, którzy chcą poznać

Bardziej szczegółowo

Proces y i y w i ąt ą ki

Proces y i y w i ąt ą ki Procesy i wątki Proces Proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny ( w dowolnej chwili na zamówienie naszego procesu może być wykonany co najwyżej jeden rozkaz

Bardziej szczegółowo

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists() Paweł Gmys PHP strona 1 Lekcja 10 Uprawnienia Aby skrypt PHP mógł odwołać się do pliku, musi mieć odpowiednie uprawnienia. Szczegóły są zależne od serwera. Najczęściej chyba skrypt ma uprawnienia takie,

Bardziej szczegółowo

Wprowadzenie do programowania współbieżnego

Wprowadzenie do programowania współbieżnego Wprowadzenie do programowania współbieżnego Marcin Engel Instytut Informatyki Uniwersytet Warszawski Zamiast wstępu... Zamiast wstępu... Możliwość wykonywania wielu akcji jednocześnie może ułatwić tworzenie

Bardziej szczegółowo

Systemy operacyjne III

Systemy operacyjne III Systemy operacyjne III WYKŁAD 3 Jan Kazimirski 1 Współbieżność 2 Współbieżność Wielozadaniowość - zarządzanie wieloma procesami w ramach jednego CPU Wieloprocesorowość - zarządzanie wieloma zadaniami w

Bardziej szczegółowo

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych B.1. Dostęp do urządzeń komunikacyjnych Sterowniki urządzeń zewnętrznych widziane są przez procesor jako zestawy rejestrów

Bardziej szczegółowo

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

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p. Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,

Bardziej szczegółowo

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku System plików 1. Pojęcie pliku 2. Typy i struktury plików 3. etody dostępu do plików 4. Katalogi 5. Budowa systemu plików Pojęcie pliku (ang( ang. file)! Plik jest abstrakcyjnym obrazem informacji gromadzonej

Bardziej szczegółowo

4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane

4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane Jędrzej Ułasiewicz Łącza nienazwane, nazwane, funkcja select 1 4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane Łącza nienazwane (ang. Unnamed Pipes) i nazwane (ang. Named Pipes) - jedna

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Wykład 10 - boost Thread. 8 czerwca 2007 Równoległość bardzo wolna reakcja człowieka wolne urządzenia wejścia - wyjścia (np. drukarki) bardzo szybkie procesory można przeprowadzać obliczenia podczas obsługi

Bardziej szczegółowo

Wstęp do programowania 2

Wstęp do programowania 2 Wstęp do programowania 2 wykład 10 Zadania Agata Półrola Wydział Matematyki UŁ 2005/2006 http://www.math.uni.lodz.pl/~polrola Współbieżność dotychczasowe programy wykonywały akcje sekwencyjnie Ada umożliwia

Bardziej szczegółowo

Wielozadaniowość w systemie Microsoft Windows

Wielozadaniowość w systemie Microsoft Windows Wielozadaniowość w systemie Microsoft Windows mgr inż. Tomasz Jaworski tjaworski@kis.p.lodz.pl http://tjaworski.kis.p.lodz.pl/ Idea wielozadaniowości Proces główny Wątki Algorytm szeregowania ustala kolejność

Bardziej szczegółowo

System plików warstwa logiczna

System plików warstwa logiczna Dariusz Wawrzyniak Pojęcie u Plik jest abstrakcyjnym obrazem informacji gromadzonej i udostępnianej przez system komputerowy. Plik jest podstawową jednostką logiczną magazynowania informacji w systemie

Bardziej szczegółowo

Mikroprocesor Operacje wejścia / wyjścia

Mikroprocesor Operacje wejścia / wyjścia Definicja Mikroprocesor Operacje wejścia / wyjścia Opracował: Andrzej Nowak Bibliografia: Urządzenia techniki komputerowej, K. Wojtuszkiewicz Operacjami wejścia/wyjścia nazywamy całokształt działań potrzebnych

Bardziej szczegółowo

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1 Procesy i wątki Krzysztof Banaś Obliczenia równoległe 1 Procesy i wątki Proces: ciąg rozkazów (wątek główny) i ewentualnie inne wątki stos (wątku głównego) przestrzeń adresowa dodatkowe elementy tworzące

Bardziej szczegółowo

Model procesu w systemie Linux. Tomasz Borzyszkowski

Model procesu w systemie Linux. Tomasz Borzyszkowski Model procesu w systemie Linux Tomasz Borzyszkowski Definicja procesu klasyka Definicja [M.Bach WNT95] Proces jest wykonaniem programu i składa się ze zbiorowości bajtów, które CPU interpretuje jako instrukcje

Bardziej szczegółowo

4.2 Sposób korzystania z l acza

4.2 Sposób korzystania z l acza 4.2 Sposób korzystania z l acza 31 Opis programu: Program procesu potomnego (linie 16 19) jest taki sam, jak w przyk ladzie na listingu 3. W procesie macierzystym nastepuje z kolei przekierowanie standardowego

Bardziej szczegółowo

Biblioteka standardowa - operacje wejścia/wyjścia

Biblioteka standardowa - operacje wejścia/wyjścia Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline

Bardziej szczegółowo

Budowa systemów komputerowych

Budowa systemów komputerowych Budowa systemów komputerowych Krzysztof Patan Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski k.patan@issi.uz.zgora.pl Współczesny system komputerowy System komputerowy składa

Bardziej szczegółowo

2.1 Pojęcie wątku... 13 2.2 Modele wielowątkowości... 15 2.3 Wybrane zagadnienia wielowątkowości... 16 2.4 Wątki POSIX... 18

2.1 Pojęcie wątku... 13 2.2 Modele wielowątkowości... 15 2.3 Wybrane zagadnienia wielowątkowości... 16 2.4 Wątki POSIX... 18 Spis treści Spis treści 1 Procesy 1 1.1 Definicja procesu............................................. 1 1.2 Operacje na procesach.......................................... 3 1.3 Planowanie procesów...........................................

Bardziej szczegółowo

Synchronizacja procesów i wątków

Synchronizacja procesów i wątków SOE Systemy Operacyjne Wykład 12 Synchronizacja procesów i wątków dr inŝ. Andrzej Wielgus Instytut Mikroelektroniki i Optoelektroniki WEiTI PW Problem sekcji krytycznej Podstawowy problem synchronizacji

Bardziej szczegółowo

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

Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne Synchronizacja procesów Przeplot Przeplot wątków współbieżnych Cel i metody synchronizacji procesów Problem sekcji krytycznej Semafory Blokady 3.1 3.3 Wątki współbieżne Cel i metody synchronizacji procesów

Bardziej szczegółowo

9. Problem wzajemnego wykluczania i sekcji krytycznej

9. Problem wzajemnego wykluczania i sekcji krytycznej J. Ułasiewicz Programowanie aplikacji współbieżnych 1 9. Problem wzajemnego wykluczania i sekcji krytycznej 9.1 Przeplot i współużywalność zasobów Aplikacja składa się z wielu procesów P1,P2,...,Pn operujących

Bardziej szczegółowo

2. Zarządzanie procesami

2. Zarządzanie procesami J. Ułasiewicz Komputery i systemy równoległe 1 2. Zarządzanie procesami 2.1 Funkcje zarządzania procesami Administrowanie procesami obejmuje następujące czynności: Tworzenie procesu. Testowanie atrybutów

Bardziej szczegółowo

Systemy operacyjne System sieciowy UNIX-a

Systemy operacyjne System sieciowy UNIX-a Systemy operacyjne 29.10.2010 System sieciowy UNIX-a System sieciowy UNIX-a używa potoku umożliwiającego przepływ strumienia bajtów między dwoma procesami i przepływ gniazdek (sockets) dla procesów powiązanych

Bardziej szczegółowo

Instytut Teleinformatyki

Instytut Teleinformatyki Instytut Teleinformatyki Wydział Inżynierii Elektrycznej i Komputerowej Politechnika Krakowska programowanie usług sieciowych Dziedzina Unix laboratorium: 06 Kraków, 2014 06. Programowanie Usług Sieciowych

Bardziej szczegółowo

Futex (Fast Userspace Mutex) Łukasz Białek

Futex (Fast Userspace Mutex) Łukasz Białek Futex (Fast Userspace Mutex) Łukasz Białek Futex informacje podstawowe Stworzony w 2002 roku przez Hubertusa Franke, Matthew Kirkwooda, Ingo Molnára i Rustiego Russella. Jest mechanizmem w Linuxie, który

Bardziej szczegółowo

Programowanie Równoległe i Rozproszone

Programowanie Równoległe i Rozproszone Programowanie Równoległe i Rozproszone Lucjan Stapp Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska (l.stapp@mini.pw.edu.pl) 1/30 PRiR MONITOR klasa z następującymi właściwościami: wszystkie

Bardziej szczegółowo

Architektura systemu komputerowego. Działanie systemu komputerowego. Przerwania. Obsługa przerwań (Interrupt Handling)

Architektura systemu komputerowego. Działanie systemu komputerowego. Przerwania. Obsługa przerwań (Interrupt Handling) Struktury systemów komputerowych Architektura systemu komputerowego Działanie systemu komputerowego Struktura we/wy Struktura pamięci Hierarchia pamięci Ochrona sprzętowa Architektura 2.1 2.2 Działanie

Bardziej szczegółowo

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

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Aplikacja Sieciowa wątki po stronie klienta

Aplikacja Sieciowa wątki po stronie klienta Aplikacja Sieciowa wątki po stronie klienta Na ostatnich zajęciach zajmowaliśmy się komunikacją pomiędzy klientem a serwerem. Wynikiem naszej pracy był program klienta, który za pomocą serwera mógł się

Bardziej szczegółowo

Zadanie 2: transakcyjny protokół SKJ (2015)

Zadanie 2: transakcyjny protokół SKJ (2015) Zadanie 2: transakcyjny protokół SKJ (2015) 1 Wstęp Zadanie polega na zaprojektowaniu niezawodnego protokołu transakcyjnego bazującego na protokole UDP. Protokół ten ma być realizowany przez klasy implementujące

Bardziej szczegółowo

programowanie współbieżne

programowanie współbieżne programowanie współbieżne hahahaha rozwalilo mnie to Podstawowe pojęcia współbieżności Bezpieczeństwo Żywotność Blokada Zagłodzenie Uczciwość Skutki stosowania współbieżności Wstęp do procesów Stany procesów

Bardziej szczegółowo

1 Podstawowe definicje i pojęcia współbieżności

1 Podstawowe definicje i pojęcia współbieżności J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 Podstawowe definicje i pojęcia współbieżności 1.1 Dlaczego zajmujemy się współbieżnością? W ciągu ostatnich 30 lat wzrost mocy przetwarzania osiągano

Bardziej szczegółowo

Procesy i wątki. Blok kontrolny procesu. Proces. Proces - elementy. Stan procesu. Blok kontrolny procesu

Procesy i wątki. Blok kontrolny procesu. Proces. Proces - elementy. Stan procesu. Blok kontrolny procesu Proces Procesy i wątki Proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny ( w dowolnej chwili na zamówienie naszego procesu może być wykonany co najwyżej jeden rozkaz

Bardziej szczegółowo

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg.

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg. Wady mechanizmów niskopoziomowych Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg. Dekkera zależny od liczby synchronizowanych

Bardziej szczegółowo

Stan procesu. gotowy - czeka na przydział procesora, zakończony - zakończył działanie.

Stan procesu. gotowy - czeka na przydział procesora, zakończony - zakończył działanie. Procesy i wątki Proces Proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny ( w dowolnej chwili na zamówienie naszego procesu może być wykonany co najwyżej jeden rozkaz

Bardziej szczegółowo

Programowanie wielowątkowe. Tomasz Borzyszkowski

Programowanie wielowątkowe. Tomasz Borzyszkowski Programowanie wielowątkowe Tomasz Borzyszkowski Wątki a procesy Jako jeden z niewielu języków programowania Java udostępnia użytkownikowi mechanizmy wspierające programowanie wielowątkowe. Program wielowątkowy

Bardziej szczegółowo

Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane 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 Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot 15 października 2016 Wstęp W tej instrukcji zawarte są informacje na temat jednych z podstawowych

Bardziej szczegółowo

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Uruchomienie programu powoduje stworzenie nowego procesu przez system operacyjny. Proces wykonywany program wraz

Bardziej szczegółowo

1. Kolejki komunikatów POSIX

1. Kolejki komunikatów POSIX Jędrzej Ułasiewicz IIAiR Politechnika Wrocławska 1 1. Kolejki komunikatów POSIX 1.1 Podstawowe własności Kolejki FIFO maja następujące wady: Komunikaty pozbawione struktury Nie można testować stanu kolejki

Bardziej szczegółowo

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

w odróżnieniu od procesów współdzielą przestrzeń adresową mogą komunikować się za pomocą zmiennych globalnych mechanizmy posix Wątki w odróżnieniu od procesów współdzielą przestrzeń adresową należą do tego samego użytkownika są tańsze od procesów: wystarczy pamiętać tylko wartości rejestrów, nie trzeba czyścić

Bardziej szczegółowo

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003 Obliczenia równoległe i rozproszone w JAVIE Michał Kozłowski 30 listopada 2003 Wątki w JAVIE Reprezentacja wątków jako obiektów Uruchamianie i zatrzymywanie wątków Realizacja wątków Ograniczenia Mechanizmy

Bardziej szczegółowo