Metody bezpiecznego programowania

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.

Cele przedmiotu

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.

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

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

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

Szczegółowy rozkład zajęć i wymagania zaliczeniowe znajdują się tutaj.
Last modified: śro 12 paź 19:01:32 2011 CEST