• Nie Znaleziono Wyników

SYSTEMY OPERACYJNE

N/A
N/A
Protected

Academic year: 2021

Share "SYSTEMY OPERACYJNE"

Copied!
31
0
0

Pełen tekst

(1)

SYSTEMY OPERACYJNE

dr. hab. Vitaliy Yakovyna

yakovyna@matman.uwm.edu.pl http://wmii.uwm.edu.pl/~yakovyna/

UNIWERSYTET WARMIŃSKO-MAZURSKI W OLSZTYNIE

Wydział Matematyki i Informatyki

(2)

Wątki i Współbieżność

(3)

Wątki. Przegląd

(4)

Wątek

• Wątek jest podstawową jednostką wykorzystania procesora

• Wątek zawiera:

• Identyfikator wątku

• Licznik programu

• Zestaw rejestrów

• Stos

• Wątek dzieli z innymi wątkami:

• Sekcję kodu

• Sekcję danych

• Inne zasoby systemu operacyjnego (otwarte pliki, sygnały itp.)

(5)

Procesy Jednowątkowe i

Wielowątkowe

(6)

Motywacja

• Aplikacja zazwyczaj jest implementowana jako oddzielny proces z kilkoma wątkami

• Metoda tworzenia procesów była powszechnie stosowana, zanim wątki stały się popularne

• Tworzenie procesów jest czasochłonne i wymaga dużych zasobów

• Zwykle bardziej efektywne jest używanie jednego procesu zawierającego wiele wątków

(7)

Wielowątkowa Architektura

Serwera

(8)

Korzyści

• Responsywność

• Współdzielenie zasobów

• Ekonomia

• Skalowalność

(9)

Programowanie

Wielordzeniowe

(10)

Równocześnie i Równoległe

Wykonywanie

(11)

Wyzwania Programistyczne

1) Identyfikacja zadań. Idealnie, zadania są niezależne.

2) Równowaga. Zadania powinny wykonywać równą pracę o równej wartości.

3) Podział danych. Dane muszą być podzielone, aby działały na osobnych rdzeniach.

4) Zależność od danych. Wykonywanie zadań musi być zsynchronizowane.

5) Testowanie i debugowanie. Gdy program działa

równolegle na wielu rdzeniach, możliwych jest wiele różnych ścieżek wykonania.

(12)

Reguła Amdahla

• Jeśli S jest częścią aplikacji, która musi być wykonywana sukcesywnie w systemie z N rdzeniami, formuła wygląda następująco:

𝑝𝑟𝑧𝑦𝑠𝑝𝑖𝑒𝑠𝑧𝑒𝑛𝑖𝑒 ≤ 1

𝑆 + (1 − 𝑆)

• Gdy N → ∞, przyspieszenie zbiega się do 1/S𝑁

• Szeregowa część aplikacji może mieć

nieproporcjonalny wpływ na wydajność, którą uzyskujemy poprzez dodanie dodatkowych rdzeni

(13)

Reguła Amdahla: Przykład

(14)

Rodzaje Równoległości

(15)

Modele Wielowątkowości

• Model „wiele do jednego” (Green threads – biblioteka dla systemu Solaris)

• Model „jeden do jednego” (Windows, Linux)

(16)

Modele Wielowątkowości

• Model „wiele do wielu”

• Model dwupoziomowy

(17)

Wątki Asynchroniczne

• Gdy rodzic tworzy wątek dziecko, rodzic wznawia wykonanie

• Rodzic i dziecko wykonują się równocześnie i niezależnie

• Zwykle niewiele danych są dzielone między wątkami

• Asynchroniczne wątkowanie jest strategią

stosowaną na serwerze wielowątkowym i jest również powszechnie używane do projektowania responsywnych interfejsów użytkownika

(18)

Wątki Synchroniczne

• Wątek rodzic tworzy jedno lub więcej dzieci, a następnie musi czekać, aż wszystkie jego dzieci zakończą się, zanim wznowi działanie

