Synchronizacja w jądrze Linux
|
|
- Kazimiera Drozd
- 7 lat temu
- Przeglądów:
Transkrypt
1 Synchronizacja w jądrze Linux Michał Nazarewicz Instytut Informatyki Politechniki Warszawskiej 3 kwietnia 2010
2 1 Wstęp Po co synchronizować? Synchronizacja w kontekście jądra? 2 Mechanizmy nieblokujące Brak synchronizacji i bariery pamięci Zmienne atomowe i licznik referencji Operacje na bitach Porównaj i zamień 3 Śpiące mechanizmy blokujące Kolejka oczekiwania Semafory i muteksy 4 Nieśpiące mechanizmy blokujące Przerwania i wywłaszczanie Spinlocki 5 Zakończenie Podsumowanie Źródła
3 Po co synchronizować? Systemy z wieloma procesorami stają się powszechne. Współbieżność pozwala lepiej wykorzystać zasoby sprzętu. Stosowanie wątków może uprościś logikę aplikacji. Jest to prawdziwe również w jądrze. Jeżeli wiele jednostek wykonania operuje na tych samym danych potrzebna jest synchronizacja.
4 Po co synchronizować? Systemy z wieloma procesorami stają się powszechne. Współbieżność pozwala lepiej wykorzystać zasoby sprzętu. Stosowanie wątków może uprościś logikę aplikacji. Jest to prawdziwe również w jądrze. Jeżeli wiele jednostek wykonania operuje na tych samym danych potrzebna jest synchronizacja. Wyścig Sytuacja, w której co najmniej dwa logiczne konkteksty wykonania (procesy, zadania itp.) wykonują operację na zasobach dzielonych, a ostateczny wynik zależy od momentu realizacji. za dr. Krukiem
5 Po co synchronizować?, kont. Inkrementacja licznika Wątek 1 Wątek 2 rejestr licznik rejestr rejestr + 1 rejestr licznik licznik rejestr rejestr rejestr + 1 licznik rejestr
6 Po co synchronizować?, kont. Inkrementacja licznika Wątek 1 Wątek 2 rejestr licznik rejestr rejestr + 1 rejestr licznik licznik rejestr rejestr rejestr + 1 licznik rejestr Ogólny schemat odczyt-modyfikacja-zapis Wątek 1 Wątek 2 odczyt modyfikacja odczyt zapis modyfikacja zapis
7 Synchronizacja w kontekście jądra? W przestrzeni użytkownika też synchronizujemy. To już wszystko było! Ale... Każdy cykl zegara spędzony w jądrze to cykl stracony. Jednocześnie wszyscy korzystają z usług jądra. Stąd bardzo duży nacisk na wydajność. Jądro pracuje w wielu kontekstach. Przerwania przychodzą w dowolnym momencie. Jest wiele poziomów przerwań.
8 Mechanizmy nieblokujące Tradycyjna sekcja krytyczna zmusza wątki na czekanie przy wchodzeniu. Czekanie to... strata czasu. Lepiej nie czekać, niż czekać. Wiele algorytmów można zrealizować korzystając z lekkich mechanizmów synchronizacji, które nie blokują kontekstu wykonania.
9 Kiedy nie synchronizować? Istnieje duży nacisk na wydajność jądra. Dlatego niektóre operacje nie są synchronizowane. System zakłada, że jest to powinność użytkownika.
10 Kiedy nie synchronizować?, kod Wywołanie systemowe read(2) static ssize t sys read (unsigned fd, char user buf, size t count) { ssize t ret = -EBADF; struct file file ; int fput needed; file = fget light (fd, &fput needed); if ( file ) { loff t pos = file ->f off ; ret = vfs read( file, buf, count, &pos); file ->f off = pos; fput light ( file, fput needed); return ret ;
11 Bufor cykliczny Jeden producent. Jeden konsument. Jak obsługa klawiatury w DOS-ie.
12 Bufor cykliczny, kod Bufor cykliczny, dane static unsigned buffer [16], head, tail ; #define inc(v) (((v) + 1) % (sizeof buffer / sizeof buffer )) Bufor cykliczny, funkcje static int pop(unsigned ret) { if (head!= tail ) return -ENOENT; ret = buffer [ tail ]; tail = inc( tail ); return 0; static int push(unsigned value) { if ( inc(head) == tail) return -ENOSPC; buffer [head] = value; head = inc(head); return 0;
13 Bariery pamięci Procesor może przestawiać operacje zapisu i odczytu. Procesor może postrzegać operacje w losowej kolejności. Bariery wymuszają częściowy porządek operacji.
14 Bariery pamięci Procesor może przestawiać operacje zapisu i odczytu. Procesor może postrzegać operacje w losowej kolejności. Bariery wymuszają częściowy porządek operacji. Bufor cykliczny, poprawiony static int pop(unsigned ret) { if (head!= tail ) return -ENOENT; smp rmb(); ret = buffer [ tail ]; tail = inc( tail ); return 0; static int push(unsigned value) { if ( inc(head) == tail) return -ENOSPC; buffer [head] = value; smp wmb(); head = inc(head); return 0;
15 Bariery pamięci, kont. Niepoprawny wielowątkowy singleton struct foo foo singleton () { static struct mutex mutex; static struct foo foo; if (!foo) { mutex lock(&mutex); if (!foo) { struct foo f = malloc(sizeof f); init foo (f); foo = f mutex unlock(&mutex); return foo;
16 Zmienne atomowe Linux wyposażony jest w zmienne atomowe (atomic t). Operacja na zmiennych atomowych są... atomowe. Dostępne operacje na zmiennych atomowych atomic set atomic read atomic add atomic add return atomic add negative atomic sub atomic sub return atomic sub and test atomic inc atomic inc return atomic inc and test atomic dec atomic dec return atomic dec and test atomic add unless atomic inc not zero atomic xchg atomic cmpxchg
17 Licznik referencji W oparciu o zmienne atomowe zaimplementowany jest licznik referencji (struct kref). Dostępne operacje: kref set, kref init, kref get oraz kref put.
18 Licznik referencji, kod Obiekt współdzielony struct foo { struct kref ref ; /... / ; struct foo new foo(/... /) { struct foo foo = kmalloc( sizeof foo, GFP KERNEL); kref init (&foo->ref); /... / return foo; void foo get( struct foo foo) { kref get (&foo->ref); void foo release ( struct kref ref ) { struct foo foo = container of ( ref, struct foo, ref ); /... / kfree (foo); void foo put( struct foo foo) { kref put (&foo->ref, foo release );
19 Zmienne atomowe w przestrzeni użytkownika basic string assign (const basic string & str) { CharT tmp = str. M rep()-> M grab(); M rep()-> M dispose(); M dataplus. M p = tmp; return this ; CharT M grab() { if ( M refcount >= 0) { sync fetch and add (& M refcount, 1); return M refdata() ; else { Rep r = Rep:: S create ( M length, M capacity); M copy( r-> M refdata(), M refdata(), M length); M refcount = 0; return r -> M refdata(); void M dispose() { if ( sync fetch and add (& M refcount, -1) <= 0) M destroy(); void M leak() { if ( M rep()-> M refcount > 0) M mutate(0, 0, 0); M rep()-> M refcount = -1;
20 Operacje na bitach Podobnym mechanizmem są atomowe operacja na bitach. Nadają się idealnie, jeżeli chcemy wykonać coś raz. Dostępne operacje na bitach set bit test and set bit clear bit test and clear bit change bit test and change bit
21 Operacje na bitach, kod Tasklety static inline void tasklet schedule ( struct tasklet struct t) { if (! test and set bit (TASKLET STATE SCHED, &t->state)) tasklet schedule (t); static void tasklet action ( struct softirq action a) { /... / if (! test and set bit (TASKLET STATE RUN, &t->state)) { clear bit (TASKLET STATE SCHED, &t->state); t->func(t->data); smp mb before clear bit () ; clear bit (TASKLET STATE RUN, &t->state); /... /
22 Porównaj i zamień Atomowe operacje porównaj i zamień xchg atomic xchg cmpxchg atomic cmpxchg
23 Porównaj i zamień Atomowe operacje porównaj i zamień xchg atomic xchg cmpxchg atomic cmpxchg Operacje na stosie static void push(struct node firstp, struct node n) { struct node f; do { f = firstp ; n->next = f; while (cmpxchg(firstp, f, n)!= f); static struct node pop(struct node firstp ) { struct node f; do { f = first ; while ( f && cmpxchg(firstp, f, f ->next)!= f); return f ;
24 Mechanizmy blokujące Proste atomowe operacje często nie wystarczają. Zazwyczaj trzeba modyfikować wiele zmiennych na raz. Często trzeba również czekać na wystąpienie pewnych warunków. W takich sytuacjach sprawdzają się mechanizmy blokujące.
25 Kolejka oczekiwania Podstawowym mechanizmem blokującym jest kolejka oczekiwania (wait queue head t), która służy do tworzenia listy, w której zadania oczekują, aż inne zadania je obudzą. Zazwyczaj korzysta się z niej poprzez interfejs wait event (i warianty).
26 Kolejka oczekiwania, kod Blokujący bufor cykliczny, dane static DECLARE WAIT QUEUE HEAD(push queue); static DECLARE WAIT QUEUE HEAD(pop queue); unsigned empty = sizeof buffer / sizeof buffer, full ; Blokujący bufor cykliczny, funkcje static int pop(unsigned ret) { wait event (pop queue,! full ); -- full ; ret = buffer [ tail ]; tail = inc( tail ); ++empty; wake up(push queue); return 0; static int push(unsigned value) { wait event (push queue,!empty); --empty; buffer [head] = value; head = inc(head); ++full; wake up(pop queue); return 0;
27 Spanie a sygnały Funkcja wait event blokuje sygnały! Procesu blokującego sygnały nie da się zabić! Lepiej użyć wait event interruptible.
28 Spanie a sygnały Funkcja wait event blokuje sygnały! Procesu blokującego sygnały nie da się zabić! Lepiej użyć wait event interruptible. Kolejka oczekiwania, wersja interruptible static int pop(unsigned ret) { if ( wait event interruptible (pop queue,! full )) return -EINTR; -- full ; ret = buffer [ tail ]; tail = inc( tail ); ++empty; wake up(push queue); return 0; static int push(unsigned value) { if ( wait event interruptible (push queue,!empty)) return -EINTR; --empty; buffer [head] = value; head = inc(head); ++full; wake up(pop queue); return 0;
29 Semafory Użyty mechanizm to klasyczny semafor. Semafory są rzecz jasna dostępne w jądrze. Dostępne operacje: sema init, down, down trylock, down interruptible, down killable, down timeout oraz up. Semafor Obiekt inicjowany nieujemną liczbą całkowitą, na której zdefiniowane są dwie niepodzielne operacje: down(sem) { while (!sem); --sem;. up(sem) { ++sem; i za dr. Krukiem
30 Semafory, kod Bufor cykliczny na semaforach, dane static struct semaphore push sem, pop sem; static void init (void) { sema init(&push sem, sizeof buffer / sizeof buffer ); sema init(&pop sem, 0); Bufor cykliczny na semaforach, funkcje static int pop(unsigned ret) { if ( down interruptible (pop sem)) return -EINTR; ret = buffer [ tail ]; tail = inc( tail ); up(push sem); return 0; static int push(unsigned value) { if ( down interruptible (push sem)) return -EINTR; buffer [head] = value; head = inc(head); up(pop sem); return 0;
31 Muteksy Pewnym szczególnym rodzajem semaforów są muteksy. Z założenia stworzone do implementowania sekcji krytycznej. Dostępne operacje: mutex is locked, mutex lock i wiarianty plus wersje... nested, mutex try lock, mutex unlock.
32 Muteksy, kod Kolejka chroniona muteksem static DEFINE MUTEX(mutex), LIST HEAD(first); static int push(struct list head n) { if ( mutex lock interruptible (&mutex)) return -EINTR; list add tail (& first, n); mutex unlock(&mutex); return 0; static struct list head pop(void) { struct list head ret = NULL; if ( mutex lock interruptible (&mutex)) return PTR ERR(-EINTR); if (! list empty (& first )) { ret = first.next; list del ( ret ); mutex unlock(&mutex); return ret ;
33 Muteksy, nested? Zakleszczenie Pojęcie opisujące sytuację, w której co najmniej dwie różne akcje czekają na siebie nawzajem, więc żadna nie może się zakończyć. za Wikipedią
34 Muteksy, nested? Zakleszczenie Pojęcie opisujące sytuację, w której co najmniej dwie różne akcje czekają na siebie nawzajem, więc żadna nie może się zakończyć. za Wikipedią Linux ma mechanizm weryfikacji synchronizacji. Dzieli muteksy itp. na klasy. Sprawdza, czy klasy są blokowane w tej samej kolejności. Nie można zablokować dwóch muteksów z tej samej klasy. Co w takim razie z muteksami w hierarchii? Po to jest właśnie mutex lock nested itp.
35 Nieśpiące mechanizmy Przedstawione dotychczas mechanizmy blokujące mogą przełączyć zadanie w stan uśpienia. W pewnych kontekstach spanie jest niedopuszczalne. Wewnątrz funkcji obsługi przerwania. Gdy przerwania są wyłączone. Ogólnie w kontekście atomowym. Ale na szczęście są inne mechanizmy.
36 Wyłączanie przerwań Będąc w kodzie jądra możemy wyłączyć przerwania. local irq diable wyłącza, a local irq enable włącza przerwania. Ale co jeśli w momencie wejścia do sekcji krytycznej przerwania już były wyłączone? Na pomoc przychodzą local irq save i local irq restore. Trzeba uważać pewne funkcje mogą spowodować przełączenie kontekstu nawet jeżeli przerwania są wyłączone. A poza tym, wyłączanie przerwań jest lokalne dla procesora.
37 Wyłączanie wywłaszczania Linux wspiera wywłaszczanie wewnątrz kodu jądra. Zmniejsza to czas reakcji, ale komplikuje synchronizację. Można ten mechanizm wyłączyć. Dostępne operacje preempt disable i preempt enable są rekurencyjne, ale lokalne dla konkretnego procesora.
38 Spinlock Spinlock działa jak muteks, ale stosuje aktywne oczekiwanie, dzięki czemu nie zasypia. Użycie: spin lock... spin unlock. Też mają wersję... nested.
39 Spinlock, kod Kolejka chroniona spinlockiem static DEFINE SPINLOCK(lock), LIST HEAD(first); static void push(struct list head n) { spin lock (&lock); list add tail (& first, n); spin unlock(&lock); static struct list head pop(void) { struct list head ret = NULL; spin lock (lock); if (! list empty (& first )) { ret = first.next; list del ( ret ); spin unlock(&lock); return ret ;
40 Spinlock a przerwania Co jeśli w sekcji krytycznej przyjdzie przerwanie? Przerwanie w sekcji krytycznej Kontekst użytkownika spin lock przychodzi przerwanie Przerwanie spin lock zakleszczenie Gdy spinlock używany jest również w przerwaniu, w kontekście użytkownika trzeba przerwania wyłączyć (spin lock irqsave... spin unlock irqrestore). Jest też wersja spin lock irq... spin unlock irq
41 Spinlock a przerwania, kod Kolejka chroniona spinlockiem, poprawiona static void push(struct list head n) { unsigned long flags ; spin lock irqsave (&lock, flags ); list add tail (& first, n); spin unlock irqrestore (&lock, flags ); static struct list head pop(void) { struct list head ret = NULL; unsigned long flags ; spin lock irqsave (&lock, flags ); if (! list empty (& first )) { ret = first.next; list del ( ret ); spin unlock irqrestore (&lock, flags ); return ret ;
42 Podsumowanie Linux jest bardzo złożonym oprogramowaniem. Wiele mechanizmów jest znanych z przestrzeni użytkownika. Nacisk na wydajność i przerwania komplikują sytuację. Dlatego jest wiele mechanizmów unikalnych dla jądra. Czyni to synchronizację w kernelu bardzo ciekawą! Ale i złożoną i trudną.
43 Czego nie było... Siedem rodzai barier pamięci. Big Kernel Lock. Kolejka oczekiwań to coś o wiele więcej niż wait event. spin lock bh. Zmienne per CPU. Alokacja pamięci a synchronizacja.
44 Skąd czerpać informacje? Use the Source, Luke. Podkatalog Documentation w źródlach. Publiczne serwery LXR. LWN.net STER z dr. W. Zabołotnym Linux Device Drivers, Third Edition Daniel P. Bovet, Marco Cesati. Understanding the Linux Kernel.
45 Dziękuję za uwagę! Pytania? Opinie? Sugestie? Michał Nazarewicz
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
Prosty sterownik. Michał mina86 Nazarewicz. 6marca
http://mina86.com/ mina86@mina86.com 6marca2010 O czym będzie prezentacja? Szkielet sterownika. Plik urządzenia. Operacje read(2) i write(2). Operacja lseek(2). Zarządzanie pamięcią. Wzajemne wykluczanie.
Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB
Wykład 4 Synchronizacja procesów (i wątków) cześć I Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Potrzeba synchronizacji Procesy wykonują się współbieżnie. Jeżeli w 100% są
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
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)
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
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
Wykład 2 Proces, stany procesu i przejścia pomiędzy nimi. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB
Wykład 2 Proces, stany procesu i przejścia pomiędzy nimi. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB Przypomnienie z poprzedniego semestru W systemach jednoprogramowych (MS-DOS)
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: QNX Neutrino Interrupts Mariusz Rudnicki 2016 Wstęp W QNX Neutrino wszystkie przerwania sprzętowe przechwytywane są przez jądro systemu. Obsługę
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
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.
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
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
1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4
Spis treści 1 Wątki 1 2 Tworzenie wątków 1 3 Synchronizacja 3 4 Dodatki 3 5 Algorytmy sortowania 4 6 Klasa Runnable 4 Temat: Wątki Czym są wątki. Grafika. Proste animacje. Małe podsumowanie materiału.
Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ
Procesy i wątki Proces posiada samodzielne środowisko wykonawcze. Proces posiada własny zestaw podstawowych zasobów w czasie wykonywania; W szczególności, każdy proces ma własną przestrzeń pamięci. W uproszczeniu
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
Języki i Techniki Programowania II. Wykład 7. Współbieżność 1
Języki i Techniki Programowania II Wykład 7 Współbieżność 1 Programy, Procesy, Wątki Program to zestaw instrukcji do wykonania, dane do przetworzenia, mechanizmy sterujące (stos) Proces w komputerze to
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
Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych
Algorytmy i Struktury Danych Wykład IV Sortowania cd. Elementarne struktury danych 1 Co dziś? Dolna granica sortowań Mediany i statystyki pozycyjne Warstwa implementacji Warstwa abstrakcji #tablice #listy
synchronizacji procesów
Dariusz Wawrzyniak Definicja semafora Klasyfikacja semaforów Implementacja semaforów Zamki Zmienne warunkowe Klasyczne problemy synchronizacji Plan wykładu (2) Semafory Rodzaje semaforów (1) Semafor jest
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
Wykład 7 Podręczna pamięć buforowa (ang. buffer cache) w systemie Linuks. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB
Wykład 7 Podręczna pamięć buforowa (ang. buffer cache) w systemie Linuks Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB Wstęp Przyczyną wprowadzenia pamięci buforowej są ogromne różnice
Struktury. Przykład W8_1
Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla
Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB
Wykład 5 Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Wady semaforów Jeden z pierwszych mechanizmów synchronizacji Generalnie jest to mechanizm bardzo
Problemy współbieżności
Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np. komputery macierzowe) realizowana programowo (bariera, sekcja krytyczna, operacje atomowe) wzajemne wykluczanie
Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.
Laboratorium 7 Wstęp Jednym z podstawowych własności Javy jest wielowątkowość. Wiąże się to z możliwością współbieżnego wykonywania różnych operacji w ramach pojedynczej wirtualnej maszyny Javy (JVM).
Zaawansowany kurs języka Python
Wykład 6. 6 listopada 2015 Plan wykładu Callable objects 1 Callable objects 2 3 Plan wykładu Callable objects 1 Callable objects 2 3 Callable objects Wszystko jest obiektem. Callable objects Wszystko jest
Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory
Dzisiejszy wykład Klasa string wersja prosta wersja ze zliczaniem odwołań Wyjątki Specyfikator volatile Semafory 1 Klasa string Przetwarzanie tekstów jest powszechną dziedziną zastosowań komputerów W języku
Mariusz Rudnicki PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.2
Mariusz Rudnicki mariusz.rudnicki@eti.pg.gda.pl PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.2 Architektura - Procesy Proces program załadowany do pamięci; identyfikowany przez id procesu, zwykle nazywany
Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce
Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
1. Tworzenie nowego projektu.
Załącznik do Instrukcji 1. Tworzenie nowego projektu. Wybieramy opcję z menu głównego New->QNX C Project. Wprowadzamy nazwę przechodzimy do następnego kroku NEXT. Wybieramy platformę docelową oraz warianty
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
Model pamięci. Rafał Skinderowicz
Model pamięci Rafał Skinderowicz Czym jest model pamięci Model pamięci dotyczy programów współbieżnych W programie współbieżnym może się zdarzyć, że dany wątek nie będzie widział od razu wartości zmiennej
Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB
Wykład 4 Synchronizacja procesów (i wątków) cześć I Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Procesy wykonują się współbieżnie Potrzeba synchronizacji Jeżeli w 100% są
Jedrzej Ułasiewicz Komputerowe systemy sterowania 1
Jedrzej Ułasiewicz Komputerowe systemy sterowania 1 1 Przerwania 1.1 Obsługa zdarzeń, odpytywanie i przerwania Obsługa zdarzeń jest jedną z kluczowych funkcji w prawie każdym systemie czasu rzeczywistego.
Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )
Jzyk C++ cz 3 Jarosław Gramacki Instytut Informatyki i Elektroniki # $$%%& ' ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )!" 2 # $$%%& ' ( $%%/,))3 ( %* 2 / 4 ( ( *' *''*,
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
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ć
Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().
Wątki Streszczenie Celem wykładu jest wprowadzenie do obsługi wątków w Javie. Czas wykładu 45 minut. Definiowanie wątków jako klas potomnych Thread Nadpisanie metody run(). class Watek extends Thread public
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
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
E S - uniwersum struktury stosu
Temat: Struktura stosu i kolejki Struktura danych to system relacyjny r I r i i I U,, gdzie U to uniwersum systemu, a i i - zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów
Klasyczne problemy synchronizacji
Klasyczne problemy synchronizacji Systemy Operacyjne 2 laboratorium Mateusz Hołenko 19 grudnia 2011 Plan zajęć 1 Synchronizacja 2 Problem producenta / konsumenta 3 Problem pięciu filozofów 4 Problem czytelnikó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
Język Java wątki (streszczenie)
Programowanie współbieżna Język Java wątki (streszczenie) Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Języka Java wątki Autor:
Metody getter https://www.python-course.eu/python3_object_oriented_programming.php 0_class http://interactivepython.org/runestone/static/pythonds/index.html https://www.cs.auckland.ac.nz/compsci105s1c/lectures/
Program współbieżny jest zbiorem sekwencyjnych PROGRAMOWANIE C++
PROGRAMOWANIE C++ Współdzielenie obiektów w aplikacjach współbieżnych Używanie tych samych obiektów przez różne wątki może prowadzić do niezdefiniowanego zachowania się aplikacji. Obiekty synchronizacyjne
2 Implementacja w systemie Linux 2.4
1 IPC IPC (InterProcess Communication) to udostępniane przez jądro systemu operacyjnego mechanizmy służące komunikacji oraz współdzieleniu zasobów i informacji pomiędzy procesami. IPC Systemu V udostępnia
Embedded Systems Programming
Embedded Systems Programming Device drivers - interrupts and timers Iwona Kochańska Katedra Systemów Elektroniki Morskiej WETI PG April 7, 2019 Przerwania Przerwanie - sygnał powodujacy zmianę przepływu
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ę.
Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017
Wykład 8 10 maj 2017 Współbieżność Watki w JAVA-ie Współbieżność może być realizowana na poziomie systemu operacyjnego (procesy) lub na poziomie aplikacji (watki). W JAVA-ie powszechnie stosuje się watki.
Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C
#import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:
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
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Linux Kernel III. Character devices
Linux Kernel III Character devices Urządzenia systemu Linux (I) Character device Block device Network device Do urządzenia piszemy jak do pliku, Dozwolone działania: open, close, read, write, Np. /dev/tty1.
Mariusz Rudnicki PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.4
Mariusz Rudnicki mariusz.rudnicki@eti.pg.gda.pl PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.4 Synchronizacja wątków Omawiane zagadnienia Czym jest synchronizacja wątków? W jakim celu stosuje się mechanizmy
Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017
Wykład 13 14 czerwiec 2017 Java vs cpp - podobieństwa Podobny sposób definiowania klas. Występowanie typów podstawowych: boolean, char, byte, short, int, long, float, double. Podobna zasada definiowania
Laboratorium 5: Wątki jądra i mechanizmy synchronizacji (jedne zajęcia) dr inż. Arkadiusz Chrobot
Laboratorium 5: Wątki jądra i mechanizmy synchronizacji (jedne zajęcia) dr inż. Arkadiusz Chrobot 9 kwietnia 2019 Spis treści Wprowadzenie 1 1. Wątki jądra 1 1.1. Opis API.............................................
Język ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Wykład 14. Rozwój systemu w kolenych wersjach jądra. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB
Wykład 14 Rozwój systemu w kolenych wersjach jądra Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB Plan wykładu Wstęp Zmiany związane z urządzeniami wejścia wyjścia. Pamięć podręczna
1: ////////// 2: // test.c. 3: ssize_t ret = read(fd, buf, nbytes);
Poniżej wklejone są fragmenty kodu jądra, serwerów oraz sterownika. Kod ten przedstawia zarys mechanizmu używanego przy wywołaniach usług systemowych przez procesy użytkownika. W miejscach, w których występuje
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,
Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego
150875 Grzegorz Graczyk numer indeksu imię i nazwisko 151021 Paweł Tarasiuk numer indeksu imię i nazwisko Data 2011-11-07 Kierunek Informatyka Specjalizacja Inżynieria Oprgoramowania i Analiza Danych Rok
Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton
Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu
Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C
Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C Mikrosterownik Inne nazwy: Microcontroler (z języka angielskiego) Ta nazwa jest powszechnie używana w Polsce. Mikrokomputer jednoukładowy
Wykład 12. Zarządzanie pamięcią (część III) oraz urządzenia sieciowe. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB
Wykład 12 Zarządzanie pamięcią (część III) oraz urządzenia sieciowe Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB Funkcja mmap na pliku specjalnym Funkcje systemową mmap możemy również
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()
WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński
WYKŁAD 8 Funkcje i algorytmy rekurencyjne Proste przykłady Programy: c3_1.c..., c3_6.c Tomasz Zieliński METODY REKURENCYJNE (1) - program c3_1 ======================================================================================================
Systemy operacyjne Wzajemne wykluczanie i synchronizacja
Systemy operacyjne [2] Wyścigi w systemie operacyjnym IPC - komunikacja między procesami (ang. InterProcess Communication) W SO wykonujące się procesy często dzielą obszary wspólnej pamięci, pliki lub
Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
Zwielokrotnianie wejścia wyjścia
Zwielokrotnianie wejścia wyjścia Bartłomiej Świercz Katedra Mikroelektroniki i Technik Informatycznych Łódź, 21 marca 2006 Wstęp Zwielokrotnianie wejścia wyjścia informowanie przez jądro procesu użytkownika
Zaawansowane programowanie w języku C++ Biblioteka standardowa
Zaawansowane programowanie w języku C++ Biblioteka standardowa Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
Przykład wystąpienia wyścigu. Systemy operacyjne / Wzajemne wykluczanie i synchronizacja str.4/33. Wyścigi w systemie operacyjnym.
Przykład wystąpienia wyścigu Systemy Operacyjne Wzajemne wykluczanie i synchronizacja dr inż. Tomasz Jordan Kruk T.Kruk@ia.pw.edu.pl Przykład void echo() chin = getchar(); chout = chin; putchar( chout
Łą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
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
Wykład 13. Linux 2.0.x na maszynach SMP. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB
Wykład 13 Linux 2.0.x na maszynach SMP Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB Architektura SMP Skrót od słów Symmetric Multiprocessing (Symetryczne Przetwarzenie Wieloprocesorowe)
Programowanie współbieżne Wykład 7. Iwona Kochaoska
Programowanie współbieżne Wykład 7 Iwona Kochaoska Poprawnośd programów współbieżnych Właściwości związane z poprawnością programu współbieżnego: Właściwośd żywotności - program współbieżny jest żywotny,
Aplikacje w Javie- wykład 11 Wątki-podstawy
1 Aplikacje w Javie- wykład 11 Wątki-podstawy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ http://docs.oracle.com/javase/9/docs/
Programowanie współbieżne Laboratorium nr 12
Programowanie współbieżne Laboratorium nr 12 Uwaga!!! Wyniki uruchomionych programów mogą zależeć od sprzętu (ilość procesorów, rdzeni itp.), systemu operacyjnego, obciążenia systemu operacyjnego, ilości
Szeregowanie zadań w Linux Kernel 2.6. Daniel Górski Przemysław Jakubowski
Szeregowanie zadań w Linux Kernel 2.6 Daniel Górski Przemysław Jakubowski Plan prezentacji Szeregowanie procesów - Szeregowanie - Cele szeregowania - Scheduler 2.6 - Struktury danych używane w 2.6 - Multiprocesorowość
Kurs rozszerzony języka Python
Wykład 6. 10 listopada 2017 Plan wykładu 1 2 3 Plan wykładu 1 2 3 Wszystko jest obiektem. Wszystko jest obiektem. A funkcje? Przykład def foo(x): return 2*x dir(foo) Przykład def foo(x): return 2*x dir(foo)
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:
Programowanie współbieżne Wykład 9 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska
Programowanie współbieżne Wykład 9 Synchronizacja dostępu do współdzielonych zasobów Iwona Kochańska Sekcja krytyczna Instrukcje wykonywane na zmiennych współdzielonych tworzą sekcję krytyczną. Instrukcje
Warstwy oprogramowania wejścia/wyjścia
Warstwy oprogramowania wejścia/wyjścia 1 Programy użytkownika Rosnący poziom abstrakcji Oprogramowanie systemowe niezależne od urządzenia Sterowniki urządzeń Procedury obsługi przerwań Sprzęt Funkcje sterownika
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
Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie
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ć
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
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
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
Wykład 3 Składnia języka C# (cz. 2)
Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest
Współbieżność w Javie
Wielowątkowość (obsługa wątków) Tworzenie wątków Stany wątków i ich zmiana Demony Grupy wątków Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych pakiet java.util.concurrent
WSPÓŁBIEŻNOŚĆ. MATERIAŁY:
WSPÓŁBIEŻNOŚĆ ZAGADNIENIA: procesy, wątki, synchronizacja, synchronizacja w Java 5.0 blokady, egzekutory, zbiory wątków MATERIAŁY: http://docs.oracle.com/javase/tutorial/essential/concurrency/ HTTP://USERS.UJ.EDU.PL/~CIESLA/
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
1. Uruchom poniższy program tworzący pojedynczy wątek:
9 Wątki 1. Uruchom poniższy program tworzący pojedynczy wątek: #include #include #include void* worker(void* info) int i; for(i=0; i
Wykład 3: Implementacja programów wbudowanych
Systemy wbudowane Wykład 3: Implementacja programów wbudowanych Problemy implementacji oprogramowania wbudowanego Szeregowanie zadań System operacyjny Obsługa przerwań 10/16/2010 S.Deniziak:Systemy wbudowane
Systemy operacyjne II
Systemy operacyjne II Wojciech Kwedlo Wydział Informatyki PB, p. 205 wkwedlo@ii.pb.bialystok.pl aragorn.pb.bialystok.pl/~wkwedlo Pracownia specjalistyczna: Wojciech Kwedlo Krzysztof Bandurski Wojciech
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ć
Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej.
Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Konstrukcje i Technologie w Aparaturze Elektronicznej Ćwiczenie nr 5 Temat: Przetwarzanie A/C. Implementacja
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