Przedmiot dla studentów kierunku Informatyka, studia stacjonarne II stopnia, rok 1/sem. 2,
specjalność Sieci komputerowe i systemy rozproszone
Rozkład zajęć i sala: czw. 8:00-9:30, s.6 (wykłady) i pon. 8:00-9:30, tydzień nieparzysty, s.142 (lab.)
Prowadzący: dr hab. inż. Paweł T. Wojciechowski
Email: Pawel [kropka] T [kropka] Wojciechowski [w] put.poznan.pl
Administrator sieci lab.: labadmin [w] cs.put.poznan.pl
Karta ETCS
Zapoznanie studentów z metodami, narzędziami i językami bezpiecznego programowania współbieżnego (równoległego). Oferują one modele obliczeń lub mechanizmy weryfikacji programów (detekcji błędów), które pozwalają uniknąć pewnych klas błędów programistycznych.
Przez ostatnie dziesięciolecia obowiązywało prawo Moore'a: wprowadzenie kolejnej nowej generacji procesorów sprawiało, że programy mogły działać szybciej. Te czasy minęły. Układy procesorowe nowych generacji będą miały więcej jednostek CPU, ale każda pojedyncza jednostka CPU nie będzie szybsza od modelu z poprzedniego roku (zob. np. Our Manycore Future). Aby programy działały szybciej, musimy pisać programy równoległe (współbieżne).
Pisanie poprawnych programów współbieżnych jest zwykle znacząco trudniejsze niż pisanie analogicznych programów sekwencyjnych. Ponieważ programy współbieżne wykonywane są w sposób niedeterministyczny, ich testowanie jest trudne, a wykrycie i usunięcie wszystkich błędów programistycznych praktycznie niemożliwe.
W ramach przedmiotu poznamy wybrane metody, języki oraz narzędzia, które pozwalają na bezpieczne programowanie współbieżne, tj. z gwarancją braku określonej klasy błędów programistycznych. Przyjrzymy się zarówno tradycyjnym technikom programowania, które korzystają z monitorów i zamków, jak również technikom alternatywnym, opartym na programowaniu funkcyjnym i przesyłaniu komunikatów. Omówiona zostanie też pamięć transakcyjna, czyli najnowsze podejście do bezpiecznego programowania współbieżnego. Polega ono na przeniesieniu rozwiązań z transakcji bazodanowych do ogólnie dostępnych języków programowania. Poznamy też przykładowe algorytmy i narzędzia do dynamicznej i statycznej detekcji błędów w programowaniu współbieżnym.
Szczegółowe zagadnienia obejmują:
Celem zajęć laboratoryjnych jest przedstawienie wybranych powyższych zagadnień od strony praktycznej; przykładowe języki i narzędzia to: