Τα συστήματα παράλληλης επεξεργασίας έχουν γνωρίσει ραγδαία ανάπτυξη τις τελευταίες δεκαετίες, η οποία έχει επιδράσει πολλαπλασιαστικά στην υπολογιστική τους ισχύ, αλλά παράλληλα έχει εισαγάγει αρκετές προκλήσεις στον προγραμματισμό τους, μία από τις οποίες είναι η απουσία των αδιεξόδων που οφείλονται στη χρήση κλειδωμάτων. Σε αυτή τη διπλωματική αρχικά εκθέτουμε στατιστικά στοιχεία σχετικά με τη χρήση των προτύπων κλειδώματος σε μια βάση πραγματικών προγραμμάτων που συγκεντρώσαμε. Εν συνεχεία παρουσιάζουμε την υλοποίηση ενός συστήματος τύπων για την αποφυγή αδιεξόδων, όπου η έρευνα μέχρι στιγμής έχει αποδώσει περιορισμένα αποτελέσματα σε σχέση με την πρόληψη αδιεξόδων. Η υλοποίησή μας έχει ως στόχο προγράμματα σε C που χρησιμοποιούν το πρότυπο των Pthreads.
Οι καινοτομίες του εργαλείου που αναπτύξαμε είναι ότι μπορεί να αντιμετωπίσει περιπτώσεις μη δομημένου κλειδώματος μεταβλητών, δεν επιβάλει αυστηρή σειρά στο κλείδωμα μεταβλητών, όπως οι περισσότερες προσεγγίσεις στην πρόληψη αδιεξόδων, και δεν απαιτεί από το χρήστη να επισημειώσει με οποιονδήποτε τρόπο το αρχικό πρόγραμμα. Το εργαλείο αποτελείται τόσο από ένα τμήμα στατικής ανάλυσης των προγραμμάτων εισόδου, το οποίο συγκεντρώνει πληροφορίες σχετικά με το κλείδωμα μεταβλητών, όσο και από μια βιβλιοθήκη χρόνου εκτέλεσης που χρησιμοποιώντας την στατικά συγκεντρωμένη πληροφορία αποφαίνεται κατά πόσο είναι ασφαλές να γίνει ένα κλείδωμα, ώστε το σύστημα να μην περιέλθει σε αδιέξοδο. Τέλος, παρουσιάζουμε μια σειρά από παραδείγματα εκτέλεσης όπου καταδεικνύεται η ορθότητα λειτουργίας του εργαλείου και αξιολογούνται οι επιδόσεις του σε σχέση με την αρχική έκδοση των προγραμμάτων.
The last few decades have seen great rise in the development of parallel systems, which has multiplied their computational power, but at the same time has introduced several challenges in their programming, deadlock freedom being one of the most important. In this thesis, we begin with presenting statistics concerning the usage of lock primitives that were gathered from a code base of real world programs. We then introduce the implementation of a type and effect system for deadlock avoidance, which is a field where research results so far have been limited compared to deadlock prevention. Our approach targets C programs that use the Pthreads specifications.
The novelties of our tool include its ability to handle non block-structured locking, the fact that it does not impose a strict lock acquisition order, like most deadlock prevention approaches, and that it does not require the user to provide any annotation on the original source code. The tool comprises both a static analysis part, which collects information regarding locking, and a runtime library which uses this gathered information and decides whether it is safe to grant a lock, in order to avoid deadlocks. We finally present a series of benchmarks that manifest the correctness of our tool and demonstrate its performance in terms of the original program.