Procesy. w systemach operacyjnych (quasi)równoleg le wykonywanie wielu być wykonywane naprzemiennie i/lub jednocześnie.

Podobne dokumenty
Procesy. w systemach operacyjnych (quasi)równoleg le wykonywanie wielu być wykonywane naprzemiennie i/lub jednocześnie.

Watki. kod programu za ladowany do pami eci operacyjnej, wraz ze środowiskiem (zbiorem

Procesy. w systemach operacyjnych (quasi)równoleg le wykonywanie wielu być wykonywane naprzemiennie i/lub jednocześnie.

Środowisko procesu Unixowego

4. Procesy pojęcia podstawowe

Funkcje systemu Unix

Procesy wielowatkowe. Watki. Wspólne dane watków. Prywatne dane watków. Programowanie z użyciem watków

4. Procesy pojęcia podstawowe

Unix: programowanie procesów

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

Wieloprogramowy system komputerowy

Wieloprogramowy system komputerowy

Watki. kod programu za ladowany do pami eci operacyjnej, wraz ze środowiskiem (zbiorem

procesami w systemie Unix

Unix: programowanie procesów

z powielaniem wielu struktur danych oraz komunikacja

4. Procesy pojęcia podstawowe

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

przerwany proces móg l zareagować na określone zdarzenie. Można je traktować jako software owe wersje przerwań sprz etowych.

procesami w systemie Unix

procesami w systemie Unix

1.1 Definicja procesu

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

4.2 Sposób korzystania z l acza

Unix: programowanie procesów

Linux: Procesy. Systemy Operacyjne. Mateusz Hołenko. 26 marca 2013

Systemy Operacyjne - Operacje na plikach

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

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

Procesy, wątki i zasoby

pami eć operacyjna przechowuje dane do przetworzenia, tymczasowe dane pomocnicze,

Komunikacja za pomocą potoków. Tomasz Borzyszkowski

Unix: programowanie procesów

Proces y i y w i ąt ą ki

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

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

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

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

w zależności od wartości zmiennej operacja (dodatnia lub ujemna).

Systemy operacyjne III

Wieloprogramowy system komputerowy

Zarządzanie procesami

Laboratorium Procesy w systemach UNIX 3.2 Polecenia związane z procesami

Systemy Operacyjne Ćwiczenia

Obsługa sygnałów. Tomasz Borzyszkowski

Wprowadzenie do programowania współbieżnego

Systemy Operacyjne I: Procesy

Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias

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

Procesy, zasoby i wątki

Procesy, zasoby i wątki

Procesy, zasoby i wątki

Sygnały. 7. Sygnały (2005/2006)

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

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

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

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

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

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

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

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

Ghost in the machine

Prezentacja systemu RTLinux

projektowanie systemu

Laboratorium systemów operacyjnych ćwiczenie nr 3. [ilość modułów: 1] Temat zajęć: Procesy w systemie operacyjnym

SYSTEMY OPERACYJNE WYKLAD 6 - wątki

System operacyjny MACH

Działanie systemu operacyjnego

Wstęp do programowania 2

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

2.1 Pojęcie wątku Modele wielowątkowości Wybrane zagadnienia wielowątkowości Wątki POSIX... 18

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

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

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Zaawansowane programowanie w C++

Wykorzystanie pami eci operacyjnej przez system

by lo pozostawione procesom lub programom. W nowoczesnych i wi ekszych systemach

Kolejki FIFO (łącza nazwane)

Programowanie współbieżne i rozproszone

Kurs programowania. Wykład 8. Wojciech Macyna

Działanie systemu operacyjnego

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

Działanie systemu operacyjnego

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

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

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

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Działanie systemu operacyjnego

2. Informacje o mechanizmie limitów

Paradygmaty programowania. Paradygmaty programowania

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Zarządzanie procesami (omawiane zagadnienia)

61 Topologie wirtualne

41. System operacyjny. Postrzeganie systemu operacyjnego przez warstwę oprogramowania użytkowego

Model procesu w systemie Linux. Tomasz Borzyszkowski

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

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

Podstawy Informatyki Systemy operacyjne

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Zaawansowane programowanie w C++ (PCP)

Transkrypt:

Procesy Procesy umożliwiaja w systemach operacyjnych (quasi)równoleg le wykonywanie wielu zadań. Moga być wykonywane naprzemiennie i/lub jednocześnie. Zatem system operacyjny musi to (quasi)równoleg le wykonywanie zapewnić. Poza tym musi umożliwić procesom pewne operacje, których nie moga one sobie zapewnić same, np. dostep do globalnych zasobów systemu jak port komunikacyjny. Idac dalej, systemy operacyjne moga również dostarczać procesom dalszych us lug, jak np. komunikacja miedzyprocesowa, a także pewnych funkcji synchronizacji, jak blokady, semafory, itp. Procesy podstawowe w lasności 1

Proces uniksowy i jego środowisko Proces uniksowy jest wykonywalnym programem za ladowanym do pamieci operacyjnej komputera. Każdy proces uniksowy wykonuje sie we w lasnej wirtualnej przestrzeni adresowej. Proces jest normalnie tworzony z trzema otwartymi plikami: stdin, stdout i stderr przypisanymi do terminala użytkownika interakcyjnego. Jadro Uniksa utrzymuje tablice wszystkich istniejacych procesów wraz z zestawem informacji kontekstowych o nich, np. zestawem otwartych plików, terminalem sterujacym, priorytetem, maska sygna lów, i innymi. Proces posiada środowisko, które jest zestawem dostepnych dla procesu zmiennych środowiskowych z wartościami (tekstowymi). Środowisko nazywa sie zewnetrznym ponieważ jest poczatkowo tworzone dla procesu przez system, a potem jest również dostepne na zewnatrz procesu. Proces tworzony jest z zestawem argumentów wywo lania programu, który jest wektorem stringów Proces charakteryzuja: pid, ppid, pgrp, uid, euid, gid, egid Procesy podstawowe w lasności 2

Tworzenie procesów Procesy tworzone sa zawsze przez klonowanie istniejacego procesu, zatem każdy proces posiada tzw. proces nadrzedny, lub inaczej rodzicielski (parent process), który go utworzy l. Wyjatkiem jest proces numer 1, utworzony przez jadro Uniksa, i wykonujacy program init, który jest protoplasta wszystkich innych procesów w systemie. Proces potomny lacz a ścis le zwiazki z jego procesem rodzicielskim. Potomek dziedziczy szereg atrybutów procesu nadrzednego: należy do tego samego użytkownika i grupy użytkowników, ma poczatkowo ten sam katalog bieżacy, otrzymuje środowisko, które jest kopia środowiska rodzica, ma te sama sesje i terminal sterujacy, należy do tej samej grupy procesów, dziedziczy maske sygna lów i handlery, ograniczenia zasobów, itp. Poza dziedziczeniem atrybutów rodzica, potomek wspó ldzieli z nim pewne zasoby, z których najważniejszymi sa otwarte pliki. Objawy tego można latwo zauważyć, gdy procesy uruchamiane przez interpreter poleceń moga czytać z klawiatury i pisać na ekranie, a gdy jest kilka procesów uruchomionych w tle, to ich operacje wejścia/wyjścia moga sie mieszać. (Innymi wspó ldzielonymi obiektami sa otwarte wspólne obszary pamieci.) Procesy podstawowe w lasności 3

Kończenie pracy procesów Proces uniksowy kończy sie normalnie albo anormalnie (np. przez otrzymanie sygna lu), zawsze zwracajac kod zakończenia, tzw. status. Po śmierci procesu jego rodzic normalnie powinien odczytać status potomka wywo luj ac funkcje systemowa wait. Dopóki status nie zostanie przeczytany, proces nie może umrzeć do końca i pozostaje w stanie zwanym zombie. Istnieje mechanizm adopcji polegajacy na tym, że procesy, których rodzic zgina l przed nimi (sieroty), zostaja adoptowane przez proces nr 1 (init). init wywo luje okresowo funkcje wait aby umożliwić poprawne zakończenie swoich potomków (zarówno naturalnych jak i adoptowanych). Gdy proces nadrzedny żyje w chwili zakończenia pracy potomka, i nie wywo luje funkcji wait, to potomek pozostaje w stanie zombie na czas nieograniczony, co może być przyczyna wyczerpania jakichś zasobów systemu (np. zape lnienia tablicy procesów). Procesy podstawowe w lasności 4

Status procesu W chwili zakończenia pracy proces generuje kod zakończenia, tzw. status, który jest wartościa zwrócona z funkcji main() albo exit(). W przypadku śmierci z powodu otrzymania sygna lu kodem zakończenia jest wartość 128+nr sygna lu. Rodzic normalnie powinien po śmierci potomka odczytać jego kod zakończenia wywo luj ac funkcje systemowa wait() (lub waitpid()). Aby to u latwić (w nowszych systemach) w chwili śmierci potomka jego rodzic otrzymuje sygna l SIGCLD (domyślnie ignorowany). Gdy proces nadrzedny żyje w chwili zakończenia pracy potomka, i nie wywo luje funkcji wait(), to potomek pozostaje (na czas nieograniczony) w stanie zwanym zombie. Może to być przyczyna wyczerpania jakichś zasobów systemu, np. zape lnienia tablicy procesów, otwartych plików, itp. Istnieje mechanizm adopcji polegajacy na tym, że procesy, których rodzic zgina l przed nimi (sieroty), zostaja adoptowane przez proces numer 1, init. Init jest dobrym rodzicem (chociaż przybranym) i wywo luje okresowo funkcje wait() aby umożliwić poprawne zakończenie swoich potomków. Procesy podstawowe w lasności 5

Procesy podstawowe w lasności 6

Stany procesów stan ang. znaczenie wykonywalny/gotowy runnable proces gotowy w kolejce do wykonywania wykonywany running proces wykonujacy sie na procesorze oczekujacy/uśpiony waiting/sleeping proces czeka na dostep do zasobu System przenosi proces w stan uśpienia jeśli nie może mu czegoś dostarczyć, np. dostepu do pliku, danych, itp. W stanie uśpienia proces nie zużywa czasu procesora, i jest budzony i wznawiany w sposób przez siebie niezauważony. Procesy podstawowe w lasności 7

stan ang. znaczenie nieusuwalny zombie proces nie może sie zakończyć zatrzymany stopped wykonywanie wstrzymane sygna lem wymieciony swapped-out proces usuniety z pamieci Wymiatanie procesów jest jednym z mechanizmów pamieci wirtualnej uruchamianych gdy system ma za ma lo pamieci do poprawnej pracy. Wymiatanie polega na wytypowaniu pojedynczego procesu i chwilowym usunieciu go z kolejki procesów wykonujacych sie w celu odzyskania przydzielonej mu pamieci. Proces wymieciony jest normalnie w jednym z pozosta lych stanów, lecz zosta l usuniety z pamieci i aż do chwili ponownego za ladowania nie może zmienić stanu. Procesy podstawowe w lasności 8

Grupy procesów Grupa procesów: wszystkie podprocesy (child processes) uruchomione przez jeden proces nadrzedny. Każdy proces w chwili utworzenia automatycznie należy do grupy procesów swojego rodzica. Pod pewnymi wzgledami przynależność do grupy procesów jest podobna do przynależności do partii politycznych. Każdy proces może: za lożyć nowa grupe procesów (o numerze równym swojemu PID), wstapić do dowolnej innej grupy procesów, w l aczyć dowolny ze swoich podprocesów do dowolnej grupy procesów (ale tylko dopóki podproces wykonuje kod rodzica). Grupy procesów maja g lównie znaczenie przy wysy laniu sygna lów. Procesy podstawowe w lasności 9

Ograniczenia konsumpcji zasobów dla procesu System operacyjny może i powinien ograniczać wielkość zasobów zużywanych przez procesy. Systemy uniksowe definiuja szereg zasobów, które moga być limitowane dla procesu. Proces może swoje ograniczenia ustawiać funkcja systemowa ulimit. Istnieje również polecenie wbudowane shella o tej nazwie. ulimit limit nazwa zasobu opis zasobu -c coredumpsize RLIMIT CORE plik core (zrzut obrazu pamieci) w kb -d datasize RLIMIT DATA segment danych procesu w kb -f filesize RLIMIT FSIZE wielkość tworzonego pliku w kb -l memorylocked RLIMIT MEMLOCK obszar, który można zablokować w pamieci w kb -m memoryuse RLIMIT RSS zbiór rezydentny w pamieci w kb -n descriptors RLIMIT NOFILE liczba deskryptorów plików (otwartych plików) -s stacksize RLIMIT STACK wielkość stosu w kb -t cputime RLIMIT CPU wykorzystanie czasu CPU w sekundach -u maxproc RLIMIT NPROC liczba procesów użytkownika -v vmemoryuse RLIMIT VMEM pamieć wirtualna dostepna dla procesu w kb Dla każdego zasobu istnieja dwa ograniczenia: miekkie i twarde. Obowiazuj ace jest ograniczenie miekkie, i użytkownik może je dowolnie ustawiać, lecz tylko do maksymalnej wartości ograniczenia twardego. Ograniczenia twarde można również zmieniać, lecz procesy zwyk lych użytkowników moga je jedynie zmniejszać. Ograniczenia zasobów sa dziedziczone przez podprocesy. Procesy podstawowe w lasności 10

Priorytety procesów Procesy uniksowe maja priorytety określajace kolejność ich wykonywania w procesorze w przypadku, gdy liczba procesorów komputera jest mniejsza niż liczba gotowych do wykonywania procesów. Jadro realizuje algorytm kolejkowania procesów do wykonania, zwany schedulerem, który opiera sie na priorytetach procesów, i jednocześnie może je zmieniać. Ogólnie, procesy interakcyjne zyskuja wyższe priorytety, ponieważ maja zwiazek z praca cz lowieka, który nie chce czekać na reakcje komputera, ale jednocześnie pracuje z przerwami, które zwykle pozwalaja na wykonywanie innych procesów. Wszelkie modyfikacje priorytetów procesów i ingerencje w prace schedulera sa zaawansowanymi operacjami, dla zwyk lych użytkowników trudnymi i niebezpiecznymi. Jednak istnieje prosty mechanizm pozwalajacy użytkownikowi wspomagać scheduler w wyznaczaniu priorytetów procesów. Tym mechanizmem sa liczby nice dodawane do priorytetów. Użytkownik może uruchamiać procesy z zadana liczba nice (s luży do tego polecenie nice), lub zmieniać liczbe nice wykonujacych sie procesów (polecenie renice). Co prawda zwykli użytkownicy moga tylko zwiekszać domyślna wartość nice co obniża priorytet procesu, ale można uruchamiajac w ten sposób swoje procesy obliczeniowe efektywnie jakby zwiekszyć priorytet procesów interakcyjnych. Procesy podstawowe w lasności 11

Konta użytkownika Konta użytkownika istnieja dla zapewnienia izolacji i zabezpieczenia dzia lajacych procesów. W systemach uniksowych istnieje jedno g lówne konto użytkownika o numerze 0 zwane root. G lówne programy zapewniajace funkcjonowanie systemu, i uruchamiane przez jadro, dzia laj a w ramach konta użytkownika root. Można tworzyć dowolna liczbe innych kont, zarówno dla ludzi-użytkowników systemu, jak i dla określonych programów lub ich grup, których uruchamianie wymaga izolacji lub zabezpieczenia przez innymi użytkownikami. Procesy jednego użytkownika nie moga ingerować w procesy innego użytkownika. To znaczy, nie moga ich zatrzymywać, wysy lać im sygna lów, tworzyć ani usuwać blokad, ustawiać ograniczeń zasobów, itp. Nie dotyczy to konta użytkownika root, który jest traktowany jako użytkownik nadrzedny, i jego procesy moga ingerować w procesy innych użytkowników systemu. Procesy różnych użytkowników moga natomiast brać udzia l w komunikacji miedzyprocesowej (wysy lać sobie komunikaty), o ile dobrowolnie taka komunikacje nawiaż a. Procesy podstawowe w lasności 12

Tworzenie procesów funkcja fork Funkcja fork tworzy podproces, który jest kopia procesu macierzystego. Od momentu utworzenia oba procesy pracuja równolegle i kontynuuja wykonywanie tego samego programu. Jednak funkcja fork zwraca w każdym z nich inna wartość. Poza tym różnia sie identyfikatorem procesu PID (rodzic zachowuje oryginalny PID, a potomek otrzymuje nowy). Po sklonowaniu sie podproces może wywo lać jedna z funkcji grupy exec i rozpoczać w ten sposób wykonywanie innego programu. Po sklonowaniu sie oba procesy wspó ldziela dostep do plików otwartych przed sklonowaniem, w tym do terminala (plików stdin, stdout, stderr). Funkcja fork jest jedyna metoda tworzenia nowych procesów w systemach uniksowych. Procesy tworzenie procesów 13

Dziedziczone (podproces posiada kopie atrybutu procesu): rzeczywisty i efektywny UID i GID, identyfikator grupy procesów (PGRP) kartoteka bieżaca i root środowisko maska tworzenia plików (umask) maska sygna lów i handlery ograniczenia zasobów Wspólne (podproces wspó ldzieli atrybut/zasób z procesem): terminal i sesja otwarte pliki (deskryptory) otwarte wspólne obszary pamieci W lasności procesu i podprocesu Różne: PID, PPID wartość zwracana z funkcji fork blokady plików nie sa dziedziczone ustawiony alarm procesu nadrzednego jest kasowany dla podprocesu zbiór wys lanych (ale nieodebranych) sygna lów jest kasowany dla podprocesu Atrybuty procesu, które nie zmieniaja sie po exec: PID, PPID, UID(real), GID(real), PGID terminal, sesja ustawiony alarm z biegnacym czasem kartoteka bieżaca i root maska tworzenia plików (umask) maska sygna lów i oczekujace (nieodebrane) sygna ly blokady plików ograniczenia zasobów Procesy tworzenie procesów 14

Sygna ly Sygna ly sa mechanizmem asynchronicznego powiadamiania procesów o wydarzeniach. Domyślna reakcja procesu na otrzymanie wiekszości sygna lów jest natychmiastowe zakończenie pracy, czyli śmierć procesu. Oryginalnie sygna ly mia ly s lużyć do sygnalizowania b ledów i sytuacji nie dajacych sie skorygować. Niektóre sygna ly powoduja tuż przed uśmierceniem procesu, wykonanie zrzutu jego obrazu pamieci do pliku dyskowego o nazwie core. W trakcie wieloletniego rozwoju systemów uniksowych mechanizm sygna lów wykorzystywano do wielu innych celów, i wiele sygna lów nie jest już w ogóle zwiazanych z b ledami. Zatem niektóre sygna ly maja inne reakcje domyślne, na przyk lad sa domyślnie ignorowane. Proces może zadeklarować w lasna procedure obs lugi lub ignorowanie sygna lu, (z wyjatkiem sygna lów SIGKILL i SIGSTOP, których nie można przechwycić ani ignorować). Procesy sygna ly 15

nr nazwa domyślnie zdarzenie 1 SIGHUP śmierć roz laczenie terminala sterujacego 2 SIGINT śmierć przerwanie z klawiatury (zwykle: Ctrl-C) 3 SIGQUIT zrzut przerwanie z klawiatury (zwykle: Ctrl-\) 4 SIGILL zrzut nielegalna instrukcja 5 SIGTRAP zrzut zatrzymanie w punkcie kontrolnym (breakpoint) 6 SIGABRT zrzut sygna l generowany przez funkcje abort 8 SIGFPE zrzut nadmiar zmiennoprzecinkowy 9 SIGKILL śmierć bezwarunkowe uśmiercenie procesu 10 SIGBUS zrzut b lad dostepu do pamieci 11 SIGSEGV zrzut niepoprawne odwo lanie do pamieci 12 SIGSYS zrzut b l ad wywo lania funkcji systemowej 13 SIGPIPE śmierć b l ad potoku: zapis do potoku bez odbiorcy 14 SIGALRM śmierć sygna l budzika (timera) 15 SIGTERM śmierć zakończenie procesu 16 SIGUSR1 śmierć sygna l użytkownika 17 SIGUSR2 śmierć sygna l użytkownika 18 SIGCHLD ignorowany zmiana stanu podprocesu (zatrzymany lub zakończony) 19 SIGPWR ignorowany przerwane zasilanie lub restart 20 SIGWINCH ignorowany zmiana rozmiaru okna 21 SIGURG ignorowany priorytetowe zdarzenie na gniazdku 22 SIGPOLL śmierć zdarzenie dotyczace deskryptora pliku 23 SIGSTOP zatrzymanie zatrzymanie procesu 24 SIGTSTP zatrzymanie zatrzymanie procesu przy dostepie do terminala 25 SIGCONT ignorowany kontynuacja procesu 26 SIGTTIN zatrzymanie zatrzymanie na próbie odczytu z terminala 27 SIGTTOU zatrzymanie zatrzymanie na próbie zapisu na terminalu 30 SIGXCPU zrzut przekroczenie limitu CPU 31 SIGXFSZ zrzut przekroczenie limitu rozmiaru pliku Procesy sygna ly 16

Mechanizmy generowania sygna lów wyjatki sprzetowe: nielegalna instrukcja, nielegalne odwo lanie do pamieci, dzielenie przez 0, itp. (SIGILL, SIGSEGV, SIGFPE) naciskanie pewnych klawiszy na terminalu użytkownika (SIGINT, SIGQUIT) wywo lanie komendy kill przez użytkownika (SIGTERM, i inne) funkcje kill i raise mechanizmy software-owe (SIGALRM, SIGWINCH) Sygna ly moga być wysy lane do konkretnego pojedynczego procesu, do wszystkich procesów z danej grupy procesów, albo wszystkich procesów danego użytkownika. W przypadku procesu z wieloma watkami sygna l jest doreczany do jednego z watków procesu. Procesy sygna ly 17

Obs luga sygna lów Proces może zadeklarować jedna z nastepuj acych możliwości reakcji na sygna l: ignorowanie, wstrzymanie doreczenia mu sygna lu na jakiś czas, po którym odbierze on wys lane w miedzyczasie sygna ly, obs luga sygna lu przez wyznaczona funkcje w programie, tzw. handler, przywrócenie domyślnej reakcji na dany sygna l. Typowa procedura obs lugi sygna lu przez funkcje handlera może wykonać jakieś niezbedne czynności (np. skasować pliki robocze), ale ostatecznie ma do wyboru: zakończyć proces, wznowić proces od miejsca przerwania, jednak niektórych funkcji systemowych nie można wznowić dok ladnie od miejsca przerwania, wznowić proces od miejsca przerwania z przekazaniem informacji przez zmienna globalna, wznowić proces od określonego punktu. Procesy sygna ly 18

Komunikacja miedzyprocesowa potoki Potoki sa jednym z najbardziej podstawowych mechanizmów komunikacji miedzyprocesowej w systemach uniksowych. Potok jest urzadzeniem komunikacji szeregowej, jednokierunkowej, o nastepuj acych w lasnościach: na potoku można wykonywać tylko operacje odczytu i zapisu, funkcjami read i write, jak dla zwyk lych plików, potoki sa dostepne i widoczne w postaci jednego lub dwóch deskryptorów plików, oddzielnie dla końca zapisu i odczytu, potok ma określona pojemność, i w granicach tej pojemności można zapisywać do niego dane bez odczytywania, próba odczytu danych z pustego potoku, jak również zapisu ponad pojemność potoku, powoduje zawiśniecie operacji I/O (normalnie), i jej automatyczna kontynuacje gdy jest to możliwe; w ten sposób potok synchronizuje operacje I/O na nim wykonywane. Dobra analogia potoku jest rurka, gdzie strumień danych jest odbierany jednym końcem, a wprowadzany drugim. Gdy rurka sie zape lni i dane nie sa odbierane, nie można już wiecej ich wprowadzić. Komunikacja miedzyprocesowa potoki 19

Potoki anonimowe i nazwane Podstawowe pojecie potoku określa strukture dynamicznie tworzona przez jadro systemu na żadanie danego procesu. Takie sa identyfikowane tylko w ramach procesu, i z poziomu systemu nie można uzyskać do nich dostepu. Dostep do takiego potoku ma tylko dany proces oraz jego procesy potomne dzieki mechanizmowi dziedziczenia. Chcac stworzyć grupe procesów komunikujacych sie przez potoki, należa loby stworzyć je wszystkie w ramach jednego procesu, który wcześniej utworzy odpowiedni potok/potoki. Jest to czesto niewygodne. Istnieje podobny mechanizm potoków nazwanych (named pipes), które posiadaja w lasności potoków, ale maja postać plików specjalnych, istniejacych w dyskowym systemie plików. Dowolny proces może otworzyć taki plik do zapisu lub odczytu, i rozpoczać komunikacje z innymi procesami. Dla odróżnienia od potoków nazwanych potoki tworzone dynamicznie określa sie czasami jako anonimowe. Komunikacja miedzyprocesowa potoki 20

Komunikacja miedzyprocesowa potoki (cd.) Potoki sa prostym mechanizmem komunikacji miedzyprocesowej opisane standardem POSIX i istniejacym w wielu systemach operacyjnych. Pomimo iż definicja określa potok jako mechanizm komunikacji jednokierunkowej, to wiele implementacji zapewnia komunikacje dwukierunkowa. Podstawowe zalety potoków to: brak limitów przesy lania danych, synchronizacja operacji zapisu i odczytu przez stan potoku. Praktycznie synchronizuje to komunikacje pomiedzy procesem, który dane do potoku zapisuje, a innym procesem, który chcia lby je odczytać, niezależnie który z nich wywo la swoja operacje pierwszy. Jednak nie ma żadnego mechanizmu umożliwiajacego synchronizacje operacji I/O pomiedzy procesami, które chcia lyby jednocześnie wykonać operacje odczytu, lub jednocześnie operacje zapisu. Z tego powodu należy uważać potoki za mechanizm komunikacji typu 1-1, czyli jeden do jednego. Komunikacja typu wielu-wielu przez potok jest utrudniona i wymaga zastosowania innych mechanizmów synchronizacji. Komunikacja miedzyprocesowa potoki 21

Komunikacja miedzyprocesowa kolejki komunikatów Kolejki komunikatów sa mechanizmem komunikacji 1-1 o w lasnościach podobnych do potoków. Istnieje wiele wersji kolejek komunikatów z drobnymi różnicami. Zasadnicza różnica pojawia sie jednak ze wzgledu na fakt, że w pewnych systemach kolejki komunikatów zosta ly zaimplementowane jako urzadzenia sieciowe. Pozwalaja one komunikować sie procesom wykonujacym sie na różnych komputerach. Stanowia zatem mechanizm komunikacji miedzyprocesowej dla systemów rozproszonych. W tych systemach takie kolejki komunikatów moga stanowić bazowy mechanizm, na podstawie którego implementowane sa mechanizmy komunikacyjne wyższego poziomu. Komunikacja miedzyprocesowa kolejki komunikatów 22

Komunikacja miedzyprocesowa gniazdka Gniazdka sa innym mechanizmem komunikacji dwukierunkowej typu 1-1 przeznaczonym zarówno do komunikacji miedzyprocesowej w ramach jednego komputera, lub miedzy procesami na różnych komputerach za pośrednictwem sieci komputerowej. Zasadnicza różnica pomiedzy gniazdkami a potokami i kolejkami komunikatów polega na nawiazywaniu po laczenia. Potoki i kolejki komunikatów sa zawsze tworzone jako gotowe lacza komunikacyjne posiadajace dwa końce do których uzyskuja dostep procesy. Gniazdko jest jakby jednym końcem lacza komunikacyjnego. Przed rozpoczeciem komunikacji konieczne jest jego po laczenie z innym gniazdkiem stworzonym na tym samym komputerze, lub innym, po laczonym z nim siecia. Ze wzgledu na ten proces nawiazywania po laczenia, gniazdka wykorzystywane sa na ogó l w trybie komunikacji klient-serwer. Komunikacja miedzyprocesowa gniazdka 23

Komunikacja miedzyprocesowa obszary pamieci wspólnej Komunikacja przez pamieć wspólna jest najszybszym rodzajem komunikacji miedzyprocesowej. Wymaga stworzenia obszaru pamieci wspólnej w systemie operacyjnym przez jeden z procesów, a nastepnie odwzorowania tej pamieci do w lasnej przestrzeni adresowej wszystkich pragnacych sie komunikować procesów. Komunikacja w tym trybie wymaga synchronizacji za pomoca oddzielnych mechanizmów, takich jak muteksy albo blokady zapisu i odczytu. Obrazki zapożyczone bez zezwolenia z: http://www.ibm.com/developerworks/aix/library/au-spunix_sharedmemory/ Komunikacja miedzyprocesowa pamieć wspólna 24

Komunikacja miedzyprocesowa semafory i muteksy W teorii semafor jest mechanizmem synchronizacyjnym, domyślnie kontrolujacym dostep lub przydzia l pewnego zasobu. Wartość semafora oznacza liczbe dostepnych jednostek zasobu. Określone sa nastepuj ace operacje na semaforze: P(sem) oznacza zajecie zasobu sygnalizowane zmniejszeniem wartości semafora o 1, a jeśli jego aktualna wartość jest 0 to oczekiwanie na jej zwiekszenie, V(sem) oznacza zwolnienie zasobu sygnalizowane zwiekszeniem wartości semafora o 1, a jeśli istnieje( a) proces(y) oczekujacy(e) na semaforze to, zamiast zwiekszać wartość semafora, wznawiany jest jeden z tych procesów. Istotna jest niepodzielna realizacja każdej z tych operacji, tzn. każda z operacji P, V może albo zostać wykonana w ca lości, albo w ogóle nie zostać wykonana. Z tego powodu niemożliwa jest prywatna implementacja operacji semaforowych przy użyciu zmiennej globalnej przez proces pracujacy w warunkach prze laczania procesów. Operacje semaforowe realizowane sa przez system operacyjny, który zapewnia ich niepodzielność. Przydatnym przypadkiem szczególnym jest semafor binarny, który kontroluje dostep do zasobu na zasadzie wy l aczności. Wartość takiego semafora może wynosić 1 lub 0. Semafory binarne zwane sa również muteksami (ang. mutex = mutual exclusion). Komunikacja miedzyprocesowa semafory i muteksy 25

Watki semafory i muteksy 26

Watki Procesy stanowia podstawowa jednostke, z której tradycyjnie sk lada sie wiekszość systemów operacyjnych. Procesy posiadaja dwie podstawowe cechy: kod programu za ladowany do pamieci operacyjnej, wraz ze środowiskiem (zbiorem zmiennych posiadajacych wartości) i zasobami (np. zbiorem otwartych plików, i innymi przydzielonymi zasobami, np. portami komunikacyjnymi, itd.) przechowywanym przez jadro systemu, ślad wykonania (execution trace), tzn. ciag wykonywanych instrukcji, wraz z niezbednymi przy ich wykonywaniu konstrukcjami, np. licznikiem programu (PC), zbiorem rejestrów z zawartościa, stosem wywo lywanych procedur wraz z ich argumentami, itp. W starszych systemach operacyjnych te dwie cechy procesu by ly integralnie ze soba zwiazane. Nowsze systemy pozostawiaja pierwsza ceche procesom, ale druga im odbieraja na rzecz watków (threads). Watki podstawowe w lasności 27

Procesy wielowatkowe Watki z natury rzeczy sa jednostkami podrzednymi procesów, tzn. jeden proces może sk ladać sie z jednego lub wiecej watków. Watki podstawowe w lasności 28

Wspólne dane watków Ponieważ watki danego procesu wspó ldziela miedzy soba jego kod, zatem wszystkie zmienne globalne sa ich wspólna w lasnościa. Każdy z watków może w dowolnym momencie odczytać lub nadpisać wartość zmiennej globalnej. Jest to zarazem zaleta i wada. Zaleta polega na tym, że jest to najszybsza możliwa metoda komunikacji miedzy watkami, ponieważ wartości generowane przez watek źród lowy sa od razu dostepne w watku docelowym. Jednak taki wspólny dostep do danych wymaga synchronizacji, ponieważ watek docelowy nie wie kiedy dok ladnie dane zosta ly już wygenerowane i kiedy może je odczytać (wyobraźmy sobie, że dane te maja znaczna objetość, np. gdy jest to tablica lub struktura). Nie wiedzac tego, może odczytać stare dane, albo np. dane cześciowo zmodyfikowane, które moga w ogóle nie mieć sensu. Podobnie synchronizacji wymaga sytuacja, gdy dwa watki (lub wiecej) chca modyfikować dane. Bez synchronizacji takie operacje mog lyby doprowadzić do trwa lego zapisania danych niespójnych. Oczywiście synchronizacji nie wymagaja operacje odczytu wspólnych danych. Watki podstawowe w lasności 29

Programowanie z użyciem watków Watki pozwalaja tworzyć programy dzia lajace wspó lbieżnie. Wspó lbieżność przydaje sie wielokrotnie w programowaniu, na przyk lad: w różnego rodzaju serwerach obs lugujacych równocześnie wiele żadań, w programach okienkowych, gdzie aktualizacja stanu okienek, np. oczekujaca na odczyt danych z urzadzenia, może być realizowana asynchronicznie do petli oczekujacej na reakcje użytkownika; tego rodzaju oczekiwanie na kilka różnych rzeczy naraz stwarza trudność w programowaniu, tworzenie wspó lbieżnych aplikacji ma sens również w zwiazku z coraz wieksz a liczba procesorów (lub rdzeni) dostepnych we wspó lczesnych komputerach; program napisany wspó lbieżnie może być wtedy wykonywany szybciej niż program napisany jednowatkowo. Watki podstawowe w lasności 30

Wspó lbieżność z użyciem watków i procesów Programowanie z watkami jest podobne do programowania procesów, z nastepuj acymi różnicami: wszystkie watki danego procesu wykonuja ten sam program, podczas gdy procesy sa kompletnie oddzielnymi obiektami, każdy z w lasna przestrzenia adresowa, mogacymi wykonywać dowolne programy, watki maja automatycznie dostepn a szybka komunikacje przez zmienne globalne, która jednak wymaga synchronizacji, tworzenie watków jest tanie (w sensie szybkości), co ma znaczenie np. w serwerach obs lugujacych bardzo wiele zg loszeń na sekunde. Watki podstawowe w lasności 31

Watki użytkownika Ze wzgledu na sposób realizacji watków w systemie operacyjnym można wyróżnić dwa rodzaje watków: watki użytkownika i watki jadra. Watki użytkownika (user level threads, ULT) sa tworzone i w ca lości obs lugiwane w przestrzeni użytkownika, zaimplementowane samodzielnie, lub za pomoca odpowiedniej biblioteki. Wtedy: jadro systemu nie ma świadomości istnienia watków, ani nie zapewnia im wsparcia, możliwe jest ich zastosowanie nawet w systemach nieobs lugujacych watków, tworzenie i prze laczanie watków jest szybkie, ponieważ wykonuje tylko tyle kodu ile wymaga, bez prze laczania kontekstu jadra, jeśli jeden z watków wywo la funkcje systemowa powodujac a blokowanie (czekanie), to pozosta le watki nie bed a mog ly kontynuować pracy, nie ma możliwości wykorzystania wielu procesorów/rdzeni do wykonywania różnych watków programu. Watki implementacje 32

Watki jadra Wiekszość wspó lczesnych systemów operacyjnych realizuje watki w jadrze systemu, zwane watkami jadra (kernel level threads, KLT). Dla programów wykorzystujacych te watki: jadro zajmuje sie obs luga watków (tworzeniem, prze laczaniem); trwa to typowo d lużej niż dla watków użytkownika, watek czekajacy na coś w funkcji systemowej nie blokuje innych watków, w systemach wieloprocesorowych jadro ma możliwość jednoczesnego wykonywania wielu watków jednej aplikacji na różnych procesorach. Ani czysty model watków użytkownika ani czysty model watków jadra nie zapewniaja po laczenia elastyczności programowania z efektywnościa wykonywania programu. Dobrym modelem jest natomiast taka implementacja biblioteki watków użytkownika, która odwzorowuje watki użytkownika na watki jadra. Watki implementacje 33

Odwzorowanie wiele-jeden Ten model ma zastosowanie do czystej biblioteki watków użytkownika, przenośnych bibliotekach watków (np. GNU Portable Threads), w systemach jednoprocesorowych, lub nieobs lugujacych watków. Watki implementacje 34

Odwzorowanie jeden-jeden Ten model jest najcześciej obecnie stosowany, np. w systemach Solaris, Linux, Windows XP. Watki implementacje 35

Odwzorowanie wiele-wiele Model stosowany w dawniejszych implementacjach watków w systemach operacyjnych. Pozwala kontrolować rzeczywisty stopień wspó lbieżności programów przez przydzielanie odpowiedniej liczby watków jadra. Watki implementacje 36

Model mieszany Model podobny do modelu wiele-wiele ale pozwala na przydzielenie watku jadra wybranym watkom użytkownika. Stosowany np. w systemach: IRIX, HP-UX, Tru64 UNIX. Watki implementacje 37

Watki Pthread Standard POSIX watków Pthread (IEEE 1003.1c) definiuje interfejs tworzenia i zarzadzania watkami dla programów. Standard ten posiada szereg implementacji dla wszystkich wspó lczesnych systemów uniksowych. Istnieja również implementacje dla systemu Windows. Najważniejsze pojecia: watki tworzy sie funkcja pthread_create określajac funkcje (i jej argument), której wywo lanie rozpoczyna wykonywanie watku, watki posiadaja zestaw atrybutów; które maja wartości domyślne, ale można je zmieniać, watek może zakończyć sie sam, a także może go zakończyć inny watek procesu funkcja pthread_cancel, zakończenie watku jest troche podobne do zakończenia procesu: watek generuje kod zakończenia (status), który może być odczytany przez watek macierzysty, jeden watek może przejść w stan oczekiwania na zakończenie innego watku, co zwane jest wcielaniem (join) i wykonywane funkcja pthread_join, watki moga być od l aczone i wtedy nie podlegaja wcielaniu, tylko kończa sie bez potrzeby odczytywania ich statusu, watek g lówny procesu ma znaczenie nadrzedne gdy on sie kończy to kończa sie wszystkie watki procesu. Watki implementacje 38

Synchronizacja watków Ponieważ watki sa z definicji wykonywane wspó lbieżnie i asynchronicznie, a także operuja na wspó ldzielonych globalnych strukturach danych, konieczne sa mechanizmy dla zapewnienia wy laczności dostepu. Mechanizmy wzajemnej synchronizacji i blokowania ograniczaja wspó lbieżność, zatem należy stosować jak najdrobniejsze blokady. Mechanizmy synchronizacji standardu POSIX: muteksy (mutual exclusion) blokady odczytu i zapisu (read-write locks) semafory zmienne warunkowe (conditional variables) bariery Watki synchronizacja 39

Synchronizacja watków: muteksy Muteksy s luża do wprowadzenia ochrony fragmentu programu, zwanego sekcja krytyczna, która może wprowadzić b ledy jeśli bedzie wykonana równocześnie przez różne procesy/watki. Rozważmy wielowatkowy program obs lugujacy operacje na dowolnych kontach bankowych, sp lywaj ace z oddzia lów i bankomatów: Watek 1: // otrzymany numer konta // oraz wartosc operacji saldo[konto] += operacja; Watek 2: // otrzymany numer konta // oraz wartosc operacji saldo[konto] += operacja; Tak równoleg le jak i quasi równoleg le wykonanie tych watków może spowodować takie pofragmentowanie tych operacji, że jeśli jednocześnie pojawia sie dwie operacje na tym samym koncie, to zostanie obliczona niepoprawna wartość salda. Zjawisko takie jest nazywane wyścigami. Można mu zapobiec za pomoca muteksu: Watek 1: pthread_mutex_lock(transakcyjny); saldo[konto] += operacja; pthread_mutex_unlock(transakcyjny); Watek 2: pthread_mutex_lock(transakcyjny); saldo[konto] += operacja; pthread_mutex_unlock(transakcyjny); Za lożenie blokady muteksu powoduje, że żadna z tych operacji nie może być przerwana przez druga. W danej chwili tylko jedna może posiadać blokade muteksu, a druga bedzie musia la na nia czekać. Watki synchronizacja 40

Synchronizacja watków: blokady zapisu i odczytu Blokady zapisu i odczytu sa innym rodzajem mechanizmu synchronizacyjnego, bed acym pewnym uogólnieniem muteksu. Wyobraźmy sobie, że wśród nap lywaj acych operacji bankowych wiekszość stanowi sprawdzenie salda. Pobranie salda nie może być wykonywane równocześnie z jakakolwiek operacja wp laty ani wyp laty, ponieważ w tym czasie saldo mog loby być niepoprawnie odczytane. Jednak nic nie stoi na przeszkodzie, żeby sprawdzanie salda nie mog lo sie odbywać równocześnie z innymi operacjami sprawdzenia salda, nawet tego samego konta. Aby to zrealizować, do zabezpieczenia obs lugi transakcji zamiast muteksu należy użyć blokady zapisu i odczytu. Przy realizacji transakcji wp laty lub wyp laty zak ladana bedzie blokada zapisu, co wyklucza wszelkie inne jednoczesne operacje. Jednak przy realizacji jakiejkolwiek operacji sprawdzenia salda, należy użyć blokady odczytu, co powoduje, że inne operacje sprawdzenia salda moga przebiegać równolegle, a wstrzymywane bed a tylko operacje wp laty i wyp laty. Korzyść z użycia tego mechanizmu bedzie znaczaca tylko wtedy gdy operacji wymagajacych blokad odczytu bedzie znacznie wiecej niż tych wymagajacych blokad zapisu. W wielu systemach tak jest, np. w systemie sprawdzania hase l lub PINów bedzie znacznie wiecej operacji odczytu (sprawdzenia) niż operacji zapisu (zmiany) has la/pinu. Watki synchronizacja 41

Synchronizacja watków: semafory Semafory sa innym uogólnieniem muteksów, pozwalajacym zarzadzać zasobami, mierzonymi w sztukach. 1 Zamiast w ca lości zajmować dany zasób, watki zajmuja pewna liczbe jednostek tego zasobu, w granicach aktualnie dostepnej puli. Watek, który zażada zajecia wiekszej liczby niż aktualnie dostepna musi czekać, aż inny watek/inne watki nie zwolnia dostatecznej liczby, Dobra analogia, ilustrujac a zastosowanie semaforów może być wystawa (np. malarstwa), na która ze wzgledów bezpieczeństwa można wpuścić jednorazowo maksymalnie N osób. Semafor jest wstepnie ustawiony na wartość N. Każda wchodzaca osoba zg lasza żadanie jednostkowego zajecia semafora, co dekrementuje jego licznik (symbolizujacy liczbe wolnych miejsc na wystawie). Po osiagnieciu maksimum (wyzerowaniu semafora), nastepne osoby po zg loszeniu żadania zajecia semafora musza czekać. Każda wychodzaca osoba zwalnia (inkrementuje) semafor, co może spowodować wpuszczenie jednej osoby do środka, o ile czeka w żadaniu zajecia semafora. 1 Jaktoby lojużwyjaśnionewcześniej,nazwasemaforjestmyl aca. W kolejnictwie semafor jest stosowany do sygnalizacji zajetego toru. Informatycznym odpowiednikiem tego mechanizmu jest mutex. Semafory wprowadzi l w 1965 holenderski informatyk Edsger Dijkstra. Pojecie muteksu, jako semafora binarnego, zosta lo zdefiniowane dużo później. Watki synchronizacja 42