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



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

Proces y i y w i ąt ą ki

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

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

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

Systemy operacyjne III

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

4. Procesy pojęcia podstawowe

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

Klient-Serwer Komunikacja przy pomocy gniazd

Procesy, wątki i zasoby

4. Procesy pojęcia podstawowe

projektowanie systemu

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

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

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

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

4. Procesy pojęcia podstawowe

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

1.1 Definicja procesu

Procesy i wątki. Wątki. Procesy

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

Zarządzanie procesami i wątkami

Działanie systemu operacyjnego

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

Architektura komputerów

Koncepcja procesu. Procesy i wątki. Diagram stanów procesu. Stan procesu. Blok kontrolny procesu Process Control Block (PCB)

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

System operacyjny MACH

Działanie systemu operacyjnego

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

Przerwania. Przerwania. Budowa systemu komputerowego. Zdarzenia powodujące przerwanie: Wektor przerwań

Przerwania. Przerwania. Budowa systemu komputerowego. Zdarzenia powodujące przerwanie: Wektor przerwań

Procesy, zasoby i wątki

Procesy, zasoby i wątki

Procesy, zasoby i wątki

Działanie systemu operacyjnego

Akademia Techniczno-Humanistyczna w Bielsku-Białej

Systemy Operacyjne. wykład 1. Adam Kolany. Październik, Instytut Techniczny Państwowa Wyższa Szkoła Zawodowa w Nowym Sączu

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

Tryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla

LEKCJA TEMAT: Zasada działania komputera.

Budowa systemów komputerowych

Jadro monolityczne vs. mikrojadro. Mikrojadro. Olga Kowalczuk. 9 grudnia 2008

Systemy operacyjne. Systemy operacyjne. Systemy operacyjne. Zadania systemu operacyjnego. Abstrakcyjne składniki systemu. System komputerowy

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

Systemy operacyjne III

SYSTEMY OPERACYJNE WYKLAD 6 - wątki

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

Sieci komputerowe. Wykład 7: Transport: protokół TCP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Komunikacja za pomocą potoków. Tomasz Borzyszkowski

Przesyłania danych przez protokół TCP/IP

Jądro systemu operacyjnego

Podstawy informatyki. System operacyjny. dr inż. Adam Klimowicz

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

Działanie systemu operacyjnego

Systemy operacyjne III

IPC: Kolejki komunikatów

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Architektura komputerów. Układy wejścia-wyjścia komputera

Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski

Komputery przemysłowe i systemy wbudowane

Programowanie Urządzeń Mobilnych. Część II: Android. Wykład 2

Wywoływanie procedur zdalnych

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

Systemy rozproszone. na użytkownikach systemu rozproszonego wrażenie pojedynczego i zintegrowanego systemu.

Wprowadzenie do programowania współbieżnego

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Zarządzanie procesorem

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

Kolejki FIFO (łącza nazwane)

Programowanie współbieżne i rozproszone

Celem wykładu jest wprowadzenie fundamentalnych pojęć, integralnie związanych z systemem operacyjnym, na których opiera się przetwarzanie we

Systemy operacyjne. Paweł Pełczyński

Wstęp do programowania 2

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

Czujniki obiektowe Sterowniki przemysłowe

dr inż. Konrad Sobolewski Politechnika Warszawska Informatyka 1

Logiczny model komputera i działanie procesora. Część 1.

WYKŁAD: Przetwarzanie rozproszone typu klient-serwer.

Opis protokołu RPC. Grzegorz Maj nr indeksu:

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

76.Struktura oprogramowania rozproszonego.

Wywoływanie procedur zdalnych

Wprowadzenie do systemów operacyjnych

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

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

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

Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów współbieżnych i obsługi współbieżności przez system.

L4Ka::Pistachio Mikrojądra mogą być wydajne

Zarządzanie procesami (omawiane zagadnienia)

