Przedmiot dla studentów kier. Informatyka, studia stac. II st., specjalność Sieci komputerowe i systemy rozproszone
Rozkład zajęć i sala:
czw. 8:00-9:30 @ L128BT (wykłady), 11:45-13:15 @ 1.6.16 (lab. co 2 tyg. - tygodnie w 2011/12)
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
Wyniki ankiety, rok akadem. 2011/12.
Zapoznanie studentów z metodami, narzędziami i językami bezpiecznego programowania, ze szczególnym uwzględnieniem programowania współbieżnego, równoległego i rozproszonego. 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 współbieżne (równoległe).
Pisanie poprawnych programów współbieżnych jest zwykle znacząco trudniejsze niż pisanie analogicznych programów sekwencyjnych. Programy współbieżne wykonywane są w sposób niedeterministyczny, przez to 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 - mechanizm bezpiecznego programowania współbieżnego, zaproponowany jako alternatywa dla tradycyjnych metod synchronizacji. Polega on 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.
Przykładowe szczegółowe zagadnienia:
Celem zajęć laboratoryjnych jest przedstawienie wybranych powyższych zagadnień od strony praktycznej; przykładowe języki i narzędzia są następujące: