Metody bezpiecznego programowania

Wyniki egzaminu. Wpisy do indeksu będzie można otrzymać 22-23 lutego (pon-wto) lub od 2 marca (wto-).

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

Cele przedmiotu

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.

Opis przedmiotu

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ą:

  1. Współczesna praktyka programowania wielowątkowego na przykładzie monitorów, warunki wyścigu, synchronizacja, zakleszczenie, typowe błędy programistyczne
  2. Problemy związane z obecną praktyką -- modele pamięci dla Java
  3. Słabe modele pamięci na przykładzie biblioteki dla wątków pthreads
  4. Alternatywne języki programowania współbieżnego: Erlang (firmy Ericsson), Concurrent Haskell i Multilisp
  5. Nowe techniki obliczeń równoległych na przykładzie metody MapReduce z programowania funkcyjnego
  6. Dynamiczna detekcja błędów w programowaniu współbieżnym na przykładzie Eraser (detektor warunków wyścigu)
  7. Rozszerzenia tradycyjnych języków programowania na przykładzie Cilk (programowanie równoległe w C)
  8. Liniowość obiektów i atomowość (niepodzielność) jako własności poprawności w programowaniu współbieżnym
  9. Pamięć transakcyjna i przykładowe implementacje w Java, OCaml i Haskell
  10. Kompozycja transakcji oraz transakcje przesyłane jako argumenty lub wyniki
  11. Statyczne i dynamiczne sprawdzanie atomowości
  12. Statyczna (tj. oparta na typach) detekcja warunków wyścigu i zakleszczenia (opcjonalnie)
  13. Ograniczenia atomowości
  14. Automatyczne wzajemne wykluczanie
  15. Dynamiczne programowanie współbieżne na przykładzie Stackless Python (opcjonalnie)

Celem zajęć laboratoryjnych jest przedstawienie wybranych powyższych zagadnień od strony praktycznej; przykładowe języki i narzędzia to:

Szczegółowy rozkład zajęć i wymagania zaliczeniowe znajdują się tutaj.
Last modified: Sat Feb 20 13:23:40 CET 2010