Programowanie współbieżne i równoległe. dr inż. Marcin Wilczewski 2013

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

Mikroprocesor Operacje wejścia / wyjścia

Systemy operacyjne III

Systemy rozproszone System rozproszony

współbieżność - zdolność do przetwarzania wielu zadań jednocześnie

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

5. Algorytm genetyczny przykład zastosowania

Programownie współbieżne i rozproszone Jędrzej Ułasiewicz 1. Komunikacja. Model procesów komunikujących się poprzez pamięć dzieloną

Transkrypt:

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........................................... 5 1.4 Procesy współpracujące.......................................... 8 1.4.1 Komunikacja międzyprocesowa................................. 9 1.4.2 Komunikacja w systemach klient serwer............................ 11 1.4.3 Problemy............................................. 13 2 Watki 13 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 1 Procesy 1.1 Definicja procesu Rys historyczny Systemy wsadowe System wykonuje jedno zadanie (program użytkownika), po jego zakończeniu przechodzi do następnego Brak współbieżności, brak wieloprogramowości - jedno zadanie w systemie, pozostałe czekają na wczytanie z pamięci masowej Systemy wieloprogramowe Rys historyczny Uruchomionych jest wiele zadań Przełączanie zadań jeśli musiały oczekiwać na wykonanie operacji we/wy Zadania aktywne - wykonywane przez procesor (procesory) Pozostałe uruchomione zadania oczekują - przechowywane w pamięci operacyjnej Nieuruchomione zadania znajdują się w pamięci masowej Systemy z podziałem czasu Uruchomionych jest wiele zadań Zadanie jest realizowane przez pewien czas, po czym następuje jego przełączenie wywłaszczenie Oczekujące zadania przechowywane są w pamięci roboczej Duża częstotliwość przełączania zadań stanowi podstawę współbieżności Procesy współbieżne mogą się ze sobą komunikować 1

Proces Kod programu Licznik rozkazów Stos procesu Dane Proces a program Sam kod programu nie stanowi procesu, a jedynie jego treść. Dopiero kod programu, licznik rozkazów i dane (zasoby pamięci) razem definiują proces. Zasoby procesu Dla realizacji procesu niezbędne są zasoby: czas procesora, pamięć operacyjna, pliki, urządzenia wejścia/wyjścia. Stan procesu Uruchomiony w systemie proces może w danej chwili znajdować się w jednym z kilku stanów: aktywny aktualnie trwa jego przetwarzanie przez procesor gotowy oczekuje na przydział procesora czekajacy oczekuje na wystąpienie zdarzenia (np. przerwania od urządzenia we/wy) zakończony tuż po zakończeniu działania procesu, ale przed ostatecznym usunięciem z pamięci odłożony* proces usunięty z pamięci i przeniesiony do pliku wymiany Możliwe przejścia pomiędzy różnymi stanami opisuje diagram stanów procesu Stan procesu Diagram stanów procesu Blok kontrolny procesu Stan procesu (gotowy, aktywny, etc) Licznik rozkazów Rejestry procesora Planowanie przydziału procesora (m. in. priorytet zadania) Zarządzanie pamięcią Rozliczenia (czas procesora, identyfikacja użytkownika) Informacje o wejściu/wyjściu 2

Rysunek 1: Diagram stanów procesu 1.2 Operacje na procesach Operacje na procesach System operacyjny musi umożliwiać dynamiczne tworzenie i usuwanie procesów. Proces tworzący nowy proces nazywa się rodzicem Proces utworzony nazywa się potomkiem Każdy nowy proces może tworzyć dalsze nowe procesy. Drzewo procesów Przedstawia zależność rodzic potomek pomiędzy procesami w systemie. Zwykle wszystkie procesy w systemie mają wspólnego przodka (root process w systemie UNIX proces Init) Drzewo procesów Tworzenie procesów Zachowanie procesu rodzica: Rodzic działa współbieżnie z potomkiem Rodzic oczekuje na zakończenie procesu potomka Zachowanie procesu potomka: Proces potomny staje się kopią procesu macierzystego Proces potomny otrzymuje nowy program Przydział zasobów: 3

Rysunek 2: Drzewo procesów Przydział zasobów przez system operacyjny Przydział zasobów z puli należącej do procesu rodzica Kończenie procesów Przyczyny zakończenia procesu: Proces wykonał swój program i wywołał funkcję systemową exit() Został zakończony przez proces rodzica (funkcja systemowa abort()) Proces wykonał niedozwoloną operację (np. dzielenie przez zero, naruszenie ochrony pamięci) Został zabity przez użytkownika (polecenie kill) Co zrobić z procesami potomnymi: Zakończyć razem z procesem rodzica kończenie kaskadowe Pozostawić w systemie znajdując nowego rodzica Zakończenie procesu powinno być obsłużone przez rodzica Operacje na procesach w systemie UNIX Funkcja systemowa fork() fork() Funkcja systemowa fork() tworzy nowy proces, będący kopią procesu macierzystego. W procesie rodzica zwrócony zostaje PID procesu dziecka, w procesie potomnym wartość 0. W przypadku błędu zwrócona zostaje wartość -1. Fork bomb Proces, który namnaża się bez kontroli wykorzystując funkcję fork() nazywany jest fork-bomba. Działanie takie prowadzi do szybkiego wyczerpania zasobów systemu i jego załamania. Bywa ono intencjonalne (atak typu DOS) lub jest wynikiem błędu programisty. 4

Operacje na procesach w systemie UNIX Funkcja systemowa wait() wait() Proces rodzica powinien oczekiwać na zakończenie procesów potomków. W tym celu wykorzystuje się funkcję wait(). Oczekuje ona na zakończenie procesu potomka, a gdy ono nastąpi zwracany jest PID zakończonego procesu, oraz kod zakończenia. Jeśli brak zakończonego potomka zwrócona zostanie wartość 0. Proces zombie Proces potomny, który zakończył się, ale jego zakończenie nie zostało obsłużone przez proces rodzica przy użyciu funkcji wait nazywa się procesem zombie. Procesy zombie Proces posiada wpis w tablicy procesów. zabezpieczenie przed powtórnym użyciem PID bez wiedzy procesu rodzica procesu będącego w stanie zombie nie można usunąć poleceniem kill W razie zakończenia procesu rodzica, jako nowy rodzic zostaje wyznaczony proces init. Uwaga! Pisząc program współbieżny należy pamiętać o właściwym obsłużeniu kończących się procesów potomnych (funkcja wait() lub pokrewna). 1.3 Planowanie procesów Planowanie procesów Ilość równocześnie aktywnych procesów jest determinowana przez ilość CPU w systemie. System operacyjny musi organizować dostęp do zasobów: CPU urządzeń wejścia/wyjścia Z każdym zasobem kojarzona jest kolejka procesów oczekujących na udostępnienie zasobu Kolejki planowania Kolejka procesów gotowych Kolejka procesów oczekujących na przydział procesora. Procesy znajdują się w stanie gotowy. Kolejki urzadzeń wejścia/wyjścia oraz zasobów Kolejka procesów oczekujących na przydział urządzenia we/wy, zakończenie operacji (czyli na wystąpienie przerwania) bądź dostępność zasobu. Procesy znajdują się w stanie czekający. W zależności od zaawansowania mechanizmów planowania procesów, system kolejek może być mniej lub bardziej rozbudowany. Kolejki planowania 5

Rysunek 3: Kolejki planowania procesów Planowanie procesów Procesy ograniczone przez wejście/wyjście Procesy wykonujące przez większość czasu operacje I/O: kopiowanie plików pobieranie danych z sieci Zwykle oczekują na gotowość urządzeń wejścia/wyjścia. Procesy ograniczone przez procesor Procesy intensywnie wykorzystujące procesor (obliczeniowe): przetwarzanie obrazu obliczenia symulacyjne Są w stanie zająć dowolną ilość czasu procesora. Planowanie procesów Planowanie długoterminowe Wybór puli procesów realizowanych w systemie. Dąży się do utworzenia zrównoważonej mieszanki procesów (równomierne wykorzystanie procesora i urządzeń wejścia/wyjścia). Planowanie krótkoterminowe Wybór następnego procesu, któremu zostanie przydzielony czas procesora. 6

Rysunek 4: Kolejki planowania procesów z planowaniem średnioterminowym Planowanie procesów Dokończenie Planowanie średnioterminowe Bieżące modyfikowanie puli procesów wymiana procesów: poprawa wykorzystania pamięci Usunięcie z pamięci procesów, które nie są aktualnie potrzebne, aby uzyskać dodatkowe zasoby dla aktualnie wykonywanych procesów. poprawa składu mieszanki procesów Doraźne poprawianie wykorzystania CPU i urządzeń wejścia/wyjścia w zależności od zapotrzebowania na nie. Odłożone procesy umieszczane są w pamięci masowej (plik/partycja wymiany, swap). Kolejki planowania Uwzględnienie planowania średnioterminowego Kontekst procesu Kontekst procesu Zbiór informacji w pełni opisujących stan procesu. Obejmuje: Stan procesu (aktywny, oczekujący, itp) Zawartość rejestrów procesora (w tym licznika rozkazów) Informacje o zarządzaniu pamięcią Kontekst procesu jest przechowywany w bloku kontrolnym procesu (PCB) Przełaczanie kontekstu Przełaczanie kontekstu Ciąg operacji mających na celu przełączenie procesora między procesami: zapis kontekstu starego procesu w jego bloku kontrolnym 7

Rysunek 5: Przełączanie kontekstu odtworzenie wcześniej zapisanego kontekstu nowego procesu Pracochłonne czas przełączania kontekstu bezpośrednio wpływa na wydajność systemu. Niektóre architektury wspomagają operację sprzętowo: wiele przełączanych zestawów rejestrów zapis/odtwarzanie wszystkich rejestrów jedną instrukcją procesora Przełaczanie kontekstu 1.4 Procesy współpracujace Procesy niezależne i współpracujace Proces niezależny Proces, który nie może wpływać na działanie innych procesów w systemie oraz nie podlega ich wpływowi. Proces jest niezależny jeśli nie dzieli żadnych danych z innymi procesami. Proces współpracujacy Proces, który może oddziaływać na inne procesy w systemie lub podlega ich wpływowi. Każdy proces dzielacy dane z innymi procesami jest procesem zależnym. 8

Cele współpracy Dzielenie informacji wykorzystanie danych przez wiele procesów (użytkowników) Zwiększenie wydajności podział zadania między wiele elementów wykonawczych (CPU, urządzenia we/wy) Modularność podział zadania na elementy prostsze w implementacji, pozwalające na łatwiejsze zrozumienie i utrzymanie oprogramowania Wygoda wykorzystanie mechanizmów współbieżności np. w celu uruchomienia jednocześnie kilku aplikacji. Niezbędne środki Współpracujące procesy muszą mieć możliwość komunikowania się ze sobą implementacja przez programistę udogodnienia implementowane w systemie operacyjnym komunikacja międzyprocesowa (IPC) Do realizacji niektórych operacji niezbędna jest synchronizacja procesów 1.4.1 Komunikacja międzyprocesowa IPC Procesy wymieniają komunikaty poprzez łącze komunikacyjne Proces wysyłający komunikaty nazywa się nadawcą Proces odbierający komunikaty nazywa się odbiorcą send() - wysłanie komunikatu recive() - odebranie komunikatu Charakterystyka łacza komunikacyjnego Komunikacja bezpośrednia lub pośrednia Komunikacja symetryczna lub asymetryczna Buforowanie automatyczne lub jawne Wysyłanie kopii lub wskaźnika Komunikaty o stałej lub zmiennej długości Komunikacja bezpośrednia Komunikujące się procesy jawnie określają nadawcę i odbiorcę komunikatu Nadawca określa do kogo wysyła komunikat Odbiorca odbierając komunikat: określa nadawcę adresowanie symetryczne otrzymuje identyfikator nadawcy adresowanie asymetryczne Właściwości: 9

łącze komunikacyjne jest tworzone automatycznie, łącze dotyczy zawsze dwóch procesów, między każdą parą procesów istnieje zawsze jedno łącze Problematyczna modularność komunikujące się procesy muszą znać swoje identyfikatory. Komunikacja pośrednia Komunikacja odbywa się za pośrednictwem skrzynek pocztowych (portów). Proces nadawcy umieszcza komunikat w skrzynce Proces odbiorcy pobiera komunikat ze skrzynki Właściwości: łącze istnieje między dwoma procesami jeśli posiadają wspólną skrzynkę łącze może dotyczyć większej ilości procesów między parą procesów może istnieć wiele łączy (każde z własną skrzynką) Jeśli ze skrzynki korzysta kilka procesów i dwa chcą odebrać komunikat, to do kogo powinien on trafić? Komunikacja pośrednia Ciag dalszy Rozróżnia się właściciela i użytkownika skrzynki: właściciel może tylko odbierać komunikaty użytkownik może tylko umieszczać komunikaty Skrzynki pocztowe mogą być własnością procesu lub systemu operacyjnego. Skrzynki należące do procesów są usuwane z systemu przy zakończeniu procesu właściciela Skrzynka należąca do systemu operacyjnego nie jest usuwana po zakończeniu procesu, który ją utworzył. Proces tworzący taką skrzynkę staje się jej domyślnym właścicielem. Komunikacja synchroniczna i asynchroniczna Operacje send() i recive() mogą odbywać się z blokowaniem (synchronicznie) lub bez blokowania (asynchronicznie) nadawanie z blokowaniem proces nadawczy zostaje wstrzymany do momentu odbioru komunikatu lub umieszczenia go w skrzynce nadawanie bez blokowania proces nadawczy wysyła komunikat i kontynuuje działanie odbiór z blokowaniem odbiorca czeka do momentu kiedy może odebrać komunikat odbiór bez blokowania odbiorca otrzymuje komunikat bądź informację o braku oczekujących komunikatów 10

Buforowanie Bufor zeroelementowy proces wysyłający komunikat zawsze czeka na jego odebranie przez odbiorcę Bufor o skończonej pojemności jeśli w buforze jest miejsce na komunikat zostanie on przyjęty, a proces nadawcy będzie wykonywał się dalej jeśli w buforze brak miejsca - proces nadawcy zostanie wstrzymany aż do momentu przyjęcia komunikatu Bufor nieograniczony nadawca nigdy nie jest blokowany Długość komunikatów Komunikaty o stałej długości + łatwa implementacja kłopotliwe z punktu widzenia programisty Komunikaty o zmiennej długości + proste wykorzystanie przez programistę bardziej skomplikowana obsługa po stronie systemu operacyjnego 1.4.2 Komunikacja w systemach klient serwer Komunikacja w systemach klient serwer Systemy rozproszone wymagają komunikacji pomiędzy procesami pracującymi na różnych komputerach. Komunikację taką udostępniają poniższe mechanizmy: Gniazda (Socket) RPC (Remote Procedure Call) RMI (Remote Method Invocation) Gniazda Służą do przesyłania danych pomiędzy procesami przesyłany jest ciąg bajtów komunikacja jest dwukierunkowa Gniazdo jest identyfikowane adresem IP i numerem portu Komunikacja połączeniowa: zostaje nawiązane połączenie pomiędzy gniazdami gniazda są dedykowane danemu połączeniu funkcje systemowe send(), recv() protokół TCP 11

Rysunek 6: Schemat działania RPC Komunikacja bezpołączeniowa: gniazdo może służyć komunikacji z wieloma partnerami pisząc do gniazda podaje się adres odbiorcy sendto() odczytując pobiera się adres nadawcy recvfrom() protokół UDP RPC i RMI Serwer udostępnia zestaw procedur (metod) zdalnych Klient wysyła dane potrzebne do wykonania procedury po stronie serwera Serwer odsyła wynik działania RPC opiera się na programowaniu proceduralnym, przesyłany jest zestaw parametrów wspierany przez mechanizm portmappera (rejestracja usług) pierwotnie opracowany przez firmę Sun (implementacja NFS) RMI jest techniką obiektową, przesyłane mogą być całe obiekty wspierany przez Rejestr RMI natywnie wykorzystywany przez Javę RPC Schemat działania 12

1.4.3 Problemy Problemy w programowaniu współbieżnym Wzajemne wykluczanie i zagłodzenia Dostęp wielu procesów do niepodzielnego zasobu Wyścig do zasobów wzajemne nadpisywanie danych bardzo trudne w diagnostyce Zakleszczenia (deadlock, blokada wzajemna) wiele procesów starających się o te same zasoby Tematyka synchronizacji procesów oraz wykrywania i zapobiegania powyższym problemom będzie dokładniej omówiona na następnym wykładzie. 2 Watki 2.1 Pojęcie watku Geneza W tradycyjnych ujęciu, w procesie występował tylko jeden wątek sterowania. Złożone problemy wymagały podejścia współbieżnego... Przełączanie kontekstu obniża wydajność Zwykle wykonywany jest ten sam kod, używane te same dane i pliki... Pełne przełączanie kontekstu jest zbędne Definicja watku Watek We współczesnych systemach operacyjnych proces może mieć więcej niż jeden watek sterowania. Wątek taki (nazywany procesem lekkim) posiada własny licznik rozkazów, zestaw rejestrów procesora oraz stos, dzieląc z pozostałymi wątkami w ramach procesu kod programu, dane i otwarte pliki. Proces vs Watek Zalety wielowatkowości Zdolność do reagowania jeden wątek obsługuje interakcje pozostałe wykonują czasochłonne operacje Dzielenie zasobów kilka wątków może działać w oparciu o te same dane Ekonomika 13

Rysunek 7: Proces a wątek tworzenie procesu wymaga zasobów (czas procesora, pamięć) przełączanie procesu zajmuje więcej czasu od przełączania wątku Wykorzystanie architektur wieloprocesorowych wątki mogą być wykonywane przez różne procesory Watki użytkownika i watki jadra Wątki mogą być implementowane na dwóch poziomach: Wątki użytkownika - udostępniane przez bibliotekę systemową (a więc powyżej jądra) szybsze działanie brak wsparcia ze strony systemu operacyjnego zwykle operacja blokująca w jednym z wątków blokuje cały proces Np. biblioteka pthread Wątki jądra - implementowane w systemie operacyjnym jądro obsługuje tworzenie i zarządzanie wątkami wolniejsze system operacyjny może wpływać na przydział wątków do procesorów operacje blokujące blokują tylko dany wątek 14

Rysunek 8: Modele wielowątkowości: wiele na jeden 2.2 Modele wielowatkowości Modele wielowatkowości Zależnie od implementacji, wątki użytkownika mogą być rzutowane na różną liczbę wątków jądra: wiele na jeden jeden na jeden wiele na wiele Modele wielowatkowości Model wiele na jeden Zarządzanie wątkami w przestrzeni użytkownika Brak współbieżności w ramach procesu: niemożliwa praca na wieloprocesorze wywołanie systemowe blokuje wszystkie wątki Stosowany często tam, gdzie brak wątków jądra Modele wielowatkowości Model jeden na jeden Zarządzanie procesami po stronie jądra SO Wątki realizowane są współbieżnie: możliwa praca na wieloprocesorze wywołania systemowe realizowane niezależnie Zwykle ograniczona liczba 15