• Wątki utworzone przez rodzica wykonują pracę jednocześnie, ale rodzic nie może kontynuować wykonanie, póki ta praca nie zostanie zakończona

• Zazwyczaj wątki synchroniczne wymagają znacznej wymiany danych między wątkami

• Na przykład wątek macierzysty może łączyć wyniki obliczone przez różne dzieci

(19)

Biblioteki Wątków

• Biblioteka wątków – API do tworzenia i zarządzania wątkami

• biblioteka na poziomie użytkownika, bez obsługi jądra

• biblioteka na poziomie jądra, obsługiwana bezpośrednio przez system operacyjny

• Główne biblioteki wątków:

• POSIX Pthreads (na poziomie użytkownika lub jądra)

• Windows (biblioteka na poziomie jądra)

• Java (JVM działa na szczycie SO → API wątków Java jest zazwyczaj implementowany przy użyciu biblioteki

wątków dostępnej w systemie hosta)

(20)

Niejawne Wątkowanie

• Przeniesienie tworzenia wątków i zarządzania nimi od programistów do kompilatorów i bibliotek czasu wykonywania – niejawne wątkowanie:

oPule wątków oFork Join

oOpenMP

oGrand Central Dispatch

oIntel Thread Building Blocks

(21)

Pule Wątków

• Ogólny pomysł polega na utworzeniu kilku wątków

podczas uruchamiania i umieszczeniu ich w pulę, gdzie czekają na pracę. Korzyści:

1) Obsługa żądania za pomocą istniejącego wątku jest często szybsza niż oczekiwanie na tworzenie wątku 2) Pula wątków ogranicza liczbę wątków, które istnieją

w dowolnym momencie

3) Oddzielenie zadania od mechaniki jego tworzenia pozwala korzystać z różnych strategii do

uruchamiania zadania (np. wykonywanie po pewnym czasie lub okresowo)

(22)

Fork Join

• Model synchroniczny

• Biblioteka zarządza liczbą tworzonych wątków i odpowiada również za przypisywanie zadań do wątków

(23)

Fork Join w Javie

• Wersja 1.7 interfejsu API

• Zaprojektowany do użycia z rekurencyjnymi algorytmami dziel-i-rządź

Task(problem)

if problem is small enough

solve the problem directly else

subtask1 = fork(new Task(subset of problem)) subtask2 = fork(new Task(subset of problem)) result1 = join(subtask1)

result2 = join(subtask2) return combined results

(24)

OpenMP

• Zestaw dyrektyw

kompilatora oraz API dla programów napisanych w C, C ++ lub FORTRAN

• Dostępne na kilku kompilatorach open- source i komercyjnych dla systemów Linux, Windows i MacOS

#include <omp.h>

#include <stdio.h>

int main(int argc, char

*argv[]) {

/* sequential code */

#pragma omp parallel {

printf("I am a parallel region.");

}

/* sequential code */

return 0;

}

(25)

Grand Central Dispatch

• Technologia opracowana przez Apple dla MacOS i iOS

• GCD to połączenie biblioteki czasu wykonywania, interfejsu API i rozszerzeń językowych

• GCD planuje zadania do wykonania, umieszczając ich w kolejce wysyłki

• Gdy usuwa zadanie z kolejki, przypisuje to zadanie do dostępnego wątku z puli wątków

• Liczba wątków w puli rośnie i zmniejsza się w

zależności od potrzeb aplikacji i wydajności systemu

(26)

Intel Thread Building Blocks

• Biblioteka szablonów obsługująca projektowanie aplikacji równoległych w C ++

• Programiści określają zadania, które mogą działać równolegle, a planista zadań TBB mapuje te zadania na podstawowe wątki

• Planista zadań zapewnia równoważenie obciążenia i jest świadomy pamięci podręcznej

• Intel TBB ma zarówno wersje komercyjne, jak i

open-source, które działają w systemie Windows, Linux i MacOS

(27)

Wątki i Współbieżność.

Streszczenie

(28)

Streszczenie (1)

• Wątek jest podstawową jednostką wykorzystania

procesora, a wątki należące do tego samego procesu współdzielą wiele zasobów procesu, w tym kod i dane.

• Aplikacje wielowątkowe mają cztery podstawowe zalety: (1) szybkość reakcji, (2) współużytkowanie zasobów, (3) oszczędność i (4) skalowalność.

• Współbieżność występuje, gdy postępuje wiele wątków, równoległość istnieje, gdy wiele wątków postępuje jednocześnie. W systemie z pojedynczym procesorem możliwa jest tylko współbieżność;

równoległość wymaga systemu wielordzeniowego.

(29)

Streszczenie (2)

• W projektowaniu aplikacji wielowątkowych jest kilka wyzwań. Obejmują one dzielenie i

równoważenie pracy, dzielenie danych między

różne wątki i identyfikowanie zależności pomiędzy danymi. Wreszcie programy wielowątkowe są

szczególnie trudne do testowania i debugowania.

• Równoległość danych rozdziela podzbiory danych na różne rdzenie i wykonuje tę samą operację na każdym rdzeniu. Równoległość zadań rozdziela nie dane, ale zadania na wiele rdzeni. Każde zadanie uruchamia unikalną operację.

(30)

Streszczenie (3)

• Aplikacje tworzą wątki na poziomie użytkownika, które muszą być ostatecznie zmapowane na wątki jądra, aby mogły zostać uruchomione na CPU. Model „wiele-do- jednego” odwzorowuje wiele wątków na poziomie użytkownika na jeden wątek jądra. Inne podejścia obejmują modele jeden-do-jednego i wiele-do-wielu.

• Biblioteka wątków zapewnia interfejs API do tworzenia i zarządzania wątkami. Trzy popularne biblioteki

wątków to Windows, Pthreads i Java. Windows jest

przeznaczony tylko dla systemu Windows, podczas gdy Pthreads jest dostępny dla systemów zgodnych z POSIX, takich jak UNIX, Linux i macOS. Wątki Java będą działać na dowolnym systemie obsługującym wirtualną

maszynę Java.

(31)

Streszczenie (4)

• Niejawne wątki obejmują identyfikację zadań – a nie wątków – i umożliwienie językom lub

strukturom API tworzenia i zarządzania wątkami.

Istnieje kilka podejść do niejawnego wątkowania, w tym pule wątków, ramy fork-join i Grand Central

Dispatch. Niejawne wątkowanie staje się coraz powszechniejszą techniką, z której programiści mogą korzystać przy tworzeniu aplikacji

współbieżnych i równoległych.

Cytaty

Powiązane dokumenty

‒ formułuje wnioski na podstawie danych statystycznych dotyczących produkcji energii elektrycznej oraz struktury jej produkcji na świecie.. ‒ formułuje problemy związane

Procesy typu sched_rr i sched_other, które nie wykorzystały jeszcze swojego kwantu czasu lub procesy typu sched_fifo, które oczekują na przydzie- lenie cpu znajdują się w tej

Jeśli w systemie jest tylko jeden proces gotowy do wykonania, to może on otrzymać cpu na tak dłu- go, jak potrzebuje, ale jeśli po pewnym czasie pojawi się inny proces gotów

– aktywnie uczestniczy w burzy mózgów i, przyjmując rolę lidera, podsumowuje wyniki pracy swojej grupy i prezentuje je pozostałym uczniom.. – przeprowadza wywód myślowy

kiej kolegiaty, m ożna stw ierdzić, że został on podzielony na dw a niejako niezależne cykle, rozw ijające się nieprzerw anie od strony lewej ku stronie praw ej:

‒ omawia strukturę produkcji energii elektrycznej na świecie na podstawie wykresów i danych statystycznych?. ‒ przedstawia czynniki wpływające na strukturę produkcji energii

2x kolokwium zadania domowe projekt zaliczeniowy aktywność na

Analizując dane dotyczące dyskursu społecznościowego, należy wskazać, że również ten obszar mediów jest wyraźnie zdominowany przez płeć męską. Wszystkie trzy badane