Rysunek 9: Modele wielowątkowości: jeden na jeden Modele wielowatkowości Model wiele na wiele Multipleksacja wątków użytkownika na tyle samo lub mniej wątków jądra Elastyczne, łączą zalety obydwu poprzednich modeli: wątki realizowane współbieżnie brak ograniczeń ilościowych 2.3 Wybrane zagadnienia wielowatkowości Wywołania systemowe fork() i exec() Czy w wyniku funkcji fork() ma być powielony tylko aktualny wątek czy cały proces ze wszystkimi wątkami? Czy funkcja exec() ma zastąpić całą treść procesu, czy tylko bieżącego wątku? Kasowanie watków Kiedy można bezpiecznie wymusić zakończenie wątku? Zakończenie asynchroniczne: wątek kończony jest natychmiastowo teoretycznie powinny być zwolnione wszystkie przydzielone zasoby co, jeśli wątek operował na wspólnych danych procesu? Zakończenie odroczone: wątek cyklicznie sprawdza, czy powinien się zakończyć programista określa punkty, w których takie sprawdzenie powinno nastąpić 16

Rysunek 10: Modele wielowątkowości: wiele na wiele Dygresja - sygnały W systemach klasy UNIX sygnały powiadamiają o zajściu zdarzeń. Sygnały synchroniczne informują o błędach krytycznych spowodowanych przez proces (wątek): dzielenie przez zero niedozwolony dostęp do pamięci Sygnały asynchroniczne informują o zdarzeniach zewnętrznych względem procesu: wciśnięcie kombinacji CTRL + C upływ czasu Proces (wątek) może określać, jakie sygnały będzie odbierać a jakie ignorować. Każdy sygnał ma domyślną procedurę obsługi Użytkownik może użyć własnej procedury obsługi sygnału Obsługa sygnałów przez watki Do którego wątku sygnał powinien być dostarczony? do tego, którego sygnał się odnosi? do wszystkich wątków w procesie? do niektórych wątków w procesie? wydzielić wątek do obsługi sygnałów? Jak postępować z sygnałami synchronicznymi? Jak postępować z sygnałami asynchronicznymi? 17

Pule watków W serwerach usług zwykle kolejne żądania obsługuje się w różnych wątkach Tworzenie wątku wymaga czasu (utworzenie wątku, inicjalizacja) Usprawnienie: Zalety: tworzymy pewną liczbę wątków wykonawczych, zaliczamy je do puli i usypiamy przy nadchodzącym żądaniu budzimy wątek z puli i zlecamy mu wykonanie zadania jeśli brak wolnego wątku czekamy na zwolnienie oszczędniejsze gospodarowanie wątkami wymusza ograniczenie ilości wątków w systemie większa wydajność Dane specyficzne dla watku Standardowo wątek dzieli pamięć danych w ramach całego procesu W niektórych sytuacjach potrzebna jest kopia danych specyficzna dla konkretnego wątku Odpowiednie wsparcie definiują biblioteki pthread oraz win32 2.4 Watki POSIX Watki POSIX Watki POSIX (Pthreads, P-watki) Standard POSIX specyfikuje interfejs programowy (API) do tworzenia wątków i ich synchronizacji. Standard nie określa implementacji ta ściśle zależy od możliwości systemu operacyjnego. Wątki w standardzie POSIX dostępne są w większości systemów klasy UNIX, a także w postaci odrębnego oprogramowania - w systemach z rodziny Windows. Wątki POSIX działają w przestrzeni użytkownika. Dziękuję za uwagę! 18