Ε νικό Μετσό ιο Πο υτε νείο. Διπ ματική Ερ ασία

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Ε νικό Μετσό ιο Πο υτε νείο. Διπ ματική Ερ ασία"

Transcript

1 Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών Α όρι μοι Συ ο ής Απορριμμάτ ν ια Αυτόματη Δια είριση Μνήμης Διπ ματική Ερ ασία του Δημήτρη Χ. Κονόμη Επι έπ ν: Νικό αος Παπασπύρου Αν. Κα η ητής Ε.Μ.Π. Ερ αστήριο Τε νο ο ίας Λο ισμικού Α ήνα, Απρί ιος 2015

2

3 Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών Ερ αστήριο Τε νο ο ίας Λο ισμικού Α όρι μοι Συ ο ής Απορριμμάτ ν ια Αυτόματη Δια είριση Μνήμης Διπ ματική Ερ ασία του Δημήτρη Χ. Κονόμη Επι έπ ν: Νικό αος Παπασπύρου Αν. Κα η ητής Ε.Μ.Π. Ε κρί ηκε από την τριμε ή εξεταστική επιτροπή την 2 η Απρι ίου, Νικό αος Παπασπύρου Κ νσταντίνος Σα ώνας Κ νσταντίνος Κοντο ιάννης Αν. Κα η ητής Ε.Μ.Π. Αν. Κα η ητής Ε.Μ.Π. Αν. Κα η ητής Ε.Μ.Π. Α ήνα, Απρί ιος 2015

4 ... Δημήτρης Χ. Κονόμης Διπ ματού ος Η εκτρο ό ος Μη ανικός και Μη ανικός Υπο ο ιστών Ε.Μ.Π. Copyright All rights reserved Δημήτρης Χ. Κονόμης, Με επιφύ αξη παντός δικαιώματος. Απα ορεύεται η αντι ραφή, απο ήκευση και διανομή της παρούσας ερ ασίας, εξ ο οκ ήρου ή τμήματος αυτής, ια εμπορικό σκοπό. Επιτρέπεται η ανατύπ ση, απο ήκευση και διανομή ια σκοπό μη κερδοσκοπικό, εκπαιδευτικής ή ερευνητικής φύσης, υπό την προϋπό εση να αναφέρεται η πη ή προέ ευσης και να διατηρείται το παρόν μήνυμα. Ερ τήματα που αφορούν τη ρήση της ερ ασίας ια κερδοσκοπικό σκοπό πρέπει να απευ ύνονται προς τον συ ραφέα. Οι απόψεις και τα συμπεράσματα που περιέ ονται σε αυτό το έ ραφο εκφράζουν τον συ - ραφέα και δεν πρέπει να ερμηνευ εί ότι αντιπροσ πεύουν τις επίσημες έσεις του Ε νικού Μετσό ιου Πο υτε νείου.

5 Περί ηψη Αν και αρ ικά περιοριζόταν στη ώσσα Lisp και τις συναρτησιακές ώσσες προ ραμματισμού, σήμερα η συ ο ή απορριμμάτ ν αποτε εί σημαντικό κομμάτι του συστήματος δια είρισης μνήμης πο ών σύ ρον ν σσών, τόσο προστακτικών όσο και δη τικών. Παρά τη φήμη π ς επι ραδύνει και διαταράσσει την εκτέ εση διαδραστικών εφαρμο ών, οι σύ ρονες τε νικές υ οποίησης της συ ο ής απορριμμάτ ν έ ουν μειώσει την επι άρυνση της σημαντικά, σε τέτοιο σημείο ώστε να αποτε εί ρεα ιστική επι ο ή ακόμη και ια παραδοσιακές ώσσες προ ραμματισμού όπ ς η C. Παρά την τα εία ανάπτυξη του με έ ους μνήμης ακόμη και τ ν πιο φ ηνών υπο ο ιστών, ο απο ηκευτικός ώρος δεν είναι ανεξάντ ητος. Όπ ς ό οι οι περιορισμένοι πόροι απαιτεί προσεκτική συντήρηση και ανακύκ ση. Πο ές ώσσες προ ραμματισμού σήμερα επιτρέπουν την εκ ώρηση και την ανάκτηση μνήμης από τον προ ραμματιστή ια δεδομένα τ ν οποί ν η διάρκεια ζ ής δεν κα ορίζεται από τη εκτική εμ έ εια τους. Λέμε πώς τα δεδομένα αυτά εκχωρούνται δυναμικά. Η δια είριση της δυναμικής μνήμης μπορεί να ίνεται ρητώς από τον προ ραμματιστή, μέσ κ ήσε ν διαδικασιών ενσ ματ μέν ν στο σύστημα εκτέ εσης ή διαδικασιών ι ιο ήκης που εκ ρούν απο ηκευτικό ώρο και τον ε ευ ερώνουν όταν αυτός δεν είναι π έον απαραίτητος. Η ειρ νακτική ανάκτηση της δυναμικά δια ειριζόμενης μνήμης συ νά δεν είναι ικανοποιητική. Ενα ακτικά, η ευ ύνη αυτής της δια είρισης μπορεί να μετα ι ασ εί στο σύστημα εκτέ εσης του προ ράμματος. Ο προ ραμματιστής εξακο ου εί να πρα ματοποιεί δυναμικά αιτήματα εκ ώρησης μνήμης, ρίς όμ ς π έον να ρειάζεται να κα ορίσει πότε αυτή η μνήμη δεν είναι π έον απαραίτητη: αυτή ανακυκ ώνεται αυτόματα. H συλλογή απορριμμάτων, που αποτε εί το κεντρικό έμα αυτής της ερ ασίας, είναι ακρι ώς η αυτόματη δια είριση δυναμικά εκ ρούμενου ώρου απο ήκευσης. Σκοπός αυτής της ερ ασίας είναι να αποτε έσει σημείο αναφοράς ια τους ανα νώστες που ενδιαφέρονται να μά ουν σ ετικά με την αυτόματη δια είριση μνήμης. Το εισα ικό κεφά- αιο αρ ικά εξετάζει και συ κρίνει την αυτόματη δια είριση μνήμης και τη ρητή δια είριση μνήμης, στη συνέ εια παρουσιάζει τις μετρικές με άση τις οποίες συ κρίνονται τα διάφορα σ ήματα συ ο ής απορριμμάτ ν και τέ ος ορίζει τις έννοιες του εκχωρητή, του συλλέκτη και του τροποποιητή. Το υπό οιπο της ερ ασίας ορ ανώνεται σε δύο τμήματα. Στο πρώτο αρ ικά συζητώνται οι κ ασσικές προσε ίσεις συ ο ής απορριμμάτ ν: σήμανση και εκκαθάριση, σήμανση και συμπύκνωση, αντιγραφή και καταμέτρηση αναφορών, και στη συνέ εια ίνεται μία σύ κριση μεταξύ αυτών. Το δεύτερο τμήμα επικεντρώνεται σε πιο προη μένες τε νικές συ ο ής απορριμμάτ ν: γενεαλογική, παράλληλη και ταυτόχρονη συ ο ή απορριμμάτ ν. Τέ ος δίνεται μια εισα ή στη συ ο ή απορριμμάτ ν πραγματικού-χρόνου. Η ερ ασία αυτή ασίζεται σε μετάφραση και προσαρμο ή στα ε ηνικά τμημάτ ν του ι- ίου The Garbage Collection Handbook: The Art of Automatic Memory Management, 5

6 6 τ ν R. Jones, A. Hosking και E. Moss [66]. Λέξεις Κ ειδιά ώσσες προ ραμματισμού, αυτόματη δια είριση μνήμης, συ ο ή απορριμμάτ ν, σήμανση και εκκα άριση, σήμανση και συμπύκν ση, αντι ραφή, καταμέτρηση αναφορών, ενεα ο ική, παρά η η, ταυτό ρονη, πρα ματικού- ρόνου.

7 Abstract Whereas it was once confined to the realm of Lisp and functional languages, today garbage collection is an important part of the memory management system of many modern programming languages, imperative as well as declarative. Although garbage collection has had a reputation for sloth and for disrupting interactive programs, modern implementation techniques have reduced its overheads substantially, to the point where garbage collected heaps are a realistic option even for traditional languages like C. Despite the rapid growth in memory sizes of even the most modest computers, the supply of storage is not inexhaustible. Like all limited resources it requires careful conservation and recycling. Many programming languages today allow the programmer to allocate and reclaim memory for data whose lifetimes are not determined by lexical scope. Such data is said to be dynamically allocated. Dynamic memory may be managed explicitly by the programmer through invocations of built-in or library procedures that allocate storage and that dispose or free that storage when it is no longer needed. Manual reclamation of dynamically managed storage is often unsatisfactory. The alternative is to devolve responsibility for dynamic memory management to the program s run-time system. The programmer must still request dynamically allocated storage to be reserved but no longer needs to determine when that memory is no longer required: it is recycled automatically. Garbage collection, the main topic of this thesis, is precisely this: the automatic management of dynamically allocated storage. The purpose of this thesis is to become a point of reference for readers interested in learning about automatic memory management. The introductory chapter first examines and compares automatic memory management and explicit memory management, then presents the metrics under which different garbage collection schemes are compared and finally defines the notion of the allocator, collector and mutator. The rest of the thesis is organized in two parts. The first initially discusses the classical garbage collection approaches. We examine mark-sweep, mark-compact, copying and reference counting and then give a comparison between them. The second part focuses on more advanced garbage collection techniques. We examine generational, parallel and concurrent garbage collection. Finally, an introduction to real-time garbage collection is given. This thesis is based on the translation and adaptation to Greek of parts of the book The Garbage Collection Handbook: The Art of Automatic Memory Management, by R. Jones, A. Hosking and E. Moss [66]. 7

8 8 Keywords programming languages, automatic memory management, garbage collection, mark-sweep, mark-compact, copying, reference counting, generational, parallel, concurrent, real-time.

9 Ευ αριστίες Με την παρούσα διπ ματική ερ ασία ο οκ ηρώνονται οι σπουδές μου στην Σ ο ή Η εκτρο ό ν Μη ανικών & Μη ανικών Υπο ο ιστών του Ε νικού Μετσο ίου Πο υτε νείου. Αισ άνομαι τη α ύτατη ανά κη να ευ αριστήσ τον επι έποντα αυτής της ερ ασίας κα η- ητή Νίκο Παπασπύρου, ο οποίος εκτός από εξαίρετος επιστήμονας και δάσκα ος, είναι και σπουδαίος άν ρ πος. Είναι εκείνος που συνέ α ε στο να α απήσ την Π ηροφορική και τις Γ ώσσες Προ ραμματισμού ειδικότερα. Παρά η α έ να ευ αριστήσ ερμά και τους κα η ητές μου Κ στή Σα ώνα, Κώστα Κοντο ιάννη, Δημήτρη Φ τάκη, Τίμο Σε ή και Στά η Ζά ο από τους οποίους επίσης διδά- ηκα πάρα πο ά. Κατά τη διάρκεια τ ν σπουδών μου όμ ς δεν έμα α μόνο από τους κα η ητές μου, α ά και από τους φί ους μου. Ευ αριστώ τον Η ία, το Ζήση, το Στέφανο, το Νίκο, τον Κ νσταντίνο, το Νίκο, το Διονύση και το Βρεττό. Last και σί ουρα not least, οφεί ένα με ά ο ευ αριστώ στην οικο ένειά μου, που, παρά τις όποιες δυσκο ίες, με στήριξε και οή ησε στο να φτάσ εδώ που είμαι σήμερα. Δημήτρης X. Κονόμης Η ερ ασία αυτή είναι επίσης δια έσιμη ς Τε νική Αναφορά CSD-TR-1-15, Ε νικό Μετσό- ιο Πο υτε νείο, Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών, Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών, Ερ αστήριο Τε νο ο ίας Λο ισμικού, Απρί- ιος URL: FTP: ftp://ftp.softlab.ntua.gr/pub/techrep/ 9

10

11 Περιε όμενα Περί ηψη 5 Abstract 7 Ευ αριστίες 9 Περιε όμενα 14 Σ ήματα 15 Πίνακες 17 Α όρι μοι 20 1 Εισα ή Ρητή αποδέσμευση μνήμης Αυτόματη δυναμική δια είριση μνήμης Συ κρίνοντας α ορί μους συ ο ής απορριμμάτ ν Ασφά εια Ρυ μαπόδοση Π ηρότητα και προ υμία Χρόνος παύσης Επι άρυνση σε ώρο Βε τιστοποιήσεις ια ειδικές ώσσες Κ ιμακ σιμότητα και μεταφερσιμότητα Ορο ο ία Ορ άν ση της ερ ασίας I Θεμε ιώδεις α όρι μοι συ ο ής απορριμμάτ ν 31 2 Συ ο ή απορριμμάτ ν με σήμανση και εκκα άριση Ο α όρι μος σήμανσης και εκκα άρισης Η τρι ρ ματική αφαίρεση Σήμανση με ρήση bitmap Οκνηρή εκκα άριση Θέματα προς εξέταση Επι άρυνση τροποποιητή Ρυ μαπόδοση Απαιτήσεις σε ώρο

12 12 Περιεχόμενα Μετακίνηση ή ό ι; Συ ο ή απορριμμάτ ν με σήμανση και συμπύκν ση Συμπύκν ση με δύο δείκτες Ο α όρι μος Lisp Συμπύκν ση με ένα πέρασμα Θέματα προς εξέταση Είναι απαραίτητη η συμπύκν ση; Επίδραση στη ρυ μαπόδοση Μακρό ια αντικείμενα Τοπικότητα Περιορισμοί Συ ο ή απορριμμάτ ν με αντι ραφή Αντι ραφή μεταξύ ημι ώρ ν Σειρά διάταξης και τοπικότητα Θέματα προς εξέταση Εκ ώρηση μνήμης Χώρος και τοπικότητα Μετακίνηση αντικειμέν ν Συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών Π εονεκτήματα & Μειονεκτήματα Καταμέτρηση αναφορών με ανα ο ή Καταμέτρηση αναφορών με συ κέντρ ση Κυκ ική Καταμέτρηση Αναφορών Θέματα προς εξέταση Περι ά ον εκτέ εσης Προη μένες τε νικές Σύ κριση α ορί μ ν συ ο ής απορριμμάτ ν Ρυ μαπόδοση Χρόνος παύσης Χώρος Υ οποίηση Προσαρμοστικά συστήματα Ενοποιημένη ε ρία συ ο ής απορριμμάτ ν Αφηρημένη συ ο ή απορριμμάτ ν Συ ο ή απορριμμάτ ν με εξι νίαση Συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών II Προη μένοι α όρι μοι συ ο ής απορριμμάτ ν 99 7 Γενεα ο ική συ ο ή απορριμμάτ ν Πώς μετράται ο ρόνος; Γενεα ο ικές υπο έσεις Γενεές και ορ άν ση σ ρού Πο απ ές ενεές Κατα ραφή η ικίας

13 Περιεχόμενα Προσαρμο ή στη συμπεριφορά του προ ράμματος Συ ο ή απορριμμάτ ν κατά Appel Αναδραστικός έ ε ος προα ής Δια ενεα ο ικοί δείκτες Σύνο α ανάμνησης Δια είριση ώρου Αφηρημένη ενεα ο ική συ ο ή απορριμμάτ ν Θέματα προς εξέταση Παρά η η συ ο ή απορριμμάτ ν Υπάρ ει επαρκής δου ειά προς παρα η οποίηση; Εξισορρόπηση φορτίου Συ ρονισμός Ταξινόμηση Παρά η η Σήμανση Κ οπή ερ ασιών Τερματισμός με κ οπή ερ ασιών Γκρι πακέτα Παρά η η αντι ραφή Διαμοιρασμός ερ ασίας ανάμεσα στους επεξερ αστές Αντι ράφοντας αντικείμενα παρά η α Ξε ριστοί ημι ώροι-από και ημι ώροι-προς Σ ροί ορ αν μένοι κατά μπ οκ Παρά η η εκκα άριση Παρά η η συμπύκν ση Θέματα προς εξέταση Ορο ο ία Αξίζει η παρα η οποίηση; Στρατη ικές εξισορρόπησης φορτίου ερ ασίας Χειρισμός εξι νίασης Συ ρονισμός αμη ού επιπέδου Εκκα άριση και συμπύκν ση Τερματισμός Ταυτό ρονη συ ο ή απορριμμάτ ν Ορ ότητα ταυτό ρονης συ ο ής Η τρι ρ ματική αφαίρεση Η ασ ενής και η ισ υρή τρι ρ ματική ανα οί τη Χρώμα τροποποιητή Χρώμα εκ ώρησης Τε νικές φρά ματος ια ταυτό ρονη συ ο ή Τε νικές κρι τροποποιητή Τε νικές μαύρου τροποποιητή Ταυτό ρονη σήμανση και εκκα άριση Αρ ικοποίηση Τερματισμός σήμανσης Ταυτό ρονη σήμανση και ταυτό ρονη εκκα άριση Εν-τη-πτήσει σήμανση Ταυτό ρονη Αντι ραφή

14 14 Περιεχόμενα Ο α όρι μος του Baker Τα έμμεσα φρά ματα του Brooks Ταυτό ρονη Συμπύκν ση Ο α όρι μος Compressor Ταυτό ρονη Καταμέτρηση Αναφορών Απ οϊκή καταμέτρηση αναφορών Καταμέτρηση αναφορών με απομόν ση Ταυτό ρονη κυκ ική καταμέτρηση αναφορών Λήψη ενός στι μιοτύπου του σ ρού Καταμέτρηση αναφορών με ο ισ αίνουσες όψεις Θέματα προς εξέταση Ταυτό ρονη σήμανση και εκκα άριση Ταυτό ρονη αντι ραφή και συμπύκν ση Ταυτό ρονη καταμέτρηση αναφορών Συ ο ή απορριμμάτ ν πρα ματικού- ρόνου Συστήματα πρα ματικού- ρόνου Δρομο ό ηση συ ο ής πρα ματικού- ρόνου Αʹ Μεταφράσεις Ξέν ν Όρ ν 179 Βι ιο ραφία 183

15 Σ ήματα 1.1 Η πρό ρη δια ραφή ενός αντικειμένου μπορεί να οδη ήσει σε σφά ματα Ρίζες, αναφορές, αντικείμενα, πεδία Σήμανση με τρι ρ ματική αφαίρεση Ο α όρι μος Two-Finger του Edward Ο σ ρός (πριν και μετά τη συμπύκν ση) και τα μεταδεδομένα που ρησιμοποιεί ο α όρι μος Compressor Συ ο ή με αντι ραφή: ένα παράδει μα Συ ο ή με αντι ραφή: ένα παράδει μα (συνέ εια) Προσε ιστική αντι ραφή κατά ά ος (Moon) Αντι ραφή ενός δένδρου με διαφορετικές σειρές διάσ ισης Ρυ μοί mark/cons ια συ ο ή με σήμανση και εκκα άριση και συ ο ή με αντι ραφή Καταμέτρηση αναφορών με συ κέντρ ση Κυκ ική καταμέτρηση αναφορών Ένας απ ός κύκ ος Δια ενεα ο ικοί δείκτες Συ ο ή απορριμμάτ ν με παύση του κόσμου: κά ε μπάρα αναπαριστά την εκτέ εση σε έναν επεξερ αστή Γκρι πακέτα Εξι νίαση κυρίαρ ου νήματος Διαίρεση του σ ρού σε μία περιο ή ανά νήμα-συμπυκν τή και ενα α ή της κατεύ υνσης ο ίσ ησης αντικειμέν ν μεταξύ δύο διαδο ικών νημάτ ν Συμπύκν ση με ο ίσ ηση μπ οκ Αυξητική και ταυτό ρονη συ ο ή απορριμμάτ ν Ταυτό ρονη εκτέ εση α ορί μου Compressor Ταυτό ρονη καταμέτρηση αναφορών με συ κέντρ ση Μη προ έψιμη συ νότητα και διάρκεια εκτέ εσης συμ ατικών συ εκτών απορριμμάτ ν

16

17 Πίνακες 1.1 Γ ώσσες προ ραμματισμού και συ ο ή απορριμμάτ ν

18

19 Α όρι μοι 1.1 Λειτουρ ίες τροποποιητή Συ ο ή με σήμανση και εκκα άριση: εκ ώρηση Συ ο ή με σήμανση και εκκα άριση: σήμανση Συ ο ή με σήμανση και εκκα άριση: εκκα άριση Συ ο ή με σήμανση και εκκα άριση: σήμανση με bitmap (Printezis & Detlefs) Συ ο ή με σήμανση και εκκα άριση: οκνηρή εκκα άριση σε ορ αν μένο κατά μπ οκ σ ρό Συ ο ή με σήμανση και συμπύκν ση Συ ο ή με σήμανση και συμπύκν ση: ο α όρι μος συμπύκν σης Two-Finger Συ ο ή με σήμανση και συμπύκν ση: ο α όρι μος συμπύκν σης Lisp Συ ο ή με σήμανση και εκκα άριση: ο α όρι μος συμπύκν σης Compressor Συ ο ή με αντι ραφή: αρ ικοποίηση και εκ ώρηση Συ ο ή με αντι ραφή: αντι ραφή ημι ώρ ν Συ ο ή με αντι ραφή: ίστα ερ ασιών του Cheney Συ ο ή με αντι ραφή: σ εδόν κατά- ά ος αντι ραφή (Moon) Συ ο ή με αντι ραφή: online αναδιάταξη αντικειμέν ν Συ ο ή με κατάμετρηση αναφορών: απ οϊκή καταμέτρηση αναφορών Συ ο ή με καταμέτρηση αναφορών: καταμέτρηση αναφορών με ανα ο ή Συ ο ή με καταμέτρηση αναφορών: φρά μα ε ραφής ια καταμέτρηση αναφορών με ανα ο ή Συ ο ή με καταμέτρηση αναφορών: ενημέρ ση μετρητών αναφορών ια καταμέτρηση αναφορών με συ κέντρ ση Συ ο ή με καταμέτρηση αναφορών: ο α όρι μος Recycler Συ ο ή με καταμέτρηση αναφορών: ο α όρι μος Recycler (συνέ εια) Συ ο ή με καταμέτρηση αναφορών: ο α όρι μος Recycler (συνέ εια) Αφηρημένη συ ο ή εξι νίασης Αφηρημένη συ ο ή καταμέτρησης αναφορών Αφηρημένη ενεα ο ική συ ο ή απορριμμάτ ν: ρουτίνες συ έκτη Αφηρημένη ενεα ο ική συ ο ή απορριμμάτ ν: ρουτίνες τροποποιητή Παρά η η συ ο ή: αφηρημένη ειτουρ ία νήματος-συ έκτη Παρά η η συ ο ή: σήμανση με κ οπή ερ ασίας (Endo κ.ά.) Παρά η η συ ο ή: σήμανση με ρήση bitmap (Endo κ.ά.) Παρά η η συ ο ή: σήμανση με κ οπή ερ ασίας (Flood κ.ά.) Παρά η η συ ο ή: δια είριση κρι πακέτ ν (Ossia κ.ά.) Παρά η η συ ο ή: εκ ώρηση με ρήση κρι πακέτ ν (Ossia κ.ά.) Παρά η η συ ο ή: σήμανση με ρήση κρι πακέτ ν (Ossia κ.ά.) Παρά η η συ ο ή: αντι ραφή (Cheng & Blelloch) Παρά η η συ ο ή: συ ρονισμός ειτουρ ιών ώ ησης/εξώ ησης με δ μάτια (Cheng & Blelloch)

20 20 Αλγόριθμοι 9.1 Ταυτό ρονη συ ο ή: φρά ματα κρι τροποποιητή Ταυτό ρονη συ ο ή: φρά ματα μαύρου τροποποιητή Ταυτό ρονη συ ο ή: εκ ώρηση ια σ εδόν-ταυτό ρονη σήμανση και εκκα- άριση Ταυτό ρονη συ ο ή: σ εδόν-ταυτό ρονη σήμανση Ταυτό ρονη συ ο ή: σ εδόν-ταυτό ρονη αντι ραφή (Baker) Ταυτό ρονη συ ο ή: τα έμμεσα φρά ματα του Brooks Ταυτό ρονη συ ο ή: ταυτό ρονη καταμέτρηση αναφορών με ρήση απομον τή167

21 Κεφά αιο 1 Εισα ή Οι προ ραμματιστές στρέφονται ο οένα και περισσότερο σε ώσσες και συστήματα εκτέ- εσης που παρέ ουν αυτόματες υπηρεσίες δια είρισης μνήμης, άριν τ ν πο ών π εονεκτημάτ ν που αυτά προσφέρουν, όπ ς η αυξημένη ασφά εια του κώδικα και η δυνατότητα προ ραμματισμού σε υψη ό αφαιρετικό επίπεδο που δεν απαιτεί επτομερή νώση του ειτουρ ικού συστήματος ή/και της αρ ιτεκτονικής. Ο Butters [31] διαπιστώνει π ς τα οφέ η του δια ειριζόμενου κώδικα είναι ευρέ ς αποδεκτά. Κα ώς η εικονική μη ανή προσφέρει πο - ές υπηρεσίες, οι προ ραμματιστές ρειάζεται να ράφουν ι ότερο κώδικα. Ο κώδικας είναι ασφα έστερος αν περάσει επιτυ ώς έναν (στατικό) έ ε ο τύπ ν και αν το σύστημα εκτέ- εσης επα η εύει τον κώδικα κα ώς αυτός φορτώνεται, ε έ ει ια παρα ιάσεις κατά την πρόσ αση σε πόρους (όπ ς ια παράδει μα δεικτοδότηση εκτός ορί ν ενός πίνακα) και δια- ειρίζεται αυτόματα τη μνήμη. Το κόστος ανάπτυξης ο ισμικού μειώνεται σημαντικά κα ώς είναι π έον ευκο ότερη (αν και ό ι πάντα εφικτή) η ανάπτυξη εφαρμο ών που δύνανται να τρέξουν σε διαφορετικές π ατφόρμες. Τα παραπάν επιτρέπουν στους προ ραμματιστές να αφιερώνουν περισσότερο ρόνο στη ο ική τ ν εφαρμο ών. Σ εδόν ό ες οι σύ ρονες ώσσες προ ραμματισμού ρησιμοποιούν δυναμική εκ ώρηση μνήμης. Αυτό επιτρέπει τη δέσμευση και αποδέσμευση μνήμης ια ένα αντικείμενο ακόμη και αν το συνο ικό μέ ε ος αυτού δεν ήταν ν στό κατά τη διάρκεια της μετα ώττισης ή η διάρκεια ζ ής του ξεπερνά αυτήν της ρουτίνας στην οποία αυτό εκ ρή ηκε. Ένα αντικείμενο που δημιουρ είται δυναμικά απο ηκεύεται στο σ ρό και ό ι στη στοί α (στο ε ράφημα δραστηριοποίησης της διαδικασίας στην οποία εκ ρή ηκε) είτε στατικά (δη αδή σε κάποια διεύ υνση που είναι ν στή κατά το ρόνο μετα ώττισης ή σύνδεσης). Η εκ ώρηση μνήμης στο σ ρό είναι ιδιαίτερα σημαντική κα ώς επιτρέπει στον προ- ραμματιστή: να επι έξει δυναμικά το μέ ε ος νέ ν αντικειμέν ν, να ορίσει και να ρησιμοποιήσει αναδρομικές δομές δεδομέν ν όπ ς συνδεδεμένες ίστες και δυαδικά δένδρα, να επιστρέφει αντικείμενα στην κα ούσα διαδικασία, να επιστρέφει μια συνάρτηση ς αποτέ εσμα μιας συνάρτησης. Η πρόσ αση στα αντικείμενα του σ ρού ίνεται μέσ αναφορών. Τυπικά, μια αναφορά είναι ένας δείκτης προς το αντικείμενο (και πιο συ κεκριμένα στη διεύ υνση του στη μνήμη). 21

22 22 Κεφάλαιο 1. Εισαγωγή Σ ήμα 1.1: Η πρό ρη δια ραφή ενός αντικειμένου μπορεί να οδη ήσει σε σφά ματα. Εδώ η μνήμη του αντικειμένου B έ ει ανακτη εί. Το ζ ντανό αντικείμενο A περιέ ει π έον έναν ξεκρέμαστο δείκτη. Ταυτό ρονα, υπάρ ει διαρροή μνήμης: η μνήμη που κατα αμ άνει το αντικείμενο C δεν μπορεί να ανακτη εί παρότι αυτό δεν είναι πια προσ άσιμο. 1.1 Ρητή αποδέσμευση μνήμης Κά ε μη τετριμμένο πρό ραμμα το οποίο τρέ ει με πεπερασμένη μνήμη στη διά εσή του, ρειάζεται κατά καιρούς να επανακτήσει τη μνήμη που φι οξενεί αντικείμενα μη ρήσιμα στους υπο ο ισμούς. Η μνήμη που ρησιμοποιείται από αντικείμενα του σ ρού μπορεί να ανακτη εί είτε ρησιμοποιώντας ρητή αποδέσμευση (όπ ς ια παράδει μα συμ αίνει με τις συναρτήσεις στη ώσσα C ή στη ώσσα C++), είτε αυτόματα από το σύστημα εκτέ εσης, ρησιμοποιώντας καταμέτρηση αναφορών όπ ς ο Collins [38], ή ένα συ έκτη απορριμμάτ ν εξι νίασης όπ ς ο McCarthy [81]. Η ρητή αποδέσμευση μνήμης είναι ευά τη σε δύο είδη σφα μάτ ν. Πρώτον, η μνήμη ενός αντικειμένου μπορεί να αποδεσμευ εί πρό ρα και ενώ υπάρ ουν ακόμη αναφορές προς το αντικείμενο. Μία τέτοια αναφορά ονομάζεται ξεκρέμαστος δείκτης. Το αποτέ εσμα που προκύπτει αν ένα πρό ραμμα ακο ου ήσει έναν τέτοιο δείκτη είναι απρό- επτο. Ο προ ραμματιστής δεν έ ει κανέναν έ ε ο όσον αφορά το τι συμ αίνει με την αποδεσμευμένη μνήμη: το σύστημα εκτέ εσης μπορεί να επι έξει, μεταξύ ά ν να την κα αρίσει (ε ράψει με μηδενικά), να την εκ ρήσει ια την απο ήκευση ενός νέου αντικειμένου ή να την επιστρέψει στο ειτουρ ικό σύστημα. Το κα ύτερο σενάριο στο οποίο μπορεί ο προ ραμματιστής να ε πίζει είναι ο ίαιος τερματισμός του προ ράμματος. Είναι στόσο πι ανότερο το πρό ραμμα να συνε ίσει την εκτέ εσή του ια εκατομμύρια κύκ ους πριν τερματιστεί (κα ιστώντας την αποσφα μάτ ση επίπονη) ή ακόμη και να ο οκ ηρώσει επιτυ ώς την εκτέ εσή του παρά οντας στόσο αν ασμένα αποτε έσματα ( ε ονός που ανι νεύεται δύσκο α). Δεύτερον, ο προ ραμματιστής μπορεί να αποτύ ει να αποδεσμεύσει τη μνήμη από ένα αντικείμενο το οποίο δε ρειάζεται πια το πρό ραμμα, οδη ώντας με τον τρόπο αυτό σε διαρροή μνήμης. Σε μικρά προ ράμματα οι διαρροές μπορούν να α νοη ούν, στόσο σε με ά α προ ράμματα μπορεί να προκα έσουν μεί ση της επίδοσης (κα ώς ο δια ειριστής μνήμης πασ ίζει να ικανοποιήσει αιτήματα εκ ώρησης) ή ακόμη αποτυ ία εκτέ εσης (αν το πρό ραμμα ξεμείνει από μνήμη). Συ νά μά ιστα μία εσφα μένη αποδέσμευση μπορεί να προκα έσει ταυτό ρονα τόσο ένα ξεκρέμαστο δείκτη όσο και μια διαρροή. Τα προ ραμματιστικά σφά ματα του τύπου αυτού είναι συνή η σε περι ά οντα όπου δύο ή και περισσότερες διαδικασίες διατηρούν αναφορές προς το ίδιο αντικείμενο. Η κατάσταση είναι ακόμη πιο προ ηματική σε περι ά οντα ταυτό ρονου προ ραμματισμού όπου δύο ή περισσότερα νήματα ειρίζονται δείκτες προς το ίδιο αντικείμενο. Τι κάνουν οιπόν οι προ ραμματιστές σε μία ώσσα που δεν υποστηρίζει αυτόματη δυναμική δια είριση μνήμης; Η ερώτηση αυτή έ ει απασ ο ήσει αρκετούς ερευνητές με την επικρατέστερη άποψη να ορίζει πώς ο προ ραμματιστής απαιτείται να είναι συνεπής όσον αφορά τον τρόπο με τον οποίο ειρίζεται την ιδιοκτησία τ ν αντικειμέν ν. Ο Belotsky [16] και ά οι ερευνητές προτείνουν διαφορετικές στρατη ικές ια τη ώσσα C++. Αρ ικά, οι προ ραμ-

23 1.2 Αυτόματη δυναμική διαχείριση μνήμης 23 ματιστές πρέπει να αποφεύ ουν τη δέσμευση μνήμης στο σ ρό, όποτε αυτό είναι δυνατό. Τα αντικείμενα μπορούν να δεσμεύονται στη στοί α. Και κατά δεύτερον οι προ ραμματιστές α πρέπει να περνούν σε και να επιστρέφουν από συναρτήσεις/διαδικασίες αντικείμενα κατά τιμή, αντι ράφοντας ό α τα περιε όμενα της παραμέτρου ή του αποτε έσματος αντί να περνούν δείκτες σε αυτά. Είναι προφανές πώς και οι δύο προσε ίσεις αποτρέπουν τα σφά ματα που αφορούν τη δέσμευση και αποδέσμευση μνήμης α ά συνοδεύονται από αυξημένη κίνηση μνήμης και απώ εια της δυνατότητας διαμοιρασμού δεδομέν ν. Σε μερικές περιπτώσεις επίσης μπορούν να ρησιμοποιη ούν ειδικοί εκ ρητές, οι οποίοι ια παράδει μα μπορούν να δια ειρίζονται μια δεξαμενή αντικειμέν ν. Στο τέ ος της φάσης ενός προ ράμματος, ο όκ ηρη η δεξαμενή μπορεί να αποδεσμεύεται. Στη ώσσα προ ραμματισμού C++ έ ουν προτα εί και υ οποιη εί ειδικές κ άσεις αντικειμέν ν δεικτών με σκοπό την κα ύτερη δια είριση μνήμης. Η π η ώρα τ ν διαφορετικών στρατη ικών ια ασφα ή ρητή δια είριση μνήμης δημιουρ εί ακόμη ένα πρό ημα. Ποια προσέ ιση πρέπει να ακο ου ήσει ο προ ραμματιστής προκειμένου να δια ειριστεί με συνέπεια την ιδιοκτησία τ ν αντικειμέν ν; Αυτό είναι ιδιαίτερα δύσκο ο να απαντη εί όταν ρησιμοποιείται κώδικας ι ιο ήκης. Προκύπτουν ερ τήματα σ ετικά με το ποια προσέ ιση υιο ετεί ο κώδικας της ι ιο ήκης και αν ό ες οι ι ιο ήκες που ρησιμοποιεί το πρό ραμμα υιο ετούν την ίδια προσέ ιση. 1.2 Αυτόματη δυναμική δια είριση μνήμης Η αυτόματη δια είριση μνήμης επι ύει πο ά από τα παραπάν προ ήματα. Η συ ο ή απορριμμάτ ν αποτρέπει την εμφάνιση ξεκρέμαστ ν δεικτών: ένα αντικείμενο ε ευ ερώνεται μόνο όταν δεν υπάρ ει κάποιος δείκτης σε αυτό από προσ άσιμο αντικείμενο. Αντίστροφα, ό α τα μη προσ άσιμα αντικείμενα α ε ευ ερ ούν τε ικώς από το συ έκτη. Ό ες οι αποφάσεις σ ετικά με την ανάκτηση μνήμης ανατί ενται στο συ έκτη, ο οποίος δια έτει κα ο ική νώση της δομής τ ν αντικειμέν ν στο σ ρό και τ ν νημάτ ν που έ ουν πρόσ αση σε αυτά. Η δια είριση μνήμης είναι ένα έμα μη ανικής ο ισμικού. Τα κα ώς σ εδιασμένα προ ράμματα τίζονται από ψηφίδες υψη ής συνεκτικότητας και αμη ής σύζευξης. Η αύξηση της συνεκτικότητας και η μεί ση της σύζευξης κα ιστά ευκο ότερη τη συντήρηση τ ν προ- ραμμάτ ν. Ιδανικά, ένας προ ραμματιστής α πρέπει να είναι σε έση να κατα α αίνει τη συμπεριφορά μιας ψηφίδας μόνο από τον κώδικα της ψηφίδας ή στη ειρότερη περίπτ ση και από τον κώδικα ενός μικρού αρι μού συ ενικών ψηφίδ ν. Η μεί ση της σύζευξης μεταξύ ψηφίδ ν πρακτικά σημαίνει πώς η συμπεριφορά μιας ψηφίδας δεν εξαρτάται από την υ οποίηση κάποιας ά ης ψηφίδας. Στο π αίσιο της σ στής δια είρισης μνήμης, αυτό σημαίνει πώς οι ψηφίδες δεν έ ουν νώση της εσ τερικής ειτουρ ίας τ ν ψηφίδ ν που υ οποιούν τη δια είριση μνήμης. Η ειρ νακτική δια είριση μνήμης αντί ετα δε συμμορφώνεται με τις αρ ές της μη ανικής ο ισμικού ια ε α ιστοποίηση της επικοιν νίας μεταξύ ψηφίδ ν. Το κύριο επι είρημα υπέρ της αυτόματης δια είρισης μνήμης δεν είναι ότι απ οποιεί τη συ ραφή κώδικα (το οποίο ισ ύει) α ά ότι διαζευ νύει το πρό ημα της δια είρισης μνήμης από διαπροσ πείες αντί να το διασπείρει στον κώδικα. Επίσης διευκο ύνει την επανα ρησιμοποίηση κώδικα. Γι αυτούς τους ό ους η συ ο ή απορριμμάτ ν αποτε εί, άμεσα ή έμμεσα απαίτηση στο πρότυπο τ ν περισσότερ ν σύ ρον ν σσών προ ραμματισμού. Τονίζουμε στόσο πώς η συ ο ή απορριμμάτ ν δεν μπορεί να εξα είψει π ήρ ς την εμφάνιση σφα μάτ ν που αφορούν τη μνήμη. Οι διαρροές μνήμης αποτε ούν ένα από τα πιο συ νά εμφανιζόμενα σφά ματα μνήμης. Παρότι η συ ο ή απορριμμάτ ν τείνει να μειώσει

24 24 Κεφάλαιο 1. Εισαγωγή ActionScript (2000) Algol-68 (1965) APL (1964) AppleScript (1993) AspectJ (2001) Awk (1977) Beta (1983) C# (1999) Cyclone (2006) Managed C++ (2002) Cecil (1992) Cedar (1983) Clean (1984) CLU (1974) D (2007) Dylan (1992) Dynace (1993) E (1997) Eiffel (1986) Elasti-C (1997) Emerald (1988) Erlang (1990) Euphoria (1993) F# (2005) Fortress (2006) Green (1998) Go (2010) Groovy (2004) Haskell (1990) Hope (1978) Icon (1977) Java (1994) JavaScript (1994) Liana (1991) Limbo (1996) Lingo (1991) LotusScript (1995) Lua (1994) Mathematica (1987) MATLAB (1970s) Mercury (1993) Miranda (1985) ML (1990) Modula-3 (1988) Oberon (1985) Objective-C (2007-) Obliq (1993) Perl (1986) Pike (1996) PHP (1995) Pliant (1999) POP-2 (1970) PostScript (1982) Prolog (1982) Python (1991) Rexx (1979) Ruby (1993) Sather (1990) Scala (2003) Scheme (1975) Self (1986) SETL (1969) Simula (1964) SISAL (1983) Smalltalk (1972) SNOBOL (1962) Squeak (1996) Tcl (1990) Theta (1994) VB.NET (2001) VBScript (1996) Visual Basic (1991) VHDL (1987) X10 (2004) YAFL (1993) Πίνακας 1.1: Γ ώσσες προ ραμματισμού και συ ο ή απορριμμάτ ν. Ό ες οι παραπάν ώσσες ασίζονται σε συ ο ή απορριμμάτ ν. την εμφάνιση διαρροών μνήμης, δεν μπορεί να ε υη εί την π ήρη εξά ειψή τους. Εάν ένα αντικείμενο δεν είναι π έον προσ άσιμο από το υπό οιπο πρό ραμμα, ο συ έκτης α ανακτήσει τη μνήμη που αυτό κατα αμ άνει. Εφόσον αυτός είναι ο μόνος τρόπος με τον οποίο ένα αντικείμενο μπορεί να δια ραφεί, δεν μπορούν να προκύψουν ξεκρέμαστοι δείκτες. Επιπ έον, αν η δια ραφή ενός αντικειμένου κα ιστά και τα αντικείμενα παιδιά του μη προσ άσιμα, τότε ο συ έκτης α ανακτήσει και τη μνήμη που αυτά κατα αμ άνουν. Ωστόσο, ο συ έκτης δεν μπορεί να οη ήσει κάπ ς αν υπάρ ει μια δυναμική δομή δεδομέν ν η οποία συνε ώς αυξάνεται ( ια παράδει μα επειδή ο προ ραμματιστής εσφα μένα μόνο προσ έτει σε αυτή δεδομένα ρίς ποτέ να αφαιρεί) ή αν αυτή είναι μεν προσ άσιμη από το υπό οιπο πρό ραμμα α ά αυτό δε α τη ρησιμοποιήσει ποτέ στο μέ ον. 1.3 Συ κρίνοντας α ορί μους συ ο ής απορριμμάτ ν Η παρούσα ερ ασία εξετάζει ένα ευρύ φάσμα α ορί μ ν ια συ ο ή απορριμμάτ ν, κά ε ένας από τους οποίους έ ει σ εδιασ εί αμ άνοντας υπόψιν διαφορετικές απαιτήσεις όσον αφορά το φορτίο ερ ασίας, το υ ικό και τις επιδόσεις. Δυστυ ώς, δεν υπάρ ει κάποιος α όρι μος που ειτουρ εί έ τιστα σε ό ες τις περιπτώσεις. Οι Fitzgerald και Tarditi [52] με ετώντας 6 διαφορετικούς συ έκτες και 20 benchmarks διαπίστ σαν πώς ια κά ε συ έκτη

25 1.3 Συγκρίνοντας αλγορίθμους συλλογής απορριμμάτων 25 υπάρ ει του ά ιστον ένα benchmark το οποίο α εκτε ούνταν του ά ιστον 15% τα ύτερα με την παρουσία ενός πιο κατά η ου συ έκτη. Οι Singer κ.ά. [109] εφαρμόζουν τε νικές μη ανικής μά ησης προκειμένου να προ έψουν τη έ τιστη διαμόρφ ση ενός συ έκτη ια ένα συ κεκριμένο πρό ραμμα. Ά οι ερευνητές, όπ ς ο Printezis [95] και οι Soman κ.ά. [110] έ ουν εξερευνήσει την ιδέα να επιτρέπουν στις εικονικές μη ανές Java να α άζουν συ έκτη κα ώς εκτε ούνται εάν πιστεύουν, με άση τα αρακτηριστικά του υπό εκτέ εση προ ράμματος πώς αυτό α φε η εί από την παρουσία ενός διαφορετικού συ έκτη. Στην ενότητα αυτή παρουσιάζουμε τις μετρικές άση τ ν οποί ν συ κρίνονται οι διαφορετικοί α όρι μοι συ ο ής απορριμμάτ ν. Τονίζουμε στόσο πώς οι μετρικές αυτές δεν είναι ανεξάρτητες μετα ητές: η ρύ μιση μιας παραμέτρου με σκοπό την επίτευξη ενός συ κεκριμένου στό ου ενδέ εται να προκα έσει ά ες αντιφατικές επιδράσεις Ασφά εια Ένας α όρι μος συ ο ής απορριμμάτ ν πρέπει καταρ ήν να είναι ασφα ής: δεν πρέπει ποτέ να ανακτήσει τη μνήμη αντικειμέν ν που είναι ζ ντανά. Η εξασφά ιση της ασφά ειας είναι ιδιαίτερα δύσκο η σε ταυτό ρονους συ έκτες. Επίσης η ασφά εια της συντηρητικής συ ο ής απορριμμάτ ν, όπου ο συ έκτης δεν έ ει καμία απο ύτ ς οή εια από το μετα ττιστή και το σύστημα εκτέ εσης, είναι ευά τη σε συ κεκριμένες ε τιστοποιήσεις του μετα ττιστή οι οποίες έ ουν ς αποτέ εσμα δεδομένα που δεν είναι δείκτες να φαίνεται ότι είναι Ρυ μαπόδοση Κοινή απαίτηση τ ν ρηστών είναι τα προ ράμματά τους να τρέ ουν τα ύτερα. Για να συμ αίνει αυτό, πρέπει μεταξύ ά ν, ο υπο ο ιστικός ρόνος που αφορά συ ο ή απορριμμάτ ν να είναι ο ε ά ιστος δυνατός. Στις περισσότερες περιπτώσεις έ αια, ο ρήστης ενδιαφέρεται το σύνο ο της εφαρμο ής (τροποποιητής και συ έκτης) να εκτε είται σε όσο το δυνατόν ι ότερο ρόνο. Στα περισσότερα κα ώς σ εδιασμένα συστήματα, ξοδεύεται πο ύ περισσότερος ρόνος CPU ια την εκτέ εση του τροποποιητή από ότι ια την εκτέ εση του συ έκτη. Έτσι πο ές φορές αξίζει να υσιαστεί η επίδοση του συ έκτη άριν υψη ότερης διεκπεραι τικής ικανότητας του τροποποιητή Π ηρότητα και προ υμία Ιδανικά, η συ ο ή απορριμμάτ ν οφεί ει να είναι π ήρης: τε ικώς ό α τα απορρίμματα στο σ ρό α συ ε ούν. Ωστόσο, αυτό δεν είναι πάντοτε δυνατό ή και επι υμητό. Όπ ς α δούμε και στο κεφά αιο 5, οι απ οϊκοί α όρι μοι καταμέτρησης αναφορών ια παράδει μα αδυνατούν να συ έξουν αυτοαναφορικές δομές δεδομέν ν. Επιπ έον, ια ό ους επίδοσης, μπορεί να είναι επι υμητό να μη συ ε εί ο όκ ηρος ο σ ρός σε κά ε κύκ ο συ ο ής. Οι ενεα ο ικοί συ έκτες ια παράδει μα, δια ρίζουν τα αντικείμενα με άση την η ικία τους σε δύο ή περισσότερες περιο ές του σ ρού τις οποίες ονομάζουν ενεές. Επικεντρώνοντας την προσο ή τους στη νεότερη ενεά, οι ενεα ο ικοί συ έκτες ε τιώνουν τόσο το συνο ικό ρόνο εκτέ εσης του συ έκτη όσο και το μέσο ρόνο παύσης του τροποποιητή ια την κά ε ξε ριστή ενερ οποίηση αυτού.

26 26 Κεφάλαιο 1. Εισαγωγή Οι ταυτό ρονοι συ έκτες αναμει νύουν την εκτέ εση τροποποιητή και συ έκτη με στό ο την αποφυ ή ή έστ τη μεί ση της ρονικής διάρκειας τ ν παύσε ν του προ ράμματος ρήστη. Μια συνέπεια αυτού είναι π ς τα αντικείμενα που έ ουν ίνει απορρίμματα αφού έ ει ξεκινήσει ένας κύκ ος συ ο ής μπορεί να μην ε ευ ερ ούν παρά στο τέ ος του επόμενου κύκ ου. Τέτοια αντικείμενα ονομάζονται αι ρούμενα απορρίμματα. Σε ένα περι ά - ον οιπόν όπου συ έκτης και τροποποιητής εκτε ούνται ταυτό ρονα η π ηρότητα του συ έκτη σ ετίζεται με την τε ική συ ο ή τ ν απορριμμάτ ν. Διαφορετικοί α όρι μοι μπορεί να διαφέρουν ς προς την προ υμία συ ο ής τους, οδη ώντας σε συμ ι ασμούς ώρου/ ρόνου Χρόνος παύσης Μια σημαντική απαίτηση συνή ς είναι η ε α ιστοποίηση της εισ ο ής του συ έκτη στην εκτέ εση του προ ράμματος. Πο οί συ έκτες εισά ουν παύσεις στην εκτέ εση ενός προ- ράμματος κα ώς ό α τα νήματα-τροποποιητές είναι σταματημένα την ώρα που αυτοί συ - έ ουν απορρίμματα. Ο όρος παύση του κόσμου αναφέρεται ακρι ώς στην αναστο ή της εκτέ εσης τ ν νημάτ ν-τροποποιητών κατά τη διάρκεια της εκτέ εσης τ ν νημάτ νσυ εκτών. Είναι εμφανώς επι υμητό οι ρόνοι παύσης να ε α ιστοποιη ούν. Αυτό μπορεί να είναι ιδιαίτερα σημαντικό ια διαδραστικές εφαρμο ές ή διακομιστές οι οποίοι ειρίζονται συνα α ές (όπου συνή ς οι ενέρ ειες πρέπει να διεκπεραιώνονται εντός πο ύ στενών ρονικών ορί ν). Ωστόσο, οι μη ανισμοί που προσπα ούν να μειώσουν τους ρόνους παύσης έ ουν παρενέρ ειες, όπ ς α δούμε στη συνέ εια. Για παράδει μα οι ενεα ο ικοί συ έκτες προσπα ούν να μειώσουν τους ρόνους παύσης συ έ οντας συ νά και ρή ορα μία μικρή περιο ή του σ ρού που φι οξενεί νέα αντικείμενα, ενώ συ έ ουν με α ύτερες περιο ές του σ ρού όπου ζουν πα αιά αντικείμενα σπανιότερα και μόνο αν αυτό ρειασ εί. Ωστόσο, επειδή πρέπει να κατα ράφονται οι δείκτες που περνούν τα όρια τ ν περιο ών, η ενεα ο ική συ - ο ή απορριμμάτ ν επι ά ει ένα μικρό πρόστιμο στις ειτουρ ίες ε ραφής δεικτών του τροποποιητή. Οι παρά η οι συ έκτες σταματούν τα νήματα-τροποποιητές και μειώνουν το ρόνο παύσης απασ ο ώντας πο ά νήματα-συ έκτες. Οι αυξητικοί και ταυτό ρονοι συ έκτες επι ειρούν να μειώσουν τους ρόνους παύσης ακόμη περισσότερο εκτε ώντας ένα μικρό κ άντο ερ ασιών συ ο ής είτε ανάμεσα στις ειτουρ ίες του τροποποιητή είτε παρά η α με αυτές. Και αυτές οι τε νικές υπα ορεύουν ένα μικρό κόστος στον τροποποιητή προκειμένου να επιτευ εί ο σ στός συ ρονισμός αυτού με το συ έκτη. Η μέ ιστη τιμή ή ο μέσος ρόνος παύσης στόσο δεν μπορούν να ρησιμοποιη ούν ώστε να ε ε εί η πρόοδος του τροποποιητή. Η κατανομή τ ν ρόν ν παύσης είναι επίσης μια μετρική που ενδιαφέρει. Στη ι ιο ραφία συναντώνται διάφοροι τρόποι μέτρησης αυτής, όπ ς η ε ά ιστη ρησιμοποίηση τροποποιητή, η οποία εισή η από τους Cheng και Blelloch [35], και η φρα μένη ρησιμοποίηση τροποποιητή, η οποία εισή η από τους Sachindran κ.ά. [101]. Και οι δύο μετρικές προσπα ούν να μετρήσουν με ακρί εια το ε ά ιστο κ άσμα του ρόνου εκτέ εσης που δαπανάται ια την εκτέ εση του τροποποιητή Επι άρυνση σε ώρο Ο στό ος ενός δια ειριστή μνήμης είναι η ασφα ής και αποδοτική ρήση του ώρου. Διαφορετικοί δια ειριστές, τόσο ρητοί όσο και αυτόματοι επι ά ουν διαφορετικά ρικά κόστη. Οι συ έκτες καταμέτρησης αναφορών ια παράδει μα ρειάζονται ώρο στη μνήμη κά ε

27 1.3 Συγκρίνοντας αλγορίθμους συλλογής απορριμμάτων 27 αντικειμένου όπου α απο ηκεύεται ο μετρητής αναφορών προς αυτό. Οι συ έκτες σήμανσης και εκκα άρισης απο ηκεύουν ένα bit/ byte στην επικεφα ίδα ενός αντικειμένου, ενώ κάποιοι συ έκτες σήμανσης και συμπύκν σης απο ηκεύουν τη νέα διεύ υνση ενός αντικειμένου σε κάποιο πεδίο στο πα αιό αντί ραφο αυτού. Οι συ έκτες αντι ραφής δια ρίζουν το σ ρό σε δύο ημι ώρους, μόνο ένας εκ τ ν οποί ν είναι δια έσιμος στον τροποποιητή κά ε ρονική στι μή: ο ά ος ρησιμεύει ς αντί ραφο ρεζέρ α, όπου ο συ έκτης α αντι ράψει τα ζ ντανά αντικείμενα στη διάρκεια του επόμενου κύκ ου συ ο ής. Οι συ έκτες ενδέ- εται επίσης να ρησιμοποιούν οη ητικές δομές δεδομέν ν. Οι ταυτό ρονοι συ έκτες, ή οι ενεα ο ικοί συ έκτες απαιτούν τη ρήση συνό ν ανάμνησης ώστε να κατα ράφουν τις τιμές ποι ν δεικτών έ ει μετα ά ει στο ενδιάμεσο ο τροποποιητής ή τις διευ ύνσεις τ ν δια ενεα ο ικών δεικτών αντίστοι α Βε τιστοποιήσεις ια ειδικές ώσσες Οι α όρι μοι συ ο ής απορριμμάτ ν πο ές φορές αρακτηρίζονται από την εφαρμοσιμότητά τους σε ώσσες προ ραμματισμού διαφορετικών οικο ενειών. Οι συναρτησιακές ώσσες ια παράδει μα προσφέρονται ια ε τιστοποιήσεις που σ ετίζονται με την αυτόματη δια είριση μνήμης. Μερικές ώσσες, όπ ς η ML διακρίνουν τα δεδομένα σε τροποποιήσιμα και μη τροποποιήσιμα. Α νές συναρτησιακές ώσσες όπ ς η Haskell, επεκτείνουν την παραπάν ιδέα και δεν αφήνουν τον προ ραμματιστή να τροποποιήσει καμία τιμή (τα προ ράμματα αρακτηρίζονται από διαφάνεια αναφορών). Εσ τερικά στόσο, ενημερώνουν δομές δεδομέν ν του ά ιστον μια φορά, κάτι που δίνει τη δυνατότητα σε ενεα ο ικούς συ - έκτες απορριμμάτ ν να προά ουν πρό υμα π ήρ ς υπο ο ισμένες δομές δεδομέν ν. Έ ουν επίσης προτα εί π ήρεις μη ανισμοί ια τη συ ο ή κύκ ν απορριμμάτ ν με καταμέτρηση αναφορών. Οι δη τικές ώσσες προ ραμματισμού ενδε ομέν ς επιτρέπουν τη ρήση μη- ανισμών ια αποδοτική δια είριση του σ ρού. Ό α τα δεδομένα που έ ουν δημιουρ η εί μετά από ένα σημείο επι ο ής σε μία ώσσα ο ικού προ ραμματισμού κα ίστανται μη προσ άσιμα τη ρονική στι μή κατά την οποία το πρό ραμμα οπισ ο ρεί στο εν ό σημείο. Εάν ο δια ειριστής μνήμης διατάσσει τα αντικείμενα στο σ ρό με άση τη σειρά δημιουρ ίας τους, η συνο ική μνήμη που έ ει εκ ρη εί από το σημείο επι ο ής και έπειτα μπορεί να επιστραφεί σε στα ερό ρόνο. Αντίστροφα, διαφορετικά πρότυπα σσών μπορεί να ορίζουν συ κεκριμένες απαιτήσεις από το συ έκτη. Οι πιο ν στές αφορούν την ικανότητα του συ έκτη να ειρίζεται διάφορα είδη δεικτών ή να προκα εί την οριστικοποίηση νεκρών αντικειμέν ν Κ ιμακ σιμότητα και μεταφερσιμότητα Η ο οένα και περισσότερο αυξανόμενη διάδοση πο υπύρην ν επεξερ αστών σε επιτραπέζιους και φορητούς υπο ο ιστές πέραν τ ν διακομιστών με ά ης κ ίμακας κα ιστά ιδιαίτερα σημαντική την ανά κη η συ ο ή απορριμμάτ ν να επ φε η εί από την παρουσία του παρά η ου υ ικού. Έτσι συ νά ένας α όρι μος συ ο ής απορριμμάτ ν αρακτηρίζεται ς προς το πώς κ ιμακώνει. Η ειτουρ ία ενός αρι μού α ορί μ ν συ ο ής απορριμμάτ ν εξαρτάται από την υποστήριξη που παρέ ει το ειτουρ ικό σύστημα και η αρ ιτεκτονική. Αυτό έ ει ς αποτέ εσμα η μεταφερσιμότητα τ ν α ορί μ ν να μην είναι απαραίτητα ε υημένη.

28 28 Κεφάλαιο 1. Εισαγωγή Σ ήμα 1.2: Ρίζες, αναφορές, αντικείμενα, πεδία. 1.4 Ορο ο ία Στην ενότητα αυτή εξη ούμε την ορο ο ία που ρησιμοποιείται στην ερ ασία αυτή α ά και στη ι ιο ραφία. Ο σ ρός είναι είτε ένας συνε όμενος πίνακας από έξεις μνήμης ή ένα σύνο ο από μη συνε όμενα μπ οκ συνε όμεν ν έξε ν. Ένα αντικείμενο είναι ένα σύνο ο από συνε όμενες έξεις μνήμης. Οι επιμέρους έξεις ενός αντικειμένου αναφέρονται και ς πεδία. Σε κά ε πεδίο ενός αντικειμένου απο ηκεύεται ένα α μ τό μέ ε ος (π.. ένας ακέραιος) ή μια αναφορά. Μια αναφορά είναι είτε ένας δείκτης προς ένα αντικείμενο του σ ρού είτε η ειδική τιμή null. Ένα αντικείμενο συνή ς έ ει ένα ειδικό πεδίο, την επικεφα ίδα, όπου απο ηκεύονται μεταδεδομένα ρήσιμα ια το σύστημα εκτέ εσης. Ο σ ρός συ νά αναφέρεται και ς ράφος αντικειμέν ν. Ο ράφος είναι κατευ υνόμενος, με κόμ ους τα αντικείμενα του σ ρού και ακμές τους δείκτες στα πεδία αυτών. Μια ακμή αναπαριστά μια αναφορά από έναν κόμ ο προέ ευσης ή μία ρίζα προς έναν κόμ ο προορισμού. Σύμφ να με τον Dijkstra [44], [45], ένα πρό ραμμα με συ ο ή απορριμμάτ ν δια ρίζεται στα εξής δύο ημιανεξάρτητα τμήματα: Ο τροποποιητής εκτε εί τον κώδικα της εφαρμο ής, ο οποίος δημιουρ εί αντικείμενα και τροποποιεί το ράφο αντικειμέν ν μετα ά οντας αναφορές ώστε αυτές να αναφέρονται σε διαφορετικά αντικείμενα προορισμού. Μια αναφορά μπορεί να περιέ εται στο πεδίο ενός αντικειμένου ή στις ρίζες του προ ράμματος (στατικές μετα ητές, κατα ρητές, στοί α). Κα ώς ο τροποποιητής τροποποιεί τις αναφορές, κά ε αντικείμενο μπορεί να αποσυνδε εί από τις ρίζες, δη αδή να μην είναι π έον προσ άσιμο μέσ μιας ακο ου ίας αναφορών από αυτές. Ο συ έκτης εκτε εί κώδικα συ ο ής απορριμμάτ ν, ο οποίος ανακα ύπτει μη προσ άσιμα αντικείμενα και ανακτά τη μνήμη που αυτά κατα αμ άνουν. Ο τροποποιητής μπορεί να είναι είτε μονονηματικός είτε πο υνηματικός. Το ίδιο ισ ύει και ια το συ έκτη. Εκτός από το σ ρό, ε ρούμε πώς υπάρ ει ένα (πεπερασμένο) σύνο ο ριζών, το οποίο αναπαριστά δείκτες που είναι άμεσα προσ άσιμοι από τον τροποποιητή. Κατ επέκταση, τα αντικείμενα του σ ρού στα οποία αναφέρονται οι ρίζες ονομάζονται αντικείμενα-ρίζες. Κα ώς ο τροποποιητής εκτε είται, οι ρίζες και άρα και ο ράφος αντικειμέν ν μετα ά ονται. Αναφερόμαστε σε έναν κόμ ο του σ ρού N ρησιμοποιώντας τη διεύ υνσή του στη μνήμη (η οποία δεν αντιστοι εί απαραίτητα στην πρώτη έξη του αντικειμένου α ά ίσ ς σε κάποιο προκα ορισμένο σημείο ανάμεσα στα δεδομένα και τα μεταδεδομένα του αντικειμένου). Δο έντος ενός αντικειμένου N, αναφερόμαστε στο i-στό πεδίο του, στο οποίο μπορεί να απο- ηκεύεται μία α μ τή μετα ητή ή ένας δείκτης, ς N[i], αντιμετ πίζοντας το αντικείμενο

29 1.4 Ορολογία 29 ς έναν πίνακα από πεδία. Συμ ο ίζουμε με N το π ή ος τ ν πεδί ν ενός αντικειμένου, ενώ η αποδιευ υνσιοδότηση ενός μη μηδενικού δείκτη p συμ ο ίζεται με p. Επιπ έον η διεύ- υνση του i-στού πεδίου του αντικειμένου N συμ ο ίζεται με &N[i]. Επομέν ς το σύνο ο τ ν διευ ύνσε ν τ ν πεδί ν δεικτών ενός αντικειμένου N, συμ ο ιζόμενο ς P ointers(n) ορίζεται αυστηρά ς: P ointers(n) = {a a = &N[i], i : 0 i < N where N[i] is a pointer} (1.1) Τέ ος, ε ρούμε το σύνο ο Roots τ ν ριζών ς ένα ψευδοαντικείμενο και αναφερόμαστε στην i-στή ρίζα ς Roots[i]. Λέμε πώς ένα αντικείμενο είναι ζ ντανό εάν αυτό πρόκειται να ρησιμοποιη εί κάποια ρονική στι μή στο μέ ον από τον τροποποιητή. Ένας συ έκτης απορριμμάτ ν είναι ορ ός αν και μόνο αν ποτέ δε συ έ ει ζ ντανά αντικείμενα. Δυστυ ώς στόσο, η ζ ντάνια είναι μια μη-αποκρίσιμη ιδιότητα τ ν προ ραμμάτ ν: δεν υπάρ ει κάποιος τρόπος ώστε να απαντη εί αν ένα τυ αίο πρό ραμμα α ρησιμοποιήσει ή ό ι στο μέ ον ένα αντικείμενο του σ ρού. Το ε ονός πώς ένα πρό ραμμα δια έτει ένα δείκτη προς ένα αντικείμενο δε σημαίνει απαραίτητα και πώς αυτό α προσπε αστεί από το πρό ραμμα κάποια στι μή στο μέ ον. Προσε ίζουμε τη ζ ντάνια με την αποκρίσιμη ιδιότητα της προσ ασιμότητας μέσ δεικτών. Ένα αντικείμενο N είναι προσ άσιμο από ένα αντικείμενο M, εάν το N μπορεί να προσπε ασ εί ακο ου ώντας μία ακο ου ία δεικτών από κάποιο πεδίο f του M. Επομέν ς, ένα αντικείμενο είναι προσ άσιμο από τις ρίζες ενός τροποποιητή αν και μόνο αν υπάρ ει μια ακο ου ία δεικτών που ξεκινάει από κάποια ρίζα και κατα ή ει σε αυτό. Πιο αυστηρά, ορίζουμε τη δυαδική σ έση f ς εξής. Για κά ε δύο κόμ ους M, N, ισ ύει π ς M f N αν και μόνο εάν υπάρ ει ένα πεδίο f = &M[i], τέτοιο ώστε f P ointers(m) και f = N. Παρόμοια, Roots f N αν και μόνο αν υπάρ ει ένα πεδίο f τέτοιο ώστε f Roots και f = N. Λέμε π ς ο κόμ ος N είναι άμεσα προσ άσιμος από τον κόμ ο M, και συμ ο ίζουμε με M N αν υπάρ ει κάποιο πεδίο f το οποίο ανήκει στο σύνο ο P ointers(m) και είναι τέτοιο ώστε M f N. Με τη οή εια τ ν παραπάν ορισμών, το σύνο ο τ ν προσ άσιμ ν αντικειμέν ν στο σ ρό ορίζεται ς το μετα ατικό κ είσιμο από το σύνο ο Roots ς προς την πράξη, δη αδή το ε ά ιστο σύνο ο: reachable = {N Nodes ( r Roots : r N) ( M reachable : M N)} (1.2) Ένα αντικείμενο του σ ρού που είναι μη προσ άσιμο από τις ρίζες δε α προσπε ασ εί ποτέ ξανά από έναν ορ ό τροποποιητή. Αντί ετα, ένα προσ άσιμο αντικείμενο μπορεί να προσπε- ασ εί κάποια στι μή στο μέ ον. Με τον τρόπο αυτό η ζ ντάνια τ ν αντικειμέν ν όσον αφορά τη συ ο ή απορριμμάτ ν, ορίζεται μέσ της προσ ασιμότητας μέσ δεικτών. Τα μη προσ άσιμα αντικείμενα είναι σί ουρα νεκρά και επομέν ς μπορούν με ασφά εια να ε ευ ερ ούν. Αντί ετα, τα προσ άσιμα αντικείμενα μπορεί να είναι ζ ντανά και επομέν ς πρέπει να διατηρη ούν. Παρότι δεν είναι ακρι ώς ορ ό, α ρησιμοποιούμε τους όρους ζ ντανό και νεκρό αδιακρίτ ς με τους όρους προσ άσιμο και μη προσ άσιμο αντίστοι α. Τέ ος, ο όρος απόρριμμα α ρησιμοποιείται ς συνώνυμος του όρου μη προσ άσιμο. Ο εκ ρητής, ο οποίος μπορεί να ε ρη εί ειτουρ ικά κά ετος ς προς το συ έκτη, υποστηρίζει δύο ειτουρ ίες:, η οποία δεσμεύει τη μνήμη που α κατα ά ει ένα αντικείμενο και, η οποία επιστρέφει τη μνήμη στον εκ ρητή ώστε αυτός να την επανα ρησιμοποιήσει.

30 30 Κεφάλαιο 1. Εισαγωγή Ορισμένες από τις ειτουρ ίες που εκτε ούν τα νήματα-τροποποιητές ενδιαφέρουν το συ - έκτη: N, R και W. Συ κεκριμένοι δια ειριστές μνήμης μπορεί να επεκτείνουν αυτές τις ασικές ειτουρ ίες και να τις μετατρέπουν σε φρά ματα: πράξεις που επιτρέπουν τη σύ ρονη ή ασύ ρονη επικοιν νία με το συ έκτη. Διακρίνουμε τα φρά ματα σε φρά ματα ε ραφής και φρά ματα ανά ν σης. Α όρι μος 1.1 Λειτουρ ίες τροποποιητή 1: function N () 2: return () 3: function R (src, i) 4: return src[i] 5: procedure W (src, i, ref) 6: src[i] ref Στο π αίσιο της ταυτό ρονης εκτέ εσης νημάτ ν-τροποποιητών και νημάτ ν- συ εκτών, ό οι οι α όρι μοι συ ο ής απορριμμάτ ν που εξετάζουμε απαιτούν ορισμένες ακο ου ίες εντο ών να εκτε ούνται ατομικά. Για ό ους απ οποίησης α νοούμε τον εκάστοτε μη ανισμό που εξασφα ίζει την ατομική εκτέ εση τμημάτ ν κώδικα και απ ώς σημειώνουμε τα τε ευταία με τη έξη κ ειδί atomic. 1.5 Ορ άν ση της ερ ασίας Στο κεφά αιο αυτό εξη ούνται οι ό οι ια τους οποίους είναι επι υμητή η αυτόματη δια είριση μνήμης και ορίζονται οι έννοιες του εκ ρητή μνήμης, του συ έκτη απορριμμάτ ν και του τροποποιητή. Επίσης παρουσιάζονται τα κριτήρια με τα οποία μπορούν να συ κρι ούν οι διαφορετικές στρατη ικές συ ο ής απορριμμάτ ν. Το υπό οιπο της ερ ασίας ορ ανώνεται σε δύο μέρη. Το πρώτο μέρος περι αμ άνει 5 κεφά αια. Στα πρώτα 4 εξετάζονται με επτομέρεια οι εμε- ιώδεις α όρι μοι συ ο ής απορριμμάτ ν. Πιο συ κεκριμένα, το κεφά αιο 2 πρα ματεύεται τη συ ο ή απορριμμάτ ν με σήμανση και εκκα άριση, το κεφά αιο 3 τη συ ο ή απορριμμάτ ν με σήμανση και συμπύκν ση, το κεφά αιο 4 τη συ ο ή απορριμμάτ ν με αντι ραφή και το κεφά αιο 5 τη συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών. Τέ ος, το κεφά αιο 6 συ κρίνει τους παραπάν εμε ιώδεις α ορί μους συ ο ής απορριμμάτ ν. Το δεύτερο μέρος της εξετάζει προη μένους α ορί μους συ ο ής απορριμμάτ ν και αποτε είται από 4 κεφά αια. Το κεφά αιο 7 πρα ματεύεται επτομερώς τη ενεα ο ική συ ο ή απορριμμάτ ν, το κεφά αιο 8 την παρά η η συ ο ή απορριμμάτ ν και το κεφά αιο 9 την ταυτό ρονη συ ο ή απορριμμάτ ν. Τέ ος, στο κεφά αιο 10 δίνεται μια σύντομη εισα ή στη συ ο ή απορριμμάτ ν πρα ματικού- ρόνου.

31 Μέρος I Θεμε ιώδεις α όρι μοι συ ο ής απορριμμάτ ν 31

32

33 Κεφά αιο 2 Συ ο ή απορριμμάτ ν με σήμανση και εκκα άριση Ο ιδανικός στό ος ενός συ έκτη απορριμμάτ ν είναι η ανάκτηση του ώρου που κατα αμ- άνει κά ε αντικείμενο το οποίο δεν πρόκειται να ξανα ρησιμοποιη εί από το πρό ραμμα. Κά ε σύστημα αυτόματης δια είρισης μνήμης είναι επιφορτισμένο με τις εξής υπο ρεώσεις: 1. να εκ ρεί ώρο ια νέα αντικείμενα, 2. να ανα ν ρίζει τα ζ ντανά αντικείμενα, 3. να ανακτά το ώρο που κατα αμ άνουν τα νεκρά αντικείμενα. Οι υπο ρεώσεις αυτές δεν είναι ανεξάρτητες. Πιο συ κεκριμένα, ο τρόπος ανάκτησης μνήμης επηρεάζει την εκ ώρηση μνήμης. Όπ ς είδαμε στο κεφά αιο 1, το πρό ημα της απόφασης κατά πόσο ένα αντικείμενο είναι πρα ματικά ζ ντανό είναι μη-αποκρίσιμο. Η προσ ασιμότητα μέσ δεικτών δίνει μία υπερ-προσέ ιση του συνό ου τ ν ζ ντανών αντικειμέν ν. Ένα αντικείμενο ε ρείται ζ ντανό αν και μόνο αν είναι προσ άσιμο δια μέσου μιας α υσίδας αναφορών ξεκινώντας από ένα σύνο ο ( ν στών) ριζών. Από την ά η π ευρά, ένα αντικείμενο ε ρείται νεκρό και η μνήμη που αυτό κατα αμ άνει μπορεί να ανακτη εί, αν δεν είναι προσ άσιμο από καμία τέτοια α υσίδα αναφορών. Παρότι ένα ζ ντανό αντικείμενο ενδέ εται να μην προσπε ασ εί ξανά, ένα νεκρό αντικείμενο είναι σί ουρα νεκρό. Ο πρώτος α όρι μος που εξετάζουμε είναι αυτός της συ ο ής με σήμανση και εκκα άριση και διατυπώ ηκε από τον Collins [81]. Πρόκειται ια μια απευ είας υ οποίηση της αναδρομικής ιδιότητας της προσ ασιμότητας μέσ δεικτών. Ο α όρι μος εκτε είται σε δύο φάσεις: αρ ικά ο συ έκτης διασ ίζει το ράφο τ ν αντικειμέν ν, εκκινώντας από τις ρίζες (κατα ρητές, στοί α, κα ο ικές μετα ητές), δια μέσου τ ν οποί ν το πρό ραμμα έ ει άμεση πρόσ αση σε αντικείμενα και συνε ίζει ακο ου ώντας μετα ητές-δείκτες και σημαίνοντας κά ε αντικείμενο που συναντά. Η πρώτη αυτή φάση είναι ν στή και ς εξι νίαση. Στη δεύτερη φάση, αυτήν της εκκα άρισης, ο συ έκτης εξετάζει κά ε αντικείμενο στο σ ρό: κά ε μη-σημασμένο αντικείμενο ε ρείται απόρριμμα και η μνήμη που αυτό κατα αμ- άνει απε ευ ερώνεται. Ακρι ώς επειδή δεν εντοπίζει τα απορρίμματα κα εαυτά, α ά αντί ετα εντοπίζει τα αντικείμενα που δεν είναι απορρίμματα και έπειτα συμπεραίνει π ς τα υπό οιπα είναι απορρίμματα, 33

34 34 Κεφάλαιο 2. Συλλογή απορριμμάτων με σήμανση και εκκαθάριση Α όρι μος 2.1 Συ ο ή με σήμανση και εκκα άριση: εκ ώρηση 1: procedure N () 2: ref () 3: if ref = null then heap is full 4: () 5: ref () 6: if ref = null then heap is still full 7: error Out of memory! 8: return ref 9: procedure () 10: atomic 11: F R () 12: (start, end) ο α όρι μος με σήμανση και εκκα άριση αρακτηρίζεται πο ές φορές και ς έμμεσος. Κά ε φορά που εκτε είται, εντοπίζει από την αρ ή τα προσ άσιμα αντικείμενα. Αντί ετα, ένας άμεσος α όρι μος συ ο ής αποφαίνεται κατά πόσο ένα αντικείμενο είναι ζ ντανό ή μη από το αντικείμενο κα εαυτό, ρίς να είναι απαραίτητη η διάσ ιση του ράφου τ ν αντικειμέν ν. Παράδει μα ενός άμεσου α ορί μου αποτε εί ο α όρι μος καταμέτρησης αναφορών. 2.1 Ο α όρι μος σήμανσης και εκκα άρισης Από την π ευρά του συ έκτη, τα νήματα-τροποποιητές εκτε ούν 3 ενδιαφέρουσες ενέρ ειες τις N, R και W, τις οποίες κά ε α όρι μος συ ο ής ορίζει με το δικό του τρόπο. Η διαπροσ πεία του συ έκτη με τον τροποποιητή είναι ιδιαίτερα απ ή. Αν δεν είναι δυνατή η εκ ώρηση μνήμης ια ένα αντικείμενο σε ένα νήμα-τροποποιητή, κα είται ο συ - έκτης και το αίτημα εκ ώρησης επανα αμ άνεται (α όρι μος 2.1). Η παρουσία της έξης κ ειδί atomic τονίζει πώς η εκτέ εση του συ έκτη πρα ματοποιείται με παύση του κόσμου, δη αδή ρίς να εκτε ούνται ταυτό ρονα νήματα- τροποποιητές. Αν και πά ι το αίτημα δεν μπορεί ικανοποιη εί, η δια έσιμη μνήμη στο σ ρό έ ει εξαντ η εί. Ενώ τις περισσότερες φορές αυτό αποτε εί σφά μα εκτέ εσης, σε ορισμένες ώσσες προ ραμματισμού η συνάρτηση N δύναται να ε είρει μία εξαίρεση την οποία ο προ ραμματιστής μπορεί να πιάσει και να ειριστεί. Πριν ξεκινήσει την εξι νίαση του ράφου αντικειμέν ν, ο συ έκτης πρέπει να αρ ικοποιήσει τη ίστα ερ ασιών (μετα ητή worklist) με τα αντικείμενα εκκίνησης της εξερεύνησης (διαδικασία F R στον α όρι μο 2.2). Κά ε αντικείμενο-ρίζα σημαίνεται και τοπο ετείται στη ίστα ερ ασιών. Η σήμανση κ δικοποιείται συνή ς με την τιμή ενός bit/byte το οποίο απο ηκεύεται είτε στην κεφα ίδα του αντικειμένου είτε σε ένα ξε ριστό bitmap. Αν ένα αντικείμενο δεν περιέ ει δείκτες, απ ώς σημαίνεται και δεν εισά εται στη ίστα ερ ασιών, αφού αυτό δεν είναι απαραίτητο κα ώς δεν έ ει παιδιά. Για να ε α ιστοποιη εί το μέ ε ος της ίστας ερ ασιών, η F R κα εί αμέσ ς τη διαδικασία. Ενα ακτικά, μπορεί να είναι επι υμητή η όσο το δυνατόν ρη ορότερη σάρ ση τ ν ριζών κά ε νήματος-τροποποιητή. Για παράδει μα ένας ταυτό ρονος συ έκτης μπορεί να διακόπτει

35 2.1 Ο αλγόριθμος σήμανσης και εκκαθάρισης 35 Α όρι μος 2.2 Συ ο ή με σήμανση και εκκα άριση: σήμανση 1: procedure F R () 2: (worklist) 3: for all fld Roots do 4: ref fld 5: if ref null and not M (ref) then 6: M (ref) 7: (worklist, ref) 8: () 9: procedure () 10: worklist empty 11: procedure () 12: while not E (worklist) do 13: ref (worklist) 14: for all fld P ointers(ref) do 15: child fld 16: if child null and not M (child) then 17: M (child) 18: (worklist, child) την εκτέ εση ενός νήματος-τροποποιητή ια πο ύ μικρό ρονικό διάστημα ώστε να σαρώσει τη στοί α του και να συνε ίσει με την εξερεύνηση του ράφου ενώ το τε ευταίο εκτε είται. Η ίστα ερ ασιών μπορεί να υ οποιη εί ς μία στοί α, οδη ώντας έτσι σε μία κατά ά ος διάσ ιση του ράφου τ ν αντικειμέν ν. Αν μά ιστα τα bit σήμανσης ρίσκονται απο ηκευμένα μαζί με τα αντικείμενα (π.. στην κεφα ίδα τ ν τε ευταί ν), τότε τα επόμενα αντικείμενα που πρόκειται να εξεταστούν, αυτά που είναι ήδη σημασμένα, ρίσκονται με με ά η πι ανότητα στην κρυφή μνήμη. Η τοπικότητα τ ν αναφορών μπορεί να επιδράσει σε με ά ο α μό στην επίδοση του συ έκτη. Η σήμανση του ράφου τ ν αντικειμέν ν υ οποιείται από έναν απ ό ρό ο while. Ο δείκτης προς ένα αντικείμενο εξά εται από τη ίστα ερ ασιών και οι δείκτες του αντικειμένου αυτού, εφόσον δε δεί νουν σε σημασμένα αντικείμενα εισά ονται σε αυτή, μέ ρις ότου η ίστα ερ ασιών αδειάσει. Σε αυτήν την εκδο ή της κά ε αντικείμενο προς το οποίο υπάρ- ει αναφορά στη ίστα ερ ασιών είναι σημασμένο. Ο τερματισμός της διαδικασίας, επομέν ς και της F R εξασφα ίζεται από το ε ονός π ς ένας δείκτης σε ήδη σημασμένο αντικείμενο δεν εισά εται στη ίστα ερ ασιών. Κατά την επιστροφή της F R, κά ε αντικείμενο που είναι προσ άσιμο από τις ρίζες του προ ράμματος έ ει σημαν εί. Κά ε μη σημασμένο αντικείμενο είναι απόρριμμα και η μνήμη που αυτό κατα αμ άνει μπορεί να απε ευ ερ εί. Η φάσης της εκκα άρισης υ οποιείται από τη διαδικασία. Σαρώνεται ο σ ρός και είτε αφαιρείται η σήμανση από ένα σημασμένο αντικείμενο, είτε ε ευ ερώνεται η μνήμη που εί ε εκ ρη εί σε ένα μη σημασμένο αντικείμενο. Ας παρατηρήσουμε π ς το κόστος αφαίρεσης της σήμανσης μπορεί να αποφευ εί αν η σημασία τ ν bit/byte σήμανσης ενα άσσεται μεταξύ δύο διαδο ικών συ ο ών. Η συ ο ή με σήμανση και εκκα άριση επι ά ει ορισμένους περιορισμούς όσον αφορά την

36 36 Κεφάλαιο 2. Συλλογή απορριμμάτων με σήμανση και εκκαθάριση Α όρι μος 2.3 Συ ο ή με σήμανση και εκκα άριση: εκκα άριση 1: procedure (start, end) 2: scan start 3: while scan < end do 4: if M (scan) then 5: M (scan) 6: else 7: (scan) 8: scan O (scan) ορ άν ση του σ ρού. Πρώτον, δε μετακινεί αντικείμενα. Αυτό έ ει ς αποτέ εσμα ο δια- ειριστής μνήμης να πρέπει να είναι ιδιαίτερα προσεκτικός προκειμένου ο σ ρός να μην κατακερματισ εί σε τέτοιο α μό ώστε ο εκ ρητής να μην μπορεί π έον να ικανοποιεί αιτήματα, κα ώς αυτό α έ ει ς αποτέ εσμα είτε τη δραματική αύξηση της συ νότητας κ ήσης του συ έκτη είτε, στη ειρότερη περίπτ ση την παντε ή αδυναμία εκ ώρησης μνήμης. Επιπ έον, ο εκκα αριστής πρέπει να μπορεί να προσδιορίσει τη έση κά ε κόμ ου στο σ ρό ακόμη και υπό την παρουσία παρα εμίσματος που εισά εται από τις απαιτήσεις ευ υ ράμμισης που έ ουν οι περισσότερες σύ ρονες αρ ιτεκτονικές. Κατά συνέπεια, το έρ ο της συνάρτησης O ενδέ εται να είναι σημαντικά πιο πο ύπ οκο από μια απ ή πρόσ εση της διεύ υνσης ενός αντικειμένου με το μέ ε ος αυτού. 2.2 Η τρι ρ ματική αφαίρεση Είναι ιδιαίτερα ο ική η ύπαρξη ενός τρόπου περι ραφής της κατάστασης τ ν αντικειμέν ν κατά τη διάρκεια της συ ο ής (αν έ ουν σημαν εί ή ό ι, αν ρίσκονται στη ίστα ερ ασιών κ π). Η τρι ρ ματική αφαίρεση είναι ένας ρήσιμος αρακτηρισμός τ ν συ εκτών εξι νίασης ο οποίος επιτρέπει την επι ειρηματο ο ία σ ετικά με την ορ ότητα ενός συ έκτη σε όρους ανα οί τ ν, την ισ ύ τ ν οποί ν πρέπει αυτός να εξασφα ίζει. Σύμφ να με την τρι ρ ματική αφαίρεση, η συ ο ή εξι νίασης διαιρεί το ράφο αντικειμέν ν σε μαύρα (ζ ντανά) και ευκά (πι ανώς νεκρά) αντικείμενα. Αρ ικά, κά ε αντικείμενο είναι ευκό, ενώ την πρώτη φορά που ανακα ύπτεται κατά την εξερεύνηση ρ ματίζεται κρι. Χρ ματίζεται δε μαύρο όταν έ ει σαρ εί και έ ουν εντοπισ εί τα παιδιά του. Διαισ ητικά, ένα αντικείμενο είναι μαύρο αν ο συ έκτης έ ει ο οκ ηρώσει την επεξερ ασία του και κρι αν ο συ έκτης το έ ει ανακα ύψει α ά δεν έ ει τε ειώσει ακόμη την επεξερ ασία του (ή ρειάζεται να το επεξερ ασ εί ξανά). Σε ανα ο ία με το ρ ματισμό τ ν αντικειμέν ν, ένα πεδίο δείκτης μπορεί επίσης να αρακτηρισ εί ς προς το ρώμα του: κρι όταν ο συ έκτης το ανακα ύπτει ια πρώτη φορά και μαύρο όταν ο συ έκτης έ ει τε ειώσει την εξερεύνηση του υπο ράφου που το έ ει ς ρίζα. Σύμφ να με τον Pirinen [93], η ανα ο ία αυτή επιτρέπει την αντιμετώπιση τ ν ριζών του τροποποιητή σαν αυτός να ήταν αντικείμενο. Ένας κρι τροποποιητής έ ει ρίζες οι οποίες δεν έ ουν σαρ εί ακόμα από το συ έκτη. Ένας μαύρος τροποποιητής έ ει ρίζες οι οποίες έ ουν σαρ εί από το συ έκτη και δε ρειάζεται να εξετασ ούν ξανά. Η εξι νίαση προοδεύει στο σ ρό με την μετακίνηση του μετώπου κύματος (τ ν κρι αντικειμέν ν) του συ έκτη που ξε ρίζει τα μαύρα αντικείμενα από τα ευκά μέ ρις ότου ό α τα προσ άσιμα αντικείμενα έ ουν ρ ματισ εί μαύρα. Ο α όρι μος της συ ο ής με σήμανση και εκκα άριση διατηρεί μια σημαντική ανα οί τη:

37 2.3 Σήμανση με χρήση bitmap 37 Σ ήμα 2.1: Σήμανση με τρι ρ ματική αφαίρεση. Τα μαύρα αντικείμενα κα ώς και τα παιδιά αυτών έ ουν επεξερ ασ εί από το συ έκτη. Ο συ έκτης ν ρίζει την ύπαρξη τ ν κρι αντικειμέν ν α ά δεν έ ει ο οκ ηρώσει την επεξερ ασία τους. Ο συ έκτης δεν έ ει επισκεφ εί ακόμη τα ευκά αντικείμενα (και μερικά δε τα επισκεφ εί ποτέ). στο τέ ος κά ε επανά ηψης του ρό ου σήμανσης δεν υπάρ ουν αναφορές από μαύρα προς ευκά αντικείμενα. Επομέν ς κά ε ευκό προσ άσιμο αντικείμενο είναι προσ άσιμο από κάποιο κρι αντικείμενο. Η μη διατήρηση της ανα οί της διακινδυνεύει τη μη σήμανση ενός ζ ντανού απο όνου ενός μαύρου αντικειμένου (και κατ επέκταση τη αν ασμένη εκκα άριση αυτού) κα ώς ο συ έκτης δεν επανεξετάζει μαύρα αντικείμενα. Η τρι ρ ματική αφαίρεση είναι ιδιαίτερα ρήσιμη κατά τη εώρηση α ορί μ ν ια ταυτό ρονη συ ο ή απορριμμάτ ν, όπου τα νήματα-τροποποιητές εκτε ούνται ταυτό ρονα με τα νήματα-συ έκτες. 2.3 Σήμανση με ρήση bitmap Ένα bit σήμανσης συνή ς απο ηκεύεται στην επικεφα ίδα του αντικειμένου. Ενα ακτικά, τα bits σήμανσης μπορούν να απο ηκεύονται σε ένα ξε ριστό bitmap στην άκρη του σ ρού που συσ ετίζει κά ε ένα bit με κά ε πι ανή διεύ υνση στη μνήμη όπου μπορεί να απο ηκευ εί ένα αντικείμενο. Ο απαιτούμενος ώρος ια την απο ήκευση του bitmap εξαρτάται από τις απαιτήσεις ευ υ ράμμισης της εικονικής μη ανής. Μπορεί να ρησιμοποιη εί είτε ένα κα ο ικό bitmap, είτε αν ο σ ρός είναι ορ αν μένος σε μπ οκ, ένα bitmap ανά μπ οκ. Η τε ευταία ορ άν ση έ ει ς π εονέκτημα το ε ονός π ς δε σπατα άται ώρος στην περίπτ ση που ο σ ρός δεν είναι συνε όμενος. Ο πίνακας bitmap ια κά ε μπ οκ μπορεί να απο ηκευ εί σε μία στα ερή έση του μπ οκ, κάτι το οποίο στόσο διακινδυνεύει την υπο ά μιση της επίδοσης, κα ώς τα bitmap α αντα νίζονται ια τα ίδια σύνο α σε μία συσ ετιστική κρυφή μνήμη. Επιπ έον, η πρόσ αση στο bitmap αυτόματα σημαίνει το ά ι μα της αντίστοι ης σε ίδας. Για να αντιμετ πισ εί το πρώτο πρό ημα, η έση ενός bitmap στο μπ οκ μπορεί να μετα ά εται και να προκύπτει ια παράδει μα ς αποτέ εσμα της εφαρμο- ής μιας συνάρτησης κατακερματισμού στη διεύ υνση του μπ οκ. Ενα ακτικά, το bitmap μπορεί να απο ηκευ εί εκτός του μπ οκ, ρησιμοποιώντας όμ ς έναν πίνακα που δεικτοδοτείται από μπ οκ (με πι ανή και πά ι ρήση κάποιας συνάρτησης κατακερματισμού). Η τε νική αυτή αντιμετ πίζει και τα δύο προ ήματα ταυτό ρονα. Τα bitmap αρκούν στην περίπτ ση που η συ ο ή απασ ο εί μόνο ένα νήμα-σημαντή. Διαφορετικά, η ενημέρ ση ενός bit σε ένα bitmap είναι ευά τη στην απώ εια ενημερώσε ν, ενώ αντί ετα η ενημέρ ση ενός bit στην επικεφα ίδα ενός αντικειμένου διακινδυνεύει απ ώς

38 38 Κεφάλαιο 2. Συλλογή απορριμμάτων με σήμανση και εκκαθάριση την ε ραφή της ίδιας τιμής εις διπ ούν. Πο οί συ έκτες ρησιμοποιούν πίνακες bytemap ια να καταστήσουν τις καταστάσεις συνα νισμού ακίνδυνες. Ενα ακτικά, η τροποποίηση ενός bit σε ένα bitmap πρέπει να ίνεται με τη ρήση συ ρονισμέν ν ειτουρ ιών. Στην πράξη η κατάσταση είναι επίσης περίπ οκη όσον αφορά μεμον μένα bits της επικεφα ίδας σε συστήματα που επιτρέπουν ταυτό ρονη εκτέ εση συ έκτη και τροποποιητή, κα ώς οι έξεις της επικεφα ίδας φι οξενούν μεταξύ ά ν και δεδομένα τα οποία μπορεί να προσπε άσει ο τροποποιητής, όπ ς κ ειδώματα και κ δικούς κατακερματισμού. Μια προσεκτική σ εδίαση μπορεί να τοπο ετήσει τα παραπάν δεδομένα σε διαφορετικές έξεις της επικεφα ίδας και να εξα είψει την ανά κη ια ατομική τροποποίηση τ ν bits σήμανσης αυτής. Η ρήση bitmap σήμανσης παρουσιάζει έναν αρι μό από π εονεκτήματα. Ένα bitmap απο- ηκεύει τα bit σήμανσης πιο πυκνά σε σύ κριση με την απο ήκευσή τους στις επικεφα ίδες τ ν αντικειμέν ν. Η ρήση bitmap σήμανσης κατά τη συ ο ή με σήμανση και εκκα άριση συνεπά εται π ς η φάση της σήμανσης δεν τροποποιεί κανένα αντικείμενο, παρά δια άζει τα πεδία δείκτες τ ν ζ ντανών αντικειμέν ν. Με εξαίρεση τη φόρτ ση του πεδίου περι ραφητή τύπου, κανένα ά ο τμήμα αντικειμέν ν που δεν περιέ ουν δείκτες δεν προσπε άζεται. Η φάση της εκκα άρισης δε α δια άσει από ούτε και α ράψει σε κάποιο ζ ντανό αντικείμενο, παρότι μπορεί να ενημερώσει πεδία αντικειμέν ν απορριμμάτ ν στο π αίσιο ανάκτησης της μνήμης που αυτά κατα αμ άνουν ( ια παράδει μα ια να εισά ει ένα αντικείμενο σε μια ε εύ- ερη ίστα). Συνεπώς η σήμανση με ρήση bitmap έ ει την τάση να τροποποιεί ι ότερες έξεις μνήμης, με αποτέ εσμα ο αρι μός τ ν ρώμικ ν μπ οκ κρυφής μνήμης που πρέπει να αντι ραφούν στην κύρια μνήμη να μειώνεται. Η σήμανση με τη ρήση bitmap υιο ετή ηκε αρ ικά ια ένα συντηρητικό συ έκτη που σ εδίασαν οι Boehm και Wieser [28] ια την παρο ή αυτόματης δια είρισης μνήμης σε υ οποιήσεις μη συνερ ατικών σσών όπ ς η C και η C++. Σε συστήματα με ακρι ή π ηροφορία τύπ ν η ταυτοποίηση κά ε έσης μνήμης που περιέ ει ένα δείκτη είναι ακρι ής ανεξάρτητα από το αν αυτή αφορά το εσ τερικό κάποιου αντικειμένου, τη στοί α ή κάποια κα ο ική μετα ητή. Οι συντηρητικοί συ έκτες αντί ετα δεν αμ άνουν αυτό το επίπεδο υποστήριξης από το μετα ττιστή ή το σύστημα εκτέ εσης και ια αυτό προ αίνουν σε συντηρητικές αποφάσεις όσον αφορά την ταυτοποίηση δεικτών. Εάν η τιμή που ρίσκεται σε μια έση μνήμης μοιάζει αρκετά με δείκτη, ο συ έκτης αποφασίζει π ς πρά ματι είναι. Είναι εμφανές π ς η συντηρητική συ ο ή απορριμμάτ ν ενδέ εται εσφα μένα να ερμηνεύσει μια έση μνήμης ς δείκτη, κάτι που έ ει δύο συνέπειες όσον αφορά την ασφά εια. Πρώτον, ο συ έκτης δεν επιτρέπεται να μετα ά ει το περιε όμενο καμίας έσης μνήμης στο ώρο διευ ύνσε ν του τροποποιητή (συμπερι αμ ανομέν ν τ ν ριζών). Αυτό αποκ είει αμέσ ς α ορί μους που μετακινούν αντικείμενα, κα ώς αυτό α απαιτούσε την ενημέρ ση κά ε αναφοράς προς ένα μετακινη έν αντικείμενο. Επίσης αποκ είει την απο ήκευση τ ν bits σήμανσης στις επικεφα ίδες τ ν αντικειμέν ν κα ώς ένα αντικείμενο ια το οποίο ίνεται ό ος μπορεί να μην είναι αντικείμενο αν η πρόσ αση σε αυτό έ ινε από την εσφα μένη εώρηση μιας τιμής ς δείκτη. Η τροποποίηση της τιμής ενός bit μπορεί να καταστρέψει τα δεδομένα του ρήστη. Δεύτερον, η ε α ιστοποίηση της πι ανότητας ο τροποποιητής να προσπε άζει δεδομένα του συ έκτη είναι πο ύ ρήσιμη. Η προσ ήκη μιας επικεφα ίδας στην αρ ή ενός αντικειμένου είναι πιο ριψοκίνδυνη από την απο ήκευση τ ν μεταδεδομέν ν του συ έκτη όπ ς τα bits σήμανσης σε μία ξε ριστή δομή δεδομέν ν. Σύμφ να με τον Boehm [25], ένα επιπ έον κίνητρο ια τη σήμανση με ρήση bitmap είναι η ανά κη ια ε α ιστοποίηση της σε ιδοποίησης που προκα είται από τη δράση του συ έκτη. Στα σύ ρονα συστήματα πάντ ς η πρόκ ηση της παραμικρής σε ιδοποίησης από το συ έκτη ε ρείται απαράδεκτη. Το ερώτημα είναι κατά πόσο η σήμανση με ρήση bitmap μπορεί να ε τιώσει την επίδοση της κρυφής μνήμης. Σύμφ να με τους Hayes [58] και Jones

39 2.3 Σήμανση με χρήση bitmap 39 και Ryder [68] τα αντικείμενα έ ουν μια τάση να ζουν και να πε αίνουν σε συστάδες. Πο - οί εκ ρητές προσπα ούν να τοπο ετήσουν τα αντικείμενα σε ειτονικές έσεις μνήμης. Η εκκα άριση με ρήση bitmap παρουσιάζει δύο π εονεκτήματα. Πρώτον, επιτρέπει το μαζικό έ ε ο τ ν bits/bytes σήμανσης ια τα αντικείμενα μιας συστάδας, κα ώς είτε ό α α έ ουν τη ο ική τιμή 0 είτε ό α α έ ουν τη ο ική τιμή 1. Άμεση συνέπεια του ε ονότος αυτού είναι η ευκο ία προσδιορισμού μέσ του bitmap του κατά πόσο ένα μπ οκ μνήμης αποτε είται μόνο από απορρίμματα και άρα μπορεί να επιστραφεί ο όκ ηρο στον εκ ρητή. Οι Garner κ.ά. [56] ρησιμοποιούν μια υ ριδική προσέ ιση, συσ ετίζοντας κά ε μπ οκ τ ν ξε ριστών ε εύ ερ ν ιστών από μπ οκ διαφορετικού με έ ους με ένα byte και ταυτό ρονα απο ηκεύοντας ένα bit στην επικεφα ίδα κά ε αντικειμένου. Το byte έ ει την τιμή 0xFF αν και μόνο αν το αντίστοι ο μπ οκ έ ει ένα του ά ιστον ζ ντανό αντικείμενο. Με τον τρόπο αυτό το byte-map επιτρέπει στον εκκα αριστή να εντοπίζει εύκο α τα μπ οκ που δεν έ ουν κανένα ζ ντανό αντικείμενο και στη συνέ εια να τα ανακυκ ώνει ο όκ ηρα. Το ασικό π εονέκτημα της προσέ ισης αυτής είναι π ς τόσο το bit στην επικεφα ίδα ενός αντικειμένου όσο και το αντίστοι ο byte του bytemap που αφορά το μπ οκ στο οποίο αυτό ζει μπορούν να ε ράφονται ρίς τη ρήση συ ρονισμέν ν ειτουρ ιών. Α όρι μος 2.4 Συ ο ή με σήμανση και εκκα άριση: σήμανση με bitmap (Printezis & Detlefs) 1: procedure () 2: cur I B () 3: while cur < HeapEnd do 4: (worklist, cur) 5: S (cur) 6: cur I B () 7: procedure S (start) 8: while not E (worklist) do 9: ref (worklist) 10: for all fld P ointers(ref) do 11: child fld 12: if child null and not M (child) then 13: M (child) 14: if child < start then 15: (worklist, child) Οι Printezis και Detlefs [97] ρησιμοποιούν bitmap ια να μειώσουν τον απαιτούμενο ώρο ια τις στοί ες σήμανσης σε έναν σ εδόν-ταυτό ρονο, ενεα ο ικό συ έκτη. Αρ ικά, ς συνή ς οι ρίζες του τροποποιητή σημαίνονται με την ε ραφή της ο ικής τιμής 1 ορισμέν ν bits στο bitmap. Στη συνέ εια, το νήμα-σημαντής σαρώνει ραμμικά το bitmap αναζητώντας ζ ντανά αντικείμενα. Ο α όρι μος 2.4 διατηρεί την ακό ου η ανα οί τη: τα σημασμένα αντικείμενα που ρίσκονται σε αμη ότερες διευ ύνσεις από την τιμή του δείκτη cur στη διαδικασία είναι μαύρα, ενώ τα αντικείμενα που ρίσκονται σε υψη ότερες διευ ύνσεις είναι κρι. Όταν εντοπίζεται το επόμενο ζ ντανό (σημασμένο) αντικείμενο, αυτό είται στη στοί α και ο έ ε ος περνά στη διαδικασία S. Η τε ευταία εκτε εί έναν ρό ο while προκειμένου να αποκαταστήσει την ακό ου η ανα οί τη: αντικείμενα εξ ούνται από τη στοί α και τα παιδιά τους σημαίνονται αναδρομικά μέ ρις ότου αυτή εκκεν εί. Αν ένα αντικείμενο ρίσκεται σε αμη ότερη διεύ υνση μνήμης από την τρέ ουσα τιμή

40 40 Κεφάλαιο 2. Συλλογή απορριμμάτων με σήμανση και εκκαθάριση του δείκτη cur, αυτό εισά εται στη στοί α σήμανσης, α ιώς η επεξερ ασία του ανα ά εται ια αρ ότερα. Η ασική διαφορά αυτού του α ορί μου και του α ορί μου 2.2 αφορά στην εισα ή τ ν παιδιών ενός αντικειμένου στη στοί α σήμανσης. Τα αντικείμενα σημαίνονται αναδρομικά μόνο αν αυτά ρίσκονται πίσ από το μαύρο μέτ πο κύματος που κινείται ραμμικά στο σ ρό. Παρότι η πο υπ οκότητα του α ορί μου αυτού είναι ραμμική ς προς το μέ ε ος του ώρου που συ έ εται, στην πράξη η αναζήτηση σε ένα bitmap είναι φ ηνή. 2.4 Οκνηρή εκκα άριση Η ρονική πο υπ οκότητα της σήμανσης είναι O(L), όπου L το συνο ικό μέ ε ος τ ν ζ ντανών αντικειμέν ν του σ ρού, ενώ η ρονική πο υπ οκότητα της εκκα άρισης O(H), όπου H το μέ ε ος του σ ρού. Κα ώς H > L, εκ πρώτης όψε ς φαίνεται πώς το κόστος της εκκα άρισης κυριαρ εί στο κόστος του α ορί μου συ ο ής με σήμανση και εκκα άριση, κάτι που στην πράξη δεν παρατηρείται. To κυνή ι δεικτών στη φάση της σήμανσης οδη εί σε τε εί ς μη προ έψιμα μοτί α πρόσ ασης στη μνήμη, ενώ αντί ετα η συμπεριφορά της εκκα άρισης είναι πο ύ πιο προ έψιμη. Επιπροσ έτ ς, το κόστος της εκκα άρισης ενός αντικειμένου είναι πο ύ μικρότερο από το κόστος της εξερεύνησης του υπο ράφου τ ν αντικειμέν ν με ρίζα αυτό. Η προφόρτ ση αντικειμέν ν αποτε εί έναν τρόπο ε τί σης της συμπεριφοράς της εκκα άρισης όσον αφορά την κρυφή μνήμη. Για να αποφύ ουν τον κατακερματισμό της μνήμης οι εκ ρητές πο ών δια ειριστών μνήμης που υποστηρίζουν συ έκτες με σήμανση και εκκα άριση τοπο ετούν αντικείμενα του ίδιου με έ ους σε συνε όμενες διευ ύνσεις μνήμης, οδη ώντας με τον τρόπο αυτό σε στα ερό ήμα μοτί ου πρόσ ασης μνήμης κατά την εκκα άριση μπ οκ από αντικείμενα του ίδιου με έ ους. Αυτή η προσέ ιση δεν επιτρέπει μόνο προφόρτ ση ο ισμικού α ά είναι ιδανική και ια τους μη ανισμούς προφόρτ σης υ ικού που δια έτουν οι σύ ρονοι επεξερ αστές. Μπορούν οι ρόνοι παύσης τ ν νημάτ ν-τροποποιητών ια την εκτέ εση της φάσης της εκκα άρισης να ε αττ ούν ή και να εξα ειφ ούν π ήρ ς; Παρατηρούμε δύο ιδιότητες τ ν αντικειμέν ν και τ ν bit σήμανσης αυτών. Πρώτον, από τη στι μή που ένα αντικείμενο ίνεται απόρριμμα, παραμένει απόρριμμα: δεν μπορεί να προσπε ασ εί ή να αναστη εί από κάποιο νήμα-τροποποιητή. Δεύτερον, τα νήματα-τροποποιητές δεν έ ουν πρόσ αση στα bit σήμανσης. Επομέν ς η εκκα άριση μπορεί να ανατε εί σε ξε ριστά νήματα-συ έκτες, τα οποία εκτε ούνται ταυτό ρονα με τα νήματα-τροποποιητές. Ο Hughes [64] προτείνει μια απ ούστερη ύση, την οκνηρή εκκα άριση. Η τε νική ουσιαστικά π ηρώνει το κόστος της εκκα άρισης σε δόσεις με την εκκα άριση να πρα ματοποιείται από τον εκ ρητή. Στην απ ούστερη εκδο ή η συνάρτηση αυξάνει το δείκτη εκκα άρισης μέ ρις ότου ρει επαρκή ώρο σε μια ακο ου ία μη σημασμέν ν αντικειμέν ν. Ωστόσο, η εκκα άριση ενός μπ οκ κά ε φορά με πο ά αντικείμενα είναι πιο αποδοτική. Ο α όρι μος 2.5 επενερ εί σε ένα μπ οκ κά ε φορά. Είναι σύνη ες οι εκ ρητές να τοπο- ετούν στο ίδιο μπ οκ ισομε έ η αντικείμενα. Κά ε κ άση με έ ους έ ει ένα ή και περισσότερα μπ οκ εκ ώρησης μνήμης κα ώς και μία ίστα ανάκτησης (μετα ητή reclaimlist) από μπ οκ που δεν έ ουν ακόμη εκκα αρισ εί. Ως συνή ς ο συ έκτης σημαίνει ό α τα ζ ντανά αντικείμενα στο σ ρό α ά αντί να εκκα αρίσει πρό υμα ο όκ ηρο το σ ρό, επιστρέφει τα εντε ώς κενά από ζ ντανά αντικείμενα μπ οκ στον εκ ρητή. Τα υπό οιπα μπ οκ προστί ενται στην κατά η η ίστα ανάκτησης με άση το μέ ε ος τ ν αντικειμέν ν που φι οξενούν. Με τη ήξη της φάσης διακοπής του κόσμου τα νήματα-τροποποιητές επανεκκινούνται. Η συνάρτηση αρ ικά επι ειρεί την απόκτηση μιας ε εύ ερης έσης από

41 2.4 Οκνηρή εκκαθάριση 41 Α όρι μος 2.5 Συ ο ή με σήμανση και εκκα άριση: οκνηρή εκκα άριση σε ορ αν μένο κατά μπ οκ σ ρό 1: procedure () 2: atomic 3: F R () 4: for all block in blocks do 5: if not M (block) then no objects marked in this block? 6: (blockallocator, block) return block to block allocator 7: else 8: (reclaimlist, block) 9: function (sz) 10: atomic 11: result (sz) allocate from size class for sz 12: if result = null then if no free slots for this size... 13: S (sz) sweep a little 14: result (sz) 15: return result if still null, collect 16: procedure S (sz) 17: repeat 18: block B (reclaimlist, sz) 19: if block null then 20: (start(block), end(block)) 21: if F (block) then 22: return 23: until block = null reclaim list for this size class is empty 24: S (sz) 25: procedure S (sz) allocation slow path 26: block B () 27: if block null then from the block allocator 28: (block, sz)

42 42 Κεφάλαιο 2. Συλλογή απορριμμάτων με σήμανση και εκκαθάριση την αντίστοι η κ άση με έ ους. Αν η προσπά εια αποτύ ει, κα είται ο οκνηρός εκκα αριστής ο οποίος εκκα αρίζει ένα ή περισσότερα εναπομείναντα μπ οκ της αντίστοι ης ίστας reclaimlist μέ ρις ότου το αίτημα μπορεί να ικανοποιη εί. Τι συμ αίνει στην περίπτ ση όπου η ίστα τ ν ό ι ακόμη εκκα αρισμέν ν μπ οκ είναι κενή ή δεν υπάρ ει ε εύ ερη έση σε κανένα από τα εκκα αρισμένα μπ οκ; Η απάντηση είναι π ς ο εκκα αριστής προσπα εί να αποκτήσει ένα ο όκ ηρο ε εύ ερο μπ οκ από έναν κατώτερου επιπέδου εκ ρητή μπ οκ. Το φρέσκο μπ οκ στη συνέ εια αρ ικοποιείται με ρύ μιση τ ν μεταδεδομέν ν αυτού (όπ ς ια παράδει μα με τη δημιουρ ία ενός bytemap σήμανσης). Αν πά ι δεν υπάρ ουν δια έσιμα φρέσκα μπ οκ, απαιτείται η κ ήση του συ έκτη. Υπάρ ει ένα επτό ζήτημα όσον αφορά την οκνηρή εκκα άριση σε έναν ορ αν μένο κατά μπ οκ σ ρό. Ο Hughes [64] δου εύει με έναν συνε όμενο σ ρό και επομέν ς εξασφα ίζει π ς ο εκ ρητής α εκκα αρίσει κά ε αντικείμενο πριν ξεμείνει από ώρο και κα έσει το συ - έκτη. Ωστόσο, η οκνηρή εκκα άριση ξε ριστών κ άσε ν ια μπ οκ διαφορετικού με έ ους δεν μπορεί να το εξασφα ίσει, κα ώς είναι σ εδόν σί ουρο π ς ο εκκα αριστής α εξαντ ήσει μια κ άση με έ ους (και ό α τα άδεια μπ οκ αυτής) πριν προ ρήσει στην εκκα άριση μπ οκ που ανήκουν σε διαφορετικές κ άσεις με έ ους. Το ε ονός αυτό οδη εί σε δύο προ- ήματα. Πρώτον, αντικείμενα-απορρίμματα σε μη εκκα αρισμένα μπ οκ δεν αποδεσμεύονται, οδη ώντας σε διαρροή μνήμης. Αν το μπ οκ περι αμ άνει ένα ζ ντανό αντικείμενο, η παραπάν διαρροή είναι α α ής κα ώς τα αντικείμενα του μπ οκ δε α ανακυκ ούν ούτ ς ή ά ς πριν ο συ έκτης πρα ματοποιήσει ένα αίτημα ια αντικείμενο της κ άσης με έ- ους στην οποία ανήκει το μπ οκ. Δεύτερον, αν ό α τα αντικείμενα σε ένα μπ οκ διαδο ικά μετατραπούν σε απορρίμματα, έ ει α εί η δυνατότητα ανάκτησης ό ου του μπ οκ μονομιάς. Η απ ούστερη ύση είναι η ο οκ ήρ ση της εκκα άρισης ό ν τ ν μπ οκ του σ ρού πριν την έναρξη της σήμανσης. Ωστόσο, μπορεί να είναι προτιμότερο να δο ούν σε ένα μπ οκ περισσότερες ευκαιρίες οκνηρής εκκα άρισής του. Οι Garner κ.ά. [56] π ηρώνουν ένα μικρό ποσό διαρροής ια να αποφύ ουν το κόστος της πρό υμης εκκα άρισης στο σύστημα Jikes RVM/MMTk του Blackburn κ.ά. [20]. Πιο συ κεκριμένα, αντί ενός bit, ρησιμοποιούν ένα φρα μένο ακέραιο ια τη σήμανση τ ν αντικειμέν ν. Αυτό συνή ς δεν επιφέρει επιπ έον κόστος σε ώρο κα ώς υπάρ ει ώρος παραπάν από ένα bit αν οι σημάνσεις απο ηκεύονται στις επικεφα ίδες τ ν αντικειμέν ν και συ νά ξε ριστές δομές σήμανσης ρησιμοποιούν byte αντί ια bit. Κά ε κύκ ος συ ο ής αυξάνει την τιμή σήμανσης κατά 1 mod 2 K, όπου K το μέ ε ος της έξης σήμανσης σε bits, με την τιμή σήμανσης να επανέρ εται προφανώς στο 0 σε περίπτ ση υπερ εί ισης. Με τον τρόπο αυτό, ο συ έκτης μπορεί να ξε ρίσει ένα αντικείμενο που έ ει σημαν εί στον τρέ οντα κύκ ο συ ο ής από ένα αντικείμενο που εί ε σημαν εί σε κάποιον προη ούμενο κύκ ο συ ο ής. Μόνο τα αντικείμενα με την τρέ ουσα τιμή σήμανσης ε ρούνται σημασμένα. Η μηδενική τιμή σήμανσης είναι ασφα ής κα ώς, ακρι ώς πριν την εμφάνισή της, κά ε ζ ντανό αντικείμενο στο σ ρό είναι είτε μη σημασμένο (η μνήμη του εκ ρή ηκε μετά τον προη ούμενο κύκ ο συ ο ής), είτε έ ει τη μέ ιστη τιμή σήμανσης. Κά ε αντικείμενο που είναι σημασμένο με την επόμενη τιμή σήμανσης πρέπει να έ ει σημαν εί κάποιο πο απ άσιο του 2 K αρι μό συ ο ών πριν: επομέν ς είναι αι ρούμενο απόρριμμα και δε σημαίνεται από το νήμα-σημαντή. Η πι ανή προκύπτουσα διαρροή αντιμετ πίζεται σε ένα α μό με τη σήμανση ο όκ ηρ ν μπ οκ. Οποτεδήποτε ο MMTk συ έκτης σημαίνει ένα αντικείμενο, σημαίνει επίσης και το αντίστοι ο μπ οκ. Αν κανένα από τα αντικείμενα ενός μπ οκ δεν είναι σημασμένο με την τρέ ουσα τιμή σήμανσης, τότε ούτε και το μπ οκ είναι και συνεπώς μπορεί να ανακτη εί ο όκ ηρο, όπ ς στον α όρι μο 2.5. Λαμ άνοντας υπόψη την τάση τ ν αντικειμέν ν να ζουν και να πε αίνουν σε συστάδες, αναμένει κανείς π ς η παραπάν τε νική είναι αποδοτική. Η οκνηρή εκκα άριση προσφέρει έναν αρι μό π εονεκτημάτ ν. Αρ ικά έ ει κα ή τοπικότητα:

43 2.5 Θέματα προς εξέταση 43 μία έση μνήμης ενός πρώην απορρίμματος τείνει να ρησιμοποιη εί σύντομα μετά την εκκα- άριση του τε ευταίου. Επιπ έον, η α ορι μική πο υπ οκότητα της συ ο ής με σήμανση και εκκα άριση είναι π έον ραμμική ς προς το μέ ε ος τ ν ζ ντανών αντικειμέν ν του σ ρού, ίδια με την πο υπ οκότητα της συ ο ής με αντι ραφή που εξετάζουμε στο κεφά αιο 4. Συ κεκριμένα, ο Boehm [24] επισημαίνει π ς η συ ο ή με σήμανση και οκνηρή εκκα άριση παρουσιάζει έ τιστες επιδόσεις στις ίδιες συν ήκες με τη συ ο ή με αντι ραφή: όταν το με α ύτερο μέρος του σ ρού είναι άδειο, κα ώς η αναζήτηση μη σημασμέν ν αντικειμέν ν από την οκνηρή εκκα άριση α ο οκ ηρ εί ρή ορα. 2.5 Θέματα προς εξέταση Παρά το ε ονός πώς είναι ο πα αιότερος α όρι μος συ ο ής απορριμμάτ ν, υπάρ ουν διάφοροι ό οι ια τους οποίους η συ ο ή με σήμανση και εκκα άριση παραμένει ακόμα και σήμερα ε κυστική επι ο ή Επι άρυνση τροποποιητή Η απ ούστερη εκδο ή του α ορί μου δεν επι ά ει καμία επι άρυνση στις ειτουρ ίες R και W του τροποποιητή, σε αντί εση ια παράδει μα με τη συ ο ή με καταμέτρηση αναφορών που εξετάζουμε στο κεφά αιο 5. Ωστόσο η συ ο ή με σήμανση και εκκα άριση συ νά ρησιμοποιείται ς ασικός α όρι μος σε πιο εξεζητημένους συ έκτες που απαιτούν κάποιας μορφής συ ρονισμό μεταξύ συ έκτη και τροποποιητή. Τόσο οι ενεα ο ικοί συ έκτες (κεφά αιο 7) όσο και οι ταυτό ρονοι και αυξητικοί συ έκτες (κεφά αιο 9) απαιτούν από τον τροποποιητή να ενημερώνει το συ έκτη οποτεδήποτε τροποποιεί δείκτες Ρυ μαπόδοση Σε συνδυασμό με την οκνηρή εκκα άριση, η συ ο ή με σήμανση και εκκα άριση προσφέρει υψη ή ρυ μαπόδοση. Η φάση της σήμανσης είναι σ ετικά φ ηνή και κυριαρ είται από την καταδί ξη δεικτών. Χρειάζεται απ ώς να έσει ένα bit/byte ια κά ε ζ ντανό αντικείμενο που ανακα ύπτει, σε αντί εση με τη συ ο ή με αντι ραφή (κεφά αιο 4) ή τη συ ο ή με σήμανση και συμπύκν ση (κεφά αιο 3) που αντι ράφουν ή μετακινούν αντικείμενα. Από την ά η π ευρά, όπ ς και οι περισσότεροι συ έκτες εξι νίασης που εξετάζουμε στα πρώτα κεφά αια αυτής της ερ ασίας, η συ ο ή με σήμανση και εκκα άριση απαιτεί την διακοπή της εκτέ εσης τ ν νημάτ ν-τροποποιητών κατά τη διάρκεια εκτέ εσης του συ έκτη. Ο ρόνος παύσης ενός κύκ ου συ ο ής εξαρτάται πρ τίστ ς από το πρό ραμμα που εκτε εί ο τροποποιητής και την είσοδο αυτού και μπορεί εύκο α σε μερικές περιπτώσεις να φ άσει σε διάρκεια και μερικά δευτερό επτα Απαιτήσεις σε ώρο Η συ ο ή με σήμανση και εκκα άριση έ ει σαφώς κα ύτερη δια είριση ώρου από τη συ - ο ή με αντι ραφή. Ενδε ομέν ς να έ ει κα ύτερη δια είριση ώρου και από τη συ ο ή με καταμέτρηση αναφορών. Τα bits σήμανσης συ νά απο ηκεύονται ρίς κόστος στις επικεφα ίδες τ ν αντικειμέν ν. Ενα ακτικά, αν ρησιμοποιείται ένα bitmap η επι άρυνση σε

44 44 Κεφάλαιο 2. Συλλογή απορριμμάτων με σήμανση και εκκαθάριση ώρο εξαρτάται από τις απαιτήσεις ευ υ ράμμισης της αρ ιτεκτονικής. Η συ ο ή με καταμέτρηση αναφορών από την ά η π ευρά απαιτεί τη ρήση μίας έξης μνήμης σε κά ε επικεφα ίδα αντικειμένου ια την απο ήκευση του μετρητή αναφορών του τε ευταίου. Η συ ο ή με αντι ραφή έ ει ακόμη ειρότερη δια είριση του ώρου αφού δια ρίζει το σ ρό σε δύο ισομε έ εις ημι ώρους εκ τ ν οποί ν μόνο ο ένας είναι ανά πάσα στι μή δια έσιμος στον τροποποιητή. Από την ά η π ευρά, οι συ έκτες που δεν συμπυκνώνουν το σ ρό, όπ ς η συ ο ή με σήμανση και εκκα άριση α ά και η συ ο ή με καταμέτρηση αναφορών απαιτούν από το δια ειριστή μνήμης τη ρήση πιο περίπ οκ ν εκ ρητών. Οι επιπ έον δομές δεδομέν ν που απαιτούνται ια την υποστήριξη τέτοι ν συ εκτών προσ έτουν μια μη αμε ητέα επι άρυνση. Επιπρόσ ετα η συ ο ή ρίς συμπύκν ση συ νά συνοδεύεται από κατακερματισμό της μνήμης. Ο α όρι μος συ ο ής απορριμμάτ ν με σήμανση και εκκα άριση είναι όπ ς εξη ήσαμε ένας α όρι μος εξι νίασης. Ως τέτοιος, οφεί ει να ανα ν ρίσει πρώτα ό α τα ζ ντανά αντικείμενα του σ ρού πριν ανακτήσει τη μνήμη που ρησιμοποιείται από νεκρά αντικείμενα. Η διαδικασία αυτή είναι ακρι ή και α πρέπει να εκτε είται όσο πιο σπάνια ίνεται. Αυτό σημαίνει πώς πρέπει να αφιερ εί ειδικός ώρος στο σ ρό ια τη ειτουρ ία τ ν συ εκτών εξι νίασης. Αν τα ζ ντανά αντικείμενα κατα αμ άνουν ένα με ά ο μέρος του σ ρού και οι εκ ρητές εκ ρούν πο ύ συ νά μνήμη ο συ έκτης με σήμανση και εκκα άριση α κα είται πο ύ συ νά. O Jones [67] επισημαίνει πώς ια σ ρούς μεσαίου και με ά ου με έ ους το ποσοστό του σ ρού που αφιερώνεται στον ειδικό ώρο ια τις ειτουρ ίες του συ έκτη μπορεί να κυμαίνεται από 20% έ ς και 50%. Οι Hertz και Berger [60] πάντ ς δεί νουν πώς η αυτόματη δια είριση μνήμης προ ραμμάτ ν στη ώσσα Java με τη ρήση συ ο ής με σήμανση και εκκα άριση ενδέ εται να απαιτήσει έναν σ ρό ακόμη και μερικές φορές με α ύτερο σε μέ ε ος προκειμένου να πετύ ει την ίδια ρυ μαπόδοση με την ειρ νακτική δια είριση μνήμης αυτών με ρητή αποδέσμευση Μετακίνηση ή ό ι; Η μη μετακίνηση αντικειμέν ν παρουσιάζει π εονεκτήματα και μειονεκτήματα. Το ασικό π εονέκτημα που προκύπτει από τη μη μετακίνηση αντικειμέν ν είναι πώς κα ιστά τη συ - ο ή με σήμανση και εκκα άριση κατά η η ια ρήση σε περι ά οντα όπου δεν υπάρ ει συνερ ασία μεταξύ μετα ττιστή της ώσσας και συ έκτη απορριμμάτ ν. Χ ρίς έ κυρη π ηροφορία τύπ ν, οι ρίζες του τροποποιητή και πεδία δείκτες αντικειμέν ν δεν ίνεται να ενημερ ούν με νέες διευ ύνσεις μετακινη έντ ν αντικειμέν ν. Αυτό συμ αίνει ό της έ ειψης ε αιότητας σ ετικά με το αν μια μετα ητή ή ένα πεδίο στο εσ τερικό ενός αντικείμενου είναι δείκτης. Η ασφά εια σε μη συνερ ατικά συστήματα που δια ειρίζονται από έναν συντηρητικό συ έκτη αποτρέπει τον τε ευταίο από την τροποποίηση δεδομέν ν του ρήστη (συμπερι αμ ανομέν ν τ ν επικεφα ίδ ν αντικειμέν ν). Επιπ έον εν αρρύνει την ξε ριστή απο ήκευση τ ν μεταδεδομέν ν του συ έκτη από τα μεταδεδομένα του ρήστη και του συστήματος εκτέ εσης ώστε να μει εί η πι ανότητα τροποποίησης τ ν πρώτ ν από τον τροποποιητή. Για τους παραπάν ό ους είναι επι υμητή η απο ήκευση τ ν bit/byte σήμανσης σε πίνακες bitmap και ό ι στις επικεφα ίδες τ ν αντικειμέν ν. Το πρό ημα με τη μετακίνηση αντικειμέν ν είναι πώς σε εφαρμο ές που τρέ ουν ια πο ή ώρα, ο σ ρός τείνει να κατακερματίζεται. Ο Robson [98],[99] αποδεικνύει πώς οι εκ ρητές σε συστήματα δια είρισης μνήμης που ρησιμοποιούν μη μετακινούντα συ έκτη απαιτούν O(log max min ) περισσότερο ώρο από τον ε ά ιστο δυνατό, όπου min και max το ε ά ιστο και

45 2.5 Θέματα προς εξέταση 45 μέ ιστο δυνατό μέ ε ος αντικειμέν ν αντίστοι α. Συνεπώς ένας συ έκτης ο οποίος δε συμπυκνώνει το σ ρό με με ά η πι ανότητα κα είται συ νότερα από έναν που το συμπυκνώνει. Ακόμη, όπ ς σημειώ ηκε πιο πάν, ένα ποσοστό από 20% έ ς και 50% του σ ρού πρέπει να αφιερώνεται αποκ ειστικά στη ειτουρ ία ενός συ έκτη εξι νίασης ώστε να αποφευ εί η αυξημένη συ νότητα κ ήσης του τε ευταίου. Για να ε α ιστοποιη εί η μεί ση της επίδοσης ό του κατακερματισμού, πο ές εμπορικές υ οποιήσεις συ εκτών οι οποίες δια ειρίζονται μια περιο ή του σ ρού με σήμανση και εκκα άριση περιοδικά ρησιμοποιούν και διαφορετικό α όρι μο όπ ς αυτόν με σήμανση και συμπύκν ση ια να εξα είψουν τον κατακερματισμό. Συ κεκριμένα αυτό απαιτείται αν η εφαρμο ή δε διατηρεί στα ερό ρυ μό με ε ών αντικειμέν ν ή δεσμεύει μνήμη ια πο ά με ά α αντικείμενα. Αν αρ ίσει να δεσμεύει μνήμη ια με α ύτερα αντικείμενα από ότι πριν, ενδέ εται να προκύψουν πο ές μικρές τρύπες στο σ ρό που δε ρησιμοποιούνται π έον ια τη δέσμευση μνήμης νέ ν αντικειμέν ν του ίδιου (με α ύτερου) με έ ους. Αντίστροφα, αν αρ ίσει να δεσμεύει μνήμη ια μικρότερα αντικείμενα από ότι πριν, τα τε ευταία μπορεί να φι οξενούνται σε κενά που προη ουμέν ς κατα αμ άνονταν από με α ύτερα αντικείμενα οδη ώντας έτσι σε σπατά η του α ρησιμοποίητου ώρου τ ν κενών. Οι Dimpsey κ.ά. [46], όπ ς και οι Blackburn και McKinley [21] στόσο παρατηρούν πώς η προσεκτική δια είριση του σ ρού μπορεί να ε αττώσει την τάση ια κατακερματισμό της μνήμης επ φε ούμενη της τάσης τ ν αντικειμέν ν να ζουν και να πε αίνουν σε συστάδες.

46

47 Κεφά αιο 3 Συ ο ή απορριμμάτ ν με σήμανση και συμπύκν ση Η τάση τους να κατακερματίζουν τη μνήμη είναι το ασικό πρό ημα τ ν μη μετακινούντ ν συ εκτών απορριμμάτ ν. Παρότι μπορεί να υπάρ ει ε εύ ερη μνήμη στο σ ρό, αυτή είναι πο ύ πι ανόν να είναι κατακερματισμένη σε πο ά μικρά τμήματα και ό ι συνε όμενη. Συνεπώς είναι πι ανόν ο εκ ρητής να μην ικανοποιήσει ένα αίτημα παρότι υπάρ ει ε εύ ερη μνήμη στο σ ρό κα ώς αυτή είναι κατακερματισμένη. Η συ ο ή απορριμμάτ ν με σήμανση και συμπύκν ση επινοή ηκε προς ύσιν του προ ήματος του κατακερματισμού. Το σημαντικό π εονέκτημα της με όδου είναι π ς απ οποιεί το έρ ο του εκ ρητή. Ο σ ρός αποτε είται από δύο συνε όμενα τμήματα: το πρώτο φι οξενεί αντικείμενα ενώ το δεύτερο είναι ε εύ ερο και ρησιμοποιείται από τον εκ ρητή ια την ικανοποίηση αιτημάτ ν μνήμης. Τα δύο αυτά τμήματα δια ρίζονται από ένα δείκτη, ο οποίος σηματοδοτεί ταυτό ρονα το τέ ος του ρησιμοποιούμενου τμήματος και την αρ ή του ε εύ ερου τμήματος. Συνεπώς, αν υπάρ ει ε εύ ερη μνήμη (πρακτικά αν ο εν ό δείκτης δεν έ ει ξεπεράσει το τέ ος του σ ρού), ο εκ ρητής επιστρέφει την τιμή του δείκτη και κατόπιν τον ενημερώνει αυξάνοντας τον κατά το μέ ε ος του αιτήματος. Η συ ο ή με σήμανση και συμπύκν ση συ κεντρώνει τα προσ άσιμα αντικείμενα στο άκρο του σ ρού, ο οποίος είναι ενιαίος. Αντί ετα, η συ ο ή με αντι ραφή την οποία εξετάζουμε στο κεφά αιο 4 μετακινεί τα προσ άσιμα αντικείμενα από έναν ημι ώρο σε έναν ά ο ημι ώρο του σ ρού. Οι συ έκτες με σήμανση και συμπύκν ση ειτουρ ούν σε φάσεις. Η πρώτη φάση είναι πάντα αυτή της σήμανσης, την οποία και εξετάσαμε στο προη ούμενο κεφά αιο. Τη φάση της σήμανσης διαδέ ονται οι φάσεις της συμπύκν σης, οι οποίες μετακινούν αντικείμενα και ενημερώνουν τις μετα ητές δείκτες που δεί νουν σε προσ άσιμα αντικείμενα με τις νέες διευ ύνσεις αυτών. Το π ή ος τ ν φάσε ν, η σειρά με την οποία αυτές εκτε ούνται κα ώς και ο τρόπος με τον οποίο μετακινούνται τα αντικείμενα διαφέρει από α όρι μο σε α όρι μο. Ο τρόπος μά ιστα με τον οποίο συμπυκνώνονται τα αντικείμενα επηρεάζει την τοπικότητα του τροποποιητή. Κά ε μετακινών συ έκτης μπορεί να ορ ανώσει τα αντικείμενα στο σ ρό με έναν από τους ακό ου ους 3 τρόπους, οπότε και αρακτηρίζεται ς: 1. Τυ αίoς: Τα αντικείμενα μετακινούνται ανεξαρτήτ ς της αρ ικής τους σειράς ή του αν δεί νουν το ένα στο ά ο. 47

48 48 Κεφάλαιο 3. Συλλογή απορριμμάτων με σήμανση και συμπύκνωση 2. Γραμμικοποιών: Τα αντικείμενα τοπο ετούνται με τέτοιο τρόπο ώστε να είναι κοντά με σ ετικά προς αυτά αντικείμενα στο μέ ιστο α μό. Δύο αντικείμενα είναι σ ετικά αν το ένα δεί νει στο ά ο ή αν είναι αδέρφια σε μια δομή δεδομέν ν κ.ο.κ. 3. Ο ισ αίν ν: Τα αντικείμενα ο ισ αίνουν στο ένα άκρο του σ ρού, με αποτέ εσμα να διατηρείται η αρ ική τους διάταξη στο σ ρό. Οι περισσότεροι συ έκτες με σήμανση και συμπύκν ση που απαντώνται στη ι ιο ραφία είναι τυ αίοι ή ο ισ αίνοντες. Οι συ έκτες αυτών τ ν κατη οριών έ ουν απ ή υ οποίηση και εξαιρετικές επιδόσεις σε τα ύτητα. Το μειονέκτημά τους είναι πώς οδη ούν σε μικρή έ ς κα ό ου τοπικότητα ια τον τροποποιητή, κα ώς αντικείμενα αντιστοι ίζονται σε διαφορετικά μπ οκ της κρυφής μνήμης ή ακόμα και σε διαφορετικές σε ίδες της εικονικής μνήμης. Οι Abuaiadh κ.ά. σε πρόσφατη με έτη τους, [2] επα η εύουν π ς η τυ αία συμπύκν ση του σ ρού μπορεί να οδη ήσει σε δραστική μεί ση της διεκπεραι τικής ικανότητας του τροποποιητή. Ό οι οι σύ ρονοι συ έκτες με σήμανση και συμπύκν ση είναι ο ισ αίνοντες και έτσι δεν παρεμ αίνουν στην τοπικότητα του τροποποιητή. Οι τυ αίοι συ έκτες δια ειρίζονται αντικείμενα ενός συ κεκριμένου με έ ους ή συμπυκνώνουν ξε ριστά αντικείμενα διαφορετικών με ε ών. Η συμπύκν ση μπορεί να απαιτεί δύο ή τρία περάσματα στο σ ρό. Ακόμη ενδέ εται να ρειάζεται η προσ ήκη μιας επιπ έον έξης στην επικεφα ίδα ενός αντικειμένου όπου α απο ηκεύονται π ηροφορίες σ ετικά με τη νέα διεύ υνση αυτού. Το κόστος σε ώρο από την προσ ήκη αυτή μπορεί να είναι σημαντικό σε έναν ενικού σκοπού δια ειριστή μνήμης. Τέ ος, οι συ έκτες με συμπύκν ση μπορεί να επι ά ουν επιπρόσ ετους περιορισμούς όσον αφορά τις μετα ητές δείκτες. Για παράδει μα, προς ποια κατεύ υνση επιτρέπεται αυτοί να δεί νουν; Επιτρέπονται οι εσ τερικοί δείκτες; Στη συνέ εια εξετάζουμε διάφορα είδη συμπύκν σης. Σε κά ε περίπτ ση, ο συ έκτης κα- είται ς εξής: Α όρι μος 3.1 Συ ο ή με σήμανση και συμπύκν ση 1: procedure () 2: atomic 3: F R () 4: ()

49 3.1 Συμπύκνωση με δύο δείκτες 49 Σ ήμα 3.1: Ο α όρι μος Two-Finger του Edward. Ζ ντανά αντικείμενα από την κορυφή του σ ρού μετακινούνται σε ε εύ ερα κενά στη άση του σ ρού. Εδώ το αντικείμενο στη έση A έ ει μετακινη εί στη έση A. Ο α όρι μος τερματίζει όταν οι δείκτες scan και free συναντη ούν. 3.1 Συμπύκν ση με δύο δείκτες Ο α όρι μος Two-Finger [104] εκτε εί τη συμπύκν ση σε δύο φάσεις και συμπυκνώνει τα προσ άσιμα αντικείμενα σε τυ αία σειρά. Είναι έ τιστος δε στην ειδική περίπτ ση όπου ο τροποποιητής ρησιμοποιεί τα αντικείμενα του ίδιου στα ερού με έ ους. Η ιδέα του είναι απ ή: δο έντος του ό κου τ ν προσ άσιμ ν αντικειμέν ν στην προς συμπύκν ση περιο ή, ν ρίζουμε ποιο α είναι το όριο της περιο ής αυτής μετά την συμπύκν ση. Ζ ντανά αντικείμενα πάν από αυτό το κατώφ ι αντι ράφονται στα κατά η α κενά κάτ από το κατώφ ι. Ο α όρι μος 3.2 διατηρεί δύο δείκτες, τους free και scan, οι οποίοι αρ ικά δεί νουν στην αρ ή και το τέ ος της προς συμπύκν ση περιο ής. Στη διάρκεια της πρώτης φάσης, ο δείκτης free αυξάνεται μέ ρις ότου συναντήσει ένα αντικείμενο που είναι ε εύ ερο (μη-σημασμένο), ενώ ο δείκτης scan μειώνεται μέ ρις ότου συναντήσει ένα ζ ντανό αντικείμενο (σημασμένο). Αν οι δύο δείκτες συναντη ούν, η πρώτη αυτή φάση ο οκ ηρώνεται. Α ιώς, το αντικείμενο στη έση scan αντι ράφεται στη έση free, στο πα ιό αντί ραφο στη έση scan απο ηκεύεται η νέα διεύ υνση (την τιμή του δείκτη free εκείνη τη ρονική στι μή) του αντικειμένου και η διαδικασία επανα αμ άνεται. Είναι εμφανές π ς η ποιότητα της συμπύκν σης εξαρτάται πρ τίστ ς από το εάν το μέ ε ος του αντικειμένου στη έση scan είναι το ίδιο ή σ εδόν το ίδιο με το μέ ε ος του αντικειμένου στη έση free: αν αυτό δε συμ αίνει, η μνήμη μπορεί και πά ι να είναι κατακερματισμένη. Γι αυτόν το ό ο ο α όρι μος είναι έ τιστος στην περίπτ ση που ρησιμοποιούνται αντικείμενα ίδιου (στα ερού) με έ ους. Μετά το πέρας της πρώτης φάσης, ο δείκτης free δεί νει ακρι ώς στο σύνορο μεταξύ του ρησιμοποιούμενου και του ε εύ ερου τμήματος του σ ρού. Η δεύτερη φάση ανα αμ άνει να ενημερώσει τις τιμές τ ν δεικτών προς τα μετακινη έντα αντικείμενα: Οι νέες διευ ύνσεις αυτών ρίσκονται απο ηκευμένες στις πα ιές τους έσεις κατά τη μετακίνησή τους στη διάρκεια της πρώτης φάσης. Στα π εονεκτήματα του α ορί μου περι αμ άνονται η απ ότητα και η τα ύτητα. Επίσης δεν παρουσιάζει επι άρυνση σε ώρο, αφού η νέα διεύ υνση ενός αντικειμένου ράφεται στην πα ιά του έση μόνο αφότου έ ει ο οκ ηρ εί η αντι ραφή του και συνεπώς καμία π ηροφορία δεν καταστρέφεται. Ο α όρι μος υποστηρίζει εσ τερικούς δείκτες. Τέ ος, το μοτί ο πρόσ ασης στη μνήμη είναι σ ετικά προ έψιμο, κάτι που σημαίνει π ς η προφόρτ ση (υ ικού ή/και ο ισμικού) μπορεί να οδη ήσει το συ έκτη σε κα ή συμπεριφορά ς προς την κρυφή μνήμη. Ωστόσο, το ασικό μειονέκτημα παραμένει: τα αντικείμενα τοπο ετούνται σε τυ αία σειρά στο σ ρό και αυτό καταστρέφει την όποια τοπικότητα του τροποποιητή.

50 50 Κεφάλαιο 3. Συλλογή απορριμμάτων με σήμανση και συμπύκνωση Α όρι μος 3.2 Συ ο ή με σήμανση και συμπύκν ση: ο α όρι μος συμπύκν σης Two- Finger 1: procedure () 2: (HeapStart, HeapEnd) 3: R (HeapStart, free) 4: procedure (start, end) 5: free start 6: scan end 7: while free < scan do 8: while M (free) do 9: M (free) 10: free free + (free) find next hole 11: while not M (scan) and scan > free do 12: scan scan (scan) find previous live object 13: if scan > free then 14: M (scan) 15: (scan, free) 16: scan f ree leave forwarding address (destructively) 17: free free + (free) 18: scan scan (scan) 19: procedure R (start, end) 20: for all fld in Roots do update roots that pointed to moved objects 21: ref fld 22: if ref > end then 23: fld ref use the forwarding address left in the first pass 24: scan start 25: while scan < end do update fields in live region 26: for all fld in P ointers(scan) do 27: ref fld 28: if ref > end then 29: fld ref use the forwarding address left in the first pass 30: scan scan + (scan) next object

51 3.2 Ο αλγόριθμος Lisp Ο α όρι μος Lisp 2 Ο επόμενος α όρι μος που εξετάζουμε συμπυκνώνει τα αντικείμενα διατηρώντας την αρ ική τους διάταξη και είναι ο Lisp 2. Ο α όρι μος 3.3 ρησιμοποιείται ευρύτατα, είτε στην αρ ική του μορφή, είτε παρα α μένος ώστε να εκτε είται παρά η α, όπ ς από τους Flood κ.ά. [53]. Μπορεί να ρησιμοποιη εί σε εφαρμο ές όπου ο σ ρός φι οξενεί αντικείμενα διαφορετικών με ε ών και παρότι πρα ματοποιεί τρία περάσματα στο σ ρό, κά ε ένα από αυτά κάνει ί η δου ειά. Παρότι ενικά οι α όρι μοι συ ο ής με σήμανση και συμπύκν ση φημίζονται ια τη αμη ή διεκπεραι τική τους ικανότητα, οι Cohen και Nicolau [37] διαπίστ σαν π ς επρόκειτο ια το ρη ορότερο από τους α ορί μους που συνέκριναν. Το ασικό του μειονέκτημα είναι π ς απαιτεί μία επιπ έον έξη στην επικεφα ίδα ενός αντικειμένου ια την απο ήκευση της νέας διεύ υνσης στην οποία αυτό α μετακινη εί. Το πεδίο αυτό μπορεί να ρησιμοποιη εί ια την απο ήκευση του bit σήμανσης. Το πρώτο πέρασμα του α ορί μου (μετά από τη φάση της σήμανσης) υπο ο ίζει τη διεύ- υνση στην οποία α μετακινη εί κά ε ζ ντανό αντικείμενο και απο ηκεύει την τιμή αυτή στο πεδίο forwardingaddress αυτού. Η διαδικασία L, η οποία πρα ματοποιεί το πρώτο πέρασμα, δέ εται τρία ορίσματα: την αρ ική και τε ική διεύ υνση του προς συμπκύκν ση τμήματος του σ ρού (περιο ή προέ ευσης) κα ώς και την αρ ική διεύ υνση του τμήματος του σ ρού όπου α μετακινη ούν τα αντικείμενα (περιο ή προορισμού). Παρότι συνή ς η περιο ή προορισμού ταυτίζεται με την περιο ή προέ ευσης, αν η συμπύκν ση εκτε είται παρά η α, κά ε νήμα-συμπυκν τής δύναται να διατηρεί τις δικές του διακριτές περιο ές. Η διαδικασία L διατηρεί δύο δείκτες στο σ ρό: ο δείκτης scan διατρέ ει σειριακά το σ ρό, εξετάζοντας κά ε αντικείμενο (σημασμένο και μή) στην περιο ή προέ ευσης, ενώ ο δείκτης free δεί νει στην πρώτη ε εύ ερη έση στην περιο ή προορισμού. Αν ένα αντικείμενο είναι ζ ντανό, τότε α μετακινη εί (τε ικά) στη έση free και έτσι η τρέ ουσα τιμή του δείκτη free απο ηκεύεται στο πεδίο forwardingaddress του αντικειμένου και κατόπιν αυξάνεται κατά το μέ ε ος αυτού. Αν πά ι είναι νεκρό, απ ώς α νοείται. Το δεύτερο πέρασμα πρα ματοποιείται από τη διαδικασία R, κατά την εκτέ εση της οποίας ενημερώνονται οι ρίζες τ ν νημάτ ν-τροποποιητών κα ώς και τα πεδία δείκτες σημασμέν ν αντικειμέν ν ώστε να δεί νουν στις νέες διευ ύνσεις τ ν αντικειμέν ν προς τα οποία δεί νουν, ρησιμοποιώντας την τιμή που απο ηκεύ ηκε στο πεδίο forwarding- Address τ ν τε ευταί ν στη διάρκεια του πρώτου περάσματος. Στο τρίτο και τε ευταίο πέρασμα, η διαδικασία μετακινεί κά ε ζ ντανό (σημασμένο) αντικείμενο στη νέα του διεύ υνση.

52 52 Κεφάλαιο 3. Συλλογή απορριμμάτων με σήμανση και συμπύκνωση Α όρι μος 3.3 Συ ο ή με σήμανση και συμπύκν ση: ο α όρι μος συμπύκν σης Lisp 2 1: procedure () 2: L (HeapStart, HeapEnd, HeapStart) 3: R (HeapStart, HeapEnd) 4: (HeapStart, HeapEnd) 5: procedure L (start, end, toregion) 6: scan start 7: free toregion 8: while scan < end do 9: if M (scan) then 10: A (scan) free 11: free free + (scan) 12: scan scan + (scan) 13: procedure R (start, end) 14: for all fld in Roots do 15: ref fld 16: if ref null then 17: fld A (ref) 18: scan start 19: while scan < end do 20: if M (scan) then 21: for all fld in P ointers(scan) do 22: if fld null then 23: fld A ( fld) 24: scan scan+ (scan) 25: procedure (start, end) 26: scan start 27: while scan < end do 28: if M (child) then 29: dest M (child) 30: (scan, dest) 31: M (dest) 32: scan scan + (scan)

53 3.3 Συμπύκνωση με ένα πέρασμα 53 Σ ήμα 3.2: Ο σ ρός (πριν και μετά τη συμπύκν ση) και τα μεταδεδομένα που ρησιμοποιεί ο α όρι μος Compressor. Τα bits του διανύσματος σήμανσης υποδεικνύουν την αρ ή και το τέ ος κά ε ζ ντανού αντικειμένου. Οι έξεις στο διάνυσμα μετατόπισης απο ηκεύουν τη διεύ υνση προς την οποία α μετακινη εί το πρώτο ζ ντανό αντικείμενο του αντίστοι ου μπ οκ. Οι διευ ύνσεις προώ ησης δεν απο ηκεύονται α ά υπο ο ίζονται όταν αυτό είναι απαραίτητο από τα διανύσματα σήμανσης και μετατόπισης. 3.3 Συμπύκν ση με ένα πέρασμα Εάν έ ουμε να μειώσουμε τον αρι μό τ ν περασμάτ ν στο σ ρό σε δύο (ένα ια σήμανση και ένα ια ο ίσ ηση αντικειμέν ν), τότε πρέπει να απο ηκεύσουμε τις διευ ύνσεις προορισμού σε ένα οη ητικό πίνακα ο οποίος διατηρείται κατά τη διάρκεια της συμπύκν σης. Οι α όρι μοι με σήμανση και συμπύκν ση που σ εδίασαν οι Abuaiadh κ.ά. [2] κα ώς και οι Kermany και Petrank [73] επιτυ άνουν υψη ές επιδόσεις σε πο υεπεξερ αστικά συστήματα ακο ου ώντας αυτήν ακρι ώς την τε νική. Ο πρώτος α όρι μος είναι παρά η ος (ο συ έκτης ρησιμοποιεί πο απ ά νήματα-συ έκτες ενώ τα νήματα-τροποποιητές είναι σταματημένα), ενώ ο δεύτερος δύναται να διαμορφ εί τόσο ια ταυτό ρονη εκτέ εση (επιτρέποντας ταυτό ρονη εκτέ εση τ ν νημάτ ν- συ εκτών και τ ν νημάτ ν-τροποποιητών) όσο και ια αυξητική εκτέ εση (όπου η εκτέ εση του τροποποιητή αναστέ εται περιοδικά ια ένα ρα ύ ρονικό διάστημα κατά το οποίο επιτρέπεται στο συ έκτη η εκτέ εση ενός μικρού κ άντου ερ ασιών). Στην ενότητα αυτή εξετάζουμε την απ ή εκδο ή του α ορί μου, όπου και υπο έτουμε πώς διακόπτεται η εκτέ εση τ ν νημάτ ν-τροποποιητών κατά την εκτέ εση του συ έκτη. Η ειτουρ ία του α ορί μου στηρίζεται κυρί ς στη ρήση οη ητικών πινάκ ν ή διανυσμάτ ν. Όπ ς και πο οί συ έκτες, ο α όρι μος Compressor ρησιμοποιεί ς διάνυσμα σήμανσης ένα bitmap όπου κά ε bit αντιστοι εί σε μία έξη μνήμης. Η φάση της σήμανσης έτει σε ο ικό 1 τα bit που αντιστοι ούν στην πρώτη και τε ευταία έξη ενός ζ ντανού αντικειμένου. Εξετάζοντας τη δομή αυτή, ο συ έκτης είναι σε έση να προσδιορίσει κατά τη διάρκεια της συμπύκν σης το μέ ε ος ενός οιουδήποτε (ζ ντανού) αντικειμένου. Επιπ έον, ο α όρι μος ρησιμοποιεί έναν πίνακα όπου απο ηκεύει τις διευ ύνσεις προορισμού τ ν αντικειμέν ν. Κα ώς η απο ήκευση της διεύ υνσης κά ε ενός αντικειμένου ξε ριστά α ήταν απα ορευτική, ο α όρι μος διαιρεί το σ ρό σε μικρά, ισομε έ η μπ οκ με τυπικό μέ ε ος 256 ή 512 bytes. Ο πίνακας offset απο ηκεύει τη διεύ υνση προορισμού

54 54 Κεφάλαιο 3. Συλλογή απορριμμάτων με σήμανση και συμπύκνωση του πρώτου αντικειμένου ια κά ε μπ οκ. Οι νέες διευ ύνσεις τ ν υπο οίπ ν ζ ντανών αντικειμέν ν μπορούν να υπο ο ισ ούν με ρήση του πίνακα offset και του διανύσματος σήμανσης. Ομοί ς, δο είσης μιας αναφοράς προς ένα αντικείμενο, μπορούμε να υπο ο ίσουμε το μπ οκ στο οποίο αντιστοι εί και επομέν ς να εξά ουμε τη διεύ υνση προορισμού από την κατά η η κατα ώριση στον πίνακα offset και τα bit σήμανσης ια αυτό το μπ οκ. Αυτό επιτρέπει στον α όρι μο να αντικαταστήσει τα πο απ ά περάσματα στο σ ρό ια μετακίνηση αντικειμέν ν και επιδιόρ ση δεικτών με ένα απ ό και ρή ορο πέρασμα του διανύσματος σήμανσης ια την κατασκευή του πίνακα offset, κα ώς και ά ο ένα πέρασμα ια τη μετακίνηση αντικειμέν ν και την ενημέρ ση τ ν δεικτών συμ ου ευόμενος τις οη ητικές αυτές δομές. Α όρι μος 3.4 Συ ο ή με σήμανση και εκκα άριση: ο α όρι μος συμπύκν σης Compressor 1: procedure () 2: L (HeapStart, HeapEnd, HeapStart) 3: R R (HeapStart, HeapEnd) 4: procedure L (start, end, toregion) 5: for b 0 to numbits(start, end) 1 do 6: if b mod BIT S_IN_BLOCK = 0 then crossed boundary? 7: offset[block] loc first object will be moved to loc 8: block block + 1 9: if bitmap[b] = MARKED then 10: loc loc + BY T ES_P ER_BIT advance by size of live objects 11: procedure A (old) 12: block B N (old) 13: return offset[block] + I B (old) 14: procedure R R (start, end) 15: for all fld in Roots do 16: ref fld 17: if ref null then 18: fld A (ref) 19: scan start 20: while scan < end do 21: scan M O (scan) use the bitmap 22: for all f ld in P ointers(scan) do update references 23: ref fld 24: if ref null then 25: fld A (ref) 26: dest A (scan) 27: (scan, dest) Αφού η ρουτίνα L υπο ο ίσει το πίνακα offset, η ρουτίνα - R R ενημερώνει αρ ικά τους δείκτες τ ν αντικειμέν ν ριζών. Ο α όρι μος Lisp 2 ξε ρίζει τα περάσματα της μετακίνησης αντικειμέν ν και της ενημέρ σης δεικτών, κα ώς οι π ηροφορίες της μετακίνησης απο ηκεύονται στο σ ρό και άνονται κατά

55 3.4 Θέματα προς εξέταση 55 τη μετακίνηση αντικειμέν ν. Αντί ετα, ο α όρι μος Compressor μετακινεί τα ζ ντανά αντικείμενα και ενημερώνει τους δείκτες σε ένα μόνο πέρασμα, κα ώς οι νέες διευ ύνσεις τ ν αντικειμέν ν υπο ο ίζονται εύκο α από τον πίνακα offset και το bitmap σήμανσης και δε ρειάζεται να απο ηκευ ούν στο σ ρό. Η ρουτίνα A υπο ο ίζει τη νέα διεύ υνση ενός ζ ντανού αντικειμένου. Αρ ικά υπο ο ίζει το μπ οκ στο οποίο ρίσκεται το αντικείμενο και ρησιμοποιεί την τιμή ια τη δεικτοδότηση του πίνακα offset ώστε να ρει τη διεύ υνση προορισμού του πρώτου ενερ ού αντικειμένου στο συ κεκριμένο μπ οκ. Η νέα διεύ υνση του αντικειμένου προκύπτει προσ έτοντας στην προη ούμενη τιμή το μέ ε ος σε έξεις τ ν ζ ντανών αντικειμέν ν που προη ούνται του αντικειμένου στο μπ οκ, δεδομένο που υπο ο ίζει συμ ου ευόμενη το bitmap που αντιστοι εί στο εν ό μπ οκ. 3.4 Θέματα προς εξέταση Είναι απαραίτητη η συμπύκν ση; Η συ ο ή με σήμανση και εκκα άριση έ ει μικρότερες απαιτήσεις σε μνήμη από ότι ά ες τε νικές όπ ς η συ ο ή με αντι ραφή. Επιπ έον, κα ώς δεν μετακινεί αντικείμενα, ένας συ έκτης σήμανσης και εκκα άρισης αρκείται στο να εντοπίσει τα προσ άσιμα από τις ρίζες αντικείμενα και να τα σημάνει: δεν τα μετα ά ει. Περι ά οντα όπου το σύστημα εκτέ εσης δε μπορεί να παρέ ει έ κυρη π ηροφορία τύπ ν ώστε να προσδιοριστούν με ε αιότητα οι μετα ητές δείκτες δυσ εραίνουν τον προσδιορισμό και τη σήμανση αντικειμέν ν που είναι προσ άσιμα από τις ρίζες του τροποποιητή. Παρό α αυτά, το σημαντικότερο μειονέκτημα ενός συ έκτη σήμανσης και εκκα άρισης είναι η τάση του να κατακερματίζει τη μνήμη. Η ρήση προη μέν ν τε νικών ια την εκ ώρηση μνήμης όπ ς η ρήση ξε ριστών συνδεδεμέν ν ε εύ ερ ν ιστών ια αντικείμενα διαφορετικού με έ ους μειώνει την πι ανότητα ια κατακερματισμό της μνήμης μόνο σε εφαρμο ές με μικρές απαιτήσεις σε με ά α αντικείμενα και με σ ετικά μη μετα ητή ανα ο ία με ε ών αντικειμέν ν. Σε μία τυπική εφαρμο ή η οποία τρέ ει ια πο ύ ρόνο και στην οποία ρησιμοποιούνται αντικείμενα διαφόρ ν με ε ών, ο κατακερματισμός που επιφέρει ένας μη-μετακινών συ έκτης αποτε εί πη ή προ ημάτ ν. Γι αυτόν το ό ο, οι περισσότερες εμπορικές υ οποιήσεις της εικονικής μη ανής της ώσσας Java ρησιμοποιούν μετακινούντες συ έκτες που συμπυκνώνουν το σ ρό Επίδραση στη ρυ μαπόδοση Η συ ο ή με σήμανση και συμπύκν ση στόσο τείνει να είναι πιο αρ ή από τη συ ο ή με σήμανση και εκκα άριση ή τη συ ο ή με αντι ραφή. Ο ό ος είναι π ς με εξαίρεση τον α όρι μο Compressor, o συ έκτης πρα ματοποιεί πο απ ά περάσματα στο σ ρό, με το κά ε πέρασμα να είναι ακρι ό. Ο Printezis [95] και oι Soman κ.ά. [110] προτείνουν τη ρήση προσαρμοστικής συ ο ής απορριμμάτ ν: ο συ έκτης εκτε εί τον α όρι μο με σήμανση και εκκα άριση και προσφεύ ει στον α όρι μο με σήμανση και συμπύκν ση όταν οι μετρικές κατακερματισμού υποδεικνύουν πώς η α α ή α είναι επικερδής Μακρό ια αντικείμενα Δεν είναι ασυνή ιστο ια αντικείμενα που ζουν πο ύ ή είναι α άνατα (δη αδή ζουν κα ό η τη διάρκεια εκτέ εσης του τροποποιητή) να συσσ ρεύονται στην αρ ή του σ ρού από μετακινούντες συ έκτες. Οι συ έκτες αντι ραφής δια ειρίζονται μη αποδοτικά τα αντικείμενα

56 56 Κεφάλαιο 3. Συλλογή απορριμμάτων με σήμανση και συμπύκνωση αυτά, αντι ράφοντάς τα συνέ εια από τον ένα ημι ώρο στον ά ον. Από την ά η π ευρά, οι ενεα ο ικοί συ έκτες (τους οποίους εξετάζουμε στο κεφά αιο 7), τα προ ούν σε διαφορετικό τμήμα του σ ρού, το οποίο και συ έ εται σπανί ς. Η ενεα ο ική συ ο ή απορριμμάτ ν στόσο δεν ενδείκνυται πάντα και ιδιαίτερα όταν ο σ ρός είναι σ εδόν εμάτος. Επίσης δε ύνει το πρό ημα αν τα αντικείμενα ρίσκονται ήδη απο ηκευμένα στην πα αιότερη ενεά. Η συ ο ή με σήμανση και συμπύκν ση μπορεί να επι έξει τη μη συμπύκν ση αυτού του ιζήματος. O Hanson [57] πρώτος παρατήρησε την εμφάνιση του προ ήματος στο σύστημα SITBOL, το οποίο αποτε ούσε μία υ οποίηση της ώσσας SNOBOL4 ια αρ ιτεκτονική DEC-10. O Hanson πρότεινε τη δυναμική μέτρηση του με έ ους του ιζήματος και τη μη συ ο ή αυτού εκτός και αν είναι τε εί ς απαραίτητη, με τίμημα ένα μικρό ποσοστό κατακερματισμού Τοπικότητα Όπ ς είδαμε, οι συ έκτες σήμανσης και συμπύκν σης μπορεί να διατηρούν τη διάταξη τ ν αντικειμέν ν στο σ ρό είτε να τα αναδιατάσσουν τυ αία. Παρότι οι δεύτεροι είναι τα ύτεροι και ρίς κόστος σε ώρο, η τοπικότητα του τροποποιητή ενδέ εται να καταστραφεί τε εί ς από την τυ αία διάταξη τ ν αντικειμέν ν. Η ο ισ αίνουσα συμπύκν ση έ ει τέ ος ένα ακόμη π εονέκτημα: η ανάκτηση της συνο ικής μνήμης που κατα αμ άνεται από αντικείμενα μετά από ένα συ κεκριμένο όριο στο σ ρό δύναται να ανακτη εί αμέσ ς με μία απ ή μεί ση του δείκτη f ree Περιορισμοί Στη ι ιο ραφία έ ει προτα εί μια π η ώρα α ορί μ ν συ ο ής με σήμανση και συμπύκν ση. Πο οί από αυτούς στόσο έ ουν ιδιότητες μη επι υμητές και σε αρκετές περιπτώσεις απαράδεκτες. Ένα από τα ζητήματα αφορά το κόστος σε ώρο που επι ά ει η ανά κη απο ήκευσης τ ν διευ ύνσε ν προώ ησης (παρότι αυτό είναι μικρότερο από το αντίστοι ο κόστος της συ ο ής με αντι ραφή). Μερικοί α όρι μοι συμπύκν σης επι ά ουν περιορισμούς στον τροποποιητή. Απ οί α όρι μοι όπ ς ο Two-Finger μπορούν να δια ειριστούν μόνο αντικείμενα του ίδιου με έ ους. Εφόσον οιπόν είναι δυνατός ο δια ρισμός τ ν αντικειμέν ν με άση το μέ ε ός τους, σε ποιο α μό είναι απαραίτητη η συμπύκν ση; Τέ ος, οι περισσότεροι α όρι μοι συμπύκν σης αποκ είουν τη ρήση εσ τερικών δεικτών: ο α όρι μος Two-Finger αποτε εί εξαίρεση.

57 Κεφά αιο 4 Συ ο ή απορριμμάτ ν με αντι ραφή Η συ ο ή με σήμανση και εκκα άριση έ ει σ ετικά μικρό κόστος, στόσο ενδέ εται η μνήμη να κατακερματίζεται. Η συ ο ή απορριμμάτ ν πρέπει να κατα αμ άνει τον ε ά ιστο δυνατό ρόνο εκτέ εσης σε ένα κα ώς διαμορφ μένο σύστημα και κα ώς το κόστος τ ν ερ ασιών μνήμης του τροποποιητή κυριαρ εί έναντι αυτού του συ έκτη, η εκ ώρηση μνήμης πρέπει να είναι ρή ορη. Η συ ο ή με σήμανση και συμπύκν ση εξα είφει τον κατακερματισμό της μνήμης και υποστηρίζει πο ύ ρή ορη εκ ώρηση μνήμης με τίμημα την αύξηση του ρόνου συ ο ής αφού ο σ ρός διατρέ εται πο ές φορές. Στο παρόν κεφά αιο παρουσιάζεται η συ ο ή απορριμμάτ ν με αντι ραφή, η οποία επινοή ηκε από τους Fenichel και Yochelson [51] και Cheney [34]. Η συ ο ή με αντι ραφή συμπυκνώνει το σ ρό επιτρέποντας ρή ορη εκ ώρηση μνήμης και επίσης πρα ματοποιεί μόνο ένα πέρασμα στο σ ρό. Το ασικό μειονέκτημα είναι π ς το μέ ε ος της δια έσιμης μνήμης στο σ ρό μειώνεται στο μισό. 4.1 Αντι ραφή μεταξύ ημι ώρ ν Η ασική εκδο ή ενός συ έκτη αντι ραφής, η οποία φαίνεται στον α όρι μο 4.2 διαιρεί το σ ρό σε δύο ισομε έ εις ημι ώρους, το ώρο-από και το ώρο-προς. Εάν υπάρ ει δια έσιμη μνήμη ια ένα αντικείμενο, αυτή εκ ρείται στο ώρο-προς αυξάνοντας την τιμή ενός δείκτη free (α όρι μος 4.1). Διαφορετικά, ο ρό ος τ ν ημι ώρ ν ενα άσσεται πριν ο συ έκτης αντι ράψει ό α τα ζ ντανά αντικείμενα από τον πρώην ώρο-προς (και νυν ώρο-από) στο νυν ώρο-προς (πρώην ώρο-από). Στο τέ ος της συ ο ής, ό α τα ζ ντανά αντικείμενα είναι τοπο ετημένα σε ένα πυκνό πρό εμα του ώρου-προς. Ο συ έκτης α νοεί το ώρο-από και τα αντικείμενα που ρίσκονται σε αυτόν μέ ρι την επόμενη συ ο ή. Στην πράξη έ αια, οι περισσότεροι συ έκτες αντι ραφής μηδενίζουν το ώρο-από ια ασφά εια κατά την αρ ικοποίηση του επόμενου κύκ ου συ ο ής. Μετά την αρ ικοποίηση, οι συ έκτες αντι ραφής αντι ράφουν τα αντικείμενα ρίζες στο ώρο-προς. Τα αντικείμενα που έ ουν αντι ραφεί α ά ό ι ακόμα εξεταστεί είναι κρι. Κά ε πεδίο δείκτης ενός κρι αντικειμένου περιέ ει είτε την τιμή null είτε μία αναφορά προς ένα αντικείμενο του ώρου-από. Η διαδικασία ενημερώνει κά ε πεδίο-δείκτη ενός κρι αντικειμένου, ο οποίος δεί νει σε κάποιο αντικείμενο του ώρου-από, με τη διεύ υνση του αντι- ράφου του αντικειμένου στο ώρο-προς. 57

58 58 Κεφάλαιο 4. Συλλογή απορριμμάτων με αντιγραφή Α όρι μος 4.1 Συ ο ή με αντι ραφή: αρ ικοποίηση και εκ ώρηση 1: procedure S () 2: tospace HeapStart 3: extent (HeapEnd HeapStart)/2 size of a semispace 4: top fromspace 5: free tospace 6: function (size) 7: atomic 8: result free 9: newfree result + size 10: if newf ree > top then 11: return null signal memory exhausted 12: free newfree 13: return result Πιο συ κεκριμένα, ια κά ε πεδίο δείκτη του ορίσματος της, κα εί τη διαδικασία, η οποία με τη σειρά της, αν το όρισμα της δεν περιέ ει την τιμή null, κα εί τη συνάρτηση με όρισμα το όρισμα με το οποίο αυτή κ ή ηκε. Η συνάρτηση ε έ ει αν το αντικείμενο αναφοράς του ορίσματος της έ ει ήδη αντι ραφεί στο ώρο-προς, και αν ναι, τότε επιστρέφει τη διεύ υνση του αντι ράφου. Αν ό ι, κα εί τη συνάρτηση η οποία εκτε εί τις εξής ενέρ ειες: απο ηκεύει στη μετα ητή toref την τιμή του δείκτη free, αυξάνει το δείκτη free κατά το μέ ε ος του αντικειμένου (όπ ς ακρι ώς συμ αίνει και κατά την εκ ώρηση μνήμης), μετακινεί (αντι ράφει) το αντικείμενο στη έση toref, απο ηκεύει στο πεδίο forwardingaddress του αντικειμένου τη διεύ υνση του αντι ράφου του toref και τέ ος, πριν επιστρέψει τη μετα ητή toref, την προσ έτει στη ίστα ερ ασιών. Η απο ήκευση της διεύ υνσης ενός αντικειμένου στο πεδίο forwardingaddress του αντι ράφου του στο ώρο-από από τη συνάρτηση εξασφα ίζει π ς η συ ο ή με αντι ραφή διατηρεί την τοπο ο ία τ ν ζ ντανών αντικειμέν ν κατά την αντι ραφή τους από το ώρο-από στο ώρο-προς. Σε αντί εση με τους περισσότερους συ έκτες με σήμανση και συμπύκν ση, ένας συ έκτης με αντι ραφή δεν απαιτεί κανένα επιπ έον πεδίο στην επικεφα ίδα ενός αντικειμένου. Οποιοδήποτε πεδίο στο αντί ραφο ενός αντικειμένου του ώρου-προς στο ώρο-από μπορεί να απο ηκεύσει τη διεύ υνση του αντικειμένου στο ώρο-προς, κα ώς το αντί ραφο αυτό δεν πρόκειται να ρησιμοποιη εί ξανά μετά το πέρας της συ ο ής. Το ε ονός αυτό κα ιστά τη συ ο ή με αντι ραφή κατά η η ακόμη και ια αντικείμενα ρίς επικεφα ίδα. Όπ ς και οι περισσότερες τε νικές συ ο ής απορριμμάτ ν με εξι νίαση, έτσι και η συ ο ή με αντι ραφή διατηρεί μια ίστα ερ ασιών την οποία και επεξερ άζεται μέ ρις ότου αυτή εκκεν εί. Η ίστα ερ ασιών δύναται να υ οποιη εί με διαφορετικούς τρόπους, οδη ώντας σε διαφορετική σειρά διάσ ισης του ράφου αντικειμέν ν και διαφορετικές απαιτήσεις σε ώρο. Οι Fenichel και Yochelson [51] υ οποιούν τη ίστα ερ ασιών ς μία απ ή οη ητική στοί α, όπ ς κάνουν οι συ έκτες με σήμανση και εκκα άριση. Η αντι ραφή τε ειώνει όταν η στοί α είναι άδεια. Ο α όρι μος του Cheney [34] ρησιμοποιεί τα κρι αντικείμενα του ώρου-προς ς μία ουρά (α όρι μος 4.3). Η μόνη επιπ έον μετα ητή που ρησιμοποιεί είναι ο δείκτης scan, ο οποίος κά ε ρονική στι μή αναφέρεται στο επόμενο μη σαρ μένο αντικείμενο. Όταν οι δύο ημι ώροι ενα άσσονται οι δείκτες scan και free αρ ικοποιούνται ώστε να δεί νουν στην αρ ή του ώρου-προς (η διαδικασία ε ράφει το δείκτη scan με την τιμή

59 4.1 Αντιγραφή μεταξύ ημιχώρων 59 Α όρι μος 4.2 Συ ο ή με αντι ραφή: αντι ραφή ημι ώρ ν 1: procedure () 2: () 3: (worklist) empty 4: for all fld in Roots do copy the roots 5: (fld) 6: while not E (worklist) do copy transitive closure 7: ref (worklist) 8: (ref) 9: procedure () switch semispaces 10: f romspace, tospace tospace, f romspace 11: top tospace + extent 12: free tospace 13: procedure (ref) 14: for all fld in P ointers(roots) do 15: (fld) 16: procedure (fld) update field with reference to tospace replica 17: fromref fld 18: if fromref null then 19: fld (fromref) update with tospace reference 20: function (fromref) 21: toref A (fromref) 22: if toref = null then not copied (not marked) 23: toref (fromref) 24: return toref 25: function (fromref) copy object and return forwarding address 26: toref free 27: free free + (fromref) 28: (fromref, toref) 29: A (fromref) toref mark 30: (worklist, toref) 31: return toref

60 60 Κεφάλαιο 4. Συλλογή απορριμμάτων με αντιγραφή του δείκτη free, ο οποίος στη διαδικασία ενημερώ ηκε με την διεύ υνση της αρ ής του ημι ώρου-προς). Αφού αντι ραφούν τα αντικείμενα ρίζες, η ίστα ερ ασιών, δη αδή το σύνο ο τ ν κρι αντικειμέν ν αποτε είται ακρι ώς από τα αντι ε ραμμένα και ό ι ακόμη σαρ μένα αντικείμενα στο ώρο-προς μεταξύ τ ν δεικτών scan και free. Αυτή ακρι ώς είναι και η ανα οί τη που διατηρείται κατά τη διάρκεια της συ ο ής. Ο δείκτης scan αυξάνεται κα ώς πεδία αντικειμέν ν του ώρου-προς σαρώνονται και ενημερώνονται. Η συ ο ή ο οκ ηρώνεται όταν η ίστα ερ ασιών είναι κενή: όταν ο δείκτης scan συναντήσει το δείκτη free. Η υ οποίηση είναι πο ύ απ ή: η συνάρτηση E συ κρίνει τις τιμές τ ν δεικτών scan και free, η συνάρτηση απ ώς επιστρέφει την τιμή του δείκτη scan και τέ ος η διαδικασία δεν προ αίνει σε καμία ενέρ εια. Α όρι μος 4.3 Συ ο ή με αντι ραφή: ίστα ερ ασιών του Cheney 1: procedure () 2: scan free 3: function E (worklist) 4: return scan = free 5: function (worklist) 6: ref scan 7: scan scan + (scan) 8: return ref 9: procedure (worklist, ref) 10: /* nop */ 4.2 Σειρά διάταξης και τοπικότητα Η τοπικότητα τόσο του τροποποιητή όσο και του συ έκτη μπορεί να έ ει σημαντική επίδραση στην επίδοση ενός προ ράμματος. Όπ ς είδαμε στο προη ούμενο κεφά αιο και παρατηρούν οι Abuaiadh κ.ά. [2], ο συ έκτης μπορεί να άψει την τοπικότητα του τροποποιητή και επομέν ς και την επίδοση του τε ευταίου εάν μετακινεί αντικείμενα σε τυ αίες νέες έσεις ρίς να αμ άνει υπόψη σ έσεις μεταξύ δεικτών ή την αρ ική διάταξη τ ν αντικειμέν ν. Ωστόσο, απαιτείται ο συμ ι ασμός ανάμεσα στα οφέ η που προκύπτουν από την τοπικότητα του τροποποιητή και τη συ νότητα κ ήσης του συ έκτη. Ας συ κρίνουμε ια παράδει μα τη συ ο ή με σήμανση και εκκα άριση και τη συ ο ή με αντι ραφή. Η συ ο ή με σήμανση και εκκα άριση έ ει στη διά εσή της διπ άσιο ώρο στο σ ρό από ότι η συ ο ή με αντι ραφή και αν υπο έσουμε π ς οι υπό οιπες παράμετροι είναι ίδιες κατα ή ουμε στο συμπέρασμα π ς η ρήση της πρώτης τε νικής α πρα ματοποιήσει μισό αρι μό συ ο ών. Οι Blackburn κ.ά. [18] διαπιστώνουν π ς πρά ματι η συ ο ή με σήμανση και εκκα άριση παρουσιάζει κα ύτερες συνο ικά επιδόσεις από τη συ ο ή με αντι ραφή όταν ο σ ρός είναι σ εδόν εμάτος. Αντί ετα, oι Blackburn και McKinley [17] ρίσκουν π ς σε με ά ους σ ρούς, τα οφέ η τοπικότητας που προκύπτουν από τη σειριακή εκ ώρηση μνήμης υπερνικούν την αποδοτικότητα ώρου της συ ο ής με σήμανση και εκκα άριση, έ οντας ς αποτέ εσμα κα ύτερους ρυ μούς αστο ιών σε ό α τα επίπεδα της κρυφής μνήμης. Οι Blackburn κ.ά. [18] αντι ράφουν τα αντικείμενα κατά ά ος. Αντί ετα, ο Cheney διασ ίζει

61 4.2 Σειρά διάταξης και τοπικότητα 61 το ράφο τ ν αντικειμέν ν κατά π άτος. Παρότι η διάσ ιση υ οποιείται ς μία ραμμική (και συνεπώς προ έψιμη) σάρ ση της ίστας ερ ασιών τ ν κρι αντικειμέν ν του ώρου-προς, η αντι ραφή αντικειμέν ν κατά π άτος επιδρά δυσμενώς στην τοπικότητα του τροποποιητή κα ώς τείνει να ξε ρίζει ονείς και παιδιά. O White [118] ήταν ο πρώτος που συνέστησε τη ρήση του συ έκτη προς ε τί ση της επίδοσης του τροποποιητή. Τόσο η συ ο ή με αντι ραφή όσο και η συ ο ή με σήμανση και συμπύκν ση μετακινούν αντικείμενα, επηρεάζοντας με με ά η πι ανότητα την τοπικότητα του τροποποιητή. Η ο ισ αίνουσα μετακίνηση ε ρείται η έ τιστη όσον αφορά τη συ ο ή με σήμανση και συμπύκν ση κα ώς διατηρεί τη διάταξη τ ν αντικειμέν ν που έ ει ε κα ιδρύσει ο εκ ρητής. Η συντηρητική αυτή πο ιτική είναι σί ουρα ασφα ής. Είναι όμ ς και έ τιστη; Η συ ο ή με σήμανση και συμπύκν ση, η οποία συμπυκνώνει το σ ρό επιτόπου είτε μετακινώντας ζ ντανά αντικείμενα σε τρύπες είτε ο ισ αίνοντας τα στο ένα άκρο του σ ρού, δεν έ ει πο ές δυνατότητες τροποποίησης της διάταξης τ ν αντικειμέν ν στο σ ρό προς όφε ος της τοπικότητας του τροποποιητή. Από την ά η π ευρά, οποιοσδήποτε α όρι μος συ ο ής ο οποίος μετακινεί αντικείμενα σε μία φρέσκια περιο ή του σ ρού ρίς να καταστρέφει τα αυ εντικά δεδομένα μπορεί να τα αναδιατάξει προκειμένου να ε τιώσει την επίδοση του τροποποιητή. Δυστυ ώς υπάρ ουν δύο ό οι ια τους οποίους δεν μπορούμε να ρούμε μία έ τιστη διάταξη τ ν αντικειμέν ν που να ε α ιστοποιεί τον αρι μό αστο ιών κρυφής μνήμης του προ- ράμματος. Πρώτον, ο συ έκτης δεν μπορεί να ν ρίζει το μοτί ο πρόσ ασης τ ν με οντικών προσ άσε ν σε αντικείμενα. Ακόμη ειρότερα, οι Petrank και Rawitz [92] αποδεικνύουν π ς το πρό ημα της τοπο έτησης είναι NP-complete: δεδομένης της τέ ειας νώσης τ ν με οντικών προσ άσε ν, δεν υπάρ ει αποδοτικός α όρι μος υπο ο ισμού μιας έ τιστης τοπο έτησης. Α όρι μος 4.4 Συ ο ή με αντι ραφή: σ εδόν κατά- ά ος αντι ραφή (Moon) 1: procedure (worklist) 2: scan free 3: partialscan f ree 4: procedure E (worklist) 5: return scan = free as per Cheney 6: procedure (worklist) 7: if partialscan < free then 8: ref partialscan prefer secondary scan 9: partialscan partialscan + (partialscan) 10: else 11: ref scan primary scan 12: scan scan + (scan) 13: return ref 14: procedure (worklist, ref) secondary scan on the most recently allocated page 15: partialscan (partialscan, startofp age(ref)) Η μοναδική ύση στο πρό ημα είναι η ρήση ευριστικών. Μια πι ανή προσέ ιση είναι η ρήση της συμπεριφοράς του παρε όντος ια την πρό εψη της συμπεριφοράς του μέ ο-

62 62 Κεφάλαιο 4. Συλλογή απορριμμάτων με αντιγραφή (αʹ) Ο ώρος-προς πριν τη συ ο ή ( ʹ) Αντι ραφή της ρίζας, L ( ʹ) Σάρ ση του αντι ράφου του L Σ ήμα 4.1: Συ ο ή με αντι ραφή: ένα παράδει μα

63 4.2 Σειρά διάταξης και τοπικότητα 63 (δʹ) Σάρ ση αντι ράφου του κ.ο.κ (εʹ) Σάρ ση αντι ράφου του C (στʹ) Σάρ ση αντι ράφου του D. scan = free και η συ ο ή ο οκ ηρώνεται. Σ ήμα 4.1: Συ ο ή με αντι ραφή: ένα παράδει μα (συνέ εια)

64 64 Κεφάλαιο 4. Συλλογή απορριμμάτων με αντιγραφή ντος. Ορισμένοι ερευνητές ρησιμοποιούν είτε στατιστική ανά υση ασιζόμενοι στην υπό- εση τ ν Calder κ.ά. [32] π ς τα προ ράμματα συμπεριφέρονται παρόμοια ια διαφορετικές εισόδους, είτε online δει ματο ηψία ασιζόμενοι στην υπό εση τ ν Chilimbi κ.ά. [36] π ς η συμπεριφορά του προ ράμματος παραμένει η ίδια από μία περίοδο στην επόμενη. Μια ά η ευριστική είναι η διατήρηση της διάταξης εκ ώρησης, όπ ς κάνει η ο ισ αίνουσα συμπύκν ση. Μια τρίτη στρατη ική αφορά την προσπά εια τοπο έτησης παιδιών δίπ α σε έναν από τους ονείς τους, αφού ο μόνος τρόπος πρόσ ασης ενός παιδιού είναι η φόρτ ση μιας αναφοράς από κάποιον από τους ονείς αυτού. Ο α όρι μος του Cheney υ οποιεί κατά π άτος αντι ραφή τείνοντας όμ ς να τοπο ετεί κοντά μακρινά ξαδέρφια και ό ι ονείς με τα παιδιά τους. Οι αρ ικές με έτες του πώς μπορεί να επ φε η εί η τοπικότητα του τροποποιητή από τη σειρά αντι ραφής τ ν αντικειμέν ν επικεντρώνονταν στην ε α ιστοποίηση τ ν σφα μάτ ν σε ίδας: ο απώτερος στό ος είναι η τοπο έτηση σ ετιζόμεν ν αντικειμέν ν στην ίδια σε ίδα. Ο Stamos [112], [111] και ο Blau [22] διαπίστ σαν μέσ προσομοιώσε ν π ς παρότι η κατά ά ος αντι ραφή είναι πιο επικερδής από την κατά π άτος αντι ραφή, αυτή οδη εί σε ειρότερη συμπεριφορά όσον αφορά τα σφά ματα σε ίδ ν σε σ έση με την αρ ική διάταξη δημιουρ ίας τ ν αντικειμέν ν. Οι Wilson κ.ά. [120] στόσο υποστηρίζουν π ς οι εν ό προσομοιώσεις δε αμ άνουν υπόψη τους την τοπο ο ία τ ν πρα ματικών προ ραμμάτ ν τ ν σσών Lisp και Smalltalk, τα οποία τείνουν να δημιουρ ούν δένδρα με με ά ο π άτος και μικρό ά ος: οι δενδρικές δομές υ οποιούν πίνακες κατακερματισμού και έ ουν σ εδιασ εί με στό ο την κα ύτερη διασπορά τ ν κ ειδιών προς αποφυ ή συ κρούσε ν. Ο α όρι μος τ ν Fenichel και Yochelson υ οποιεί την κατά ά ος διάσ ιση με τη ρήση μιας οη ητικής στοί ας. Είναι πάντ ς δυνατή η επίτευξη μιας σ εδόν κατά π άτος διάσ ισης ρίς τη ρήση οη ητικής στοί ας. Ο Moon [83] τροποποίησε τον α όρι μο του Cheney ια να πετύ ει μία σ εδόν κατά ά ος διάσ ιση. Ο α όρι μος του Moon (α όρι μος 4.4) ρησιμοποιεί εκτός του αρ ικού δείκτη scan έναν επιπ έον δείκτη, τον partialscan. Οποτεδήποτε αντι ράφεται ένα αντικείμενο, ο α όρι μος του Moon εκκινεί μια δευτερεύουσα σάρ ση στην τε ευταία σε ίδα του ώρου-προς η οποία δεν έ ει ακόμη σαρ εί π ήρ ς. Όταν αυτό συμ εί, η κύρια σάρ ση συνε ίζει από την πρώτη σε ίδα που δεν έ ει σαρ εί π ήρ ς. Στην πράξη, η ίστα ερ ασιών υ οποιείται ς ένα ζεύ ος ουρών Cheney. Αυτή η ιεραρ ική αποσύν εση π εονεκτεί έναντι της κ ασσικής κατά ά ος εξερεύνησης όσον αφορά την τοπο έτηση ονέ ν και παιδιών στην ίδια σε ίδα. Το μειονέκτημα του α ορί μου του Moon είναι π ς αντικείμενα μπορεί να σαρώνονται δύο φορές, αφού αυτός κατα ράφει μόνο ένα ζεύ ος δεικτών σάρ σης και κατά συνέπεια ξε νά τα μπ οκ μεταξύ τ ν έσε ν scan και free που έ ουν ήδη μερικώς σαρ εί. Πρά ματι, όπ ς διαπίστ σαν oι Wilson κ.ά. [120] το 30% τ ν αντικειμέν ν ενδέ εται να σαρ εί εις διπ ούν. Οι τε ευταίοι τροποποίησαν τον α όρι μο του Moon παρέ οντας σε κά ε σε ίδα τους δικούς της δείκτες free και scan, με τη ίστα ερ ασιών να περι αμ άνει π έον τα μπ οκ που έ ουν σαρ εί μερικώς. Αυτό σημαίνει πώς η κύρια σάρ ση δεν ρειάζεται να επισκεφ εί ξανά αντικείμενα σε ίδ ν που έ ει ήδη επεξερ ασ εί η δευτερεύουσα σάρ ση. Η προσέ ιση του Moon είναι στατική και δε αμ άνει υπόψη τη συμπεριφορά τ ν ξε ριστών εφαρμο ών. Είναι εμφανές στόσο π ς τα οφέ η από την αναδιάταξη τ ν αντικειμέν ν εξαρτώνται από τη συμπεριφορά του τροποποιητή. Οι Lam κ.ά. [74] διαπίστ σαν π ς ο α - όρι μος του Moon παρουσιάζει ευαισ ησία όσον αφορά τη δομή και την ποικι ία τ ν διαφόρ ν δομών δεδομέν ν και εμφανίζει απο οητευτικές επιδόσεις ια μη δενδροειδείς δομές. Οι Siegwart και Hirzel [108] επίσης παρατήρησαν π ς ένας παρά η ος συ έκτης με ιεραρ ική αποσύν εση φε εί σημαντικά την επίδοση μόνο ορισμέν ν benchmarks.

65 4.2 Σειρά διάταξης και τοπικότητα 65 Σ ήμα 4.2: Προσε ιστική αντι ραφή κατά ά ος (Moon). Κά ε μπ οκ αναπαριστά μια σε ίδα. Ως συνή ς, τα σαρ μένα πεδία είναι μαύρα, ενώ τα πεδία που έ ουν αντι ραφεί α ά ό ι σαρ εί ακόμη κρι. Ο ε εύ ερος ώρος απεικονίζεται με ευκό ρώμα. (αʹ) Το δένδρο προς αντι ραφή ( ʹ) Τοπο έτηση αντικειμέν ν στο σ ρό μετά την αντι ραφή Σ ήμα 4.3: Αντι ραφή ενός δένδρου με διαφορετικές σειρές διάσ ισης. Κά ε ραμμή δεί- νει πώς η αντίστοι η σειρά διάσ ισης τοπο ετεί τα αντικείμενα στο ώροπρος, υπο έτοντας πώς κά ε σε ίδα ράει τρία αντικείμενα. Oι Huang κ.ά. [63] παρακο ου ούν δυναμικά το προφί μιας εφαρμο ής και προσπα ούν να αντι ράψουν ερμά πεδία αντικειμέν ν δίπ α με τους ονείς αυτών. Αυτό το σ ήμα online επαναδιάταξης αντικειμέν ν κα ώς και η ειτουρ ία του φαίνονται στον α - όρι μο 4.5 και το σ ήμα 4.3 αντίστοι α. Ο ασικός ρό ος σάρ σης του α ορί μου επεξερ άζεται πρώτα τη ίστα ερμών αντικειμέν ν και μετά τη ίστα ψυ ρών αντικειμέν ν. Η υ οποίηση του μη ανισμού δει ματο ηψίας ς τμήμα ενός προσαρμοστικού δυναμικού μετα ττιστή επιτρέπει τη φ ηνή ταυτοποίηση τ ν ερμών αντικειμέν ν. Η υ οποίηση του Huang κ.ά. επίσης αμ άνει υπόψη τις α α ές της συμπεριφοράς του τροποποιητή ανάμεσα στις διάφορες φάσεις ειτουρ ίας του, επιτρέποντας στη ερμότητα τ ν πεδί ν να φ ίνει και να δει ματο ηφ εί ξανά. Τέ ος, ο Huang κ.ά. διαπίστ σαν π ς η τε νική της αντι ραφής με online αναδιάταξη αντικειμέν ν εμφανίζει συ κρίσιμες ή και κα ύτερες επιδόσεις από στατικές τε νικές όπ ς η αντι ραφή κατά π άτος.

66 66 Κεφάλαιο 4. Συλλογή απορριμμάτων με αντιγραφή Α όρι μος 4.5 Συ ο ή με αντι ραφή: online αναδιάταξη αντικειμέν ν 1: procedure () 2: atomic 3: () 4: (hotlist, coldlist) 5: for all fld in Roots do 6: P (fld) 7: repeat 8: while not E (hotlist) do 9: S (remove(hotlist)) 10: while not E (coldlist) do 11: P (remove(coldlist)) 12: until E (hotlist) 13: procedure (hotlist, coldlist) 14: hotlist empty 15: coldlist empty 16: procedure P (fld) 17: fromref fld 18: if fromref null then 19: fld (fromref) 20: procedure S (obj) 21: for all fld in P ointers(obj) do 22: if H (fld) then 23: P (fld) 24: else 25: (coldlist, fld)

67 4.3 Θέματα προς εξέταση Θέματα προς εξέταση Εκ ώρηση μνήμης Η εκ ώρηση μνήμης σε έναν συμπυκν μένο σ ρό είναι ρή ορη επειδή είναι απ ή. Συνή ς απ ώς απαιτεί τον έ ε ο έναντι ενός άν ορίου (του σ ρού ή ενός μπ οκ) και την υ οποίηση ενός δείκτη free. Εάν ο σ ρός είναι ορ αν μένος σε μπ οκ και ό ι συνε όμενος, ο έ ε ος ενίοτε α αποτυ άνει στην οποία περίπτ ση πρέπει να δεσμευ εί ένα καινούριο μπ οκ. Η συ νότητα εμφάνισης της αρ ής αυτής περίπτ σης α εξαρτη εί από το πώς μετα ά εται ο μέσος όρος με έ ους τ ν δημιουρ ούμεν ν αντικειμέν ν και το μέ ε ος του μπ οκ. Η σειριακή εκ ώρηση μνήμης επίσης είναι κατά η η ια ρήση σε πο υνηματικές εφαρμο ές, κα ώς σε κά ε νήμα-τροποποιητή μπορεί να δο εί ένας τοπικός απομον τής εκ ώρησης ρίς να ρειάζεται ο συ ρονισμός με ά α νήματα. Η ορ άν ση αυτή είναι απ ή και απαιτεί τη ρήση μικρού αρι μού μεταδεδομέν ν, σε αντί εση με τοπικά σ ήματα εκ ώρησης ια μη μετακινούντες συ έκτες όπου κά ε νήμα-τροποποιητής μπορεί να ρειάζεται τις δικές του δομές δεδομέν ν ια την εκ ώρηση μνήμης με ξε ριστές ε εύ ερες ίστες ια αντικείμενα διαφορετικού με έ ους. Ο κώδικας που υ οποιεί τη σειριακή εκ ώρηση είναι σύντομος και επιπ έον παρουσιάζει κα ή συμπεριφορά όσον αφορά την κρυφή μνήμη κα ώς η εκ ώρηση προ ράει σειριακά στο σ ρό. Παρότι ο συνδυασμός της σειριακής εκ ώρησης, της μικρής διάρκειας ζ ής αντικειμέν ν και της ορ άν σης του σ ρού σε ημι ώρους συνεπά εται π ς με με ά η πι ανότητα η επόμενη έση μνήμης που α εκ ρη εί είναι αυτή που έ ει ρησιμοποιη εί ι ότερο πρόσφατα, οι μη ανισμοί προφόρτ σης τ ν σύ ρον ν επεξερ αστών συνή ς κα ύπτουν τη αν άνουσα κα υστέρηση που προκύπτει. Εάν όμ ς η συμπεριφορά αυτή συ κρούεται με την πο ιτική αντικατάστασης της ι ότερο πρόσφατα ρησιμοποιημένης σε ίδας (LRU) του ειτουρ ικού συστήματος σε α μό ώστε ο ρυ μός ενα α ής σε ίδ ν να ειροτερεύει την επίδοση, τότε ρειάζεται επανεξέταση της διαμόρφ σης του συστήματος δια είρισης μνήμης. Η ικανοποιητική εκτέ εση της εφαρμο ής μπορεί να απαιτεί περισσότερη φυσική μνήμη ή α α ή της πο ιτικής συ ο ής. Οι Blackburn κ.ά. [18] κατά την πειραματική με έτη ενός μικρού σ ετικά benchmark διαπίστ σαν πώς παρότι η σειριακή εκ ώρηση υπερτερεί κατά 11% έναντι της εκ ώρησης με ε εύ ερες ίστες, η εκ ώρηση κα εαυτή αποτε εί μό ις το 10% του συνο ικού ρόνου εκτέ- εσης μιας εφαρμο ής. Επομέν ς η διαφορά κόστους ανάμεσα στις δύο τε νικές μπορεί να είναι αμε ητέα. Ωστόσο το κυρίαρ ο κόστος της δημιουρ ίας ενός αντικειμένου συνή ς αφορά την αρ ικοποίηση του αντικειμένου και ό ι την εκ ώρηση μνήμης. Επιπ έον, τα αντικείμενα έ ουν παρόμοιους κύκ ους ζ ής σε πο ές εφαρμο ές. Ο τροποποιητής δημιουρ εί έναν αρι μό από σημασιο ο ικά συνδεδεμένα αντικείμενα περίπου την ίδια ρονική περίοδο, τα επεξερ άζεται και τα ε κατα είπει μαζικώς. Σε τέτοιες εφαρμο ές η ρήση συμπυκν μένου σ ρού προσφέρει υψη ή τοπική ρικότητα αφού τα σ ετιζόμενα αντικείμενα τοπο ετούνται στην ίδια σε ίδα ή ακόμη και στο ίδιο μπ οκ κρυφής μνήμης αν είναι μικρά. Μια τέτοια διάταξη τείνει εμφανώς να οδη ήσει σε αμη ότερο ρυ μό αστο ιών κρυφής μνήμης σε σύ κριση με την περίπτ ση όπου η μνήμη τ ν συσ ετιζόμεν ν αντικειμέν ν εκ ρείται μέσ ξε ριστών ε εύ ερ ν ιστών.

68 68 Κεφάλαιο 4. Συλλογή απορριμμάτων με αντιγραφή Χώρος και τοπικότητα Το άμεσο μειονέκτημα της συ ο ής με αντι ραφή ημι ώρ ν είναι η ανά κη διατήρησης ενός δεύτερου ημι ώρου, ο οποίος μερικές φορές κα είται και εφεδρικό αντί ραφο. Δεδομένου ενός προϋπο ο ισμού μνήμης και α νοώντας τις δομές δεδομέν ν που είναι απαραίτητες ια τη ειτουρ ία του συ έκτη η συ ο ή με αντι ραφή προσφέρει μόνο το μισό ώρο του σ ρού σε σ έση με ά ες τε νικές συ ο ής απορριμμάτ ν. Το αποτέ εσμα είναι π ς οι συ έκτες αντι ραφής α πρα ματοποιήσουν περισσότερους κύκ ους συ ο ής από ότι ά οι συ έκτες. Εάν αυτό α οδη ήσει σε κα ύτερη ή ειρότερη επίδοση εξαρτάται από τους διάφορους συμ ι ασμούς μεταξύ συ έκτη και τροποποιητή, τα αρακτηριστικά της εφαρμο ής και το μέ ε ος της δια έσιμης μνήμης σ ρού. Η απ ή ασυμπτ τική ανά υση πο υπ οκότητας μπορεί να προτιμήσει τη συ ο ή με αντι- ραφή έναντι της συ ο ής με σήμανση και εκκα άριση. Έστ M το συνο ικό μέ ε ος του σ ρού και L το συνο ικό μέ ε ος τ ν ζ ντανών αντικειμέν ν. Η συ ο ή με αντι ραφή πρέπει να αντι ράψει και σαρώσει τα ζ ντανά αντικείμενα κα ώς και να ενημερώσει τους δείκτες αυτών. Η συ ο ή με σήμανση και εκκα άριση από την ά η π ευρά πρέπει να ανακα ύψει ό α τα ζ ντανά αντικείμενα και στη συνέ εια να εκκα αρίσει ό ο το σ ρό. Ο Jones [67] ορίζει τη ρονική πο υπ οκότητα ια τη συ ο ή με αντι ραφή και ια τη συ ο ή με σήμανση και εκκα άριση ς: t copy = cl (4.1) t MS = ml + sm (4.2) Το ποσό της μνήμης που ανακτάται από κά ε συ ο ή είναι αντίστοι α: m copy = M 2 L (4.3) m MS = M L (4.4) Έστ τώρα r = L M το ποσοστό της ζ ντανής μνήμης, το οποίο υπο έτουμε πώς είναι στα ερό. Η αποδοτικότητα ενός α ορί μου μπορεί να περι ραφεί από το ό ο mark/cons, e, ο οποίος αντιπροσ πεύει την ερ ασία του συ έκτη ανά μονάδα ανακτημένης μνήμης. e copy = 2cr 1 2r e MS = mr + s 1 r (4.5) (4.6) Η συ ο ή με αντι ραφή μπορεί να είναι πιο αποδοτική από τη συ ο ή με σήμανση και εκκα άριση αν ο σ ρός είναι αρκετά με ά ος και το r αρκετά μικρό. Αυτή η απ ουστευμένη ανά υση στόσο α νοεί διάφορα ζητήματα. Οι σύ ρονοι συ έκτες με σήμανση και εκκα άριση συνή ς ρησιμοποιούν οκνηρή εκκα άριση, κάτι που μειώνει τη στα ερά s και κατ επέκταση το ό ο e MS. Η ανά υση της πο υπ οκότητας πρέπει να αντιμετ πισ εί με με ά η προσο ή κα ώς συνή ς α νοεί επτομέρειες υ οποίησης παρότι οι Hertz και Berger [60] επι ε αιώνουν πειραματικά τη μορφή τ ν καμπυ ών (όπ ς ότι το κόστος της συ ο ής

69 4.3 Θέματα προς εξέταση 69 Σ ήμα 4.4: Ρυ μοί mark/cons ια συ ο ή με σήμανση και εκκα άριση και συ ο ή με αντι ραφή. με σήμανση και εκκα άριση είναι αντιστρόφ ς ανά ο ο προς το μέ ε ος του σ ρού). Οι πρα ματικές επτομέρειες υ οποίησης παρότι είναι σημαντικές ια πρα ματικούς συ έκτες δεν αμ άνονται υπόψη από ανα ύσεις πο υπ οκότητας. Παράδει μα μιας τέτοιας επτομέρειας αποτε εί η ετική επίδραση στην τοπικότητα του τροποποιητή της ρήσης σειριακής εκ ώρησης μνήμης. Επομέν ς η σειριακή εκ ώρηση μνήμης τείνει να τοπο ετεί αντικείμενα που προσπε άζονται ταυτό ρονα σε διαδο ικές έσεις μνήμης, κάτι που συμ ά ει στη ε τί ση του ρυ μού αστο ιών κρυφής μνήμης του τροποποιητή. Ωστόσο η συ ο ή με αντι ραφή αναδιατάσσει τα επιζώντα αντικείμενα στο σ ρό. Παρότι η συ ο ή με αντι ραφή κατά Cheney δεν ρειάζεται οη ητική στοί α ια την κα οδή ηση της εξι νίασης, η διάσ ιση κατά π άτος τείνει να δια ρίζει τους ονείς από τα παιδιά τους. Η ιεραρ ική αποσύν εση προσφέρει έναν κα ό συμ- ι ασμό μεταξύ της π ηρ μής του κόστους της οη ητικής στοί ας και της ε τί σης της διάταξης τ ν αντικειμέν ν στο σ ρό. Ωστόσο παρότι η προσεκτική αναδιάταξη τ ν αντικειμέν ν μπορεί να είναι φέ ιμη ια μερικά προ ράμματα, σε ορισμένες περιπτώσεις η επίδρασή της μπορεί να αποδει εί αμε ητέα. Τα περισσότερα αντικείμενα έ ουν μικρή διάρκεια ζ ής και δεν επι ιώνουν ούτε από μία συ ο ή. Επιπ έον, όπ ς παρατηρούν οι Blackburn και McKinley [17], πο ές εφαρμο ές εστιάζουν τις προσ άσεις στη μνήμη και ιδιαίτερα τις ε - ραφές σε αυτά τα νέα αντικείμενα. Η πο ιτική διάσ ισης ενός συ έκτη δεν μπορεί προφανώς να επηρεάσει την ιδιότητες τοπικότητας αντικειμέν ν που δεν μετακινούνται Μετακίνηση αντικειμέν ν Η επι ο ή ενός συ έκτη αντι ραφής εξαρτάται μεταξύ ά ν από το αν επιτρέπεται η μετακίνηση αντικειμέν ν κα ώς και από το κόστος της μετακίνησης. Σε μερικά περι ά οντα δεν επιτρέπεται η μετακίνηση αντικειμέν ν. Ένας από τους ό ους είναι η έ ειψη π ηροφορίας τύπ ν που κα ιστά μη ασφα ή την τροποποίηση ενός πεδίου που είναι πι ανόν δείκτης σε ένα αντικείμενο. Ένας διαφορετικός ό ος είναι πώς μπορεί μια αναφορά προς ένα αντικείμενο να έ ει μετα ι ασ εί ς σε μη δια ειρίσιμο κώδικα ( ια παράδει μα ς όρισμα σε κάποια κ ήση συστήματος). Επιπ έον το πρό ημα της εύρεσης δεικτών πο ύ συ νά είναι απ ούστερο συ ο ή με σήμανση και εκκα άριση από ότι στη συ ο ή με αντι ραφή. Αρκεί η ανακά- υψη του ά ιστον μιας αναφοράς προς ένα ζ ντανό αντικείμενο όταν ρησιμοποιείται ένας μη μετακινών συ έκτης. Από την ά η π ευρά, ένας μετακινών συ έκτης πρέπει να εντοπίσει και ενημερώσει ό ες τις αναφορές προς ένα μετακινη έν αντικείμενο. Όπ ς α δούμε και στο

70 70 Κεφάλαιο 4. Συλλογή απορριμμάτων με αντιγραφή κεφά αιο 9, το ε ονός αυτό κα ιστά την ταυτό ρονη συ ο ή με μετακίνηση σημαντικά δυσκο ότερη από την ταυτό ρονη συ ο ή ρίς μετακίνηση κα ώς ό ες οι ενημερώσεις τ ν αναφορών προς κά ε αντικείμενο πρέπει να εμφανίζονται ς ατομικές. Η αντι ραφή ορισμέν ν αντικειμέν ν είναι ακρι ή. Παρότι η αντι ραφή ενός μικρού αντικειμένου κοστίζει περισσότερο από τη σήμανση αυτού, το κόστος και η αν άνουσα κα υστέρηση της αντι ραφής συ νά κρύ ονται από το κόστος της παρακο ού ησης δεικτών και της ανακά υψης π ηροφορίας τύπ ν. Από την ά η π ευρά η επανα αμ ανόμενη αντι ραφή με ά ν αντικειμέν ν μπορεί να οδη ήσει σε φτ ές επιδόσεις. Μια ύση είναι η αποφυ ή της αντι- ραφής τους και η ανά εση της δια είρισής τους σε έναν μη μετακινούντα συ έκτη. Μια ά η ύση είναι η αντι ραφή τους να πρα ματοποιείται εικονικά και ό ι φυσικά.

71 Κεφά αιο 5 Συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών Οι α όρι μοι που έ ουμε εξετάσει μέ ρι στι μής είναι έμμεσοι: κά ε ένας από αυτούς διασ ίζει τον ράφο τ ν αντικειμέν ν ώστε να ανα ν ρίσει τα ζ ντανά αντικείμενα. Σε αυτό το κεφά αιο εξετάζουμε την τέταρτη και τε ευταία εμε ιώδη τε νική συ ο ής απορριμμάτ ν, αυτήν της καταμέτρησης αναφορών. Η συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών, η οποία οφεί εται στον Collins [38], δεν επισκέπτεται ό ο το σ ρό προκειμένου να εντοπίσει τα ζ ντανά αντικείμενα και να συμπεράνει πώς ό α τα υπό οιπα είναι απορρίμματα, α ά επιδρά απευ είας στα αντικείμενα κα ώς αναφορές σε αυτά δημιουρ ούνται ή καταστρέφονται. Ο α όρι μος διατηρεί μια απ ή ανα οί τη: ένα αντικείμενο ε ρείται ζ ντανό αν και μόνο αν ο αρι μός τ ν αναφορών σε αυτό είναι αυστηρά ετικός. Η συ ο ή με καταμέτρηση αναφορών συσ ετίζει οιπόν έναν μετρητή αναφορών με κά ε δια ειριζόμενο αντικείμενο. Ο μετρητής αυτός συνή ς απο ηκεύεται σε ένα πεδίο στην επικεφα ίδα του αντικειμένου. Ο α όρι μος 5.1 αποτε εί την απ ούστερη εκδο ή της συ ο ής με καταμέτρηση αναφορών. Η διαδικασία W αυξάνει το μετρητή αναφορών του νέου αντικειμένου στο οποίο αναφέρεται ένας δείκτης και μειώνει το μετρητή αναφορών του πα αιού αντικειμένου προς το οποίο αυτός αναφερόταν. Η διαδικασία αυτή κα είται ακόμη και ια την ενημέρ ση τοπικών μετα ητών. Κατά την έξοδο μιας διαδικασίας, τέ ος, η W κα είται ια να ενημερώσει με την τιμή null τις τοπικές μετα ητές αυτής. Οι διαδικασίες R και R αυξάνουν και μειώνουν αντίστοι α το μετρητή αναφορών του αντικειμένου ορίσματος τους. Μό ις ένας μετρητής αναφορών ενός αντικειμένου μηδενισ εί, τότε πριν η μνήμη αυτού ε ευ ερ εί, μειώνονται κατά 1 οι μετρητές αναφορών τ ν αντικειμέν ν στα οποία δεί νουν τα πεδία-δείκτες του. Η μέ οδος W αποτε εί ένα παράδει μα ενός φρά ματος ε ραφής. Για κά ε φρά μα ε ραφής, ο μετα ττιστής παρά ει μία ακο ου ία κώδικα πριν και μετά την ε ραφή ενός δείκτη. Όπ ς α δούμε και αρ ότερα, τα φρά ματα ε ραφής είναι απαραίτητα στην περίπτ ση που οι συ έκτες δε ε ρούν τη ζ ντάνια ο όκ ηρου του ράφου αντικειμέν ν ατομικά ς προς τον τροποποιητή. Οι ταυτό ρονοι κα ώς και οι ενεα ο ικοί συ έκτες αποτε ούν παραδεί ματα τέτοι ν συ εκτών. Σε κά ε περίπτ ση, τα φρά ματα ε ραφής ε υώνται τη διατήρηση της ανα οί της του εκάστοτε α ορί μου συ ο ής. 71

72 72 Κεφάλαιο 5. Συλλογή απορριμμάτων με καταμέτρηση αναφορών Α όρι μος 5.1 Συ ο ή με κατάμετρηση αναφορών: απ οϊκή καταμέτρηση αναφορών 1: function N () 2: ref () 3: if ref = null then 4: error Out of memory! 5: rc(ref) 0 6: return ref 7: procedure W (src, i, ref) 8: atomic 9: R (ref) 10: R (src[i]) 11: src[i] ref 12: procedure R (ref) 13: if ref null then 14: rc(ref) rc(ref) : procedure R (ref) 16: if ref null then 17: rc(ref) rc(ref) 1 18: if rc(ref) = 0 then 19: for all fld in P ointers(ref) do 20: R ( fld) 21: (ref)

73 5.1 Πλεονεκτήματα & Μειονεκτήματα Π εονεκτήματα & Μειονεκτήματα Υπάρ ουν αρκετοί ό οι ια τους οποίους η συ ο ή με καταμέτρηση αναφορών αποτε εί ε κυστική επι ο ή. Αρ ικά, το κόστος της δια είρισης μνήμης κατανέμεται στις ειτουρ ίες ε ραφής του τροποποιητή, ρίς να απαιτείται η παύση της εκτέ εσης αυτού. Η μνήμη ενός αντικειμένου απε ευ ερώνεται αμέσ ς μό ις πάψει να υπάρ ει καμία αναφορά προς αυτό, κάτι που κα ιστά τον α όρι μο κατά η ο ια ειτουρ ία σε εφαρμο ές όπου ο σ ρός είναι σ εδόν εμάτος. Αντί ετα, οι συ έκτες με εξι νίαση, ρειάζονται κάποιο ώρο στο σ ρό ώστε να ειτουρ ήσουν. Επιπρόσ ετα, κα ώς η καταμέτρηση αναφορών επιδρά απευ είας στα αντικείμενα προέ ευσης και προορισμού τ ν δεικτών, η τοπικότητα του συ έκτη δε μπορεί να είναι ειρότερη από την τοπικότητα του τροποποιητή. Ακόμη η συ ο ή με καταμέτρηση αναφορών μπορεί να υ οποιη εί ρίς καμία οή εια από το σύστημα εκτέ εσης ή το μετα ττιστή, κα ώς δεν απαιτεί τη νώση τ ν ριζών του προ ράμματος. Τέ ος, όπ ς παρατηρούν οι Rodrigues και Jones [100] η καταμέτρηση αναφορών μπορεί να ανακτήσει μνήμη ακόμα και αν κάποια τμήματα του συστήματος δεν είναι προσ άσιμα, κάτι που έ ει με ά η σημασία σε κατανεμημένα συστήματα. Για ό ους τους παραπάν ό ους, η συ ο ή με καταμέτρηση αναφορών έ ει υιο ετη εί από πο ά συστήματα ο ισμικού, ανάμεσα στα οποία περι αμ άνονται: υ οποιήσεις σσών προ ραμματισμού (αρ ικές εκδόσεις Smalltalk και Lisp, awk, perl, python), εφαρμο ές όπ ς το Photoshop, συστήματα δια είρισης ε ράφ ν και συστήματα δια είρισης αρ εί ν ειτουρ ικών συστημάτ ν. Επίσης, ι ιο ήκες ια ασφα ή ανάκτηση μνήμης αντικειμέν ν είναι δια έσιμες ια ώσσες τ ν οποί ν το πρότυπο δεν επι ά ει (ακόμη) αυτόματη δια- είριση μνήμης. Οι ι ιο ήκες αυτές ρησιμοποιούν έξυπνους δείκτες ια την πρόσ αση σε αντικείμενα. Οι έξυπνοι δείκτες υπερφορτώνουν κατασκευαστές και τε εστές όπ ς η ανά- εση, είτε ια να επι ά ουν αποκ ειστική ιδιοκτησία στα αντικείμενα είτε ια να παρέ ουν καταμέτρηση αναφορών. Ο Edelson [49] στόσο παρατηρεί πώς οι έξυπνοι δείκτες έ ουν διαφορετική σημασιο ο ία από τους πρ τό ονους δείκτες που προσπα ούν να μοντε οποιήσουν. Ωστόσο, τη συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών αρακτηρίζουν και διάφορα μειονεκτήματα. Πρώτον, η καταμέτρηση αναφορών επι ά ει ένα ρονικό κόστος στον τροποποιητή. Σε αντί εση με τους α ορί μους εξι νίασης που εξετάσαμε στα προη ούμενα κεφά αια, η καταμέτρηση αναφορών επανορίζει ό ες τις ειτουρ ίες R και W δεικτών προκειμένου να δια ειριστεί τους μετρητές αναφορών. Ακόμη και μια απ ή διάσ ιση μιας ίστας απαιτεί μία αύξηση και μία μεί ση ενός μετρητή αναφοράς ια κά ε αντικείμενο αυτής. Από άποψη επίδοσης, η επι άρυνση ειτουρ ιών που ενημερώνουν κατα ρητές και κομμάτια της στοί ας είναι απα ορευτική. Γι αυτόν ακρι ώς το ό ο, ο απ οϊκός α όρι μος που παρουσιάστηκε είναι πρακτικά μη εφαρμόσιμος ια ρήση σε ένα ενικού σκοπού υψη ών επιδόσε ν δια ειριστή μνήμης. Δεύτερον, τόσο οι ενέρ ειες που αφορούν δια είριση τ ν μετρητών αναφορών όσο και οι φορτώσεις και απο ηκεύσεις δεικτών πρέπει να είναι ατομικές ώστε να αποφευ ούν καταστάσεις συνα νισμού μεταξύ τ ν νημάτ ν-τροποποιητών οι οποίες α μπορούσαν να οδη ήσουν σε πρώιμη αποδέσμευση της μνήμης ενός αντικειμένου. Η εξασφά ιση της ατομικότητας μόνο της ειτουρ ίας ενημέρ σης του μετρητή αναφοράς δεν επαρκεί. Κάποιες ι ιο ήκες έξυπν ν δεικτών απαιτούν ιδιαίτερα προσεκτική μετα είριση προκειμένου να αποφευ ούν οι καταστάσεις συνα νισμού. Για παράδει μα, η ι ιο ήκη έξυπν ν δεικτών Boost ια τη ώσσα C++, η οποία παρέ ει και ειτουρ ίες καταμέτρησης αναφορών, νήματα που εκτε-

74 74 Κεφάλαιο 5. Συλλογή απορριμμάτων με καταμέτρηση αναφορών ούνται ταυτό ρονα μπορεί είτε να δια άζουν τον ίδιο μοιραζόμενο δείκτη ταυτό ρονα είτε να μετα ά ουν διαφορετικά στι μιότυπα αυτού. Η ι ιο ήκη εξασφα ίζει όμ ς την ατομικότητα μόνο τ ν ειτουρ ιών αύξησης/μεί σης του μετρητή αναφορών. Ο συνδυασμός ανά ν σης/ε ραφής ενός δείκτη με την ενημέρ ση ενός μετρητή αναφοράς δεν αποτε εί μία μοναδική ατομική πράξη. Τρίτον, η απ οϊκή μέτρηση αναφορών μετατρέπει ειτουρ ίες ανά ν σης-μόνο σε ειτουρ ίες που απαιτούν ε ραφή στη μνήμη (ώστε να ενημερ ούν οι μετρητές αναφορών). Όμοια, απαιτείται η ανά ν ση και ε ραφή του πα αιού αντικειμένου αναφοράς ενός δείκτη πριν αυτός α άξει τιμή. Αυτές οι ε ραφές μο ύνουν την κρυφή μνήμη και επιφέρουν επιπ έον κίνηση μεταξύ μνήμης και επεξερ αστή. Τέταρτον, η συ ο ή με καταμέτρηση αναφορών αδυνατεί να συ έξει κυκ ικές δομές δεδομέν ν (δομές δεδομέν ν που περι αμ άνουν αναφορές στον εαυτό τους). Ακόμη και αν μία τέτοια δομή είναι απομον μένη στο ράφο τ ν αντικειμέν ν (δεν υπάρ ει δη αδή μονοπάτι προς αυτή από τις ρίζες), οι μετρητές αναφορών τ ν συνιστ σών της δε α μηδενισ ούν ποτέ. Οι Bacon και Rajan [11] διαπιστώνουν πώς αυτοαναφορικές δομές (διπ ά συνδεδεμένες ίστες, κυκ ικές ουρές, δένδρα με δείκτες προς τη ρίζα κ.ά.) απαντώνται συ νά στις εφαρμο ές, παρότι η συ νότητά τους μπορεί να ποικί ει σημαντικά από εφαρμο ή σε εφαρμο ή. Πέμπτον, στη ειρότερη περίπτ ση, ο αρι μός τ ν αναφορών σε ένα αντικείμενο μπορεί να ισούται με το π ή ος τ ν αντικειμέν ν του σ ρού. Αυτό συνεπά εται πώς ο μετρητής αναφορών α κατα αμ άνει μια ο όκ ηρη έξη μνήμης. Λαμ άνοντας υπόψη την διαπίστ ση τ ν Dieckmann και Hölzle [43] και Blackburn κ.ά. [19] π ς το μέσο μέ ε ος αντικειμέν ν στις αντικειμενοστραφείς ώσσες είναι μικρό (στη Java bytes) κα ώς το ε ονός πώς τα κε ιά cons στη Lisp ρειάζονται συνή ς 2-3 έξεις, η επι άρυνση σε ώρο μπορεί να είναι σημαντική. Τέ ος, η συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών μπορεί επίσης να προκα έσει παύσεις. Τη στι μή που δια ράφεται ο δείκτης στην κεφα ή μιας με ά ης δομής δεδομέν ν, η διαδικασία R α πρέπει να ε ευ ερώσει αναδρομικά τη μνήμη ό ν τ ν αντικειμέν ν-απο όν ν της ρίζας. Ο Boehm [26] μά ιστα ισ υρίζεται πώς οι παύσεις αυτές μπορεί ακόμα και να ξεπεράσουν τις αντίστοι ες παύσεις από συ έκτες εξι νίασης. Στη συνέ εια εξετάζουμε προη μένους α ορί μους συ ο ής απορριμμάτ ν με καταμέτρηση αναφορών. 5.2 Καταμέτρηση αναφορών με ανα ο ή Τα περισσότερα συστήματα υψη ών επιδόσε ν με καταμέτρηση αναφορών, όπ ς ια παράδει μα τ ν Blackburn και McKinley [17] ρησιμοποιούν την τε νική της καταμέτρησης αναφορών με ανα ο ή. Η συντριπτική π ειοψηφία τ ν φορτώσε ν δεικτών αφορά τοπικές και προσ ρινές μετα ητές, δη αδή τους κατα ρητές και τη στοί α. Οι Deutsch και Bobrow [42] έδειξαν πώς μπορούν να αποφευ ούν οι ενέρ ειες καταμέτρησης αναφορών που αφορούν αυτές τις ειτουρ ίες, ενημερώνοντας το μετρητή αναφορών ενός αντικειμένου μόνο όταν ο δείκτης προς αυτό απο ηκεύεται στο πεδίο κάποιου αντικειμένου του σ ρού. Οι ειτουρ ίες καταμέτρησης αναφορών που αφορούν τους κατα ρητές και τη στοί α ανα- ά ονται. Με την τε νική αυτή, οι μετρητές αναφορών τ ν τοπικών μετα ητών παύουν να είναι αξιόπιστοι: δεν είναι π έον ασφα ής η αποδέσμευση ενός αντικειμένου αν ο μετρητής αναφορών του είναι μηδενικός. Η ανακύκ ση τ ν αντικειμέν ν απορριμμάτ ν απαιτεί την

75 5.3 Καταμέτρηση αναφορών με συγκέντρωση 75 περιοδική διόρ ση τ ν μετρητών κατά τη διάρκεια παύσε ν του κόσμου. Ο Ungar [114] δεί νει π ς οι παύσεις αυτές είναι σημαντικά μικρότερες σε σ έση με τις αντίστοι ες ενός συ έκτη σήμανσης και εκκα άρισης. Ο α όρι μος 5.2 φορτώνει τις αναφορές σε αντικείμενα ρησιμοποιώντας, την απ ή, ρίς φρά μα υ οποίηση R που ορίστηκε στο κεφά αιο 1. Παρόμοια, οι ρίζες ενημερώνονται με αναφορές ρησιμοποιώντας μία μη φρα μένη εντο ή. Αντί ετα, οι ε ραφές σε αντικείμενα του σ ρού πρέπει να είναι φρα μένες. Στην περίπτ ση αυτή, η αύξηση ενός μετρητή αναφοράς ίνεται κανονικά ς συνή ς. Ωστόσο, αν η μεί ση του μετρητή αναφορών του αντικειμένου στο οποίο έδει νε ένας δείκτης έ ει ς αποτέ εσμα το μηδενισμό του μετρητή, το φρά μα ε ραφής W προσ έτει το αντικείμενο (μια αναφορά σε αυτό) σε ένα πίνακα μηδενικών μετρητών (μετα ητή zct) αντί να το απε ευ ερώσει αμέσ ς. Ο πίνακας αυτός μπορεί να υ οποιη εί με διαφόρους τρόπους, ρησιμοποιώντας ένα bitmap όπ ς ο Baden [12] ή ένα hashtable όπ ς οι Deutsch και Bobrow [42]. H ανακύκ ση ενός αντικειμένου με μηδενικό μετρητή αναφορών σε αυτό το σημείο δεν είναι ασφα ής, κα ώς ενδέ εται να υπάρ ει μια αναφορά σε αυτό από τη στοί α του προ ράμματος. Διαισ ητικά, ο πίνακας μηδενικών μετρητών περι αμ άνει αναφορές σε αντικείμενα με μηδενικό μετρητή αναφορών τα οποία μπορεί όμ ς και να είναι ζ ντανά. Ωστόσο, τα αντικείμενα απορρίμματα πρέπει κάποια στι μή να συ ε ούν αν δε έ ουμε το πρό ραμμα να ξεμείνει από μνήμη. Περιοδικά, ια παράδει μα όταν ο εκ ρητής αποτύ ει να επιστρέψει μνήμη στη συνάρτηση N, διακόπτεται η ειτουρ ία τ ν νημάτ ν-τροποποιητών και τα αντικείμενα του πίνακα μηδενικών μετρητών εξετάζονται ώστε να ε ε εί εάν ο πρα ματικός μετρητής αναφορών τους είναι μηδενικός. Ένα τέτοιο αντικείμενο μπορεί να είναι ζ ντανό μόνο αν αναφέρεται σε αυτό κάποια ρίζα του τροποποιητή. Ο απ ούστερος τρόπος ανακά υψης τέτοι ν αντικειμέν ν είναι η σάρ ση τ ν ριζών και η σήμανση τ ν αντικειμέν ν αυτών δια μέσου της αύξησης τ ν μετρητών αναφορών τους. Σε αυτό το σημείο ο συ έκτης είναι σί ουρος π ς ένα αντικείμενο με μηδενικό μετρητή αναφορών δεν είναι προσ άσιμο και άρα είναι απόρριμμα. Μπορούμε π έον να διατρέξουμε ξανά τον πίνακα μηδενικών μετρητών, αποδεσμεύοντας τα αντικείμενα με μηδενικό μετρητή αναφορών ς συνή ς. Τέ ος, οι ειτουρ ίες σήμανσης αντιστρέφονται: διατρέ ονται οι ρίζες του τροποποιητή και μειώνονται κατά 1 οι μετρητές αναφορών τ ν αντικειμέν ν στα οποία πι ανώς δεί νουν. Αν ο μετρητής αναφορών ενός αντικειμένου μηδενισ εί, αυτό κατα ρείται εκ νέου στον πίνακα μηδενικών μετρητών. Η καταμέτρηση αναφορών με ανα ο ή αφαιρεί το κόστος της μετα είρισης μετρητών αναφορών τ ν τοπικών μετα ητών από τον τροποποιητή. Ο Ungar [114] και ο Baden [12] έ ουν ισ υρισ εί π ς μπορεί να μειώσει το κόστος τ ν τροποποιήσε ν δεικτών έ ς και 80%. Δεδομένης της σημασίας της τοπικότητας, μπορούμε να υπο έσουμε π ς το π εονέκτημα της καταμέτρησης αναφορών με ανα ο ή έναντι της απ οϊκής καταμέτρησης αναφορών όσον αφορά την επίδοση α είναι ακόμη με α ύτερο στο σύ ρονο υ ικό. Ωστόσο, οι επιδιορ- ώσεις τ ν μετρητών αναφορών ό ενημερώσε ν πεδί ν- δεικτών αντικειμέν ν πρέπει να πρα ματοποιούνται πρό υμα και ατομικά. 5.3 Καταμέτρηση αναφορών με συ κέντρ ση Η καταμέτρηση αναφορών με ανα ο ή αφορά το κόστος της εφαρμο ής ειτουρ ιών καταμέτρησης αναφορών σε τοπικές μετα ητές. Το πρό ημα του πώς να μει εί το κόστος από την καταμέτρηση αναφορών προκύπτει από την ενημέρ ση δεικτών που απο ηκεύονται σε

76 76 Κεφάλαιο 5. Συλλογή απορριμμάτων με καταμέτρηση αναφορών Α όρι μος 5.2 Συ ο ή με καταμέτρηση αναφορών: καταμέτρηση αναφορών με ανα ο ή 1: function N () 2: ref () 3: if ref = null then 4: () 5: ref () 6: if ref = null then 7: error Out of memory! 8: rc(ref) 0 9: (zct, ref) 10: return ref 11: procedure (src, i, ref) 12: if src = Roots then 13: src[i] ref 14: else 15: atomic 16: R (ref) 17: (zct, ref) 18: R T ZCT(src[i]) 19: src[i] ref 20: procedure R T ZCT(ref) 21: if ref null then 22: (ref) (ref) 1 23: if rc(ref) = 0 then 24: (zct, ref) defer freeing 25: procedure () 26: atomic 27: for all fld in Roots do mark the stacks 28: R ( fld) 29: ZCT() 30: for all fld in Roots do unmark the stacks 31: R T ZCT( fld) 32: procedure ZCT() 33: while not E (zct) do 34: ref (zct) 35: if rc(ref) = 0 then now reclaim garbage 36: for all fld in P ointers(ref) do 37: R ( fld) 38: (ref)

77 5.3 Καταμέτρηση αναφορών με συγκέντρωση 77 πεδία αντικειμέν ν. Οι Levanoni και Petrank [76] παρατηρούν π ς, ια κά ε ρονική περίοδο και κά ε αντικείμενο, μόνο οι τιμές στην αρ ή και το τέ ος της περιόδου έ ουν σημασία και οι ενδιάμεσες τιμές μπορούν να α νοη ούν. Επομέν ς αρκετές καταστάσεις ενός αντικειμένου μπορούν να συ κεντρ ούν σε αυτές τις δύο. Για παράδει μα, έστ ένα αντικείμενο X, οποίο περι αμ άνει ένα δείκτη f, ο οποίος αρ ικά αναφέρεται στο αντικείμενο O 0 και ενημερώνεται συνέ εια ώστε να δεί νει στα αντικείμενα O 1, O 2,... O 3. Αυτό α εί ε ς αποτέ εσμα την ακό ου η α η ου ία ενερ ειών καταμέτρησης αναφορών: rc(o 0 ), rc(o 1 )++, rc(o 1 ), rc(o 2 )++,..., rc(o n )++. Οι ενδιάμεσες ειτουρ ίες α η οαναιρούνται και μπορούν να παρα ειφ ούν. Οι Levanoni και Petrank [76] τις α νοούν αντι ράφοντας αντικείμενα σε έναν τοπικό ώρο κατα ραφής πριν την πρώτη τροποποίηση του στη διάρκεια μιας επο ής. Τη στι μή που ενημερώνεται ο δείκτης ενός αντικειμένου, αυτό κατα ράφεται, δη αδή η διεύ υνσή του και οι τρέ ουσες τιμές τ ν δεικτών που περιέ ει απο ηκεύονται σε έναν τοπικό απομον τή ενημερώσε ν (α όρι μος 5.3). Το τροποποιημένο αντικείμενο σημειώνεται ς ρώμικο. Η διαδικασία επι ειρεί να αποφύ ει την παρουσία διπ ών ε ραφών στον τοπικό ώρο κατα ραφής ενός νήματος-τροποποιητή προσαρτώντας αρ ικά τις τιμές τ ν πεδί ν δεικτών του αντικειμένου στο ώρο κατα ραφής. Στη συνέ εια αφού ε έ ξει πώς το αντικείμενο ακόμη δεν είναι ρώμικο, οριστικοποιεί την κατα ραφή ράφοντας το αντικείμενο στο ώρο κατα ραφής, σημει μένο κατά η α ώστε να μπορεί να ανα ν ρισ εί ς κατα ραφή αντικειμένου και ό ι ς κατα ραφή πεδίου αντικειμένου. Τέ ος, ενημερώνεται ο εσ τερικός δρομέας του ώρου κατα ραφής. Το αντικείμενο σημειώνεται ς ρώμικο με την ε ραφή ενός δείκτη στην κατα ραφή του στην επικεφα ίδα του. Παρότι μια κατάσταση συνα νισμού μπορεί να οδη ήσει στην κατα ραφή του στι μιοτύπου ενός αντικειμένου σε περισσότερους του ενός τοπικούς απομον τές, ο α όρι μος ε υάται πώς οι κατα ραφές α είναι πανομοιότυπες μεταξύ τους και επομέν ς δεν έ ει σημασία σε ποια από ό ες δεί νει η επικεφα ίδα του αντικειμένου. Ανά ο α έ αια με το μοντέ ο συνέπειας μνήμης του επεξερ αστή, αυτό το φρά μα ε ραφής μπορεί να μην απαιτεί ειτουρ ίες συ ρονισμού. Στην αρ ή κά ε κύκ ου συ ο ής, ο α όρι μος 5.4 διακόπτει κά ε νήμα-τροποποιητή, μεταφέρει τον απομον τή ενημερώσε ν αυτού στο ώρο κατα ραφής του συ έκτη και δεσμεύει ένα νέο απομον τή ενημερώσε ν. Η διαδικασία R C ε έ ει αν ένα αντικείμενο είναι ακόμη ρώμικο πριν ενημερώσει τους μετρητές αναφορών. Οι μετρητές αναφορών τ ν παιδιών ενός αντικειμένου πριν την πρώτη του τροποποίηση στην τρέ ουσα επο ή μειώνονται, ενώ αντίστοι α οι μετρητές αναφορών τ ν τρε όντ ν παιδιών του αυξάνονται. Σε ένα απ ό σύστημα, κά ε αντικείμενο με μηδενικό μετρητή αναφορών α μπορούσε να αποδεσμευ εί αναδρομικά. Ωστόσο, αν η καταμέτρηση αναφορών σε τοπικές μετα ητές ανα ά εται, ή αν ια ό ους επίδοσης ο α όρι μος δεν ε υάται πώς α δια ειριστεί ό ες τις αυξήσεις πριν τις μειώσεις, μπορούμε απ ά να υμη ούμε ένα αντικείμενο με μηδενικό μετρητή αναφορών. Ο α όρι μος επίσης κα αρίζει το αντικείμενο (αφαιρεί τη σήμανση dirty) ούτ ς ώστε αυτό να μην επανεξετασ εί στη διάρκεια του τρέ οντος κύκ ου συ ο ής. Οι δείκτες στα πα αιά παιδιά ενός αντικειμένου μπορούν να ρε ούν από το στι μιότυπο αυτού στο ώρο κατα ραφής, ενώ οι δείκτες στα τρέ οντα παιδιά του από το αντικείμενο κα εαυτό. Οι Paz και Petrank σημειώνουν [88] π ς υπάρ ει η δυνατότητα ια προφόρτ ση αντικειμέν ν ή μετρητών αναφορών κατά την εκτέ εση τ ν ρό ν τ ν διαδικασιών O και N.

78 78 Κεφάλαιο 5. Συλλογή απορριμμάτων με καταμέτρηση αναφορών Α όρι μος 5.3 Συ ο ή με καταμέτρηση αναφορών: φρά μα ε ραφής ια καταμέτρηση αναφορών με ανα ο ή 1: me myt hreadid 2: procedure W (src, i, ref) 3: ref () 4: if not (src) then 5: (src) 6: src[i] ref 7: procedure (obj) 8: for all fld in P ointers(obj) do 9: if fld null then 10: (updates[me], fld) 11: if not (obj) then 12: slot A C (updates[me], obj) 13: D (obj, slot) 14: function (obj) 15: return P (obj) CLEAN 16: procedure D (obj, slot) 17: P (obj) slot address of entry for obj in updates[me]

79 5.3 Καταμέτρηση αναφορών με συγκέντρωση 79 Α όρι μος 5.4 Συ ο ή με καταμέτρηση αναφορών: ενημέρ ση μετρητών αναφορών ια καταμέτρηση αναφορών με συ κέντρ ση 1: procedure () 2: B () 3: R C () 4: ZCT() 5: procedure B () 6: collectorlog [] 7: for all t in T hreads do 8: collectorlog collectorlog + updates[t] 9: procedure R C () 10: for all entry in collectorlog do 11: obj F L (entry) 12: if (obj) then do not process duplicates 13: P (obj) CLEAN 14: N (obj) 15: O (entry) 16: procedure O (entry) 17: for all fld in P ointers(entry) do use the values in the collector s log 18: child fld 19: if child null then 20: rc(child rc(child) 1 21: if rc(child) = 0 then 22: (zct, child) 23: procedure N (obj) 24: for all fld in P ointers(obj) do use the values in the object 25: child fld 26: if child null then 27: rc(child) rc(child) + 1

80 80 Κεφάλαιο 5. Συλλογή απορριμμάτων με καταμέτρηση αναφορών Σ ήμα 5.1: Καταμέτρηση αναφορών με συ κέντρ ση. Αν το αντικείμενο A τροποποιή ηκε στην προη ούμενη επο ή, ια παράδει μα μέσ της ενημέρ σης του δείκτη προς το αντικείμενο C με ένα δείκτη προς το αντικείμενο D, τα πεδία δεικτών του αντικειμένου A έ ουν αντι ραφεί στο ώρο κατα ραφής. Το πα αιό αντικείμενο αναφοράς C μπορεί να ρε εί από το ώρο κατα ραφής του συ έκτη, ενώ το νέο αντικείμενο αναφοράς D κατευ είαν από το αντικείμενο A. Ο συνδυασμός της καταμέτρησης αναφορών με ανα ο ή και συ κέντρ ση αφαιρεί το κόστος της καταμέτρησης αναφορών από τον τροποποιητή. Το π εονέκτημα αυτό στόσο δεν έρ εται ρίς κόστος. Έ ουμε επανεισά ει παύσεις στη ειτουρ ία του τροποποιητή (παρότι αυτές αναμένεται να είναι συντομότερες από τις αντίστοι ες ενός συ έκτη εξι νίασης) και επίσης αυξήσει τις απαιτήσεις σε μνήμη ια τη διατήρηση τ ν απομον τών και του πίνακα μηδενικών μετρητών. 5.4 Κυκ ική Καταμέτρηση Αναφορών Κα ώς οι μετρητές αναφορών τ ν αντικειμέν ν μιας κυκ ικής δομής δεδομέν ν έ ουν τιμή του ά ιστον 1, η απ ή καταμέτρηση αναφορών δεν μπορεί από μόνη της να συ έξει τέτοιες δομές. Οι κύκ οι στόσο εμφανίζονται συ νά και δημιουρ ούνται τόσο από τους προ ραμματιστές εφαρμο ών όσο και το σύστημα εκτέ εσης. Η απ ούστερη προσέ ιση στο πρό ημα είναι ο συνδυασμός της καταμέτρησης αναφορών με συνή η, εφεδρική συ ο ή εξι νίασης. Η ε πίδα είναι πώς τα περισσότερα αντικείμενα δε α είναι προσ άσιμα από κύκ ους και επομέν ς α απε ευ ερώνονται αμέσ ς από την καταμέτρηση αναφορών. Οι εναπομένουσες κυκ ικές δομές συ έ ονται από το συ έκτη εξι νίασης. Η ιδέα αυτή απ ά μειώνει τη συ νότητα εκτέ εσης της συ ο ής εξι νίασης. Σε επίπεδο ώσσας, οι Friedman και Wise [55] παρατήρησαν πώς κύκ οι μπορούν να δημιουρ- η ούν μόνο σε α νές συναρτησιακές ώσσες από αναδρομικούς ορισμούς και επομέν ς μπορούν να αντιμετ πιστούν ειδικά δεδομένης της παρατήρησης ορισμέν ν περιορισμών. Πο οί ερευνητές έ ουν προτείνει την ειδική αντιμετώπιση τ ν ειτουρ ιών ε ραφής δεικτών που κ είνουν κύκ ους. Μεταξύ αυτών είναι οι Friedman και Wise, [55], ο BrownBridge [30], ο Salkild [102]; oι Pepels κ.ά. [90] κα ώς και ο Axford [6]. Οι πιο ευρέ ς υιο ετημένοι μη ανισμοί ια το ειρισμό κυκ ικών δομών με καταμέτρηση αναφορών στόσο ρησιμοποιούν μία τε νική ν στή και ς δοκιμαστική δια ραφή. Η ασική ιδέα αφορά στο ότι δεν είναι απαραίτητο ο εφεδρικός συ έκτης εξι νίασης να επισκεφ εί ο όκ ηρο τον ράφο τ ν ζ ντανών αντικειμέν ν. Αντί ετα, αυτός μπορεί να εστιάσει την προσο ή του σε εκείνα τα τμήματα του ράφου στα οποία η δια ραφή ενός δείκτη μπορεί να έ ει δημιουρ ήσει έναν κύκ ο απορριμμάτ ν. Ας παρατηρήσουμε π ς:

81 5.4 Κυκλική Καταμέτρηση Αναφορών 81 Σε κά ε κύκ ο απορριμμάτ ν, οι μη μηδενικοί μετρητές αναφορών οφεί ονται σε εσ τερικούς δείκτες. Οι κύκ οι απορριμμάτ ν μπορεί να προκύψουν μόνο από τη δια ραφή κάποιου δείκτη που αφήνει το μετρητή αναφορών κάποιου αντικειμένου ετικό. Οι α όρι μοι μερικής εξι νίασης εκμετα εύονται τις παραπάν παρατηρήσεις επισκεπτόμενοι μόνο το υπο ράφημα αντικειμέν ν που έ ει ς ρίζα κάποιο αντικείμενο το οποίο υποπτεύονται π ς είναι απόρριμμα. Οι α όρι μοι αυτοί δια ράφουν δοκιμαστικά κά ε δείκτη που συναντούν μέσ της μεί σης προσ ρινά του μετρητή αναφορών του αντικειμένου στο οποίο αυτός αναφέρεται. Με τον τρόπο αυτό, πρακτικά αφαιρούν τη συμ ο ή τ ν εσ τερικών δεικτών στην κυκ ικότητα της δομής. Αν ο μετρητής αναφορών ενός αντικειμένου εξακο ου εί να είναι μη μηδενικός μετά από τη διαδικασία αυτή, τότε αυτό α πρέπει να είναι προσ άσιμο από κάποιο αντικείμενο εκτός του υπο ράφου και συνεπώς το αντικείμενο δεν είναι απόρριμμα. Επιπ έον ούτε το μετα ατικό κ είσιμο του αντικειμένου ς προς την προσ ασιμότητα μέσ δεικτών περιέ ει απορρίμματα. Οι Bacon κ.ά. [8], οι Bacon και Rajan [11] και οι Paz κ.ά. [87] επινόησαν τον α όρι μο Recycler που υποστηρίζει ταυτό ρονη κυκ ική καταμέτρηση αναφορών. Στην παρούσα φάση παρουσιάζουμε τη σύ ρονη εκδο ή του α ορί μου, ανα ά οντας την παρουσίαση της ασύ ρονης ια το κεφά αιο 9. Ο α όρι μος 5.5 δρα σε 3 περάσματα: 1. Αρ ικά, εξι νιάζει υπο ράφους ξεκινώντας από αντικείμενα που ανα ν ρίζονται ς πι ανά μέ η κύκ ν απορριμμάτ ν, μειώνοντας τους μετρητές αναφορών που οφεί ονται σε εσ τερικούς δείκτες (διαδικασία C ). Τα επισκεπτόμενα αντικείμενα ρ ματίζονται κρι. 2. Στη συνέ εια ε έ ει το μετρητή αναφορών κά ε τέτοιου αντικειμένου: αν αυτός είναι ετικός, το αντικείμενο είναι προσ άσιμο από κάποιο αντικείμενο που δεν ανήκει στον υπό εξι νίαση υπο ράφο και επομέν ς η δράση του πρώτου περάσματος αναιρείται (διαδικασία ) ρ ματίζοντας τα ζ ντανά κρι αντικείμενα μαύρα. Τα μη ζ ντανά κρι αντικείμενα ρ ματίζονται ευκά. 3. Τε ικώς, ό α τα αντικείμενα ενός υπο ράφου που είναι ακόμη ευκά είναι απορρίμματα και ε ευ ερώνονται. Με μαύρο ρώμα σημειώνονται τα ενερ ά αντικείμενα ενώ με ευκό τα απορρίμματα. Με κρι ρώμα σημειώνονται τα αντικείμενα που είναι πι ανά μέ η ενός κύκ ου απορριμμάτ ν, ενώ με μ τα αντικείμενα που είναι πι ανώς ρίζες ενός κύκ ου απορριμμάτ ν. Η δια ραφή μιας οποιασδήποτε π ην της τε ευταίας αναφοράς σε ένα αντικείμενο ενδέ εται να απομονώσει έναν κύκ ο απορριμμάτ ν. Σε αυτήν την περίπτ ση, ο α όρι μος 5.5 ρ ματίζει μ το αντικείμενο και το προσ έτει στη ίστα τ ν υποψήφι ν με ών κύκ ν απορριμμάτ ν. Διαφορετικά το αντικείμενο είναι απόρριμμα και ο μετρητής αναφορών του οφεί ει να είναι μηδενικός. Η διαδικασία επαναφέρει το ρώμα του σε μαύρο, επεξερ άζεται αναδρομικά τα παιδιά του και αν δεν είναι υποψήφια ρίζα κάποιου κύκ ου απορριμμάτ ν, το ε ευ ερώνει. Η ανάκτηση αντικειμέν ν από το σύνο ο υποψηφί ν ριζών κύκ ν απορριμμάτ ν ανα ά εται μέ ρις ότου εκτε εσ εί η διαδικασία C. Η διαδικασία C εξετάζει κά ε αντικείμενο στο σύνο ο υποψηφί ν ριζών κύκ ν απορριμμάτ ν. Αν ένα αντικείμενο είναι ακόμη μ (δη αδή δεν έ ει προστε εί κάποια

82 82 Κεφάλαιο 5. Συλλογή απορριμμάτων με καταμέτρηση αναφορών Α όρι μος 5.5 Συ ο ή με καταμέτρηση αναφορών: ο α όρι μος Recycler 1: function N () 2: ref () 3: if ref = null then 4: () the cycle collector 5: ref () 6: if ref = null then 7: error Out of memory! 8: rc(ref) 0 9: return ref 10: procedure R (ref) 11: if ref null then 12: rc(ref) rc(ref) : colour(ref) black cannot be in a garbage cycle 14: procedure R (ref) 15: if ref null then 16: rc(ref) rc(ref) 1 17: if rc(ref) = 0 then 18: (ref) 19: else 20: (ref) might isolate a garbage cycle 21: procedure (ref) 22: for all fld in P ointers(ref) do 23: R (fld) 24: colour(ref) black objects on the free-list are black 25: if not ref in candidates then deal with candidates later 26: (ref) 27: procedure (ref) colour as a candidate and add to the set 28: if colour(ref) purple then 29: colour(ref) purple 30: candidates candidates ref 31: procedure () 32: atomic 33: for all ref in candidates do 34: (ref) 35: C ()

83 5.4 Κυκλική Καταμέτρηση Αναφορών 83 Α όρι μος 5.5 Συ ο ή με καταμέτρηση αναφορών: ο α όρι μος Recycler (συνέ εια) 36: procedure C () 37: for all ref in candidates do 38: if colour(ref) = purple then 39: G (ref) 40: else 41: (candidates, ref) 42: if colour(ref) = purple and rc(ref) = 0 then 43: (ref) 44: procedure G (ref) 45: if colour(ref) grey then 46: colour(ref) grey 47: for all fld in P ointers(ref) do 48: child fld 49: if child null then 50: rc(ref) rc(ref) 1 trial deletion 51: G (child) 52: procedure (ref) 53: if colour(ref) = grey then 54: if (ref) > 0 then 55: B (ref) there must be an external reference 56: else 57: colour(ref) white looks like garbage... 58: for all fld in P ointers(ref) do...so continue 59: child fld 60: if child null then 61: (child) 62: procedure B (ref) repair the reference counts of live data 63: colour(ref) white 64: for all fld in P ointers(ref) do 65: child fld 66: if child null then 67: rc(ref) rc(ref) + 1 undo the trial deletion 68: if colour(child) black then 69: B (child)

84 84 Κεφάλαιο 5. Συλλογή απορριμμάτων με καταμέτρηση αναφορών Α όρι μος 5.5 Συ ο ή με καταμέτρηση αναφορών: ο α όρι μος Recycler (συνέ εια) 70: procedure C () 71: while not E (candidates) do 72: ref (candidates) 73: W (ref) 74: procedure W (ref) 75: if colour(ref) = white and not ref in candidates then 76: colour(ref) black free-list objects are black 77: for all fld in P ointers(ref) do 78: child fld 79: if child null then 80: W (child) 81: (ref) αναφορά σε αυτό από τη στι μή που εισή η στο σύνο ο), το μετα ατικό κ είσιμο αυτού ς προς την προσ ασιμότητα μέσ δεικτών ρ ματίζεται κρι. Διαφορετικά αφαιρείται από το σύνο ο και στην περίπτ ση που είναι μαύρο και ο μετρητής αναφορών του μηδενικός, ε ευ- ερώνεται. Η διαδικασία G ρ ματίζει κρι τον υπο ράφο που έ ει ς ρίζα το εν ό αντικείμενο και αφαιρεί από τους μετρητές αναφορών τ ν αντικειμέν ν του υπο ράφου τη συμ ο ή τ ν εσ τερικών δεικτών. Στη δεύτερη φάση της συ ο ής, εξετάζονται οι μετρητές αναφορών κά ε αντικειμένου που είναι υποψήφια ρίζα ενός κύκ ου απορριμμάτ ν κα ώς και τ ν αντικειμέν ν που ανήκουν στο μετα ατικό κ είσιμο αυτού ς προς την προσ ασιμότητα μέσ δεικτών. Αν ο μετρητής αναφορών ενός αντικειμένου ρε εί ετικός, τότε σί ουρα υπάρ ει εξ τερική αναφορά προς αυτό. Στην περίπτ ση αυτή, η διαδικασία B αναιρεί την επίδραση της διαδικασίας G αυξάνοντας το μετρητή αναφορών και ρ ματίζοντας το αντικείμενο μαύρο. Αντί ετα, αν ο μετρητής αναφορών είναι μηδενικός, η διαδικασία ρ ματίζει το αντικείμενο ευκό και εξετάζει αναδρομικά τα παιδιά του. Στο σημείο αυτό δε μπορούμε με ε αιότητα να υπο έσουμε π ς ένα ευκό αντικείμενο είναι απόρριμμα, κα ώς αυτό μπορεί να επανεξετασ εί αρ ότερα από κ ήση της διαδικασίας B με όρισμα κάποιο ά ο αντικείμενο του υπο ράφου. Τέ ος, η τρίτη φάση, η οποία υ οποιείται από τη διαδικασία W αποδεσμεύει τα ευκά αντικείμενα. Επανα ηπτικά, μέ ρις ότου αδειάσει το σύνο ο υποψηφί ν ριζών κύκ ν απορριμμάτ ν αφαιρείται από αυτό ένα αντικείμενο και εξετάζεται το ρώμα του. Αν είναι ευκό, το αντικείμενο ε ευ ερώνεται ( ρ ματίζεται μαύρο) και στη συνέ εια εξετάζονται αναδρομικά τα παιδιά του. Η διαδικασία W δεν επεξερ άζεται αντικείμεναπαιδιά που τυ αίνει να ρίσκονται στο σύνο ο τ ν υποψηφί ν ριζών κύκ ν απορριμμάτ ν: η ε ευ έρ σή τους πρα ματοποιείται σε επόμενη επανά ηψη του ρό ου της διαδικασίας C. Ο α όρι μος Recycler μπορεί να ε τιστοποιη εί περαιτέρ με την στατική ανα νώριση π ς αντικείμενα συ κεκριμέν ν κ άσε ν δε μπορούν να είναι μέ η κύκ ν απορριμμάτ ν (όπ ς ια παράδει μα αντικείμενα που δεν περιέ ουν δείκτες, α ά ό ι μόνο) και ς εκ τούτου δε ρειάζεται να μπουν στο σύνο ο τ ν υποψήφι ν ριζών κύκ ν απορριμμάτ ν. Τα αντικείμενα αυτά ρ ματίζονται πράσινα και ό ι μαύρα. Οι Bacon και Rajan [11] διαπιστώνουν πώς αυτή η ε τιστοποίηση μειώνει κατά μία τάξη με έ ους το μέ ε ος του συνό ου υποψηφί ν ριζών

85 5.4 Κυκλική Καταμέτρηση Αναφορών 85 (αʹ) Πριν τη διαδικασία G. ( ʹ) Μετά τη G, ό α τα αντικείμενα που είναι προσ άσιμα από ένα αντικείμενο υποψήφιο μέ ος κύκ ου απορριμμάτ ν έ ουν σημαν εί κρι και η επίδραση τ ν εσ τερικών δεικτών αυτού του κρι υπο ράφου έ ει αφαιρε εί. Ο μετρητής αναφορών του αντικειμένου X, το οποίο είναι ακόμη προσ άσιμο, έ ει μη μηδενική τιμή. ( ʹ) Μετά τη, ό α τα προσ άσιμα αντικείμενα είναι μαύρα και οι μετρητές αναφορών αυτών έ ουν επιδιορ εί και αντικατοπτρίζουν ζ ντανές αναφορές. Σ ήμα 5.2: Κυκ ική καταμέτρηση αναφορών. Το πρώτο πεδίο κά ε αντικειμένου απο ηκεύει το μετρητή αναφορών του.

86 86 Κεφάλαιο 5. Συλλογή απορριμμάτων με καταμέτρηση αναφορών κύκ ν απορριμμάτ ν. 5.5 Θέματα προς εξέταση Η καταμέτρηση αναφορών είναι ε κυστική ια την προ υμία συ ο ής αντικειμέν ν απορριμμάτ ν α ά και τις ιδιότητες τοπικότητας αυτής. Η απ οϊκή καταμέτρηση αναφορών μπορεί να ανακτήσει τη μνήμη από ένα αντικείμενο αμέσ ς μό ις αφαιρείται ο τε ευταίος δείκτης που αναφέρεται σε αυτό. Η ειτουρ ία της εμπ έκει μόνο τους πα αιούς και νέους στό ους τ ν δεικτών που ε ράφονται ή δια άζονται, σε αντί εση με τη συ ο ή εξι νίασης που επισκέπτεται κά ε ζ ντανό αντικείμενο στο σ ρό. Ωστόσο, τα π εονεκτήματα της με όδου είναι ταυτό ρονα και τα μειονεκτήματά της. Κα ώς δεν μπορεί να ε ευ ερώσει ένα αντικείμενο μέ ρις ότου κανένας δείκτης να μην αναφέρεται σε αυτό, δεν μπορεί να συ έξει κύκ ους απορριμμάτ ν. Επιπ έον, προσ έτει ένα μικρό κόστος σε κά ε ειτουρ ία R και W του τροποποιητή, επι αρύνοντας με τον τρόπο αυτό τη ρυ μαπόδοση του τε ευταίου περισσότερο σε σ έση με τη συ ο ή εξι νίασης. Επιπ έον, οι πο υνηματικές εφαρμο ές απαιτούν τον αυστηρό συ ρονισμό τ ν τροποποιήσε ν τ ν μετρητών αναφορών και τ ν ενημερώσε ν δεικτών. Τέ ος, η συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών αυξάνει το μέ ε ος τ ν αντικειμέν ν Περι ά ον εκτέ εσης Παρά τα παραπάν ζητήματα, ο αποκ εισμός της καταμέτρησης αναφορών ρίς περαιτέρ σκέψη είναι εσφα μένος. Ασφα ώς και δεν είναι κατά η η ς τμήμα του δια ειριστή μνήμης μιας εικονικής μη ανής ενικού σκοπού, ειδικά αν τα εμπ εκόμενα αντικείμενα είναι μικρά, εμφανίζονται συ νά κύκ οι και ο ρυ μός ειτουρ ιών ε ραφής δεικτών από τον τροποποιητή είναι υψη ός. Ωστόσο, υπάρ ουν περι ά οντα στα οποία η ρήση καταμέτρησης αναφορών είναι κατά η η. Η καταμέτρηση αναφορών αποδεικνύεται αποδοτική σε περι ά οντα όπου οι ρόνοι ζ ής τ ν περισσότερ ν αντικειμέν ν είναι αρκετά απ οί ώστε αυτά να δια ειρίζονται ρητώς. Μπορεί επίσης να περιορισ εί στη δια είριση ενός μικρότερου αρι μού πόρ ν με πιο σύν ετες σ έσεις ιδιοκτησίας. Συ νά οι πόροι αυτοί είναι με ά α αντικείμενα με αποτέ εσμα το κόστος της προσ ήκης στην επικεφα ίδα μιας έξης ια την απο ήκευση του μετρητή αναφορών να είναι αμε ητέο. Δεδομένα όπ ς bitmap ψηφιακών εικόν ν δεν περι αμ άνουν δείκτες και συνεπώς είναι αδύνατη η εμφάνιση κύκ ν απορριμμάτ ν. Επιπρόσ ετα, η καταμέτρηση αναφορών μπορεί να υ οποιη εί ς τμήμα μιας ι ιο ήκης και ό ι ς τμήμα του συστήματος εκτέ εσης, δίνοντας με τον τρόπο αυτό π ήρη έ ε ο στον προ ραμματιστή όσον αφορά τη ρήση της. Στην περίπτ ση αυτή έ αια απαιτείται ιδιαίτερη προσο ή από τον προ ραμματιστή, ο οποίος πρέπει να εξασφα ίσει την απουσία καταστάσε ν συνα νισμού μεταξύ ειτουρ ιών ε ραφής δεικτών και ενημερώσε ν μετρητών αναφορών Προη μένες τε νικές Εξεζητημένοι α όρι μοι καταμέτρησης αναφορών προσφέρουν ύσεις ια τα περισσότερα από τα προ ήματα που αντιμετ πίζει η απ οϊκή καταμέτρηση αναφορών, επι ά οντας στόσο παύση του κόσμου, όπ ς συμ αίνει και στη συ ο ή εξι νίασης. Η μνήμη αντικειμέν ν ενός κύκ ου απορριμμάτ ν μπορεί να ανακτη εί από ένα εφεδρικό συ έκτη εξι νίασης, ή ρησιμοποιώντας την τε νική της δοκιμαστικής δια ραφής. Και στις

87 5.5 Θέματα προς εξέταση 87 δύο περιπτώσεις, η εκτέ εση του τροποποιητή αναστέ εται κατά τη διάρκεια συ ο ής τ ν κύκ ν απορριμμάτ ν. Παρότι στη ειρότερη περίπτ ση το πεδίο ενός αντικειμένου όπου απο ηκεύεται ο μετρητής αναφορών πρέπει να είναι τόσο με ά ο ώστε να ράει το μέ ιστο π ή ος δεικτών, οι περισσότερες εφαρμο ές διατηρούν μικρό αρι μό αναφορών προς τα περισσότερα αντικείμενα. Συ- νά, είναι δυνατό να κ απούν μερικά bits από μια έξη της επικεφα ίδας που ρησιμοποιείται ια την απο ήκευση ενός κ ειδώματος ή ενός κ δικού κατακερματισμού. Είναι έ αια επίσης σύνη ες να υπάρ ουν πο ές αναφορές προς μερικά αντικείμενα. Η επι άρυνση στη ρυ μαπόδοση του τροποποιητή μπορεί να μει εί παρα είποντας μερικές τροποποιήσεις δεικτών και μειώνοντας το κόστος ά ν. Η καταμέτρηση αναφορών με ανα- ο ή α νοεί τις ε ραφές από τον τροποποιητή τ ν τοπικών μετα ητών. Αυτό επιτρέπει στους μετρητές αναφορών τ ν αντικειμέν ν που είναι προσ άσιμα από τις ρίζες να έ ουν μικρότερη τιμή από πρα ματική και αποτρέπει την πρό ρη ανάκτηση της μνήμης που αυτά κατα αμ άνουν. Η καταμέτρηση αναφορών με συ κέντρ ση αμ άνει υπόψη την κατάσταση ενός αντικειμένου μόνο στην αρ ή και στο τέ ος μιας επο ής, α νοώντας τις ειτουρ ίες ε - ραφής δεικτών στο ενδιάμεσο ρονικό διάστημα. Κατά κάποιο τρόπο είναι μια αυτόματη ε τιστοποίηση: αφαιρεί τις περιττές ενδιάμεσες επιδιορ ώσεις τ ν μετρητών αναφορών. Ωστόσο και πά ι, τόσο η καταμέτρηση αναφορών με ανα ο ή όσο και η καταμέτρηση αναφορών με συ κέντρ ση επι ά ουν την παύση του κόσμου ια ένα ρονικό διάστημα ώστε να επιδιορ ούν οι μετρητές αναφορών. Επιπ έον, προσ έτουν μία επι άρυνση στις απαιτήσεις σε ώρο της απ οϊκής καταμέτρησης αναφορών ια την απο ήκευση είτε του πίνακα μηδενικών μετρητών αναφορών είτε τ ν απομον τών κατα ραφής ενημερώσε ν. Ένα επιπρόσ ετο π εονέκτημα τ ν προη μέν ν αυτών τε νικών συ ο ής με καταμέτρηση αναφορών είναι πώς κ ιμακώνουν κα ά με με ά ους σ ρούς. Το κόστος τους είναι ανά ο ο μόνο προς τον αρι μό τ ν ε ραφών δεικτών και ό ι του ό κου τ ν δεδομέν ν ζ ντανών αντικειμέν ν.

88

89 Κεφά αιο 6 Σύ κριση α ορί μ ν συ ο ής απορριμμάτ ν Στα προη ούμενα κεφά αια, παρουσιάσαμε ανα υτικά τους 4 εμε ιώδεις α ορί μους συ - ο ής απορριμμάτ ν. Σε αυτό το κεφά αιο τους συ κρίνουμε με περισσότερη επτομέρεια. Τους εξετάζουμε με δύο διαφορετικούς τρόπους. Πρώτον, ανα ύουμε τα κριτήρια με άση τα οποία μπορούμε να αξιο ο ήσουμε τους α ορί μους κα ώς επίσης και τα π εονεκτήματα και μειονεκτήματα που προκύπτουν από τη ρήση διαφορετικών προσε ίσε ν σε διαφορετικές καταστάσεις. Στη συνέ εια παρουσιάζουμε τους αφηρημένους α ορί μους συ ο ής με εξι- νίαση και συ ο ής με καταμέτρηση αναφορών, όπ ς αυτοί εισή ησαν από τους Bacon κ.ά. [10]. Η παρουσίαση τ ν α ορί μ ν σε αυτό το αφηρημένο π αίσιο αποκα ύπτει π ς, παρότι οι α όρι μοι επιδεικνύουν επιφανειακές διαφορές, μοιράζονται μια α ειά και αξιοσημεί τη ομοιότητα. 6.1 Ρυ μαπόδοση Η συνο ική ρυ μαπόδοση τ ν εφαρμο ών έρ εται με με ά η πι ανότητα πρώτη στις ίστες επι υμιών τ ν ρηστών. Αυτή πι ανόν αποτε εί τον πρ ταρ ικό στό ο ια μια μαζική εφαρμο ή ή ια ένα διακομιστή ιστού όπου οι παύσεις είναι ανεκτές ή κρύ ονται από ά α στοι εία του συστήματος, όπ ς οι κα υστερήσεις δικτύου. Παρότι είναι σημαντικό οι ενέρ ειες της συ ο ής απορριμμάτ ν να εκτε ούνται όσο το δυνατόν τα ύτερα, η ρήση ενός ρη ορότερου συ έκτη δε σημαίνει απαραίτητα πώς ένας υπο ο ισμός α εκτε εσ εί ρη ορότερα. Σε ένα κα ώς διαμορφ μένο σύστημα, η συ ο ή απορριμμάτ ν α κατα αμ άνει ένα πο ύ μικρό ποσοστό του συνο ικού ρόνου εκτέ εσης. Αν το τίμημα που πρέπει να π ηρ εί ια τα ύτερη συ ο ή είναι ένας με α ύτερος φόρος στις ειτουρ ίες του τροποποιητή, είναι εξίσου πι ανό ο ρόνος εκτέ εσης της εφαρμο ής να αυξη εί αντί να μει εί. Η επι άρυνση τ ν ειτουρ ιών του τροποποιητή μπορεί να είναι άμεση ή έμμεση. Παραδεί ματα άμεσης επι άρυνσης είναι η εκτέ εση φρα μάτ ν ε ραφής και ανά ν σης, όπ ς αυτά που απαιτεί η συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών. Ωστόσο, η επίδοση του τροποποιητή μπορεί να επηρεασ εί και έμμεσα, ια παράδει μα επειδή ένας συ έκτης αντι ραφής έ ει αναδιατάξει τα αντικείμενα με τέτοιον τρόπο ώστε να επηρεάζει δυσμενώς τη συμπεριφορά της εφαρμο ής ς προς την κρυφή μνήμη. Η αποφυ ή (οποτεδήποτε αυτό είναι εφικτό) ειτουρ ιών συ ρονισμού είναι εξίσου σημαντική. Δυστυ ώς, οι τροποποιήσεις τ ν μετρητών 89

90 90 Κεφάλαιο 6. Σύγκριση αλγορίθμων συλλογής απορριμμάτων αναφορών πρέπει να συ ρονίζονται προκειμένου να μη άνονται ενημερώσεις. Η καταμέτρηση αναφορών με ανα ο ή ή συ κέντρ ση δύναται να εξα είψει ένα σημαντικό μέρος του παραπάν κόστους συ ρονισμού. Μπορούμε επίσης να εξετάσουμε την πο υπ οκότητα τ ν διαφόρ ν α ορί μ ν συ ο ής. Για τη συ ο ή απορριμμάτ ν με σήμανση και εκκα άριση, πρέπει να συμπερι ά ουμε το κόστος τ ν φάσε ν της εξι νίασης (σήμανσης) και της εκκα άρισης, ενώ το κόστος της συ ο ής με αντι ραφή εξαρτάται μόνο από την εξι νίαση. Η εξι νίαση απαιτεί την επίσκεψη κά ε ζ ντανού αντικειμένου, ενώ η εκκα άριση απαιτεί την επίσκεψη κά ε αντικειμένου (ζ ντανού ή νεκρού). Μπορεί σε αυτό το σημείο κάποιος να υπο έσει πώς το κόστος της συ ο ής με σήμανση και εκκα άριση είναι με α ύτερο από το κόστος της συ ο ής με αντι- ραφή. Ωστόσο, ο αρι μός τ ν εκτε ούμεν ν εντο ών κατά την επίσκεψη ενός αντικειμένου είναι μικρότερος κατά τη συ ο ή με σήμανση και εκκα άριση από ότι κατά τη συ ο ή με αντι ραφή. Η τοπικότητα παίζει εξίσου σημαντικό ρό ο και τε νικές προφόρτ σης μπορεί να ρησιμοποιη ούν ια να μει ούν οι αστο ίες κρυφής μνήμης. Ωστόσο το ερώτημα του κατά πόσο τέτοιες τε νικές μπορούν να εφαρμοσ ούν στη συ ο ή με αντι ραφή ρίς να α εί το π εονέκτημα της τοπικότητας που παρέ ει η κατά- ά ος αντι ραφή παραμένει ακόμη ανοι- τό. Τέ ος, ο συνδυασμός σήμανσης και οκνηρής εκκα άρισης επιφέρει το μέ ιστο κέρδος στις συν ήκες εκείνες όπου και η αντι ραφή αποδίδει έ τιστα: όταν τα ζ ντανά αντικείμενα κατα αμ άνουν ένα μικρό ποσοστό του σ ρού. 6.2 Χρόνος παύσης Η εξασφά ιση μικρών ρόν ν παύσης είναι σημαντική ό ι μόνο ια διαδραστικές εφαρμο ές α ά και ια ά ες, όπ ς ια παράδει μα εφαρμο ές δοσο ηψιών όπου οι τυ όν κα υστερήσεις μπορεί να οδη ήσουν σε συ κέντρ ση με ά ου φορτίου ανεκτέ εστης ερ ασίας. Οι συ έκτες εξι νίασης που έ ουμε εξετάσει μέ ρι τώρα ειτουρ ούν με παύση του κόσμου. Οι ρόνοι παύσης ια την εκτέ εση συ ο ής απορριμμάτ ν ήταν πο ύ με ά οι στα αρ ικά συστήματα και μπορούν ακόμη και σε σύ ρονες αρ ιτεκτονικές να διακόψουν την εκτέ εση με ά ν εφαρμο ών έ ς και ένα δευτερό επτο. Το άμεσο π εονέκτημα της συ ο ής απορριμμάτ ν με καταμέτρηση αναφορών είναι η αποφυ ή τέτοι ν παύσε ν μέσ της κατανομής του κόστους τ ν ειτουρ ιών δια είρισης μνήμης στις ειτουρ ίες ε ραφής του τροποποιητή. Ωστόσο, όπ ς είδαμε, η αποφυ ή τ ν παύσε ν δεν επιτυ άνεται πάντα σε υψη ών επιδόσε ν συστήματα καταμέτρησης αναφορών. Αρ ικά, η δια ραφή της τε ευταίας αναφοράς προς μία π ούσια σε δείκτες δομή οδη εί σε αναδρομικές τροποποιήσεις μετρητών αναφορών και ανάκτηση μνήμης αντικειμέν ν. Παρότι ευτυ ώς δεν υπάρ ει αντα νισμός μεταξύ τ ν τροποποιήσε ν αντικειμέν ν-απορριμμάτ ν, οι τε ευταίες μπορεί να προκα έσουν αντα νισμό στα μπ οκ κρυφής μνήμης που περι αμ άνουν τα αντικείμενα-απορρίμματα. Ακόμη είδαμε πώς η καταμέτρηση αναφορών με ανα ο ή και η καταμέτρηση αναφορών με συ κέντρ ση εισά ουν μια παύση του κόσμου κατά την οποία διορ ώνονται οι μετρητές αναφορών ζ ντανών αντικειμέν ν και ανακτάται η μνήμη νεκρών αντικειμέν ν προς τα οποία υπάρ ει αναφορά στον πίνακα μηδενικών μετρητών αναφορών. 6.3 Χώρος Ό οι οι α όρι μοι συ ο ής απορριμμάτ ν εισά ουν ρικά κόστη, με διάφορους παρά οντες να συμ ά ουν σε αυτό. Ένας α όρι μος μπορεί να π ηρώνει ένα κόστος ανά αντι-

91 6.4 Υλοποίηση 91 κείμενο, όπ ς π.. ια τα πεδία μετρητών αναφορών. Οι συ έκτες αντι ραφής ρειάζονται επιπρόσ ετο ώρο στο σ ρό ια τη διατήρηση ενός εφεδρικού ώρου αντι ραφής, ο οποίος πρέπει ια ασφά εια να έ ει τέτοιο μέ ε ος ώστε να ράνε ό α τα ζ ντανά αντικείμενα. Οι μη μετακινούντες συ έκτες αντιμετ πίζουν το πρό ημα του κατακερματισμού της μνήμης του σ ρού, που μειώνει το μέ ε ος της δια έσιμης στην εφαρμο ή μνήμης. Ο ώρος εκτός σ ρού όπου απο ηκεύονται διάφορα μεταδεδομένα δεν πρέπει να α νοη εί. Οι συ έκτες εξι νίασης ρειάζονται ώρο ια στοί ες σήμανσης, bitmap σήμανσης και ά ες οη ητικές δομές δεδομέν ν. Κά ε δια ειριστής μνήμης που δε ρησιμοποιεί συμπύκν ση, α ρησιμοποιήσει ώρο ια τις δομές δεδομέν ν του (όπ ς ια παράδει μα στην περίπτ ση που η εκ ώρηση μνήμης ίνεται με ξε ριστές ε εύ ερες ίστες ια αντικείμενα διαφορετικών με ε ών). Τέ- ος, προκειμένου ένας συ έκτης εξι νίασης ή ένας συ έκτης καταμέτρησης αναφορών με ανα ο ή να μην κα είται πο ύ συ νά, πρέπει να διατε εί σε αυτόν ειδικός ώρος στο σ ρό ια την προσ ρινή φι οξενία απορριμμάτ ν. Αντί ετα, η συ ο ή απορριμμάτ ν με απ οϊκή καταμέτρηση αναφορών ε ευ ερώνει ένα αντικείμενο αμέσ ς μό ις αυτό αποσυνδε εί από το ράφο τ ν ζ ντανών αντικειμέν ν. Εκτός από το προφανές π εονέκτημα της αποτροπής της συσσώρευσης απορριμμάτ ν στο σ ρό, η μνήμη που ανακτάται με με ά η πι ανότητα ρησιμοποιείται σύντομα μετά την ανάκτησή της με αποτε έσμα να ε τιώνεται η επίδοση της κρυφής μνήμης. Μά ιστα, σε ορισμένες περιπτώσεις είναι πι ανό ο μετα ττιστής να εντοπίσει πότε ένα αντικείμενο κα ίσταται μη προσ άσιμο και να επανα ρησιμοποιήσει τη μνήμη που αυτό κατα αμ άνει άμεσα, ρίς μεσο ά ηση του δια ειριστή μνήμης (συ έκτη). Οι συ έκτες πρέπει να είναι ό ι μόνο π ήρεις (να ανακτούν τη μνήμη ό ν τ ν αντικειμέν ν απορριμμάτ ν τε ικώς) α ά και πρό υμοι, δη αδή να ανακτούν άμεσα τη μνήμη ό ν τ ν αντικειμέν ν-απορριμμάτ ν σε κά ε κύκ ο συ ο ής. Ωστόσο, αρκετοί σύ ρονοι συ έκτες υψη ών επιδόσε ν υσιάζουν την αμεσότητα ια άρη της επίδοσης και επιτρέπουν σε μερικά αντικείμενα-απορρίμματα να αι ρούνται στο σ ρό μεταξύ δύο διαδο ικών κύκ ν συ ο ής. Η συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών τέ ος δεν είναι π ήρης, αφού αδυνατεί να συ έξει κύκ ους απορριμμάτ ν ρίς την εξι νίαση του ράφου αντικειμέν ν. 6.4 Υ οποίηση Η υ οποίηση τ ν α ορί μ ν συ ο ής απορριμμάτ ν και ειδικότερα τ ν α ορί μ ν ταυτό ρονης συ ο ής απορριμμάτ ν είναι δύσκο η. Η διαπροσ πεία ανάμεσα στο συ έκτη και το μετα ττιστή είναι ιδιαίτερα σημαντική. Λά η στην υ οποίηση του συ έκτη συ νά εμφανίζονται πο ύ αρ ά (πι ανόν αρκετούς κύκ ους συ ο ής αρ ότερα), κα ώς ο τροποποιητής επι ειρεί την αποδεικτοδότηση μιας αναφοράς που δεν είναι π έον έ κυρη. Συνεπώς οι συ έκτες απορριμμάτ ν πρέπει να είναι ταυτό ρονα εύρ στοι και ρή οροι. Ένα π εονέκτημα τ ν μη μετακινούντ ν συ εκτών σήμανσης και εκκα άρισης είναι η απ ότητα της διαπροσ πείας μεταξύ τροποποιητή και συ έκτη: ο τε ευταίος κα είται όταν η δια- έσιμη μνήμη έ ει εξαντ η εί και ο εκ ρητής αδυνατεί να ικανοποιήσει αιτήματα. Η ασική πο υπ οκότητα αυτής της διαπροσ πείας έ κειται στον κα ορισμό τ ν ριζών, αναζητώντας δείκτες στις κα ο ικές μετα ητές, τους κατα ρητές και τη στοί α. Από την ά η π ευρά, το έρ ο τ ν μετακινούντ ν συ εκτών αντι ραφής και τ ν συ εκτών σήμανσης και συμπύκν σης είναι σημαντικά πιο πο ύπ οκο. Ένας μετακινών συ έκτης πρέπει να εντοπίσει και να ενημερώσει ό ους τους δείκτες προς ένα ζ ντανό αντικείμενο, ενώ ένας μη μετακινών συ έκτης αρκείται στο να ταυτοποιήσει του ά ιστον ένα δείκτη προς ένα ζ ντανό αντικείμενο ρίς να ρειάζεται να μετα ά ει την τιμή του. Οι ν στοί και ς συντηρητικοί συ έκτες μπορούν να ανακτήσουν μνήμη που κατα αμ άνεται από αντικείμενα-απορρίμματα

92 92 Κεφάλαιο 6. Σύγκριση αλγορίθμων συλλογής απορριμμάτων ρίς ακρι ή νώση της στοί ας του τροποποιητή ή της διάταξης τ ν αντικειμέν ν στο σ ρό. Αντί ετα πρα ματοποιούν συντηρητικές (ασφα είς) υπο έσεις σ ετικά με το κατά πόσο μια τιμή είναι δείκτης ή ό ι. Κα ώς οι μη μετακινούντες συ έκτες δεν ενημερώνουν τις τιμές δεικτών, ο μόνος κίνδυνος από την εσφα μένη ταυτοποίηση μιας τιμής ς δείκτη προς ένα αντικείμενο του σ ρού αφορά στην εισα ή μιας διαρροής μνήμης (η τιμή του δείκτη δεν τροποποιείται). Η συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών έ ει τα π εονεκτήματα και τα μειονεκτήματα που απορρέουν από την υψη ή σύζευξή της με τον τροποποιητή. Στα ετικά συ- κατα έ εται το ε ονός πώς μπορεί να υ οποιη εί ς μία ι ιο ήκη, επιτρέποντας στον προ ραμματιστή να επι έξει ποια αντικείμενα α δια ειρίζονται αυτόματα με καταμέτρηση αναφορών και ποια ρητώς. Στα αρνητικά από την ά η π ευρά περι αμ άνονται η εισα ή επι άρυνσης στις ειτουρ ίες ε ραφής του τροποποιητή και της επι άρυνσης συ ρονισμού, που επι ά ει η εξασφά ιση της ορ ότητας τ ν τροποποιήσε ν μετρητών αναφορών. Η επίδοση οποιασδήποτε μοντέρνας ώσσας προ ραμματισμού που κάνει εκτεταμένη ρήση δυναμικώς εκ ρη έντ ν δεδομέν ν εξαρτάται σε ένα με ά ο α μό από το δια ειριστή μνήμης. Τα κρίσιμα τμήματα κώδικα αφορούν την εκ ώρηση μνήμης, τα φρά ματα ε ραφής και ανά ν σης του τροποποιητή και τους εσ τερικούς ρό ους του συ έκτη. Σε κά ε περίπτ ση, η έξοδος του μετα ττιστή έ ει σημασία και ο κώδικας σε assembly πρέπει να εξετάζεται προσεκτικά. Η επίδραση που έ ει ο κώδικας στη κρυφή μνήμη επηρεάζει επίσης σε με ά ο α μό την επίδοση. 6.5 Προσαρμοστικά συστήματα Τα εμπορικά συστήματα συ νά προσφέρουν τη δυνατότητα επι ο ής ανάμεσα σε διαφορετικούς α ορί μους συ ο ής απορριμμάτ ν, ο κα ένας εκ τ ν οποί ν έρ εται με μια π η ώρα επι ο ών διαμόρφ σης. Αρκετοί ερευνητές έ ουν προτείνει τη δυναμική προσαρμο ή τ ν συστημάτ ν εκτέ εσης στο περι ά ον τους. Το σύστημα εκτέ εσης της ώσσας Java τ ν Soman κ.ά. [110] προσαρμόζεται δυναμικά α άζοντας τον α όρι μο συ ο ής κατά την εκτέ εση του προ ράμματος με άση το μέ ε ος της δια έσιμης μνήμης του σ ρού. Το σύστημα τους ρησιμοποιεί είτε off-line στατιστική ανά υση ια την επισημεί ση τ ν προ- ραμμάτ ν με το έ τιστο συνδυασμό συ έκτη/μέ ε ος σ ρού, είτε α άζει τον α όρι μο συ ο ής συ κρίνοντας την τρέ ουσα ρησιμοποίηση ώρου με το μέ ιστο μέ ε ος σ ρού. Οι Singer κ.ά. [109] από την ά η π ευρά ρησιμοποιούν τε νικές μη ανικής μά ησης με στό ο την πρό εψη του έ τιστου συ έκτη από τις στατικές ιδιότητες ενός προ ράμματος. 6.6 Ενοποιημένη ε ρία συ ο ής απορριμμάτ ν Στα προη ούμενα 4 κεφά αια, εξετάσαμε δύο κατη ορίες α ορί μ ν συ ο ής απορριμμάτ ν: τους άμεσους (καταμέτρηση αναφορών) και τους έμμεσους (σήμανση-εκκα άριση, σήμανση-συμπύκν ση και αντι ραφή). Οι Bacon κ.ά. [10] δεί νουν π ς υπάρ ουν πο ές ομοιότητες ανάμεσα στους α ορί μους τ ν δύο κατη οριών. Το αφηρημένο π αίσιο τους επιτρέπει τη διατύπ ση μιας ευρείας ποικι ίας διαφορετικών α ορί μ ν συ ο ής απορριμμάτ ν δίνοντας έμφαση ακρι ώς στις ομοιότητες και τις διαφορές τους.

93 6.6 Ενοποιημένη θεωρία συλλογής απορριμμάτων Αφηρημένη συ ο ή απορριμμάτ ν O Bacon κ.ά. αρ ικά παρατηρούν π ς η συ ο ή απορριμμάτ ν μπορεί να διατυπ εί ς ένας υπο ο ισμός στα ερού σημείου, που ανα έτει μετρητές αναφορών ρ(n) σε κόμ ους n Nodes. Πιο συ κεκριμένα: ref Nodes : ρ(ref) = {fld Roots : fld = ref} + {fld P ointers(n) : n Nodes ρ(n) > 0 fld = ref} (6.1) Μετά την ανά εση τ ν μετρητών αναφορών, διατηρούνται οι κόμ οι με μη μηδενικό μετρητή αναφορών και οι υπό οιποι συ έ ονται. Οι μετρητές αναφορών δε ρειάζεται να είναι ακρι είς και αρκεί να έ ουν μια τιμή που αποτε εί ασφα ή προσέ ιση της πρα ματικής. Οι αφηρημένοι α όρι μοι συ ο ής απορριμμάτ ν εκτε ούν τέτοιους υπο ο ισμούς στα ερού σημείου ρησιμοποιώντας μια ίστα ερ ασιών W από αντικείμενα προς επεξερ ασία. Οι α όρι μοι τερματίζουν τη ρονική στι μή κατά την οποία η ίστα αυτή αδειάζει Συ ο ή απορριμμάτ ν με εξι νίαση Η αφαίρεση παρουσιάζει τη συ ο ή εξι νίασης ς μία μορφή συ ο ής καταμέτρησης αναφορών. Η αφηρημένη συ ο ή εξι νίασης παρουσιάζεται στον α όρι μο 6.1. Οι μετρητές αναφορών ό ν τ ν κόμ ν είναι αρ ικά μηδενικοί. Στο τέ ος κά ε κύκ ου συ ο ής η διαδικασία T μηδενίζει εκ νέου τους μετρητές αναφορών τ ν κόμ ν και η διαδικασία N αρ ικοποιεί το μετρητή αναφορών ενός καινούριου κόμ ου στο μηδέν. Η διαδικασία T συσσ ρεύει στη ίστα ερ ασιών W ό ους τους μη μηδενικούς δείκτες από το σύνο ο τ ν ριζών ρησιμοποιώντας τη διαδικασία T και στη συνέ εια περνά τη ίστα ερ ασιών W στη διαδικασία T. Η συ ο ή συνε ίζει με εξι νίαση του ράφου ώστε να ανακα υφ ούν ό οι οι προσ άσιμοι από τις ρίζες κόμ οι. Η διαδικασία T εξι νιάζει αντικείμενα από τη ίστα ερ- ασιών W και ανανεώνει το μετρητή αναφορών κά ε κόμ ου αυξάνοντας τον κατά 1 κά ε φορά που συναντά τον κόμ ο. Την πρώτη φορά που ανακα ύπτεται ένας προσ άσιμος κόμ ος src (οπότε και ρ(src) = 1), ο συ έκτης εξετάζει αναδρομικά ό ες τις εξερ όμενες ακμές του κόμ ου, σαρώνοντας τα πεδία του και προσ έτοντας (δείκτες προς) τα παιδιά στη ίστα ερ ασιών W. Κατά την έξοδο από το ρό ο while ο μετρητής αναφορών κά ε ζ ντανού κόμ ου ισούται με το π ή ος τ ν εισερ όμεν ν σε αυτόν ακμών. Η διαδικασία T ε ευ ερώνει μη ρησιμοποιούμενους κόμ ους και μηδενίζει εκ νέου τους μετρητές αναφορών τ ν υπό οιπ ν κόμ ν ια τον επόμενο κύκ ο συ ο ής. Μία πρακτική υ οποίηση μπορεί να κ δικοποιήσει το μετρητή αναφορών ενός κόμ ου μόνο με ένα bit και να κατα ράφει έτσι αν ο κόμ ος έ ει ανακα υφ εί ή ό ι. Το bit σήμανσης ειτουρ εί επομέν ς ς μία προσέ ιση του πρα ματικού μετρητή αναφορών. Η συ ο ή εξι νίασης υπο ο ίζει την ε ά ιστη ύση στα ερού σημείου της εξίσ σης 6.1: οι μετρητές αναφορών τ ν κόμ ν είναι οι ε ά ιστοι δυνατοί που την ικανοποιούν. Μπορούμε επίσης να ερμηνεύσουμε τους αφηρημένους α ορί μους συ ο ής απορριμμάτ ν αμ άνοντας υπόψη την τρι ρ ματική αφαίρεση που συζητήσαμε στην ενότητα 2.2. Στον

94 94 Κεφάλαιο 6. Σύγκριση αλγορίθμων συλλογής απορριμμάτων Σ ήμα 6.1: Ένας απ ός κύκ ος. α όρι μο 6.1, κόμ οι με μηδενικό μετρητή αναφορών είναι ευκοί, ενώ κόμ οι με μη μηδενικό μετρητή αναφορών είναι μαύροι. Η μετά αση του ρώματος ενός κόμ ου από ευκό σε μαύρο (μέσ κρι) πρα ματοποιείται την πρώτη φορά που αυτός ανακα ύπτεται και σαρώνεται. Τε ικώς, η αφηρημένη συ ο ή εξι νίασης διαμερίζει τους κόμ ους του σ ρού σε μαύρους (ζ ντανούς) και ευκούς (νεκρούς) Συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών Η αφηρημένη συ ο ή απορριμμάτ ν με καταμέτρηση αναφορών παρουσιάζεται στον α όρι μο 6.2, όπου και φαίνεται π ς οι ειτουρ ίες καταμέτρησης αναφορών απομονώνονται από τις διαδικασίες και αντί να εφαρμόζονται αμέσ ς. O συ έκτης απορριμμάτ ν, που υ οποιείται από τη διαδικασία C, εφαρμόζει τις ανα ε ημένες αυξήσεις I μέσ της διαδικασίας I και τις ανα ε ημένες μειώσεις D μέσ της διαδικασίας C. Ο τροποποιητής, μέσ της διαδικασίας W, απο ηκεύει μία αναφορά προς έναν καινούριο κόμ ο προορισμού dst στο πεδίο src[i]. Πριν πρα ματοποιήσει την ενημέρ ση src[i] dst, απομονώνει μια αύξηση του μετρητή αναφορών του καινούριου κόμ ου προορισμού ( (dst)) κα ώς και μία μεί ση του μετρητή αναφορών του πα αιού κόμ ου προορισμού ( (src[i])). Κά ε κύκ ος συ ο ής ξεκινά εφαρμόζοντας τις ανα ε ημένες αυξήσεις μετρητών αναφορών, με τις ανα ε ημένες μειώσεις να εφαρμόζονται στην επόμενη φάση. Κατά την έναρξη εκτέ εσης της διαδικασίας C οι μετρητές αναφορών έ ουν με α ύτερη τιμή από την πρα ματική τους. Επομέν ς η διαδικασία μειώνει το μετρητή αναφορών ενός κόμ ου της ίστας ερ ασιών κα ώς τον επισκέπτεται. Κά ε κόμ ος προέ ευσης src, του οποίου ο μετρητής αναφορών ρ(src) πέφτει στο 0, σε αυτή τη φάση αντιμετ πίζεται ς απόρριμμα και τα παιδιά του προστί ενται στη ίστα ερ ασιών. Τε ικώς, η διαδικασία C ε ευ ερώνει τους κόμ ους-απορρίμματα. Οι α όρι μοι εξι νίασης και καταμέτρησης αναφορών είναι ταυτόσημοι, αν εξαιρέσει κανείς μικρές διαφορές. Κά ε ένας έ ει μια διαδικασία σάρ σης: η διαδικασία T εφαρμόζει αυξήσεις στους μετρητές αναφορών ενώ η διαδικασία C εφαρμόζει μειώσεις. Και στις δύο περιπτώσεις η αναδρομική συν ήκη ε έ ει αν ένας μετρητής αναφορών έ ει μηδενισ εί. Τέ ος, κά ε ένας έ ει μια διαδικασία εκκα άρισης, που ε ευ ερώνει το ώρο που κατα αμ άνεται από κόμ ους-απορρίμματα. Η καταμέτρηση αναφορών είναι περίπ οκη όταν υπάρ ουν κύκ οι στο ράφο αντικειμέν ν. Το τετριμμένο παράδει μα του σ ήματος 6.1 δεί νει έναν απ ό απομον μένο κύκ ο, όπου υπο έτοντας π ς ο κόμ ος A έ ει μηδενικό μετρητή αναφορών οδη ούμαστε στο συμπέρασμα π ς και ο κόμ ος B έ ει μηδενικό μετρητή αναφορών. Αν όμ ς ε ρήσουμε π ς ο μετρητής αναφορών του κόμ ου A έ ει την τιμή 1, συμπεραίνουμε π ς και ο μετρητής αναφορών του κόμ ου B έ ει την τιμή 1. Γενικότερα, στους υπο ο ισμούς στα ερών σημεί ν ενδέ εται να υπάρ ουν παραπάν από

95 6.6 Ενοποιημένη θεωρία συλλογής απορριμμάτων 95 Α όρι μος 6.1 Αφηρημένη συ ο ή εξι νίασης 1: procedure T () 2: atomic 3: T (W ) 4: T (W ) 5: T () 6: procedure T (W ) 7: while not E (W ) do 8: src (W ) 9: ρ(src) ρ(src) + 1 shade src 10: if ρ(src) = 1 then src was white, now grey 11: for all fld in P ointers(src) do 12: ref fld 13: if ref null then 14: W W + [ref] 15: procedure T () 16: for all node in Nodes do 17: if ρ(node) = 0 then node is white 18: (node) 19: else node is black 20: ρ(node) 0 reset node to white 21: function N () 22: ref () 23: if ref = null then 24: T () 25: ref () 26: if ref = null then 27: error Out of memory! 28: ρ(ref) 0 node is white 29: return ref 30: procedure T (R) 31: for all fld in Roots do 32: ref fld 33: if ref null then 34: R R + [ref]

96 96 Κεφάλαιο 6. Σύγκριση αλγορίθμων συλλογής απορριμμάτων Α όρι μος 6.2 Αφηρημένη συ ο ή καταμέτρησης αναφορών 1: procedure C (I, D) 2: atomic 3: I (I) 4: C (D) 5: C () 6: procedure C (W ) 7: while not E (W ) do 8: src (W ) 9: ρ(src) ρ(src) 1 10: if ρ(src) = 0 then 11: for all fld in P ointers(src) do 12: ref fld 13: if ref null then 14: W W + [ref] 15: procedure C () 16: for all node in Nodes do 17: if ρ(node) = 0 then 18: (node) 19: function N () 20: ref () 21: if ref = null then 22: C () 23: ref () 24: if ref = null then 25: error Out of memory! 26: ρ(ref) 0 27: return ref 28: procedure (ref) 29: if ref null then 30: D D + [ref] 31: procedure (ref) 32: if ref null then 33: I I + [ref] 34: procedure W (src, i, dst) 35: (dst) 36: (src[i]) 37: src[i] dest 38: procedure I (I) 39: while not E (I) do 40: ref (I) 41: ρ(ref) ρ(ref) + 1

97 6.6 Ενοποιημένη θεωρία συλλογής απορριμμάτων 97 μία ύσεις. Στην περίπτ ση του σ ήματος 6.1 έ ουμε Nodes = {A, B} και Roots = {}. Υπάρ ουν δύο ύσεις στα ερού σημείου της εξίσ σης 6.1 ια αυτόν τον απ ό ράφο: το ε ά- ιστο στα ερό σημείο ρ(a) = ρ(b) = 0 και το μέ ιστο στα ερό σημείο ρ(a) = ρ(b) = 1. Η συ ο ή εξι νίασης υπο ο ίζει το ε ά ιστο στα ερό σημείο, ενώ η συ ο ή με καταμέτρηση αναφορών το μέ ιστο στα ερό σημείο, με αποτέ εσμα να μην μπορεί να συ έξει κύκ ους απορριμμάτ ν. Η διαφορά μεταξύ τ ν δύο ύσε ν είναι ακρι ώς το σύνο ο τ ν κόμ ν που είναι προσ άσιμοι από κύκ ους απορριμμάτ ν.

98

99 Μέρος II Προη μένοι α όρι μοι συ ο ής απορριμμάτ ν 99

100

101 Κεφά αιο 7 Γενεα ο ική συ ο ή απορριμμάτ ν Ο στό ος ενός συ έκτη απορριμμάτ ν είναι η εύρεση νεκρών αντικειμέν ν και εν συνε εία η αποδέσμευση του ώρου που αυτά κατα αμ άνουν. Οι συ έκτες εξι νίασης (και ειδικότερα οι συ έκτες αντι ραφής) παρουσιάζουν κα ές επιδόσεις όταν ο σ ρός περι αμ άνει σ ετικά ί α ζ ντανά αντικείμενα. Δε μετα ειρίζονται στόσο αποδοτικά αντικείμενα με μακρά διάρκεια ζ ής, τα οποία είτε σημαίνουν και ξε-σημαίνουν είτε αντι ράφουν από τον ένα ημι ώρο στον ά ο διαρκώς. Είδαμε στο κεφά αιο 3 πώς αντικείμενα με μακρά διάρκεια ζ ής τείνουν να συ κεντρώνονται στο κάτ μέρος του σ ρού όταν αυτός δια ειρίζεται από ένα συ έκτη με σήμανση και συμπύκν ση και πώς πο οί συ έκτες αποφεύ ουν τη συμπύκν ση αυτού του τμήματος. Παρότι αυτή η ε τιστοποίηση αφαιρεί το κόστος της μετακίνησης αυτών, τα εν ό αντικείμενα πρέπει να εξετάζονται και τα πεδία-δείκτες αυτών να ενημερώνονται σε κά ε κύκ ο συ ο ής. Οι ενεα ο ικοί συ έκτες απορριμμάτ ν επεκτείνουν την παραπάν ιδέα α νοώντας τα πα- αιότερα αντικείμενα οποτεδήποτε αυτό είναι δυνατό. Οι συ έκτες αυτής της κατη ορίας ασίζονται στην ασ ενή ενεα ο ική υπό εση π ς τα περισσότερα αντικείμενα πε αίνουν νέα. Επικεντρώνοντας την προσο ή τους στα νεότερα αντικείμενα, προσπα ούν να με ιστοποιήσουν τον ε εύ ερο ώρο που ανακτούν με το ι ότερο δυνατό κόπο. Κατη οριοποιούν τα αντικείμενα με άση την η ικία τους σε ενεές, με την κά ε ενιά να ζει συνή ς σε ένα ξε ριστό τμήμα του σ ρού. Οι ενεές συ έ ονται σε αύξουσα σειρά ς προς την η ικία τους, ενώ τα αντικείμενα που επι ιώνουν μετά από αρκετούς κύκ ους συ ο ής προά ονται σε πα αιότερες ενεές. Οι περισσότεροι συ έκτες αυτής της κατη ορίας δια ειρίζονται τις νεότερες ενεές με αντι- ραφή. Ο απαιτούμενος ρόνος που δαπανάται ια τη νεότερη ενεά, ν στή και ς ρεφοκομείο εξαρτάται από το μέ ε ός της. Ρυ μίζοντας επομέν ς το μέ ε ος αυτό, μπορούμε να ε έ ξουμε το ρόνο παύσης ια τη συ ο ή μιας ενεάς. Οι ρόνοι παύσης ια τη συ ο ή τ ν νεότερ ν ενεών σε εφαρμο ές που τρέ ουν σε ένα σύ ρονο μη άνημα και επα η εύουν την ασ ενή ενεα ο ική υπό εση, είναι της τάξης τ ν ι ιοστών του δευτερο έπτου. Θε ρώντας ακόμη πώς η συ ο ή εκτε είται σ ετικά αραιά, η δράση ενός ενεα ο ικού συ έκτη περνάει σ εδόν απαρατήρητη στον τροποποιητή. Αν ένας ενεα ο ικός συ έκτης εκτιμήσει πώς η συ ο ή μόνο της νεότερης ενιάς δε α ανακυκ ώσει αρκετό ώρο, ρειάζεται να συ ε εί ο όκ ηρος ο σ ρός. Συνεπώς η ενεα ο ική συ ο ή απορριμμάτ ν ε τιώνει μόνο την αναμενόμενη τιμή του ρόνου παύσης 101

102 102 Κεφάλαιο 7. Γενεαλογική συλλογή απορριμμάτων και ό ι την είριστη περίπτ ση. Δεν επαρκεί από μόνη της ια ένα σύστημα πρα ματικού ρόνου. Η ενεα ο ική συ ο ή απορριμμάτ ν δεν είναι τε εί ς δ ρεάν. Αρ ικά η συνε- όμενη συ ο ή μόνο τ ν νεότερ ν ενεών δεν μπορεί να εντοπίσει απορρίμματα που ζουν σε πα αιότερες ενεές. Επιπ έον, ια να μπορεί να συ έξει μόνο μια ενεά, α νοώντας τις υπό οιπες, ο συ έκτης α πρέπει με κάποιο τρόπο να σημειώνει τους δείκτες που διασ ίζουν τα σύνορα μεταξύ τ ν ενεών. 7.1 Πώς μετράται ο ρόνος; Για να πρoά ει ένας ενεα ο ικός συ έκτης αντικείμενα από μία ενεά σε μία πα αιότερη, απαιτείται να μπορεί να προσδιορίζει πόσο πα αιά είναι αυτά. Επομέν ς ρειάζεται τόσο ένα μη ανισμό μέτρησης του ρόνου όσο και ένα μη ανισμό μέτρησης της η ικίας τ ν αντικειμέν ν. Στη ι ιο ραφία συναντώνται κυρί ς δύο πι ανές μετρικές: το συνο ικό μέ ε ος της δεσμευμένης μνήμης και ο ρόνος που έ ει περάσει από την έναρξη της εκτέ εσης της εφαρμο ής. Η μετρική του ρόνου κα ορίζει το προφί της εφαρμο ής. Απαντάει σε ερ τήσεις που αφορούν το ια πόσο τρέ ει μια εφαρμο ή κα ώς και ποιοι είναι οι ρόνοι παύσης αυτής και πώς αυτοί είναι κατανεμημένοι. Απαντήσεις στις ερ τήσεις αυτές μπορούν να ρησιμοποιη ούν ώστε να αποφαν εί κανείς σ ετικά με την αποκρισιμότητα της εφαρμο ής και το κατά πόσο η παύση αυτής ια συ ο ή απορριμμάτ ν ενο εί έναν διαδραστικό ρήστη. Από την ά η π ευρά, εσ τερικά, η διαφορά σε bytes της συνο ικής δεσμευμένης μνήμης στο σ ρό μεταξύ τ ν ρονικών στι μών της έννησης και του ανάτου ενός αντικειμένου αντικατοπτρίζει κα ύτερα τη ρονική διάρκεια ζ ής αυτού. Είναι επίσης ένα μέ ε ος ανεξάρτητο της αρ ιτεκτονικής. Τέ ος, αποτε εί στοι είο τ ν απαιτήσε ν σε μνήμη μιας εφαρμο ής και είναι στενά συνδεδεμένο με τη συ νότητα με την οποία α κ η εί ο συ έκτης. Η μέτρηση του ρόνου με όρους bytes είναι ιδιαίτερα επίπονη διαδικασία σε πο υεπεξερ αστικά περι ά οντα όπου εκτε ούνται ταυτό ρονα πο ά νήματα. Η ρήση ενός απ ού κα ο ικού μετρητή του συνο ικού με έ ους της δεσμευμένης μνήμης ενδέ εται να παραπ ανήσει το συ έκτη σ ετικά με την η ικία ενός αντικειμένου, κα ώς μια με ά η τιμή του μπορεί να έ ει προκύψει από την εκ ώρηση μνήμης σε νήματα άσ ετα με το αντικείμενο. Οι πρα ματικές υ οποιήσεις ενεα ο ικών συ εκτών απορριμμάτ ν μοντε οποιούν την η ικία ενός αντικειμένου ς τον αρι μό τ ν συ ο ών από τις οποίες αυτό έ ει επι ιώσει. 7.2 Γενεα ο ικές υπο έσεις H ασ ενής ενεα ο ική υπό εση, σύμφ να με την οποία τα περισσότερα αντικείμενα πε αίνουν νέα, φαίνεται ενικώς έ κυρη, ανεξαρτήτ ς της ώσσας προ ραμματισμού. Οι Foderaro και Fateman [54] διαπίστ σαν πώς σε ένα πακέτο υπο ο ιστικής ά ε ρας ραμμένο στη ώσσα MacLisp, το 98% της μνήμης που ανακτούσε ένας κύκ ος συ ο ής εί ε εκ ρη εί μετά το πέρας του προη ούμενου κύκ ου. Ο Zorn [123] ανέφερε π ς το ποσοστό τ ν αντικειμέν ν στη ώσσα Common Lisp τα οποία δεν επι ί ναν μέ ρι τα 10 ΚΒ εκ ώρησης κυμαίνεται μεταξύ 50% και 90%. Αντίστοι α συμπεράσματα ισ ύουν και ια τις συναρτησιακές ώσσες προ ραμματισμού. Οι Sansom και Simon Peyton Jones [103], παρατήρησαν, πώς στη Haskell, ένα ποσοστό μεταξύ 75% και 95% τ ν αντικειμέν ν του σ ρού πε αίνουν πριν την η ικία τ ν 10 KB και πώς μόνο το 5% τ ν αντικειμέν ν ζουν μετά το 1 ΜΒ. Ο Appel παρατήρησε πώς στην Standard ML/NJ, σε κά ε κύκ ο συ ο ής, το 98%

103 7.3 Γενεές και οργάνωση σωρού 103 της μνήμης κά ε ενεάς ε ευ ερώνεται, ενώ οι Stefanovic και Moss [113] ρήκαν πώς μόνο ένα ποσοστό από 2% έ ς 8% αντικειμέν ν του σ ρού επι ί ναν μετά το κατώφ ι τ ν 100 ΚΒ. Η υπό εση ισ ύει και ια πο ά προ ράμματα ραμμένα σε αντικειμενοστρεφείς ώσσες. Ο Ungar [117] ρήκε π ς ι ότερο από το 7% τ ν αντικειμέν ν στη Smalltalk ζουν πέραν τ ν 140 KB. Οι Dieckmann και Hölzle [43] ανέφεραν π ς ο ό κος τ ν ζ ντανών Java αντικειμέν ν στη σουίτα benchmark SPECjvm98 που επι ί ναν μετά τα 100 KB εκ ώρησης κυμαινόταν μεταξύ 1% και 40% και π ς ι ότερο από το 21 % ζούσε πέραν του 1 ΜΒ παρότι το ποσοστό διέφερε σημαντικά από εφαρμο ή σε εφαρμο ή. Οι Blackburn κ.ά [19] ρήκαν π ς κατά μέσο όρο ένα ποσοστό μικρότερο του 9% τ ν αντικειμέν ν που εκ ρούνταν στις εφαρμο ές τ ν σουιτών benchmark SPECjvm98 και DaCapo ζούσε και μετά τα 4 MB παρότι υπήρ ε με ά η απόκ ιση ανάμεσα στα διαφορετικά benchmark. Αυτό έ αια ήταν ένα άν φρά μα του ποσοστού τ ν αντικειμέν ν που ζούσαν πέραν τ ν 4 MB, κα ώς μερικά επιζώντα αντικείμενα μπορεί να ίτ ναν κα ώς εκ ρούνταν σ εδόν αμέσ ς μετά από μια συ ο ή της νεότερης ενεάς. Οι Jones και Ryder [68] ρήκαν π ς οι διάρκειες ζ ής τ ν αντικειμέν ν εφαρμο ών Java ακο ου ούσαν τη δι νυμική κατανομή: ένα ποσοστό μεταξύ 65% και 96% τ ν αντικειμέν ν στις εφαρμο ές της σουίτας benchmark DaCapo δεν επι ί ναν μετά τα 64 KB, ενώ ένα ποσοστό μεταξύ 3% και 16% ήταν α άνατα ή ζούσαν και πέραν τ ν 4 MB. Ακόμη και στις προστακτικές ώσσες προ ραμματισμού όπου δεν υπάρ ει αυτόματη δια είριση μνήμης, η διάρκεια ζ ής πο ών αντικειμέν ν είναι μικρή. Οι Barrett και Zorn [14] ανέφεραν πώς παραπάν από το 50% τ ν εκ ρη έντ ν στο σ ρό αντικειμέν ν πέ αιναν κάποια στι μή πριν τα 10 KB και ι ότερο από το 10% επι ί νε πέραν τ ν 32 KB. Από την ά η π ευρά, υπάρ ουν εμφανώς ι ότερες ενδείξεις που να επι ε αιώνουν την ισ υρή ενεα ο ική υπό εση του Hayes [58], σύμφ να με την οποία ακόμη και ια τα αντικείμενα που δε δημιουρ ή ηκαν πρόσφατα, ισ ύει πώς τα νεότερα αντικείμενα α έ ουν μικρότερο ρυ μό επι ί σης από τα πα αιότερα. Το απ ό μοντέ ο της ασ ενούς ενεα ο ικής υπό εσης περι ράφει ικανοποιητικά τη ενική συμπεριφορά τ ν αντικειμέν ν. Ωστόσο, εξαιρώντας τα αντικείμενα που πε αίνουν νέα, η δημο ραφία τ ν αντικειμέν ν σε μία ευρύτερη ρονική κ ίμακα είναι πιο πο ύπ οκη. Οι ρόνοι ζ ής τ ν αντικειμέν ν δεν είναι τυ αίοι. Όπ ς παρατηρούν οι Dieckmann και Hölzle [43] και οι Jones και Ryder [68], επειδή τα προ- ράμματα ειτουρ ούν σε φάσεις, τα αντικείμενα έ ουν την τάση να ζουν σε συστάδες και να πε αίνουν ό α μαζί ταυτό ρονα. Επιπ έον, ένας σημαντικό π ή ος αντικειμέν ν μπορεί να μην πε άνει ποτέ. Κάποιοι ερευνητές έ ουν ακόμη ισ υρισ εί πώς ενδέ εται να υπάρ ει ένας συσ ετισμός μεταξύ της διάρκειας ζ ής τ ν αντικειμέν ν και του με έ ους τους. Οι απόψεις πάντ ς σ ετικά το κατά πόσο ο ισ υρισμός είναι α η ής διαφέρουν ανάμεσα στους Caudill και Wirfs-Brock [33], τους Ungar και Jackson [115] και Barrett και Zorn [14]. 7.3 Γενεές και ορ άν ση σ ρού Μια ευρεία κάμα στρατη ικών έ ει προτα εί στη ι ιο ραφία ια την ορ άν ση τ ν ενεών. Οι ενεα ο ικοί συ έκτες μπορεί να ρησιμοποιούν δύο ή και περισσότερες ενεές, οι οποίες μπορεί να δια ρίζονται φυσικά ή ο ικά. Το μέ ε ος μιας ενεάς μπορεί να είναι στα ερό και φρα μένο ή μπορεί να απαιτείται συμ ι ασμός μεταξύ τ ν με ε ών τ ν διαφόρ ν υπο ώρ ν του σ ρού. Μια ενεά μπορεί να είναι επίπεδη στο εσ τερικό της ή να περι αμ άνει έναν αρι μό από υπο ώρους που αρακτηρίζονται με άση την η ικία και είναι ν στοί ς κάδοι. Μια ενεά ενδέ εται επίσης να περιέ ει το δικό της υπο ώρο ια με ά α αντικείμενα. Τέ ος, κά ε ενεά μπορεί να μετα ειρίζεται από διαφορετικό α όρι μο.

104 104 Κεφάλαιο 7. Γενεαλογική συλλογή απορριμμάτων Οι πρ ταρ ικοί στό οι της ενεα ο ικής συ ο ής απορριμμάτ ν είναι η μεί ση τ ν ρόν ν παύσης και η ε τί ση της διεκπεραι τικής ικανότητας. Υπο έτοντας πώς η δια είριση της νεότερης ενεάς έ ει ανατε εί σε ένα συ έκτη αντι ραφής, οι αναμενόμενοι ρόνοι παύσης εξαρτώνται κατά κύριο ό ο από τον ό κο τ ν ζ ντανών αντικειμέν ν που επι ιώνουν από μία ε άσσονα συ ο ή της ενεάς αυτής, ο οποίος με τη σειρά του εξαρτάται από το μέ ε ος αυτής. Αν στόσο το μέ ε ος του ρεφοκομείου είναι πο ύ μικρό και συνεπώς η συ ο ή πο ύ ρή ορη, το ποσό της μνήμης που α ε ευ ερ εί α είναι μικρό, κα ώς τα αντικείμενα του ρεφοκομείου δεν έ ουν επαρκή ρόνο μέ ρι να πε άνουν. Το ε ονός αυτό ενδέ εται να έ ει πο ές ανεπι ύμητες επιπτώσεις. Πρώτον, α αυξη εί σημαντικά η συ νότητα συ ο ής της νεότερης ενεάς. Παρά η α, το κόστος της αντι ραφής, το οποίο είναι ανά ο ο του π ή ους τ ν αντικειμέν ν που επι ιώνουν αναμένεται να αυξη εί επίσης, δεδομένου ότι τα αντικείμενα α έ ουν ι ότερο ρόνο ώστε να πε άνουν. Επίσης, κά ε κύκ ος συ ο ής απαιτεί την αναστο ή τ ν νημάτ ν-τροποποιητών και τη σάρ ση της στοί ας κά ε νήματος-τροποποιητή. Δεύτερον, η πα αιότερη ενεά αναμένεται να εμίσει πο ύ ρή ορα με συνέπεια να ρειαστεί να συ ε εί και αυτή συντομότερα. Υψη οί ρυ μοί προώ ησης α προκα έσουν αύξηση της συ νότητας συ ο ής της πα αιότερης ενεάς ή και ό ν τ ν ενεών. Επιπροσ έτ ς, η πρό ρη προώ ηση αντικειμέν ν αυξάνει την πι ανότητα της εμφάνισης οικο ενειοκρατίας, κα ώς αντικείμενα που έ ουν ε καταστα εί μόνιμα στην πα αιά ενιά διατηρούν εν ζ ή τους νεκρούς απο όνους τους στη νέα ενεά, προκα ώντας μία τε νητή αύξηση του ρυ μού επι ί σης. Τρίτον, υπάρ ουν σημαντικές ενδείξεις π ς τα προσφάτ ς δημιουρ η έντα αντικείμενα τροποποιούνται συ νότερα από ότι τα πα αιότερα. Αν τα αντικείμενα αυτά προ η ούν πρό ρα, ο υψη ός ρυ μός επεξερ ασίας τους α προσ έσει επιπ έον πίεση στις ειτουρ ίες ε ραφής του τροποποιητή. Αυτό είναι ιδιαίτερα ανεπι ύμητο, ειδικά στην περίπτ ση όπου το κόστος του φρά ματος ε ραφής είναι υψη ό. Τέ ος, η προώ ηση αντικειμέν ν προκα εί την αραί ση τ ν δεδομέν ν επεξερ ασίας ενός προ ράμματος. Η ταυτό ρονη ε α ιστοποίηση του ρόνου διάρκειας τ ν μικρών συ ο ών κα ώς και του π ή ους τ ν μειζόν ν και πιο ακρι ών συ ο ών από τη μία π ευρά, και η αποφυ ή της σημαντικής επι άρυνσης του τροποποιητή με ενέρ ειες που αφορούν στην αυτόματη δια είριση μνήμης από την ά η, είναι οι δύο αντικρουόμενοι στό οι μεταξύ τ ν οποί ν η ενεα ο ική ορ άν ση προσπα εί να επιτύ ει συμ ι ασμό. 7.4 Πο απ ές ενεές Η προσ ήκη περισσότερ ν ενεών αποτε εί μία απάντηση στο δί ημμα του πώς να διατηρη- ούν μικροί ρόνοι παύσης ια τις συ ο ές του ρεφοκομείου ενώ ταυτό ρονα να αποφευ- ούν οι π ήρεις συ ο ές ό του ότι η πα αιότερη ενεά εμίζει ρή ορα. Ο ρό ος τ ν ενδιάμεσ ν ενεών αφορά το φι τράρισμα εκείν ν τ ν αντικειμέν ν που έ ουν επι ιώσει από τη συ ο ή της νεότερης ενεάς και δε ζουν πο ύ ακόμα. Εάν ένας συ έκτης προ εί ό α τα ζ ντανά αντικείμενα μαζικά από τη νεότερη ενεά, στους επιζώντες α περι αμ άνονται και τα προσφάτ ς δημιουρ η έντα αντικείμενα παρά το ότι αυτά αναμένεται να πε άνουν σύντομα. Με τη ρήση πο απ ών ενεών, το μέ ε ος της μικρότερης ενεάς δύναται να κρατη εί αρκετά μικρό ώστε να ικανοποιούνται οι απαιτήσεις που αφορούν στους ρόνους παύσης ρίς να αυξάνεται ο ό κος τ ν δεδομέν ν που πε αίνουν στην πα αιότερη ενεά σύντομα μετά την προα ή τους σε αυτή.

105 7.5 Καταγραφή ηλικίας 105 Η ρήση πο απ ών ενεών μπορεί να έ ει πο απ ά μειονεκτήματα. Τα περισσότερα συστήματα συ έ ουν ό ες τις νέες ενεές πριν συ έξουν την πα αιότερη. Η τε νική προσφέρει το π εονέκτημα π ς απαιτείται η κατα ραφή μόνο τ ν δεικτών από αντικείμενα μιας πα ιάς ενεάς προς αντικείμενα μιας νέας. Δυστυ ώς όμ ς οι δείκτες αυτοί εμφανίζονται σπανιότερα από ότι οι αντίστοι οι δείκτες με αντίστροφη κατεύ υνση. Παρότι ο απαιτούμενος ρόνος ια τη συ ο ή μιας ενδιάμεσης ενεάς είναι μικρότερος από τον αντίστοι ο ρόνο ια τη συ ο ή ο όκ ηρου του σ ρού, οι ρόνοι παύσης α είναι με α ύτεροι από τους αντίστοι- ους ρόνους παύσης της συ ο ής της νεότερης ενιάς μόνο. Οι ενεα ο ικοί συ έκτες πο απ ών ενεών επίσης είναι πιο σύν ετοι στην υ οποίηση και μπορεί να εισά ουν επιπρόσ ετα κόστη: το κρίσιμο από άποψη επίδοσης τμήμα του κώδικα που υ οποιεί την εξερεύνηση του ράφου τ ν αντικειμέν ν κα είται να ξε ρίζει ανάμεσα σε πο ές ενεές και ό ι μόνο δύο (κάτι το οποίο συνή ς πρα ματοποιείται με έναν απ ό έ ε ο έναντι μιας διεύ υνσης, η οποία μπορεί να είναι μία στα ερά μετα ώττισης). Η αύξηση τ ν ενεών επίσης αναμένεται να αυξήσει το π ή ος τ ν δημιουρ ούμεν ν δια ενεα ο ικών δεικτών, ε ονός το οποίο με τη σειρά του ενδέ εται να αυξήσει την πίεση στο φρά μα ε ραφής του τροποποιητή. Τέ- ος, η ορ άν ση του σ ρού σε πο απ ές ενεές τείνει να αυξάνει το μέ ε ος του συνό ου ριζών τ ν νεότερ ν ενεών κα ώς προά ονται αντικείμενα τα οποία δε α εί αν προα εί αν ο ώρος τ ν ενδιάμεσ ν ενεών εί ε ρησιμοποιη εί ια την αύξηση του με έ ους της νεότερης ενεάς. Παρότι πο οί αρ ικοί ενεα ο ικοί συ έκτες ια τις ώσσες Smalltalk και Lisp ειτουρ- ούσαν με πο ές ενεές, σ εδόν ό οι οι σύ ρονοι ενεα ο ικοί συ έκτες ια αντικειμενοστρεφείς ώσσες ρησιμοποιούν μόνο δύο. Σύμφ να με τους Marlow κ.ά. [80], ακόμη και όταν ο σ ρός ορ ανώνεται σε περισσότερες τ ν δύο ενεών, όπ ς ια παράδει μα συμ- αίνει στις υ οποιήσεις συναρτησιακών σσών όπου οι ρυ μοί έννησης και νησιμότητας αντικειμέν ν είναι ιδιαίτερα υψη οί, δύο ενεές είναι δια έσιμες από προεπι ο ή. Σε αυτές τις περιπτώσεις, μη ανισμοί στο εσ τερικό τ ν ενεών και ειδικότερα της νεότερης μπορούν να ρησιμοποιη ούν ια έ ε ο του ρυ μού προα ής τ ν αντικειμέν ν. 7.5 Κατα ραφή η ικίας Η κατα ραφή της η ικίας τ ν αντικειμέν ν είναι άρρηκτα συνδεδεμένη με την πο ιτική προα ής τους. Η ρήση πο απ ών ενεών παρέ ει ένα μη ακρι ή μη ανισμό καταμέτρησης της η ικίας τ ν αντικειμέν ν. Στη συνέ εια εξετάζουμε τρόπους με τους οποίους η νεότερη ενιά μπορεί να δομη εί ούτ ς ώστε να ε έ εται ο ρυ μός προα ής. Η απ ούστερη ορ άν ση είναι κά ε ενεά εκτός από την πα αιότερη να υ οποιη εί ς ένας απ ός ημι ώρος. Οποτεδήποτε συ έ εται η νεότερη ενεά, τα επιζώντα αντικείμενα προά- ονται μαζικά στην επόμενη ενεά. Η στρατη ική αυτή αρακτηρίζεται από απ ότητα και έ τιστη ρησιμοποίηση του ώρου του σ ρού που φι οξενεί τη νεότερη ενεά. Δεν απαιτείται η κατα ραφή της η ικίας ια κά ε αντικείμενο ξε ριστά, ούτε και υπάρ ει η ανά κη ια τη διατήρηση ενός εφεδρικού ημι ώρου αντι ραφής ια κά ε ενεά (εκτός ίσ ς ια την πα αιότερη, αν αυτή δια ειρίζεται από συ ο ή με αντι ραφή). Οι Blackburn κ.ά. [20] αναφέρουν πώς πο ενεα ο ικοί συ έκτες που ρησιμοποιούνται από το δια ειριστή μνήμης MMTk στην εικονική μη ανή ια τη ώσσα Java προά ουν με αυτόν τον τρόπο τα αντικείμενα. Ωστόσο, οι Barrett και Zorn [14] διαπίστ σαν πώς η μαζική προα ή κά ε ζ ντανού αντικειμένου (σε ένα σύστημα Lisp) ενδέ εται να προκα έσει ρυ μούς προα ής από 50% έ ς και 100% υψη ότερους συ κριτικά με μία στρατη ική όπου τα αντικείμενα προά ονται μόνο αφού έ ουν επι ιώσει από περισσότερες της μιας ε ασσόν ν συ ο ών.

106 106 Κεφάλαιο 7. Γενεαλογική συλλογή απορριμμάτων Η προα ή αντικειμέν ν μπορεί να κα υστερήσει με τη δόμηση μιας ενεάς σε δύο ή περισσότερους ημι ώρους ήρανσης. Η τε νική αυτή επιτρέπει στα αντικείμενα να αντι ράφονται πο ές φορές από το ώρο-από στο ώρο-προς εντός μιας ενεάς πριν αυτά προα ούν στην αμέσ ς επόμενη. Ο συ έκτης τ ν Lieberman και Hewitt [79] συ έ ει μια ενεά πο - ές φορές πριν τε ικά προα ά ει μαζικά τα αντικείμενα που επι ιώνουν. Σε κά ε περίπτ ση, είτε ό α τα ζ ντανά αντικείμενα του ώρου-από αντι ράφονται στο ώρο-προς εντός της ενεάς είτε προά ονται στην επόμενη ενεά, ανά ο α με την η ικία της ενεάς συνο ικά. Ενώ αυτή η διευ έτηση προσφέρει στα πα αιότερα αντικείμενα της ενεάς περισσότερο ρόνo ια να πε άνουν, τα νεότερα αντικείμενα ενδέ εται να προα ούν πρό ρα. Η εικονική μη ανή ExactVM επίσης υ οποίησε τη νεότερη από τις δύο ενεές ς ένα ζεύ ος ημι ώρ ν ήρανσης στόσο ή ε ε την προα ή κά ε αντικειμένου ξε ριστά, ρησιμοποιώντας 5 bits από την επικεφα ίδα δύο έξε ν αυτού ια να κατα ράφει την η ικία του. Παρότι η τε νική αυτή αποτρέπει την πρό ρη προα ή τ ν νεότερ ν αντικειμέν ν, προσ έτει μια ειτουρ ία πρόσ εσης κατά την επεξερ ασία κά ε ζ ντανού αντικειμένου της νεότερης ενεάς. Η ορ άν ση μιας ενεάς ς συστοι ία κάδ ν επιτρέπει ένα επτότερο η ικιακό δια ρισμό τ ν αντικειμέν ν ρίς την ξε ριστή απο ήκευση της η ικίας ια κά ε αντικείμενο. Μια ενεά διαιρείται σε ένα αρι μό από κάδους (υπο ώρους) και τα αντικείμενα μετα ι άζονται από τον ένα κάδο στον επόμενο σε κά ε συ ο ή. Τα αντικείμενα από τον πα αιότερο κάδο προ ούνται στην αμέσ ς επόμενη ενεά. Με αυτήν την ορ άν ση, σε ένα σύστημα με n κάδους, ένα αντικείμενο δεν προ είται στην επόμενη ενεά αν δεν έ ει επι ιώσει από n συ ο ές. Ο μετα ττιστής Glasgow Haskell Compiler (ghc) επιτρέπει αυ αίρετο π ή ος κάδ ν εντός μιας ενεάς. Ο Shaw [105] διαιρεί επιπ έον κά ε κάδο σε ένα ζεύ ος ημι ώρ ν και τα αντικείμενα που επι ιώνουν από τη συ ο ή αντι ράφονται μεταξύ κά ε ζεύ ους b φορές πριν μετακινη ούν στον επόμενο κάδο. Με τον τρόπο αυτό, ένα αντικείμενο προά εται στην επόμενη ενεά αν έ ει επι ιώσει από 2b 1 έ ς και 2b συ ο ές. Κα ώς μά ιστα οι ενεές είναι συνε όμενες, ο ηραιότερος κάδος μπορεί να συ νευτεί με την πα αιά ενεά κα υστερώντας την προα ή μέ ρις ότου ο ώρος-προς αυτού ειτνιάσει με την πα αιά ενεά. Εκείνη τη ρονική στι μή, ο όκ ηρος ο κάδος προά εται με απ ή ρύ μιση του συνόρου μεταξύ τ ν ενεών. Είναι σημαντικό να κατα ά ει κανείς τις διαφορές μεταξύ κάδ ν και ενεών. Και οι δύο δια- ρίζουν αντικείμενα με άση την η ικία τους, στόσο διαφορετικές ενεές συ έ ονται με διαφορετική συ νότητα ενώ ό οι οι κάδοι στο εσ τερικό μιας ενεάς συ έ ονται ταυτό- ρονα. Επιπ έον, κα ώς μια ενεά ενδέ εται να συ έ εται αρ ότερα από ότι μια ά η, είναι απαραίτητη η κατα ραφή δεικτών από αντικείμενα που ανήκουν σε μία πα αιά ενεά προς αντικείμενα που ανήκουν σε μία νέα ενεά. Αντί ετα, δεν είναι απαραίτητη η κατα ραφή δεικτών από αντικείμενα ενός κάδου προς αντικείμενα ενός ά ου κάδου στο εσ τερικό μιας ενεάς. Με τη διαίρεση της νεότερης ενεάς σε κάδους και την ε άττ ση της πρό ρης προα ής, η πίεση στο φρά μα ε ραφής μπορεί να ε αττ εί με ταυτό ρονο έ ε ο της προα ής ρίς να απαιτείται η απο ήκευση της η ικίας ανά αντικείμενο. Ό ες οι παραπάν ορ ανώσεις αρακτηρίζονται από σπατά η ώρου κα ώς ο μισός ώρος μιας ενεάς δεσμεύεται ια αντι ραφή. Ο Ungar [117] ορ άν σε τη νέα ενεά σε ένα με ά ο ώρο δημιουρ ίας (εκ ώρησης) ο οποίος είναι ν στός και ς εδέμ και σε δύο μικρότερους ημι ώρους επι ί σης, το ώρο-από επι ί σης και το ώρο-προς επι ί σης. Ως συνή ς, τα αντικείμενα εκ ρούνται στην περιο ή της εδέμ η οποία συ έ εται μαζί με τον ώρο-προς επι ί σης σε κά ε μικρή συ ο ή. Τα ζ ντανά αντικείμενα της εδέμ προά ονται στο ώροπρος επι ί σης, ενώ τα ζ ντανά αντικείμενα του ώρου-από επι ί σης είτε αντι ράφονται

107 7.6 Προσαρμογή στη συμπεριφορά του προγράμματος 107 στο ώρο-προς επι ί σης είτε προά ονται στην επόμενη ενεά, ανά ο α με την η ικία τους. Η ορ άν ση αυτή ε τιώνει τη ρησιμοποίηση του δια έσιμου ώρου κα ώς το μέ ε ος της εδέμ είναι κατά πο ύ με α ύτερο από το συνο ικό μέ ε ος τ ν ημι ώρ ν επι ί σης. Για παράδει μα, στην εικονική μη ανή HotSpot ια τη ώσσα Java η προεπι ε μένη ανα ο- ία είναι 32:1. Η πο ιτική προα ής δεν ορίζει ένα αυστηρό όριο η ικίας, α ά αντί ετα προσπα εί να διατηρήσει την περιο ή τ ν ημι ώρ ν επι ί σης μισο εμάτη. 7.6 Προσαρμο ή στη συμπεριφορά του προ ράμματος Η προσαρμο ή της διαμόρφ σης ενός δια ενεα ο ικού συ έκτη στη συμπεριφορά του τροποποιητή είναι απαραίτητη κα ώς οι κατανομές τ ν ρόν ν ζ ής τ ν αντικειμέν ν δεν είναι τυ αίες α ά ούτε και στατικές. Τα α η ινά προ ράμματα συνή ς ειτουρ ούν σε φάσεις και υπάρ ει μια ευρεία ποικι ία κοινών μοτί ν συμπεριφοράς. Η ύπαρξη ενός συνό ου από ζ ντανά αντικείμενα που συσσ ρεύονται σταδιακά σε μια ενεά του σ ρού και στη συνέ εια πε αίνουν ταυτό ρονα εμφανίζεται συ νά στην πράξη. Ενα ακτικά, αφού δια ούν μια συ- κεκριμένη η ικία, τα αντικείμενα αυτά μπορεί να συνε ίσουν να ζουν ια πο ύ καιρό. Μια μη αυστηρή συμμόρφ ση της δημο ραφίας προς την ασ ενή ενεα ο ική υπό εση μπορεί να δημιουρ ήσει προ ήματα στο συ έκτη. Εάν ένας με ά ος ό κος δεδομέν ν που ζει αρκετά, ώστε να προα εί σε μια πα αιότερη ενεά, πε άνει σύντομα μετά την προα ή, η επίδοση α μει εί. Οι Ungar και Jackson [115], [116] έ ουν προτείνει διάφορους μη ανισμού ε έ ου της πο ιτικής προα ής. Η προσαρμο ή τ ν συ εκτών απορριμμάτ ν στη συμπεριφορά του τροποποιητή είναι ενικότερα επι υμητή και ρησιμοποιείται με στό ο τόσο τη μεί ση τ ν αναμενόμεν ν ρόν ν παύσης όσο και τη ε τί ση της συνο ικής ρυ μαπόδοσης. Ο απ ούστερος μη ανισμός δρομο ό ησης του συ έκτη ορίζει την κ ήση του τε ευταίου οποτεδήποτε ο εκ ρητής ξεμένει από μνήμη. Ένας ενεα ο ικός δια ειριστής μνήμης στόσο μπορεί να ε έ ξει τους αναμενόμενους ρόνους παύσης προσαρμόζοντας κατά η α το μέ ε ος της νεότερης ενεάς: μια μικρότερη ενεά μειώνει τον ό κο τ ν αντικειμέν ν που α διασ ούν α ά και τον ό κο τ ν αντικειμέν ν που α εκκα αρισ ούν κατά τη συ ο ή αυτής. Το μέ ε ος της νεότερης ενεάς επηρεάζει επίσης το ρυ μό προα ής αντικειμέν ν μεταξύ δύο διαφορετικών ενεών. Αν η ενεά είναι πο ύ μικρή και δεν παρέ ει στα αντικείμενα αρκετό ρόνο ια να πε άνουν, ο ρυ μός προα ής α είναι υψη ότερος. Αν αντί ετα η νεότερη ενεά έ ει πο ύ με ά ο μέ- ε ος, το διάστημα μεταξύ δύο διαδο ικών συ ο ών α είναι με α ύτερο και ένα μικρότερο ποσοστό αντικειμέν ν α επι ιώσει και α φ άσει στην πα αιότερη ενεά Συ ο ή απορριμμάτ ν κατά Appel Ο Appel [4] εισή α ε έναν προσαρμοστικό ενεα ο ικό συ έκτη απορριμμάτ ν ια τη ώσσα προ ραμματισμού Standard ML, ο οποίος δο έντος ενός προϋπο ο ισμού μνήμης, αφιερώνει το μέ ιστο δυνατό ώρο στη νεότερη ενεά μη ρησιμοποιώντας στα ερά με έ η ια τις ενεές του σ ρού. Το σ ήμα αυτό είναι σ εδιασμένο ειδικά ια περι ά οντα όπου η νησιμότητα τ ν νέ ν αντικειμέν ν είναι υψη ή: στη ώσσα ML, τυπικά μό ις το 2% τ ν αντικειμέν ν της νέας ενεάς επι ί νε από έναν κύκ ο συ ο ής. Ο σ ρός διαιρείται σε τρεις περιο ές: την πα αιά ενεά, ένα εφεδρικό αντί ραφο και τη νέα ενεά. Η συ ο ή της νεότερης ενεάς προά ει ό ους τους νέους επιζώντες στο τέ ος της πα αιάς ενεάς. Μετά τη συ ο ή, ο ώρος που δεν ρειάζεται ια αντικείμενα της πα αιάς ενεάς διαιρείται

108 108 Κεφάλαιο 7. Γενεαλογική συλλογή απορριμμάτων ισομερώς και προς δημιουρ ία του εφεδρικού αντι ράφου και μιας καινούριας νέας ενεάς. Αν ο ώρος που εκ ρείται στη νέα ενεά πέσει κάτ από ένα ορισμένο κατώφ ι, συ έ εται ο όκ ηρος ο σ ρός. Το π εονέκτημα της συ ο ής κατά Appel είναι π ς με τη δυναμική προσαρμο ή του με έ- ους του εφεδρικού αντι ράφου, προσφέρεται κα ή ρησιμοποίηση μνήμης και μειώνεται το π ή ος απαιτούμεν ν κύκ ν συ ο ής σε σύ κριση με διαμορφώσεις που ρησιμοποιούν μαζική προα ή αντικειμέν ν και στα ερό μέ ε ος ια τη νέα ενεά. Ωστόσο, απαιτείται προσο ή ώστε να αποφευ εί η υπερ ο ική αύξηση της συ νότητας κ ήσης του συ έκτη. Benchmarks με υψη ούς ρυ μούς εκ ώρησης και με αμη ό ρυ μό προα ής αντικειμέν ν εμφανίζονται συ νά στην πράξη. Αυτό μπορεί να οδη ήσει σε μία κατάσταση όπου ο ώρος του σ ρού που κατα αμ άνει η νέα ενεά συρρικνώνεται σε τέτοιο α μό ώστε η συ νότητα τ ν μικρών συ ο ών να είναι υπερ ο ικά υψη ή α ά ο ό κος τ ν δεδομέν ν που προά ονται να μην είναι επαρκής ια την πυροδότηση μιας με ά ης συ ο ής. Για να αντιμετ πισ εί το πρό ημα, η πα αιά ενεά πρέπει να συ έ εται οποτεδήποτε το μέ ε ος της νέας ενεάς πέσει κάτ από ένα ορισμένο ε ά ιστο κατώφ ι Αναδραστικός έ ε ος προα ής Ά α σ ήματα ια τον έ ε ο του ρυ μού προα ής σ ετίζονται πιο άμεσα με στό ους που αφορούν τους ρόνους παύσης. Οι Ungar και Jackson [115], [116] προτείνουν τη δημο ραφική προα ή με ανάδραση ώστε να εξομα ύνουν τις παύσεις μακράς διάρκειας που επιφέρει η προα ή αντικειμέν ν που πε αίνουν σύντομα μετά την προα ή. Ο ό κος τ ν δεδομέν ν που προά ονται σε μία συ ο ή ρησιμοποιείται ια την πρό εψη της ρονικής διάρκειας του επόμενου κύκ ου συ ο ής και ια να επιτα ύνει ή επι ραδύνει την προα ή. Παρότι ο μη ανισμός αυτός μπορεί να ε έ ξει τους ρυ μούς προα ής, αδυνατεί να υπο- ι άσει αντικείμενα από μια πα αιότερη ενεά σε μία νεότερη. Οι Barrett και Zorn [15] μετα ά ουν το σύνορο μεταξύ δύο ενεών και προς τις δύο κατευ ύνσεις. Η τε νική τους αρακτηρίζεται από το κόστος της επι ε ημένης κατα ραφής περισσότερ ν δεικτών, κα ώς η έση του δια ενεα ο ικού συνόρου δεν μπορεί να προ εφ εί στατικά. 7.7 Δια ενεα ο ικοί δείκτες Οι ρίζες μιας ενεάς πρέπει να ανακα υφ ούν πριν αυτή συ ε εί. Οι ρίζες ια μια ενεά δεν περι αμ άνουν μόνο τους δείκτες που ρίσκονται σε κατα ρητές, στη στοί α και σε κα ο ικές μετα ητές α ά και δείκτες προς αντικείμενα της ενεάς από αντικείμενα που ζουν σε κάποια ά η περιο ή του σ ρού η οποία δε συ έ εται ταυτό ρονα με τη ενεά. Αυτές οι περιο ές τυπικά περι αμ άνουν τις πα αιότερες ενεές α ά και περιο ές εκτός του ενεα ο ικού σ ρού όπ ς ώροι που φι οξενούν πο ύ με ά α αντικείμενα και ώροι που δε συ έ ονται ποτέ, όπ ς οι ώροι που απο ηκεύουν α άνατα αντικείμενα και πι ανώς κώδικα. Όπ ς έ ουμε εξη ήσει, οι δια ενεα ο ικοί δείκτες δημιουρ ούνται είτε με την αρ ικοποίηση ε ραφών κατά τη δημιουρ ία τ ν αντικειμέν ν, είτε από ενημερώσεις πεδί ν δεικτών αντικειμέν ν από τον τροποποιητή είτε τέ ος κατά την μετακίνηση αντικειμέν ν σε διαφορετικές ενεές. Γενικά, οι δείκτες αυτοί πρέπει να εντοπίζονται τη στι μή της δημιουρ ίας τους και να κατα ράφονται ώστε να μπορούν να ρησιμοποιη ούν ς ρίζες κατά τη συ ο ή μιας ενεάς. Κά ε δείκτης που πρέπει να κατα ράφεται κα είται συνή ς και ενδιαφέρ ν δείκτης.

109 7.7 Διαγενεαλογικοί δείκτες 109 Σ ήμα 7.1: Δια ενεα ο ικοί δείκτες. Η διατήρηση τ ν ζ ντανών αντικειμέν ν της νέας ενεάς ρίς την εξερεύνηση ό ου του σ ρού, απαιτεί ένα μη ανισμό και μια δομή δεδομέν ν ια την κατα ραφή τ ν αντικειμέν ν S και U που περιέ ουν δείκτες προς αντικείμενα της νέας ενεάς Σύνο α ανάμνησης Οι δομές δεδομέν ν που ρησιμοποιούνται ια την κατα ραφή δια ενεα ο ικών δεικτών ονομάζονται σύνο α ανάμνησης. Τα σύνο α ανάμνησης κατα ράφουν τη έση προέ ευσης διαφόρ ν δεικτών μεταξύ διαφορετικών ώρ ν του σ ρού. Κατα ράφεται η προέ ευση και ό ι ο προορισμός ενός δείκτη ια δύο ό ους. Πρώτον, επιτρέπεται σε ένα μετακινούντα συ έκτη να ενημερώσει το πεδίο προέ ευσης με τη νέα διεύ υνση ενός αντικειμένου που έ ει αντι ραφεί η προα εί. Δεύτερον ένα πεδίο προέ ευσης κάποιου δείκτη μπορεί να ενημερ εί πο ές φορές στο διάστημα ανάμεσα σε δύο διαδο ικούς κύκ ους συ ο ής και έτσι αν ο συ έκτης υμάται την προέ ευση του δείκτη, εξασφα ίζεται π ς αυτός επεξερ άζεται το πρα ματικό αντικείμενο προς το οποίο αναφέρεται ο δείκτης τη στι μή της προέ ευσης και ό ι τα αντικείμενα προορισμούς ενδιάμεσ ν παρ ημέν ν τιμών του αυτού. Επομέν ς το σύνο ο ανάμνησης ια κά ε ενεά απο ηκεύει τις έσεις εκείνες στις οποίες ρίσκεται ένας πι ανόν ενδιαφέρ ν δείκτης προς κάποιο αντικείμενο της ενεάς. Οι διάφορες υ οποιήσεις τ ν συνό ν ανάμνησης διαφέρουν ς προς την ακρί εια με την οποία κατα ράφουν τέτοιες έσεις. Η επι ο ή της ακρί ειας προσπα εί να επιτύ ει ένα συμ ι ασμό μεταξύ της επι άρυνσης του τροποποιητή, του απαιτούμενου ώρου απο ήκευσης τ ν συνό ν ανάμνησης και του κόστους επεξερ ασίας τους από το συ έκτη. Εμφανώς είναι επι υμητός ο εντοπισμός και η κατα ραφή όσο το δυνατόν ι ότερ ν δεικτών. Οι ενημερώσεις δεικτών από το συ έκτη κατά τη μετακίνηση αντικειμέν ν εντοπίζονται εύκο α. Οι ε ραφές δεικτών από τον τροποποιητή μπορούν να ανι νευ ούν από ένα φρά μα ε ραφής ο ισμικού, το οποίο μπορεί να εισα εί αυτόματα από το μετα ττιστή πριν από κά ε ειτουρ ία ε ραφής ενός δείκτη. Αυτό έ αια δεν είναι εφικτό αν ο μετα ττιστής της ώσσας είναι μη συνερ ατικός. Στην περίπτ ση αυτή, οι έσεις τ ν ειτουρ ιών ε ραφής μπορούν συ νά να κα ορισ ούν από το δια ειριστή εικονικής μνήμης του ειτουρ ικού συστήματος. Η συ νότητα τ ν ενημερώσε ν δεικτών διαφέρει μεταξύ τ ν διαφορετικών σσών προ- ραμματισμού και τ ν υ οποιήσε ν αυτών. Ο Zorn εφαρμόζοντας στατική ανά υση σε μια σουίτα προ ραμμάτ ν σε Lisp [124], υπο ό ισε τη συ νότητα τ ν ενημερώσε ν δεικτών από 13% έ ς και 15%, ενώ ο Appel υπο ό ισε μία αμη ότερη στατική συ νότητα της τάξης του

110 110 Κεφάλαιο 7. Γενεαλογική συλλογή απορριμμάτων 3% στη ώσσα Lisp [3], και μία δυναμική συ νότητα ρόνου εκτέ εσης της τάξης του 1% ια τη ώσσα ML [4]. Οι Dieckmann και Hölzle [43] ρήκαν τέ ος πώς τα προ ράμματα σε ώσσα Java μπορεί να διαφέρουν σημαντικά ς προς τη συ νότητα τ ν ενημερώσε ν δεικτών (το ποσοστό τ ν προσ άσε ν στο σ ρό που αφορούσε απο ηκεύσεις τιμών σε πεδία δείκτες κυμαινόταν από 6% έ ς και 70%). Αν τα π αίσια αυτά σαρώνονται ς μέρος του συνό ου ριζών σε κά ε συ ο ή, είναι δυνατή η ανακά υψη τ ν έσε ν τους που περιέ ουν δείκτες. Επιπ έον, αν ο μετα ττιστής μπορεί να ταυτοποιήσει τις ειτουρ ίες ε ραφής στη στοί α, τότε δε ρειάζεται να τοπο ετήσει φρά ματα ε ραφής πριν από αυτές. Επιπρόσ ετα, πο οί δείκτες αναφέρονται σε αντικείμενα της ίδιας διαμέρισης. Παρότι οι απο ηκεύσεις πι ανώς εντοπίζονται, οι δείκτες δεν είναι ενδιαφέροντες από ενεα ο ική άποψη και δε ρειάζεται να κατα ραφούν. Εάν επι η εί μια τάξη ς προς τη σειρά συ ο ής τ ν διαφόρ ν ενεών, το π ή ος τ ν δια ενεα ο ικών δεικτών που πρέπει να κατα ραφούν μπορεί να μει εί ακόμη περισσότερο. Εξασφα ίζοντας πώς οποτεδήποτε συ έ εται μια ενεά συ έ ονται και ό ες οι νεότερες ενεές από αυτή, μόνο οι δείκτες από πα αιά αντικείμενα προς νέα αντικείμενα πρέπει να κατα ραφούν. Πο ές ειτουρ ίες ε ραφής δεικτών αφορούν την αρ ικοποίηση πεδί ν αντικειμέν ν που μό ις έ ουν δημιουρ η εί. Εξ ορισμού, οι δείκτες αυτοί αναφέρονται σε ηραιότερα αντικείμενα. Δυστυ ώς πο ές ώσσες δια ρίζουν την εκ ώρηση μνήμης ια ένα αντικείμενο από την αρ ικοποίηση τ ν πεδί ν του τε ευταίου, κα ιστώντας δύσκο η τη διάκριση τ ν ειτουρ ιών ε ραφής δεικτών που δεν αφορούν αρ ικοποιήσεις και πι ανόν δημιουρ ούν δείκτες από μια πα αιά ενεά προς μία νέα ενεά. Ά ες ώσσες παρέ ουν περισσότερη υποστήριξη στο μετα ττιστή όσον αφορά την ανα νώριση τ ν ειτουρ ιών ε ραφής δεικτών που δε ρειάζονται κάποιο φρά μα ε ραφής. Η π ειοψηφία τ ν ειτουρ- ιών ε ραφής δεικτών σε μία α νή οκνηρή ώσσα συναρτησιακού προ ραμματισμού όπ ς η Haskell κάνει τους δείκτες να αναφέρονται σε ηραιότερα αντικείμενα. Η ώσσα ML απαιτεί από τον προ ραμματιστή να σημειώσει ρητά τις τροποποποιήσιμες μετα ητές: οι ειτουρ ίες ε ραφής αυτών τ ν μετα ητών είναι η μόνη πη ή δημιουρ ίας δεικτών από αντικείμενα μιας πα αιάς ενεάς προς αντικείμενα μιας νέας ενεάς. Το σκηνικό στις αντικειμενοστρεφείς ώσσες προ ραμματισμού από την ά η όπ ς ια παράδει μα στη Java είναι πιο πο ύπ οκο. Η φι οσοφία προ ραμματισμού εδώ ασίζεται στην ενημέρ ση της κατάστασης αντικειμέν ν, κάτι που οδη εί φυσικά στη δημιουρ ία περισσότερ ν δεικτών από αντικείμενα μιας νέας ενεάς προς αντικείμενα μιας πα αιάς ενεάς. Σε σ ρούς με πο απ ές ανεξάρτητα συ ε όμενες ενεές απαιτείται διαφορετική τε νική φι τραρίσματος δεικτών. Για παράδει μα ένας συ έκτης μπορεί να εφαρμόσει ευριστικές ια να αποφασίσει ποιο ώρο α συ έξει, δίνοντας προτεραιότητα στους ώρους με το μικρότερο π ή ος ζ ντανών αντικειμέν ν. Στην περίπτ ση αυτή το φρά μα ε ραφής πρέπει να κατα ράψει δείκτες και προς τις δύο κατευ ύνσεις. Κα ώς αυτή η σ εδίαση αναμένεται να αυξήσει το π ή ος τ ν δια ενεα ο ικών δεικτών προς κατα ραφή, είναι έ τιστη ια ρήση σε μια υ οποίηση όπου το μέ ε ος του συνό ου ανάμνησης είναι ανεξάρτητο του π ή ους τ ν εν υμούμεν ν δεικτών. 7.8 Δια είριση ώρου Η νεότερη ενεά συνή ς δια ειρίζεται με αντι ραφή. Τα επιζώντα αντικείμενα αντι ράφονται είτε σε ένα φρέσκο ημι ώρο στην ίδια ενεά είτε σε μία πα αιότερη ενεά. Οι συ ο ές τ ν νέ ν ενεών αναμένεται να είναι συ νές και σύντομες σε διάρκεια, αμ άνοντας υπόψη την

111 7.9 Αφηρημένη γενεαλογική συλλογή απορριμμάτων 111 ασ ενή ενεα ο ική υπό εση. Από την ά η π ευρά, οι συ ο ές τ ν πα αιότερ ν ενεών αναμένεται να είναι ι ότερο συ νές α ά να διαρκούν πο ύ, κα ώς μαζί με αυτές πρέπει να συ ε ούν και οι νεότερες ενεές προκειμένου να αποφευ εί το κόστος ρήσης ενός φρά ματος ε ραφής που κατα ράφει δείκτες και προς τις δύο κατευ ύνσεις. Συνή ς μια συ ο ή της πα αιότερης ενεάς α συ έξει ό ες τις περιο ές του σ ρού εκτός ίσ ς από την περιο ή όπου φι οξενούνται α άνατα αντικείμενα (παρότι οι δείκτες της περιο ής αυτής αντιμετ πίζονται ς ρίζες και ενδέ εται να ενημερ ούν). Μια π ήρης συ ο ή του σ ρού δεν απαιτεί τη ρήση συνό ν ανάμνησης, εκτός ίσ ς ια τοπο εσίες της περιο ής α άνατ ν αντικειμέν ν στην περίπτ ση που αυτή δε σαρώνεται. Έ ει προτα εί μία ευρεία κάμα στρατη ικών δια είρισης της πα αιότερης ενεάς. Η συ - ο ή με αντι ραφή μεταξύ ημι ώρ ν δεν είναι η κα ύτερη επι ο ή ειδικά αν ά ει κανείς υπόψη π ς και η νεότερη ενεά συ έ εται με την ίδια τε νική: η απαίτηση της συ ο ής ια την διατήρηση ενός εφεδρικού ώρου αντι ραφής κατα ή ει να δαπανά το μισό ώρο στο σ ρό, κάτι που έ ει ς αποτέ εσμα την αύξηση της συ νότητας τ ν συ ο ών ό ν τ ν ενεών. Επίσης τα μακρό ια αντικείμενα μετακινούνται συνέ εια. Οι Blackburn κ.ά ισ υρίζονται [18] πώς η συ ο ή με σήμανση και εκκα άριση προσφέρει κα ύτερη ρησιμοποίηση του δια έσιμου ώρου, ειδικά σε μικρούς σ ρούς. Το μειονέκτημα της συ ο ής με σήμανση και εκκα άριση, η οποία δεν μετακινεί τα ζ ντανά αντικείμενα, αφορά στη μεί ση της επίδοσης από τον πι ανό κατακερματισμό. Η ύση είναι η προσ ήκη μιας φάσης συμπύκν σης της πα αιάς ενεάς οποτεδήποτε ο κατακερματισμός επηρεάζει δυσμενώς την επίδοση. Η συμπύκν ση επίσης μπορεί να δια ειρισ εί τα μακρό ια αντικείμενα με ειδικό τρόπο, όπ ς είδαμε στο κεφά αιο 3. Οι ενεα ο ικοί συ έκτες σ εδόν πάντοτε δια ρίζουν τις ενεές τους φυσικά και ό ι εικονικά. Αυτό απαιτεί τη δια είριση τ ν νεότερ ν ενεών από συ ο ή με αντι ραφή. Ένας προσαρμοστικός συ έκτης αντι ραφής σαν και αυτόν του Appel ια παράδει μα συντηρητικά απαιτεί ο εφεδρικός ώρος αντι ραφής να έ ει το ίδιο μέ ε ος με την περιο ή που συ έ εται κα ώς στη ειρότερη περίπτ ση ό α τα αντικείμενα μπορεί να επι ιώσουν. Στην πράξη έ αια τα περισσότερα αντικείμενα δεν επι ιώνουν από μια συ ο ή της νέας ενεάς. Οι McGachey κ.ά. [82] ισ υρίζονται πώς η ρησιμοποίηση του ώρου μπορεί να ε τι εί με τη διατήρηση ενός μικρότερου με έ ους εφεδρικού ώρου αντι ραφής και την ενα α ή μεταξύ συ ο ής με αντι ραφή σε συ ο ή με σήμανση και συμπύκν ση οποτεδήποτε το μέ ε ος του ώρου αυτού ίνει πο ύ μικρό. 7.9 Αφηρημένη ενεα ο ική συ ο ή απορριμμάτ ν Στην ενότητα αυτή εξετάζουμε πώς μπορoύμε να εντάξουμε τη ενεα ο ική συ ο ή απορριμμάτ ν στο αφαιρετικό π αίσιο συ ο ής που εξετάσαμε στην ενότητα 6.6. Μία αφηρημένη παρουσίαση ενός συμ ατικού, ενεα ο ικού, δύο ενεών, μαζικής προα ής συ έκτη της νεότερης ενεάς δίνεται στον α όρι μο 7.1. Σε ανα ο ία με τους προη ούμενους αφηρημένους α ορί μους συ ο ής απορριμμάτ ν, ο α όρι μος διατηρεί ένα πο υσύνο ο I από ανα ε ημένες αυξήσεις μετρητών αναφορών αντικειμέν ν της νέας ενεάς. Ένα σύνο ο ανάμνησης περι αμ άνει ό α τα πεδία δείκτες με προέ ευση την πα αιά ενεά και προορισμό τη νέα. Το πο υσύνο ο I περι αμ άνει ακρι ώς τους δια ενεα ο ικούς δείκτες προς αντικείμενα της νέας ενεάς και ι αυτόν ακρι ώς το ό ο η διαδικασία N αφαιρεί αναφορές από αυτό όταν η τιμή ενός εν υμούμενου

112 112 Κεφάλαιο 7. Γενεαλογική συλλογή απορριμμάτων Α όρι μος 7.1 Αφηρημένη ενεα ο ική συ ο ή απορριμμάτ ν: ρουτίνες συ έκτη 1: procedure N (I) 2: atomic 3: N (I) 4: N (I) 5: N () 6: procedure N (W ) 7: while not E (W ) do 8: src (W ) 9: ρ(src) ρ(src) + 1 shade src 10: if ρ(src) = 1 then src was white, now grey 11: for all fld in P ointers(src) do 12: ref fld 13: if ref Nursery then 14: W W + [ref] 15: procedure N () 16: while not E (Nursery) do 17: node (Nursery) en masse promotion 18: if ρ(node) = 0 then node is white 19: (node) 20: procedure N (I) 21: for all fld in Roots do 22: ref fld 23: if ref null and ref Nursery then 24: I I + [ref]

113 7.10 Θέματα προς εξέταση 113 δια ενεα ο ικού δείκτη μετα ά εται. Τε ικώς αν ένα αντικείμενο n της νέας ενεάς εμφανίζεται στο I, τότε διατηρείται από το ενεα ο ική συ έκτη. Το π ή ος εμφάνισης αυτού μά ιστα ισούται με το μετρητή αναφορών του, ρίς να συμπερι αμ άνονται οι αναφορές από αντικείμενα της νέας ενεάς. Ένας α όρι μος συ ο ής εξι νίασης συνοψίζει σε ένα μόνο bit σήμανσης την ισ ύ της πρότασης n I. Όταν κα είται η διαδικασία N, το πο υσύνο ο I περιέ ει τα αντικείμενα της νέας ενεάς με μηδενικό μετρητή αναφορών, αμ άνοντας υπόψη αναφορές μόνο από αντικείμενα της πα αιάς ενεάς. Μετά την προσ ήκη αναφορών προς αντικείμενα της νέας ενεάς από τη διαδικασία N, η νέα ενεά εξι νιάζεται από τους κόμ ους του πο υσυνό ου I (διαδικασία N ) και στη συνέ εια εκκα αρίζεται (διαδικασία N ), όπου τα επιζώντα αντικείμενα προά ονται μαζικά στην πα αιά ενεά και τα μη προσ άσιμα αντικείμενα με μηδενικό μετρητή αναφορών ε ευ ερώνονται. Α όρι μος 7.2 Αφηρημένη ενεα ο ική συ ο ή απορριμμάτ ν: ρουτίνες τροποποιητή 1: function N () 2: ref () 3: if ref = null then 4: N (I) 5: ref () 6: if ref = null then 7: () tracing, counting, or other full-heap GC 8: ref () 9: if ref = null then 10: error Out of memory! 11: ρ(ref) 0 node is black 12: Nursery Nursery ref allocate in Nursery 13: return ref 14: procedure N (node) 15: if ref Nursery then 16: I I + [node] 17: procedure N (node) 18: if ref Nursery then 19: I I [node] 20: procedure W (src, i, ref) 21: if src Roots and src Nursery then 22: N (ref) 23: N (src[i]) 24: src[i] dest 7.10 Θέματα προς εξέταση Η ενεα ο ική συ ο ή απορριμμάτ ν έ ει αποδει εί αποδοτική, προσφέροντας σημαντικές ε τιώσεις επίδοσης ια μια ευρεία κάμα εφαρμο ών. Μειώνοντας το μέ ε ος της νεότερης

114 114 Κεφάλαιο 7. Γενεαλογική συλλογή απορριμμάτων ενεάς και επικεντρώνοντας τις προσπά ειες συ ο ής σε αυτήν, οι αναμενόμενοι ρόνοι παύσης μπορούν να ε αττ ούν σε τέτοιο σημείο ώστε να περνούν σ εδόν απαρατήρητοι σε διάφορα περι ά οντα. Η τε νική της ενεα ο ικής συ ο ής απορριμμάτ ν μπορεί επίσης να αυξήσει τη ενική ρυ μαπόδοση του συ έκτη με δύο τρόπους. Πρώτον, μειώνει τη συ νότητα επεξερ ασίας τ ν μακρό ι ν αντικειμέν ν και επομέν ς ό ι μόνο μειώνει την υπο ο ιστική προσπά εια α ά επιπ έον δίνει στα αντικείμενα αυτά περισσότερο ρόνο ια να πε άνουν (και έτσι να μην ρειαστεί να εξι νιαστούν οι υπο ράφοι τ ν οποί ν είναι ρίζες). Δεύτερον, οι ενεα ο ικοί συ έκτες συνή ς εκ ρούν μνήμη ια την απο ήκευση νέ ν αντικειμέν ν σειριακά σε μία περιο ή ρεφοκομείου. Η σειριακή εκ ώρηση έ ει ς αποτέ εσμα τη ε τί ση του ρυ μού αστο ιών κρυφής μνήμης κα ώς το μοτί ο πρόσ ασης στη μνήμη είναι προ έψιμο και επιπ έον οι περισσότερες ε ραφές αφορούν τα νεότερα αντικείμενα. Η ενεα ο ική συ ο ή απορριμμάτ ν στόσο δεν είναι πανάκεια. Η αποδοτικότητά της εξαρτάται άμεσα από την κατανομή της διάρκειας τ ν αντικειμέν ν μιας εφαρμο ής. Αν η με ά η π ειοψηφία τ ν αντικειμέν ν δεν πε αίνει νέα, η ενεα ο ική συ ο ή απορριμμάτ ν δεν είναι κατά η η. Επιπ έον, η ενεα ο ική συ ο ή απορριμμάτ ν ε τιώνει μόνο τους αναμενόμενους ρόνους παύσης. Τε ικώς, ο συ έκτης πρέπει να συ έξει ό ο το σ ρό και συνεπώς η ενεα ο ική συ ο ή από μόνη της δεν μπορεί να επι ύσει το πρό ημα της μεί σης του ρόνου παύσης ειρότερης περίπτ σης, ο οποίος αυξάνεται υπερ ο ικά πο ύ σε με ά- ους σ ρούς. Συνεπώς, η ενεα ο ική συ ο ή απορριμμάτ ν δεν μπορεί να παράσ ει τις απαιτούμενες ε υήσεις ενός σκ ηρού συστήματος πρα ματικού ρόνου όπου οι προ εσμίες πρέπει πάντοτε να τηρούνται. Η υ οποίηση της συ ο ής απορριμμάτ ν είναι απ ούστερη αν υπάρ ει η δυνατότητα μετακίνησης αντικειμέν ν προς διάκριση τ ν πα αιών αντικειμέν ν από τα νέα. Ο φυσικός δια ρισμός δεν προσφέρει μόνο το π εονέκτημα της τοπικότητας που συζητή ηκε παραπάν, α ά επίσης πιο αποδοτικούς ε έ ους ώρου, οι οποίοι είναι απαραίτητοι στο φρά μα ε ραφής α ά και κατά την εξι νίαση της νεότερης ενεάς. Τα αντικείμενα πάντ ς μπορούν να δια ρίζονται με άση την η ικία τους και εικονικά, ρησιμοποιώντας πι ανώς ένα bit στην επικεφα ίδα τους ή σε κάποιο bitmap. Οι ενεα ο ικοί συ έκτες ε είρουν μια π η ώρα διαφορετικών ερ τημάτ ν όσον αφορά τόσο τις επι ο ές υ οποίησης όσο και τις απαιτήσεις του τε ικού ρήστη μιας εφαρμο ής. Η υ οποίηση ενεα ο ικών συ εκτών περι αμ άνει πο ύ περισσότερες σ εδιαστικές επι ο ές από την επι ο ή του με έ ους του σ ρού. Η πρώτη απόφαση υ οποίησης συνή ς αφορά το αν ο σ ρός α ορ αν εί σε δύο ή περισσότερες ενεές. Η απάντηση εξαρτάται πρ τίστ ς από τις κατανομές της διάρκειας ζ ής τ ν εφαρμο ών ια τις οποίες ο συ έκτης α παρέ ει υποστήριξη. Εάν ένα σημαντικό ποσοστό τ ν αντικειμέν ν αναμένεται να επι ιώσουν από τη νεότερη ενεά α ά να πε άνουν σύντομα μετά την προα ή τους, τότε ίσ ς αξίζει η προσ ήκη ενδιάμεσ ν ενεών. Τα περισσότερα συστήματα αυτόματης δια είρισης μνήμης με ενεα ο ική συ ο ή απορριμμάτ ν στόσο από προεπι ο ή περι αμ άνουν δύο ενεές και μια α άνατη ενεά. Η ρήση πο απ ών ενεών προσπα εί να ύσει το πρό ημα της πρό ρης προα ής αντικειμέν ν. Υπάρ ουν και ά οι τρόποι επί υσής του. Αρ ικά, ο ρυ μός προα ής εξαρτάται από το μέ ε ος της νέας ενεάς: μια με α ύτερη νέα ενεά προσφέρει περισσότερο ρόνο σε ένα αντικείμενο ια να πε άνει. Μερικοί ενεα ο ικοί συ έκτες επιτρέπουν στο ρήστη να ρυ μίσει ένα στα ερό μέ ε ος ια τη νεότερη ενεά. Ά οι πά ι επιτρέπουν στη νεότερη ενεά να αυξάνεται δυναμικά μέ ρις ότου κατα ά ει ό ο

115 7.10 Θέματα προς εξέταση 115 το σ ρό (εκτός από ήδη δεσμευμένες περιο ές, όπ ς η πα αιά ενεά και πι ανόν μια εφεδρική περιο ή αντι ραφής). Οι πιο εξεζητημένοι συ έκτες απορριμμάτ ν πάντ ς μπορούν να μετα ά ουν το μέ ε ος της νεότερης ενεάς προς ικανοποίηση συ κεκριμέν ν προδια ραφών σ ετικά με τους ρόνους παύσης, αμ άνοντας αποφάσεις ια την α α ή του με έ ους με άση την παρακο ού ηση του προφί της συμπεριφοράς του συ έκτη. Δεύτερον, η προα ή μπορεί να περιορισ εί ε έ οντας την η ικία κατά την οποία τα αντικείμενα προά ονται. Η τε νική της μαζικής προα ής μεταφέρει ό ους τους επιζώντες μιας συ ο ής της νεότερης ενεάς σε μια πα αιότερη ενεά. Αυτή η πο ιτική προα ής έ ει μά ιστα την απ ούστερη υ οποίηση, κα ώς τα σύνο α ανάμνησης ια τη νεότερη ενεά μπορούν να παραμερισ ούν μετά το πέρας της συ ο ής. Ενα ακτικά, ένας συ έκτης μπορεί να απαιτεί από ένα αντικείμενο να επι ιώσει από περισσότερους του ενός κύκ ους συ ο ής πριν το προα ά ει. Στην περίπτ ση αυτή, είναι απαραίτητος ένας μη ανισμός κατα ραφής της η ικίας τ ν αντικειμέν ν. Αυτό μπορεί να επιτευ εί είτε με τη ρήση κάποι ν bits από την επικεφα ίδα τ ν αντικειμέν ν, με τη διαίρεση μιας ενεάς σε σε υπο ώρους ο κα ένας από τους οποίους φι οξενεί αντικείμενα διαφορετικής η ικίας, είτε με συνδυασμό τ ν δύο. Οι συνη ισμένες διαμορφώσεις περι αμ άνουν σ ήματα ορ αν μένα σε ήματα και σ ήματα που περι αμ άνουν μια περιο ή εδέμ και ημι ώρους επιζώντ ν. Τέ ος, είναι πο ές φορές πι ανή η αποφυ ή της υπο ρέ σης προα ής ορισμέν ν αντικειμέν ν. Πο οί συ έκτες απορριμμάτ ν δεσμεύουν μια α άνατη περιο ή ια αντικείμενα που α επι ιώσουν μέ ρι το τέ ος του προ ράμματος. Τα αντικείμενα αυτά συ νά μπορούν να ανα ν ρισ ούν είτε κατά την υ οποίηση του συ έκτη είτε από το μετα ττιστή. Τέτοια αντικείμενα συνή ς περι αμ άνουν τις δομές δεδομέν ν του συ έκτη κα ώς και αντικείμενα που αναπαριστούν τον υπό εκτέ εση κώδικα. Οι ρυ μοί προα ής μπορούν επίσης να επηρεάσουν το κόστος του φρά ματος ε ραφής κα ώς επίσης και το μέ ε ος τ ν εν υμούμεν ν συνό ν. Υψη ότεροι ρυ μοί προα ής προκα ούν τη δημιουρ ία περισσότερ ν δια ενεα ο ικών δεικτών που πρέπει να κατα ραφούν. Εάν αυτό επηρεάζει ή ό ι την απόδοση τ ν φρα μάτ ν ε ραφής εξαρτάται από την υ οποίηση. Η συ νότητα κ ήσης τ ν φρα μάτ ν ε ραφής εξαρτάται επίσης από το αν οι διαφορετικές ενεές μπορούν να συ ε ούν ανεξάρτητα. Η ανεξάρτητη συ ο ή τ ν ενεών απαιτεί την κατα ραφή ό ν τ ν δια ενεα ο ικών δεικτών. Η ε κατά ειψη αυτής της ευε ιξίας έ ει ς αποτέ εσμα την ταυτό ρονη συ ο ή ό ν τ ν νεότερ ν ενεών οποτεδήποτε συ έ εται η πα αιότερη ενεά και επιτρέπει την κατα ραφή μόνο τ ν δεικτών με προέ ευση κάποια πα αιότερη ενεά και προορισμό κάποια νεότερη ενεά (οι οποίοι δείκτες αναμένεται να είναι σημαντικά ι ότεροι σε π ή ος). Σημειώνοντας το αντικείμενο και ό ι το συ κεκριμένο πεδίο αυτού ς πι ανή προέ ευση ενός δια ενεα ο ικού δείκτη, το κόστος σε ώρο ια την απο ήκευση τ ν συνό ν ανάμνησης μπορεί να μει εί. Οι διαφορετικοί μη ανισμοί που ρησιμοποιεί ο τροποποιητής ια την κατα ραφή τ ν πι- ανών προε εύσε ν δια ενεα ο ικών δεικτών επηρεάζουν το κόστος της συ ο ής. Παρότι μη ανισμοί ι ότερο ακρι είς μπορεί να μειώσουν το κόστος του φρά ματος ε ραφής, αυτοί μπορεί να αυξήσουν το φορτίο ερ ασίας του συ έκτη. Η κατα ραφή του πεδίου προέ ευσης με ρήση σειριακών απομον τών απο ήκευσης είναι ο πιο ακρι ής μη ανισμός παρότι ένας απομον τής ενδέ εται να περι αμ άνει κάποιες κατα ραφές εις διπ ούν. Η κατα ραφή του αντικειμένου προέ ευσης από την ά η π ευρά απαιτεί τη σάρ ση του αντικειμένου ια την εύρεση δια ενεα ο ικών δεικτών.

116

117 Κεφά αιο 8 Παρά η η συ ο ή απορριμμάτ ν Μέ ρι τώρα έ ουμε υπο έσει πώς, ενώ ο τροποποιητής μπορεί να είναι πο υνηματικός, ο συ έκτης είναι μονονηματικός. Η υπό εση αυτή οδη εί σε φτ ή εκμετά ευση τ ν πόρ ν ενός σύ ρονου πο υπύρηνου μη ανήματος. Στο παρόν κεφά αιο εξετάζουμε πώς μπορεί να παρα η οποιη εί ο συ έκτης, υπο έτοντας ακόμα π ς κανένα από τα νήματα-τροποποιητές δεν εκτε είται ενώ πρα ματοποιείται συ ο ή απορριμμάτ ν και π ς αυτή ο οκ ηρώνεται πριν αυτά συνε ίσουν την εκτέ εσή τους. Ένας προφανής τρόπος προκειμένου να μει εί ο ρόνος παύσης τ ν νημάτ ν-τροποποιητών είναι οι πυρήνες να συνερ αστούν κατά τη συ ο ή απορριμμάτ ν (και ενώ τα νήματα-τροποποιητές είναι σταματημένα). Η παρά η η συ ο ή απορριμμάτ ν είναι το αντικείμενο αυτού του κεφα αίου. Πιο συ κεκριμένα α εξετάσουμε πώς μπορούν να παρα η οποιη ούν οι 4 ασικές διαδικασίες της συ ο ής με εξι νίαση: σήμανση, εκκα άριση, αντι ραφή και συμπύκν ση. 8.1 Υπάρ ει επαρκής δου ειά προς παρα η οποίηση; Όπ ς και κατά την παρα η οποίηση του α ορί μου οποιουδήποτε προ ήματος, η πρώτη απαίτηση αφορά στην εξασφά ιση του ότι το φορτίο ερ ασίας είναι αρκετά με ά ο ώστε η παρα η οποίηση να αξίζει τον κόπο. Αναπόφευκτα, η παρά η η συ ο ή απορριμμάτ ν απαιτεί κάποια μορφή συ ρονισμού τ ν νημάτ ν-συ εκτών με το συ ρονισμό αυτό να κοστίζει. Ο συ ρονισμός αυτός μπορεί να επιτευ εί με τη ρήση είτε κ ειδ μάτ ν είτε ατομικών πρ ταρ ικών εντο ών υ ικού όπ ς ια παράδει μα της C A S και την προσεκτική σ εδίαση οη ητικών δομών δεδομέν ν. Προκύπτει οιπόν το ερώτημα αν το φορτίο ερ ασίας της συ ο ής απορριμμάτ ν επαρκεί ώστε το κέρδος από την παρα η- οποίηση να υπερκεράζει το κόστος του συ ρονισμού. Ας υπο έσουμε ια παράδει μα, π ς ένας συ έκτης σήμανσης και εκκα άρισης α πρέπει να σημάνει μία απ ή συνδεδεμένη ίστα: σε κά ε ήμα, η στοί α σήμανσης α περιέ ει μόνο ένα αντικείμενο, τον επόμενο κόμ ο προς εξέταση. Στην περίπτ ση αυτή, μόνο ένα από τα νήματα-συ έκτες α δου εύει, ενώ τα υπό οιπα α είναι αδρανή, περιμένοντας ια δου ειά. Ο Siebert [106] αποδεικνύει π ς ο αρι μός φορών n που ένας επεξερ αστής μένει αδρανής κατά τη διάρκεια μιας παρά η ης σήμανσης σε ένα σύστημα με p επεξερ αστές φράσσεται από το μέ ιστο ά ος τ ν προσ άσιμ ν αντικειμέν ν o: 117

118 118 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων (αʹ) Συ ο ή με παύση του κόσμου, μονονηματικός τροποποιητής, μονονηματικός συ έκτης. ( ʹ) Συ ο ή με παύση του κόσμου, πο υνηματικός τροποποιητής, μονονηματικός συ έκτης. ( ʹ) Συ ο ή με παύση του κόσμου, πο υνηματικός τροποποιητής, πο υνηματικός συ έκτης. Σ ήμα 8.1: Συ ο ή απορριμμάτ ν με παύση του κόσμου: κά ε μπάρα αναπαριστά την εκτέ εση σε έναν επεξερ αστή. Οι ρ ματισμένες περιο ές αναπαριστούν διαφορετικούς κύκ ους συ ο ής απορριμμάτ ν. n (p 1) max o reachable depth(o) (8.1) Η ανίσ ση αυτή πάντ ς ασίζεται στην ό ι ρεα ιστική υπό εση πώς ό α τα ήματα σήμανσης διαρκούν το ίδιο, κάτι που δεν ισ ύει κα ώς οι ρόνοι διαφέρουν ανά ο α με το μέ ε ος του αντικειμένου. Στις περισσότερες ώσσες προ ραμματισμού πάντ ς τα περισσότερα αντικείμενα είναι μικρά (περιέ ουν ί ους δείκτες). Με έτες πάντ ς έ ουν δείξει πώς οι τυπικές εφαρμο ές περι αμ άνουν μια ευρεία ποικι ία από π ούσιες σε δείκτες δομές δεδομέν ν. Για παράδει μα, η εξι νίαση μιας δενδροειδούς δομής δεδομέν ν α παρά ει περισσότερες μονάδες ερ ασίας από όσες α κατανα ώνει μέ ρις ότου η εξερεύνηση φ άσει στα φύ α. 8.2 Εξισορρόπηση φορτίου Μια ά η απαίτηση από την παρά η η συ ο ή απορριμμάτ ν είναι το φορτίο της συ ο ής να κατανεμη εί με τέτοιο τρόπο ώστε να ε α ιστοποιη εί η ανά κη ια συντονισμό και ό οι οι επεξερ αστές να είναι απασ ο ημένοι ταυτό ρονα. Οι Endo κ.ά. [50] διαπιστώνουν π ς ρίς κάποιο μη ανισμό ια εξισορρόπηση φορτίου, μια απ οϊκή παρα η οποίηση μπορεί να οδη ήσει σε πο ύ μικρή επιτά υνση σε πο υεπεξερ αστικά συστήματα. Δυστυ ώς, ο στό ος της ομοιόμορφης κατανομής υπο ο ιστικού φορτίου και της ε α ιστοποίησης του απαιτούμενου συντονισμού α η οσυ κρούονται. Ο στατικός διαμοιρασμός του υπο ο ιστικού φόρτου δεν είναι πάντα ο κα ύτερος. Για παράδει μα, έστ ένας παρά η ος συ έκτης σήμανσης και συμπύκν σης σε σύστημα N επεξερ αστών. Αν ο σ ρός διαιρε εί σε N τμήματα, και ο κά ε επεξερ αστής ανα ά ει την επιδιόρ ση τ ν δεικτών στο δικό του τμήμα, τότε, αν ο αρι μός τ ν αντικειμέν ν και τ ν δεικτών που αυτά περιέ ουν ποικί ει πο ύ από τμήμα σε τμήμα, κάποιοι επεξερ αστές α δου εύουν περισσότερο από ά ους.

119 8.3 Συγχρονισμός 119 Εξίσου σημαντική με την εξισορρόπηση του υπο ο ιστικού φορτίου ανάμεσα στους επεξερ- αστές είναι και η εξισορρόπηση ά ν πόρ ν. Σε μία παρά η η υ οποίηση του α όρι μου αντι ραφής του Baker [70], ο Halstead [71], [72] ανέ εσε σε κά ε επεξερ αστή το δικό του ώρο-προς και ώρο-από. Δυστυ ώς, αυτός ο στατικός διαμοιρασμός συ νά οδη ούσε σε μία κατάσταση όπου ένας επεξερ αστής εξαντ ούσε το δικό του ώρο-από και ενώ υπήρ ε ώρος στους ώρους-από τ ν υπο οίπ ν επεξερ αστών. Ένας δυναμικός διαμοιρασμός είναι περισσότερο κατά η ος προκειμένου η δου ειά να μοιρασ εί σ εδόν ομοιόμορφα. Ας ε ρήσουμε ια παράδει μα ένα συ έκτη σήμανσης και συμπύκν σης: αφού έ ει ο οκ ηρ εί η σήμανση τ ν ζ ντανών αντικειμέν ν, ο σ ρός δια- ρίζεται σε τμήματα, τα οποία έ ουν παρόμοιο π ή ος ζ ντανών αντικειμέν ν και δεικτών. Στη συνέ εια, οι επεξερ αστές συμπυκνώνουν παρά η α ο κα ένας το δικό του τμήμα του σ ρού. Αυτή είναι ακρι ώς η προσέ ιση τ ν Flood κ.ά. [53]. Συ νά η εξαρ ής εκτίμηση ερ ασίας ια την κα ύτερη διαίρεσή της δεν είναι εφικτή. Σε αυτήν την περίπτ ση η συνη ισμένη ύση είναι να υπερ-διαμερίζεται η συνο ική ερ ασία ούτ ς ώστε να υπάρ ουν περισσότερα τμήματα ερ ασίας από ότι επεξερ αστές ή νήματα και οι επεξερ αστές (ή τα νήματα) να τί ενται σε αντα νισμό ια την απόκτησή τους. Βασικό π εονέκτημα της τε νικής αυτής αποτε εί το ε ονός π ς είναι αν εκτική σε α α ές του δια έσιμου π ή ους επεξερ αστών στο συ έκτη (π.. ό της επι άρυνσης από ά ες διερ- ασίες που εκτε ούνται παρά η α), κα ώς οι μικρότερες μονάδες ερ ασίες αντα άσσονται πιο εύκο α. Απ οποιούμε τους α ορί μους που α παρουσιάσουμε αρ ότερα εστιάζοντας την προσο ή μας στις τρεις ασικές υπο-ερ ασίες της απόκτησης, εκτέ εσης και δημιουρ ίας δου ειάς συ - ο ής. Θε ρούμε οιπόν π ς, στις περισσότερες περιπτώσεις, κά ε νήμα-συ έκτης εκτε εί τον ακό ου ο ρό ο: Α όρι μος 8.1 Παρά η η συ ο ή: αφηρημένη ειτουρ ία νήματος-συ έκτη 1: procedure () 2: while not () do 3: W () 4: W () 5: W () 8.3 Συ ρονισμός Εκ πρώτης όψε ς ίσ ς φαίνεται π ς η έ τιστη στρατη ική εξισορρόπησης του φορτίου ερ ασίας υπα ορέυει τη διαίρεση του στις ε ά ιστες δυνατές υποερ ασίες, όπ ς ια παράδει μα η σήμανση ή η αντι ραφή ενός μόνο αντικειμένου. Παρότι η ύση αυτή πετυ αίνει τέ ειο διαμοιρασμό ερ ασίας ανάμεσα στους επεξερ αστές, το κόστος που επι ά ει ο συντονισμός τ ν τε ευταί ν την κα ιστά απα ορευτική. Ο συ ρονισμός απαιτείται τόσο ια την εξασφά ιση της ορ ότητας όσο και ια την αποφυ ή της επανά ηψης, ή του ά ιστον ε α ιστοποίησης της εκτέ εσης ορισμέν ν μονάδ ν ερ ασίας περισσότερες από μια φορές. Η επίτευξη συ ρονισμού μεταξύ τ ν νημάτ ν-συ εκτών κοστίζει σε ρόνο και σε ώρο. Οι μη ανισμοί που εξασφα ίζουν αποκ ειστικότητα πρόσ ασης ρησιμοποιούν μεταξύ ά ν κ ειδώματα ή δομές δεδομέν ν ρίς αναμονή. Οι κα ώς σ εδιασμένοι α όρι μοι ε α ιστοποιούν τις περιπτώσεις όπου απαιτούνται ενέρ ειες συ ρονισμού, παρέ οντας ια παράδει μα

120 120 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων σε κά ε νήμα-συ έκτη ιδι τικές τοπικές δομές δεδομέν ν. Σε μερικές περιπτώσεις πάντ ς η μη αποκ ειστική πρόσ αση δεν είναι απαραίτητη ια την εξασφά ιση της ορ ότητας και έτσι κάποιες ενέρ ειες συ ρονισμού μπορούν να παρα ειφ ούν. Οι μοντέρνες υ οποιήσεις παρά η ης συ ο ής απορριμμάτ ν συνή ς έτουν να νήματα ερ ασίας σε αντα νισμό ια την απόκτηση μονάδ ν ερ ασίας, τις οποίες στη συνέ εια εκτε ούν ρίς περαιτέρ συ ρονισμό. Οι μονάδες ερ ασίας ορ ανώνονται είτε ς τοπικές στοί ες σήμανσης, είτε ς ξε ριστές περιο ές του σ ρού προς σάρ ση είτε ς κα ο ικές δεξαμενές. Οι οη ητικές δομές δεδομέν ν ια την ορ άν ση τ ν μονάδ ν ερ ασίας επι ά - ουν ένα κόστος σε ώρο ια την απο ήκευση τ ν μεταδεδομέν ν τους, το οποίο όμ ς τείνει να είναι μικρό. 8.4 Ταξινόμηση Στο υπό οιπο του κεφα αίου παρουσιάζουμε ειδικές ύσεις στο πρό ημα της παρα η οποίησης της σήμανσης, της εκκα άρισης, της αντι ραφής και της συμπύκν σης. Σε ό ες τις περιπτώσεις επικεντρώνουμε το ενδιαφέρον μας στο πώς οι α όρι μοι αποκτούν, εκτε ούν και παρά ουν ερ ασίες. Η σ εδίαση και η υ οποίηση αυτών τ ν τριών δραστηριοτήτ ν κα- ορίζει τον απαιτούμενο συ ρονισμό, τη διακριτότητα τ ν φορτί ν ερ ασίας τ ν νημάτ ν κα ώς επίσης και πώς αυτά τα φορτία διαμοιράζονται ομοιόμορφα μεταξύ επεξερ αστών. Οι α όρι μοι παρά η ης συ ο ής απορριμμάτ ν μπορούν να κατη οριοποιη ούν με άση το αν στο επίκεντρο της σ εδίασης είναι ο επεξερ αστής ή η μνήμη. Οι α όρι μοι της πρώτης κατη ορίας τείνουν να επιτρέπουν στα νήματα να αποκτούν κ άντα ερ ασίας μετα ητού με έ ους, συνή ς κ έ οντας ερ ασία από ά α νήματα. Λί η έ ς και κα ό ου σημασία δίνεται στην τοπο εσία τ ν αντικειμέν ν στη μνήμη, παρότι η τοπικότητα επηρεάζει την επίδοση ακόμη και σε μονοπύρηνες αρ ιτεκτονικές. Οι α όρι μοι της δεύτερης κατη ορίας από την ά η π ευρά αμ άνουν περισσότερο υπόψη τους τη έση τ ν αντικειμέν ν στη μνήμη. Συνή ς ειτουρ ούν σε συνε όμενα μπ οκ μνήμης σ ρού και αποκτούν/κατα έτουν ερ ασία από/προς διαμοιραζόμενες δεξαμενές. Τέ ος, εξετάζουμε τον τερματισμό της παρά η ης συ ο ής απορριμμάτ ν. Συνή ς, απ ώς η εξέταση του κατά πόσο μια δεξαμενή ερ ασίας είναι κενή δεν επαρκεί, κα ώς ένα ενερ ό νήμα-συ έκτης μπορεί να ετοιμάζεται να κατα έσει καινούριες μονάδες ερ ασίας σε αυτή. 8.5 Παρά η η Σήμανση Η φάση της σήμανσης, σε αντί εση με τις φάσεις της εκκα άρισης και της συμπύκν σης δεν είναι ε ενώς παρα η οποιήσιμη Κ οπή ερ ασιών Οι Endo κ.ά. [50], οι Flood κ.ά. [53] κα ώς και ο Siebert [107] ρησιμοποιούν κ οπή ερ ασίας ια την εξισορρόπηση του υπο ο ιστικού φορτίου. Οποτεδήποτε ένα νήμα-σημαντής ξεμένει από δου ειά σήμανσης, κ έ ει δου ειά που ανήκει σε ένα ά ο νήμα-σημαντή. Σε μία παρά η η υ οποίηση του συντηρητικού συ έκτη τ ν Boehm και Weiser [28], οι Endo κ.ά. παρέ ουν σε κά ε νήμα-σημαντή την δική του τοπική στοί α σήμανσης κα ώς επίσης και μία

121 8.5 Παράλληλη Σήμανση 121 κ επτόμενη ουρά ερ ασιών (α όρι μος 8.2). Περιοδικά, κά ε νήμα-σημαντής ε έ ει την κ επτόμενη ουρά ερ ασιών του και αν αυτή είναι άδεια, μεταφέρει ό η την ιδι τική στοί α σήμανσης του (εκτός τ ν τοπικών ριζών) στην ουρά. Ένα αδρανές νήμα-σημαντής αποκτά έρ ο σήμανσης ε έ οντας αρ ικά την δική του κ επτόμενη ουρά και στη συνέ εια τις κ επτόμενες ουρές τ ν ά ν νημάτ ν. Όταν ένα νήμα-σημαντής ρει μια μη κενή κ επτόμενη ουρά, κ έ ει τις μισές κατα ρίσεις αυτής και τις μεταφέρει στην ιδι τική του στοί α σήμανσης. Κα ώς πο ά νήματα προσπα ούν να κ έψουν δου ειά ταυτό ρονα, οι κ επτόμενες ουρές ερ ασιών προστατεύονται με κ ειδώματα. Κά ε παρά η ος συ έκτης οφεί ει να είναι ιδιαίτερα προσεκτικός όσον αφορά την ενημέρ ση bitmap σήμανσης και την επεξερ ασία με ά ν πινάκ ν. Τα bits μιας έξης σε ένα bitmap σήμανσης πρέπει να ενημερώνονται ατομικά. Αντί να κ ειδώνουν ο όκ ηρη τη έξη όταν ε έ ουν ένα bit, οι Endo κ.ά. ρησιμοποιούν μια απ ή φόρτ ση ια τον έ ε ο του bit και μόνον αν αυτό έ ει την τιμή 0, επι ειρούν ατομικά να ε ράψουν την τιμή 1 σε αυτό, προσπα ώντας εκ νέου, αν η ε ραφή αποτύ ει (α όρι μος 8.3). Αντί ετα, συ έκτες σαν αυτόν τ ν Flood κ.ά. [53], οι οποίοι απο ηκεύουν το bit σήμανσης στην επικεφα ίδα του αντικειμένου μπορούν να πρα ματοποιούν σημάνσεις ρίς τη ρήση ατομικών ειτουρ ιών. Η επεξερ ασία με ά ν πινάκ ν αποτε εί πη ή πο ών προ ημάτ ν. Για παράδει μα, οι Boehm και Weiser [28] επι ειρούν να αποτρέψουν την υπερ εί ιση της στοί ας σήμανσης ώντας με ά α αντικείμενα σε τμήματα τ ν 128 έξε ν. Παρόμοια, και προκειμένου να ε τιώσουν την εξισορρόπηση φορτίου, ο Endo κ.ά. διαιρούν ένα με ά ο αντικείμενο σε κομμάτια τ ν 512 έξε ν πριν το τε ευταίο εισα εί σε κάποια στοί α σήμανσης ή κ επτόμενη ουρά. Ο παρά η ος ενεα ο ικός συ έκτης τ ν Flood κ.ά. [53] δια ειρίζεται τη νέα ενιά με αντι ραφή και την πα αιά με σήμανση και συμπύκν ση. Σε αυτήν την ενότητα εξετάζουμε μόνο την παρά η η σήμανση (α όρι μος 8.4). Ενώ oι Endo κ.ά. ρησιμοποιούν μία στοί α και μια ουρά ανά επεξερ αστή, οι Flood κ.ά. ρησιμοποιούν μία διπ ά τερματισμένη ουρά ανά νήμα-σημαντή. Ο α όρι μος τους ια κ οπή ερ ασίας δε ρησιμοποιεί κ ειδώματα, επιτρέπει το διαμοιρασμό ερ ασίας σε επίπεδο αντικειμέν ν και ασίζεται στην ιδέα τ ν Dimpsey κ.ά. [46]. Ένα νήμα-σημαντής αντιμετ πίζει το κάτ μέρος της διπ ά συνδεδεμένης ουράς του ς στοί α σήμανσης: η ειτουρ ία ώ ησης δεν απαιτεί συ ρονισμό ενώ η ειτουρ ία εξώ ησης απαιτεί συ ρονισμό μόνο όταν η διπ ά συνδεδεμένη ουρά αποτε είται από ένα μόνο στοι είο. Νήματα ρίς ερ ασία κ έ ουν ένα αντικείμενο από το πάν μέρος τ ν διπ ά συνδεδεμέν ν ουρών τ ν ά ν νημάτ ν με ρήση της συ ρονισμένης ειτουρ ίας. Ένα ασικό π εονέκτημα αυτής της σ εδίασης ια κ οπή ερ ασιών είναι π ς ο ακρι ός μη ανισμός συ ρονισμού ενερ οποιείται μόνο όταν υπάρ ει ανά κη ια εξισορρόπηση ερ ασιών. Οι διπ ά τερματισμένες ουρές έ ουν στα ερό μέ ε ος ώστε να αποφεύ εται η ανά κη ια εκ ώρηση μνήμης στη διάρκεια μιας συ ο ής. Κα ώς η προσέ ιση αυτή διακινδυνεύει την εμφάνιση υπερ εί ισης η Flood κ.ά. ρησιμοποιούν ένα κα ο ικό σύνο ο υπερ εί ισης το οποίο επιφέρει μία μικρή επι άρυνση ανά κ άση. Η δομή κά ε κ άσης Java κρατάει μία ίστα ό ν τ ν αντικειμέν ν υπερ εί ισης της κ άσης, τα οποία συνδέονται μεταξύ τους μέσ του πεδίου τύπου τους. Η υπερ εί ιση ειρίζεται ς εξής: οποτεδήποτε η ώ ηση ενός αντικειμένου στο κάτ μέρος της διπ ά-τερματισμένης ουράς α προκα έσει υπερ εί ιση, τα μισά αντικείμενα του κάτ μέρους μετακινούνται στα αντίστοι α σύνο α υπερ εί ισης τ ν κ άσε ν τους. Αντίστροφα, νήματα-σημαντές που ρίσκονται σε αναζήτηση ερ ασίας επι ειρούν να εμίσουν τη μισή διπ ά τερματισμένη ουρά τους εξετάζοντας πρώτα το σύνο ο υπερ εί- ισης και έπειτα τις διπ ά τερματισμένες ουρές τ ν ά ν νημάτ ν-σημαντών.

122 122 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων Α όρι μος 8.2 Παρά η η συ ο ή: σήμανση με κ οπή ερ ασίας (Endo κ.ά.) 1: shared stealableworkqueue[n] one per thread 2: me myt hreadid 3: procedure W () 4: if not E (mymarkstack) then 5: return 6: (stealablew orkqueue[me]) 7: n (stealablew orkqueue[me])/2 grab half of my stealable work queue 8: (stealablew orkqueue[me], n, mymarkstack) 9: (stealablew orkqueue[me]) 10: if E (mymarkstack) then 11: for all j in T hreads do 12: if not (stealablew orkqueue[j]) then 13: if (stealablew orkqueue[j]) then 14: n (stealablew orkqueue[me])/2 grab half of his stealable work queue 15: (stealablew orkqueue[j], n, mymarkstack) 16: (stealablew orkqueue[j]) 17: return 18: procedure W () 19: while (mymarkstack, ref) do 20: for all fld in P ointers(ref) do 21: child fld 22: if child null and not M (child) then 23: M (child) 24: (mymarkstack, child) 25: procedure W () transfer all my stack to my stealable work queue 26: if E (stealablew orkqueue[me]) then 27: n (mymarkstack) 28: (mystealablew orkqueue[me]) 29: (mymarkstack, n, stealablew orkqueue[me]) 30: (mystealablew orkqueue[me]) Α όρι μος 8.3 Παρά η η συ ο ή: σήμανση με ρήση bitmap (Endo κ.ά.) 1: procedure M (ref) 2: oldbyte B (ref) 3: bitp osition B (ref) 4: loop 5: loop 6: if M (oldbyte, bitp osition) then 7: return 8: newbyte (oldbyte, bitp osition) 9: if A S (&markbyte(ref), oldbyte, newbyte) then 10: return

123 8.5 Παράλληλη Σήμανση 123 Α όρι μος 8.4 Παρά η η συ ο ή: σήμανση με κ οπή ερ ασίας (Flood κ.ά.) 1: shared overf lowset 2: shared deque[n] one per thread 3: me myt hreadid 4: procedure W () 5: if not E (deque[me]) then 6: return 7: n (overflowset) /2 8: if (overflowset, n, deque[me]) then 9: return 10: for all j in T hreads do 11: ref (deque[j]) try to steal from j 12: if ref null then 13: (deque[me], ref) 14: return 15: procedure W () 16: loop 17: ref (deque[j]) 18: if ref = null then return 19: for all fld in P ointers(ref) do 20: child fld 21: if child null and not M (child) then 22: M (child) 23: if not (deque[me], child) then 24: n (overflowset) /2 25: (deque[me], n, overflowset) 26: procedure W () 27: /* nop */

124 124 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων Ο Siebert [107] επίσης ρησιμοποιεί κ οπή ερ ασιών ια μια παρά η η και ταυτό ρονη υ οποίηση της εικονικής μη ανής Jamaica ια τη ώσσα Java. Τα αντικείμενα διασπώνται σε συνδεδεμένα μπ οκ ια να φρα εί ο ρόνος κά ε ήματος σήμανσης και συνεπώς ο συ έκτης δου εύει με μπ οκ και ό ι με αντικείμενα. Μια συνέπεια του παραπάν ε ονότος είναι π ς τα ρώματα συσ ετίζονται με μπ οκ. Όπ ς α δούμε στο κεφά αιο 9, νήματα-τροποποιητές και νήματα-συ έκτες που εκτε ούνται ταυτό ρονα ενδέ εται να ρειαστεί να προσπε άσουν ίστες από κρι μπ οκ. Για να αποφύ ει την ανά κη συ ρονισμού τέτοι ν προσπε άσε ν, η εικονική μη ανή Jamaica ρησιμοποιεί τοπικές ίστες κρι μπ οκ ανά επεξερ αστή. Το κόστος αυτής της σ εδίασης είναι πώς το ρώμα ενός μπ οκ αναπαρίσταται από μία ο όκ ηρη έξη και ό ι ορισμένα bits. Ένα νήμα-σημαντής σημαίνει ένα μπ οκ με κρι ρώμα ρησιμοποιώντας μια ειτουρ ία C A S ια να το συνδέσει μέσ του ρώματος του στην τοπική κρι ίστα του επεξερ αστή στον οποίο εκτε είται. Για την εξισορρόπηση φορτίου, ένα νήμα-σημαντής ρίς ερ ασία επι ειρεί να κ έψει ό η τη κρι ίστα μπ οκ ενός ά ου νήματος-σημαντή. Για να αποτραπεί η επεξερ ασία ενός μπ οκ από δύο ή περισσότερα νήματα-σημαντές ταυτό ρονα, ένα νήμα-σημαντής σημαίνεται ς αν ρακί κατά τη διάρκεια της επεξερ ασίας του σε κάποιο στάδιο σήμανσης. Τα νήματα-κ έφτες επίσης κ έ ουν επι ειρώντας να α άξουν το ρώμα της κεφα ής μιας κρι ίστας ενός ά ου επεξερ αστή σε αν ρακί. Αυτός ο μη ανισμός είναι ιδανικός στην περίπτ ση όπου το νήμα- ύμα δεν πρα ματοποιεί ερ ασίες συ ο ής εκτός ίσ ς από την πρόσ εση μπ οκ στη κρι ίστα του ενώ εκτε εί φρά ματα ε ραφής. Αυτό είναι ρεα ιστικό σενάριο ια έναν ταυτό ρονο, πρα ματικού ρόνου συ έκτη Τερματισμός με κ οπή ερ ασιών Τε ικώς, ο συ έκτης α πρέπει να είναι σε έση να κα ορίσει το τέ ος μιας φάσης, δη αδή πότε ό α τα συνερ αζόμενα νήματα έ ουν ο οκ ηρώσει τις ερ ασίες τους. Οι Endo κ.ά. [50] προσπά ησαν αρ ικώς να ανι νεύσουν τον τερματισμό με τη ρήση ενός απ ού κα ο ικού μετρητή τ ν άδει ν στοι ών σήμανσης και τ ν άδει ν κ επτόμεν ν ουρών σήμανσης. Ωστόσο ο αντα νισμός ια την ατομική ενημέρ ση του μετρητή σειριοποιούσε τον τερματισμό και με ά α συστήματα (με 32 ή και περισσότερους επεξερ αστές) δαπανούσαν πο ύ ρόνο ια την απόκτηση του κ ειδώματος. Oι Endo κ.ά. αντιμετώπισαν το πρό ημα παρέ οντας σε κά ε επεξερ αστή δύο τοπικές σημαίες που υποδείκνυαν αν η τοπική στοί α σήμανσης και η τοπική κ επτόμενη ουρά ήταν άδεια. Οι σημαίες αυτές μπορούν να τε ούν σε ο ικό 0 ή 1 ρίς κ ειδώματα. Για να εντοπίσει τον τερματισμό ένας επεξερ αστής έτει σε 0 μια κα- ο ική σημαία διακοπτόμενου εντοπισμού και στη συνέ εια ε έ ει ό ες τις σημαίες τ ν υπο οίπ ν επεξερ αστών. Τέ ος, ε έ ει εκ νέου τη σημαία διακοπτόμενου εντοπισμού διότι αυτή να έ ει τε εί σε ο ικό 1 στο ενδιάμεσο από κάποιον ά ο επεξερ αστή ο οποίος συνε ίζει να δου εύει. Αν αυτό δε συμ αίνει, τότε η φάση της σήμανσης έ ει ο οκ ηρ εί. Η τε νική αυτή απαιτεί την τήρηση ενός αυστηρού πρ τοκό ου κατά την κ οπή ό ης τη δου ειάς ενός επεξερ αστή B από έναν επεξερ αστή A. Ο επεξερ αστής A πρέπει να έσει σε 0 την τοπική σημαία που αντιστοι εί στην τοπική στοί α, στη συνέ εια να έσει σε 1 την κα ο ική σημαία διακοπτόμενου εντοπισμού και τέ ος να έσει σε 1 την τοπική σημαία του επεξερ αστή B που αντιστοι εί στην τοπική κ επτόμενη ουρά του τε ευταίου. Δυστυ ώς όμ ς, όπ ς αποδεικνύουν οι Petrank και Colodner [91], το πρ τόκο ο είναι ε αττ ματικό στην περίπτ ση που περισσότερα του ενός νήματα προσπα ούν να εντοπίσουν τον τερματισμό της φάσης σήμανσης. Έστ ότι οι επεξερ αστές A και B ανι νεύουν ταυτό ρονα τον τερματισμό της φάσης σήμανσης και π ς ο επεξερ αστής C κ έ ει ό η τη δου ειά από τον επεξερ αστή D. Η ακό ου η α η ου ία ε ονότ ν είναι πι ανή: ο A έτει την κα ο ική

125 8.5 Παράλληλη Σήμανση 125 Σ ήμα 8.2: Γκρι πακέτα. Κά ε νήμα αντα άσσει ένα άδειο πακέτο με ένα πακέτο αναφορών προς αντικείμενα προς εξι νίαση. Η σήμανση εμίζει ένα άδειο πακέτο με νέες αναφορές προς αντικείμενα προς εξι νίαση: όταν αυτό εμίσει, το νήμα το αντα άσσει με ένα καινούριο άδειο πακέτο από την κα ο ική δεξαμενή. σημαία σε 0, ο επεξερ αστής C κ έ ει τη δου ειά από τον επεξερ αστή D και τη έτει σε 1, ο επεξερ αστής B έτει ξανά σε 0 με αποτέ εσμα ο επεξερ αστής A να μην αντι ηφ εί ποτέ την ενδιάμεση τιμή 1 της σημαίας. Οι Petrank και Colodner [91] εξασφα ίζουν π ς μόνο ένα νήμα προσπα εί να εντοπίσει τον τερματισμό κά ε φορά εισά οντας ένα κ είδ μα: μια συ ρονισμένη, κα ο ική έξη ταυτότητας ανι νευτή. Πριν επι ειρήσει να ανι νεύσει τον τερματισμό, ένα νήμα υπο ρεώνεται να ε έ ξει π ς η ταυτότητα ανι νευτή έ ει την τιμή -1, (που σημαίνει πώς κανένα ά ο νήμα δεν προσπα εί να ανι νεύσει τον τερματισμό παρά η α) και αν ναι, την ενημερώνει ατομικά με τη δική του ταυτότητα, διαφορετικά περιμένει. Οι Flood κ.ά. [53] εντοπίζουν τον τερματισμό με τη ρήση μιας έξης κατάστασης με ένα bit ια κά ε συμμετέ ον νήμα το οποίο πρέπει να ενημερώνεται ατομικά. Αρ ικά, ό α τα νήματα ρίσκονται σε ενερ ή κατάσταση (τιμή 1). Όταν ένα νήμα δεν έ ει δου ειά και επίσης δεν έ ει καταφέρει να κ έψει, έτει το bit κατάστασής του σε 0 και μπαίνει σε ένα ρό ο ε έ ου τού κατά πόσο ό α τα bits της έξης κατάστασης είναι 0. Αν ναι, ό α τα νήματα έ ουν εκτε έσει τις ερ ασίες τους και η φάση σήμανσης έ ει ο οκ ηρ εί. Αν πά ι ό ι, το νήμα ψά νει ια δου ειά στις διπ ά-τερματισμένες ουρές τ ν ά ν νημάτ ν. Αν καταφέρει να ρει δου ειά, έτει το bit κατάστασής του σε 1 και προσπα εί να την κ έψει. Αν δεν τα καταφέρει, έτει εκ νέου το bit κατάστασής του σε 0 και ξαναμπαίνει στον ίδιο ρό ο. Η τε νική αυτή δεν κ ιμακώνει όταν ο αρι μός τ ν νημάτ ν είναι με α ύτερος από το μέ ε ος της έξης κατάστασης σε bits Γκρι πακέτα Οι Ossia κ.ά. [85], κα ώς και οι Barabash κ.ά. [13] παρατηρούν πώς η ρήση στοι ών σήμανσης και κ οπής ερ ασίας είναι έ τιστη όταν ο αρι μός τ ν νημάτ ν που συμμετέ ουν στη συ ο ή είναι ν στός εξαρ ής. Αυτό δε συμ αίνει εάν κά ε νήμα-τροποποιητής συμμετέ ει πρα ματοποιώντας μια μικρή ερ ασία σε κά ε εκ ώρηση. Επίσης παρατηρούν π ς είναι πι ανόν δύσκο ο ια ένα νήμα-σημαντή να επι έξει την κα ύτερη ουρά από την οποία α κ έψει και ταυτό ρονα να εντοπίσει τον τερματισμό της σήμανσης. Αντ αυτού, εξισορροπούν το υπο ο ιστικό φορτίο άζοντας κά ε νήμα-σημαντή να αντα νίζεται ια την απόκτηση πακέτ ν αποτε ούμεν ν από ερ ασίες σήμανσης. Το σύστημα τους ρησιμοποιεί ένα στα ερό αρι μό από 1000 πακέτα τ ν 512 ε ραφών. Κά ε νήμα-σημαντής ρησιμοποιεί δύο πακέτα: επεξερ άζεται κατα ρίσεις από το πακέτο εισόδου και προσ έτει ερ ασίες σήμανσης στο πακέτο εξόδου. Ο όρος κρι πακέτα οφεί- εται στο ε ονός ότι τόσο το πακέτο εισόδου όσο και το πακέτο εξόδου περι αμ άνουν κρι

126 126 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων ε ραφές (αναφορές προς κρι αντικείμενα) σύμφ να με την τρι ρ ματική αφαίρεση. Κά ε νήμα-σημαντής αντα νίζεται με στό ο να αποκτήσει ένα πακέτο από μια κα ο ική δεξαμενή. Αφού επεξερ ασ εί ό ες τις κατα ρίσεις ενός πακέτου, το επιστρέφει στη δεξαμενή. Όταν το πακέτο εξόδου του είναι π ήρες, το επιστρέφει στη δεξαμενή και παίρνει πίσ ένα φρέσκο πακέτο. Όπ ς φαίνεται και στο σ ήμα 8.2, η κεντρική δεξαμενή αποτε είται από τρεις συνδεδεμένες ίστες εκ τ ν οποί ν η πρώτη αποτε είται από τε εί ς άδεια πακέτα, η δεύτερη από πακέτα σ εδόν μισο εμάτα και η τρίτη από πακέτα σ εδόν εμάτα. Τα νήματα προτιμούν την τρίτη ια την εισα ή ενός πακέτου εισόδου (διαδικασία I P, α όρι μος 8.5) και την πρώτη ια την εξα ή ενός πακέτου εξόδου (διαδικασία O P, α όρι μος 8.5). Η τε νική της παρα η οποίησης της σήμανσης με κρι πακέτα έ ει διάφορα π εονεκτήματα. Ξε ρίζοντας την είσοδο από την έξοδο, οι Ossia κ.ά. αποφεύ ουν την ενα α ή τ ν ρό ν ια τα πακέτα ενός νήματος-σημαντή: το φορτίο ερ ασίας κατανέμεται ομοιόμορφα στους επεξερ αστές κα ώς ένας επεξερ αστής έ ει την τάση να μην κατανα ώνει την έξοδό του. Κα ώς ένα κρι πακέτο περι αμ άνει μια ουρά από (αναφορές σε) αντικείμενα που α επεξερ- ασ ούν με τη σειρά, προσφέρεται η δυνατότητα προφόρτ σης τ ν επόμεν ν αντικειμέν ν προς σήμανση. Η τε νική απαιτεί συ ρονισμό μόνο κατά τη μεταφορά τ ν πακέτ ν από και προς την κα ο- ική δεξαμενή. Αυτό μειώνει τον αρι μό τ ν εντο ών μνήμης fence που πρέπει να εισα ούν από το μετα ττιστή σε αρ ιτεκτονικές με α αρό μοντέ ο συνέπειας μνήμης. Ένα νήμα ρειάζεται να εκτε έσει μία εντο ή fence μόνο όταν αποκτά πακέτα από την κα ο ική δεξαμενή ή επιστρέφει πακέτα προς αυτή, και ό ι μετά τη σήμανση και ώ ηση ενός αντικειμένου σε ένα πακέτο. Ο Ossia κ.ά. ρησιμοποιούν ένα διάνυσμα από bits σήμανσης όταν σαρώνουν συντηρητικά τις στοί ες τ ν νημάτ ν-τροποποιητών προκειμένου να προσδιορίσουν αν μία υποτι έμενη αναφορά πρα ματικά δεί νει προς κάποιο εκ ρη έν αντικείμενο. Τα bits σήμανσης ρησιμοποιούνται επίσης ια το συ ρονισμό μεταξύ τ ν νημάτ ν-τροποποιητών και τ ν νημάτ ν- συ εκτών. Οι εκ ρητές μνήμης ρησιμοποιούν τοπικούς απομον τές εκ- ώρησης. Κατά την υπερ εί ιση ενός τοπικού απομον τή εκ ώρησης, ο εκ ρητής εκτε εί μία εντο ή fence και στη συνέ εια έτει σε ο ικό 1 τα bits ό ν τ ν αντικείμεν ν που έ ουν εκ ρη εί στον τοπικό απομον τή, εξασφα ίζοντας με τον τρόπο αυτό πώς οι απο- ηκεύσεις που αφορούν την εκ ώρηση και αρ ικοποίηση νέ ν αντικειμέν ν δεν προη ούνται τ ν απο ηκεύσε ν που αφορούν την ενημέρ ση τ ν bits σήμανσης τους (α όρι μος 8.6). Δύο ακόμη εντο ές fence είναι απαραίτητες. Πρώτον, όταν ένα νήμα-εξι νιαστής αποκτά ένα καινούριο πακέτο εισόδου, ε έ ει τα bits εκ ώρησης ό ν τ ν αντικειμέν ν του πακέτου και κατα ράφει σε μία ιδι τική δομή δεδομέν ν ια κά ε τέτοιο αντικείμενο αν είναι ασφα ής η εξι νίαση με ρίζα αυτό (αν το αντίστοι ο bit είναι σε ο ικό 1). Στη συνέ εια το νήμα εκτε εί μία εντο ή fence πριν προ ρήσει στην εξι νίαση με ρίζες τα ασφα ή αντικείμενα. Η εξι νίαση με ρίζες τα μη ασφα ή αντικείμενα ανα ά εται: αυτά προστί ενται σε ένα πακέτο ανα ο ής, το οποίο κάποια στι μή αρ ότερα α μεταφερ εί σε μία κα ο ική δεξαμενή πακέτ ν ανα ο ής. Δεύτερον, ένα νήμα-εξι νιαστής εκτε εί μια εντο ή fence όταν επιστρέφει το πακέτο εξόδου του στην κα ο ική δεξαμενή ( ια να αποτρέψει την αναδιάταξη απο ηκεύσε ν στο πακέτο με την προσ ήκη του πακέτου στην κα ο ική δεξαμενή). Κατά την απόκτηση ενός πακέτου εισόδου από την κα ο ική δεξαμενή υπάρ ει μια εξάρτηση δεδομέν ν μεταξύ της φόρτ σης του δείκτη προς το πακέτο και την πρόσ αση στα περιε όμενα και οι σύ - ρονες αρ ιτεκτονικές δεν αναδιατάσσουν τις παραπάν ενέρ ειες. Συνεπώς η εκτέ εση μιας εντο ής fence δεν είναι απαραίτητη σε αυτήν την περίπτ ση. Η τε νική τ ν κρι πακέτ ν κα ιστά εξαιρετικά απ ή την παρακο ού ηση της κατάστασης. Κά ε κα ο ική δεξαμενή συσ ετίζεται με έναν κα ο ικό μετρητή του π ή ους τ ν πακέτ ν

127 8.5 Παράλληλη Σήμανση 127 της. Ο μετρητής ενημερώνεται ατομικά κατά την προσ ήκη ή αφαίρεση ενός πακέτου από τη δεξαμενή. Η μέτρηση του π ή ους τ ν πακέτ ν είναι προσε ιστική κα ώς η μέτρηση μπορεί να δια ασ εί αμέσ ς μετά την προσ ήκη ενός πακέτου α ά πριν την αύξηση του μετρητή. Ωστόσο η συν ήκη τερματισμού απ ώς ορίζει ο μετρητής της κα ο ικής δεξαμενής άδει ν πακέτ ν να ισούται με το π ή ος τ ν δια έσιμ ν πακέτ ν. Η απόκτηση/επιστροφή ενός πακέτου και η ενημέρ ση του μετρητή της αντίστοι ης κα ο ικής δεξαμενής δε ρειάζεται να είναι μία ενιαία αδιαίρετη ειτουρ ία. Για να εξασφα ισ εί πώς ο μετρητής κενών πακέτ ν δε α μηδενισ εί προσ ρινά, κά ε νήμα-σημαντής πρέπει να αποκτήσει ένα καινούριο πακέτο εισόδου πριν επιστρέψει το πακέτο εξόδου του στην κα ο ική δεξαμενή.

128 128 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων Α όρι μος 8.5 Παρά η η συ ο ή: δια είριση κρι πακέτ ν (Ossia κ.ά.) 1: shared fullp ool global pool of full packets 2: shared halff ullp ool global pool of half full packets 3: shared emptyp ool global pool of empty packets 4: function I P () 5: atomic 6: inp acket (fullp ool) 7: if E (inp acket) then 8: atomic 9: inp acket (halff ullp ool) 10: if E (inp acket) then 11: inp acket, outp acket outp acket, inp acket 12: return not E (inp acket) 13: procedure A M S (packet) 14: for all ref in packet do 15: (ref) B (ref) = true private data structure 16: procedure O P () 17: if F (outp acket) then 18: W () 19: if outp acket = null then 20: atomic 21: outp acket (emptyp ool) 22: if outp acket = null then 23: atomic 24: (halff ullp ool) 25: if outp acket = null then 26: if not F (inp acket) then 27: inp acket, outp acket outp acket, inp acket 28: return 29: procedure O P (ref) 30: O P () 31: if outp acket = null or F (outp acket) then 32: C (ref) 33: else 34: (outp acket, ref)

129 8.5 Παράλληλη Σήμανση 129 Α όρι μος 8.6 Παρά η η συ ο ή: εκ ώρηση με ρήση κρι πακέτ ν (Ossia κ.ά.) 1: function A (n) 2: result free 3: newf ree result + n 4: if newf ree lablimit then 5: free newf ree 6: return result 7: /* local allocation buffer overflow */ 8: fence 9: for all obj in lab do 10: B (obj) true 11: lab, lablimit L () 12: if lab = null then 13: return null signal Memory exhausted 14: A (n) Α όρι μος 8.7 Παρά η η συ ο ή: σήμανση με ρήση κρι πακέτ ν (Ossia κ.ά.) 1: shared fullp ool global pool of full packets 2: procedure W () 3: if E (inp acket) then 4: if I P () then 5: A M S (inp acket) 6: fence 7: procedure W () 8: for all ref in inp acket do 9: if (ref) then 10: for all fld in P ointers(ref) do 11: child fld 12: if child null and not M (child) then 13: M (child) 14: O P (child) 15: else 16: D P (ref) defer tracing of unsafe objects 17: procedure W () 18: fence 19: (fullp ool, outp acket) 20: outp acket null

130 130 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων 8.6 Παρά η η αντι ραφή Η παρα η οποίηση τ ν α ορί μ ν συ ο ής με αντι ραφή αντιμετ πίζει ί ο πο ύ τα ίδια ζητήματα με την παρα η οποίηση τ ν α ορί μ ν συ ο ής με σήμανση. Ωστόσο, παρότι η σήμανση ενός αντικειμένου δύο φορές είναι α α ής, αυτό πρέπει να αντι ραφεί μόνο μία φορά Διαμοιρασμός ερ ασίας ανάμεσα στους επεξερ αστές Οι Blelloch και Cheng [23], [35] παρα η οποιούν την αντι ραφή στο π αίσιο της επανα- ηπτικής συ ο ής. Οι επανα ηπτικοί συ έκτες είναι αυξητικοί ή ταυτό ρονοι συ έκτες που αντι ράφουν αντικείμενα την ώρα εκτέ εσης του τροποποιητή, αμ άνοντας ειδική φροντίδα ια την επιδιόρ- ση πεδί ν που ε ράφησαν από τον τροποποιητή κατά τη διάρκεια ενός κύκ ου συ ο ής. Κά ε νήμα-αντι ραφέας έ ει τη δική του στοί α ερ ασίας. Οι Blelloch και Cheng ισ υρίζονται πώς οι στοί ες προσφέρουν ευκο ότερο συ ρονισμό μεταξύ τ ν νημάτ ν-αντι ραφέ ν όπ ς επίσης και μικρότερο ποσοστό κατακερματισμού από ότι οι ουρές Cheney. Το φορτίο ερ ασίας εξισορροπείται άζοντας τα νήματα-αντι ραφείς να μεταφέρουν περιοδικά μονάδες ερ ασίας μεταξύ τ ν τοπικών στοι ών και μιας κα ο ικής στοί ας (α όρι μος 8.8). Μια απ ή μοιραζόμενη στοί α απαιτεί το συ ρονισμό μεταξύ τ ν νημάτ ν που εκτε ούν ειτουρ ίες ώ ησης και εξώ ησης κατα ρίσε ν. Δυστυ ώς, δεν υπάρ ει τρόπος ατομικής αύξησης ή μεί σης του δείκτη στοί ας ια την εισα ή και εξα ή ενός στοι είου με τη ρήση πρ ταρ ικών εντο ών υ ικού όπ ς η F A A και η ρήση ενός κ ειδώματος α σειριοποιούσε την πρόσ αση στη στοί α. Η εντο ή F A A μπορεί στόσο να ρησιμοποιη εί ώστε να επιτραπεί σε πο απ ά νήματα είτε να εισά ουν στοι εία στη στοί α είτε να εξά ουν στοι εία από τη στοί α, κα ώς οι ειτουρ ίες αυτές έ ουν ς τε ικό αποτέ εσμα είτε την αύξηση είτε τη μεί ση του δείκτη στοί ας κατά περισσότερες από μία έσεις. Αφού ένα νήμα-αντι ραφέας έ ει πετύ ει να μετακινήσει το δείκτη στοί ας, πι ανώς κατά αρκετές έσεις, μπορεί να δια άσει από η να ράψει στις έσεις αυτές ρίς τον κίνδυνο εμφάνισης καταστάσε ν συνα νισμού. Οι Cheng και Blelloch επι ά ουν αυτού του είδους την πρόσ αση στη μοιραζόμενη στοί α ρησιμοποιώντας ένα μη ανισμό που ονομάζουν δ μάτια. Υπάρ ουν δύο δ μάτια: ένα ώ ησης και ένα εξώ ησης και ανά πάσα ρονική στι μή ένα εκ τ ν δύο πρέπει να είναι άδειο. Όπ ς φαίνεται και στον α όρι μο 8.9, σε κά ε επανά ηψη του ρό ου συ ο ής, ένα νήμααντι ραφέας εισέρ εται αρ ικά στο δ μάτιο εξώ ησης και εκτε εί ένα προκα ορισμένο αρι μό μονάδ ν ερ ασίας. Αποκτά αντικείμενα προς σάρ ση είτε από την τοπική του στοί α είτε από την κα ο ική στοί α με ρήση της εντο ής F A A. Οι παρα όμενες μονάδες ερ- ασίας εισά ονται στην τοπική στοί α. Στη συνέ εια το νήμα-αντι ραφέας ε κατα είπει το δ μάτιο εξώ ησης και περιμένει μέ ρις ότου και τα υπό οιπα νήματα το έ ουν ε κατα είψει πριν προσπα ήσει να εισέ ει στο δ μάτιο ώ ησης. Το πρώτο νήμα-αντι ραφέας που καταφέρνει να εισέ ει κ είνει την πόρτα (μετα ητή gate) ούτ ς ώστε να απα ορευ εί η είσοδος στα υπό οιπα νήματα-αντι ραφείς. Ενώ ρίσκεται μέσα στο δ μάτιο ώ ησης, το νήμα-αντι ραφέας αδειάζει π ήρ ς την τοπική του στοί α, μεταφέροντας ό α τα στοι εία της στην κα ο ική στοί α, αφού πρώτα δεσμεύσει τον απαραίτητο ώρο με την εντο ή F A A. Το τε ευταίο νήμα-αντι ραφέας που απο ρεί από το δ μάτιο ώ ησης κ είνει την πύ η. Το πρό ημα του μη ανισμού είναι π ς ένας επεξερ αστής που περιμένει ια να εισέ ει στο

131 8.6 Παράλληλη αντιγραφή 131 δ μάτιο ώ ησης υπο ρεούται να περιμένει μέ ρις ότου ό οι οι επεξερ αστές που ρίσκονται ήδη μέσα τε ειώσουν τη σήμανση τ ν αντικειμέν ν τους με κρι ρώμα. Ο ρόνος σήμανσης τ ν αντικειμέν ν με κρι ρώμα είναι συ κρίσιμος με το ρόνο απόκτησης ή κατά εσης νέ ν μονάδ ν ερ ασίας και ένας επεξερ αστής που προσπα εί να εισέ ει στη φάση ώ ησης πρέπει να περιμένει μέ ρις ότου ό οι οι υπό οιποι επεξερ αστές που ρίσκονται στη φάση εξώ ησης τε ειώσουν τη σήμανση τ ν αντικειμέν ν τους με κρι ρώμα. Με ά ες διακυμάνσεις στο ρόνο που ρειάζονται οι επεξερ αστές ια τη σήμανση τ ν αντικειμέν ν τους με κρι ρώμα κα ιστούν αυτό το ρόνο αδράνειας σημαντικό. Μια πιο α αρή αφαίρεση α επέτρεπε στους επεξερ αστές να ε κατα είψουν το δ μάτιο εξώ ησης ρίς να εισέ ουν στο δ μάτιο ώ ησης. Κα ώς η σήμανση τ ν αντικειμέν ν με κρι ρώμα δε σ ετίζεται με τη μοιραζόμενη στοί α, αυτή η ερ ασία μπορεί να πρα ματοποιη εί εκτός τ ν δ ματί ν. Αυτό αυξάνει σημαντικά την πι ανότητα το δ μάτιο εξώ ησης να είναι άδειο και συνεπώς ένα νήμα-αντι ραφέας να μπορέσει να εισέ ει στο δ μάτιο ώ ησης. Ο αρ ικός μη ανισμός δ ματί ν τ ν Cheng και Blelloch επιτρέπει απ ή ανί νευση τερματισμού. Η τοπική στοί α κά ε νήματος-αντι ραφέα είναι κενή όταν αυτό ε κατα είπει το δ μάτιο ώ ησης και επομέν ς μένει στο τε ευταίο νήμα-αντι ραφέα που απο ρεί να ε έ ξει αν και η κα ο ική μοιραζόμενη στοί α είναι επίσης άδεια. Ωστόσο, ο α αρός ορισμός του μη- ανισμού τ ν δ ματί ν επιτρέπει στα νήματα να ερ άζονται και εκτός δ ματί ν. Η υιο έτηση αυτού συνεπά εται π ς η μοιραζόμενη στοί α πρέπει να διατηρεί μία κα ο ική μετα ητή που μετράει πόσα νήματα έ ουν δανεισ εί αντικείμενα από αυτή. Το τε ευταίο νήμα-αντι ραφέας που απο ρεί από το δ μάτιο ώ ησης ε έ ει ταυτό ρονα αν η μοιραζόμενη στοί α είναι κενή και ο κα ο ικός αυτός μετρητής μηδενικός Αντι ράφοντας αντικείμενα παρά η α Για να εξασφα ισ εί π ς μόνο ένα νήμα-αντι ραφέας αντι ράφει ένα αντικείμενο, τα νήματα πρέπει να συνα νισ ούν ώστε να αντι ράψουν ένα αντικείμενο και να ε καταστήσουν τη διεύ υνση προώ ησης στην επικεφα ίδα του πα αιού του αντι ράφου. Ο τρόπος αντι ραφής ενός αντικειμένου από τα νήματα εξαρτάται από το εάν αυτά μοιράζονται μια μοναδική περιο ή εκ ώρησης μνήμης. Στην περίπτ ση αυτή, τα νήματα αποφεύ ουν ορισμένη σπατά η π ηρώνοντας όμ ς το κόστος της ρήσης μιας ατομικής ειτουρ ίας ια εκ ώρηση. Σε αυτήν την περίπτ ση, οι Blelloch και Cheng [23] έτουν να νήματα σε αντα νισμό ια την ε ραφή μιας ειδικής τιμής busy στην έξη της επικεφα ίδας του αντικειμένου όπου α απο ηκευ εί η διεύ υνση προώ ησης αυτού. Το νήμα-νικητής αντι ράφει το αντικείμενο πριν απο ηκεύσει τη διεύ υνση προώ ησης, ενώ τα νήματα-ηττημένοι πρέπει να σπινάρουν μέ ρις ότου παρατηρήσουν μία έ κυρη διεύ υνση. Ενα ακτικά, αν κά ε νήμα-αντι ραφέας ν ρίζει εξαρ ής σε ποια έση α αντι ράψει ένα αντικείμενο ( ια παράδει μα επειδή α το αντι ράψει σε έναν τοπικό απομον τή εκ ώρησης), τα νήματα αντα νίζονται ια να ε ράψουν ατομικά τη διεύ υνση προώ ησης προτού αντι ράψουν το αντικείμενο. Ο συ έκτης τ ν Flood κ.ά. [53] στον οποίο αναφερ ήκαμε προη ουμέν ς είναι ενεα ο- ικός. Η πα αιά ενεά δια ειρίζεται από συ ο ή με σήμανση και συμπύκν ση και η νέα ενεά από συ ο ή με αντι ραφή. Είδαμε παραπάν τον τρόπο με τον οποίο παρα η οποιούν τη φάση της σήμανσης. Εξετάζουμε τώρα πώς παρα η οποιούν την αντι ραφή. Διπ ά-τερματισμένες κ επτόμενες ουρές ρησιμοποιούνται και εδώ ια τη δια είριση τ ν αντικειμέν ν που πρόκειται να σαρ ούν. Ωστόσο, η παρά η η αντι ραφή αντιμετ πίζει δύο προ ήματα ά ν στα στην παρά η η σήμανση: πρώτον, είναι επι υμητή η ε α ιστοποίηση του αντα νισμού ια την εκ ώρηση μνήμης όπου α αντι ραφεί ένα αντικείμενο

132 132 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων Α όρι μος 8.8 Παρά η η συ ο ή: αντι ραφή (Cheng & Blelloch) 1: shared sharedstack the shared stack of work 2: mycopystack[k] local stack has k slots max 3: sp 0 4: procedure () 5: while not () do 6: R () enter pop room 7: for i 1 to k do 8: if L S E () then 9: W () 10: if L S E () then 11: break 12: W () 13: W () 14: if R () then leave push room 15: () 16: procedure W () move work from shared stack 17: P () 18: procedure W () 19: ref P () 20: (ref) see algorithm : procedure W () move work to shared stack 22: P () 23: function L S E () 24: return sp = 0 25: procedure P (ref) 26: mycopystack[sp + +] ref 27: function P () return mycopystack[ sp] 28: procedure P () move work from shared stack 29: cursor F A A (&sharedstack, 1) try to grab from shared stack 30: if cursor > stacklimit then shared stack empty 31: F A A (&sharedstack, 1) readjust stack 32: else 33: mycopystack[sp + +] cursor[0] move work to local stack 34: procedure P () move work to shared stack 35: cursor F A A (&sharedstack, sp) sp 36: for i 0 to sp 1 do 37: cursor[i] mycopystack[i] 38: sp 0

133 8.6 Παράλληλη αντιγραφή 133 Α όρι μος 8.9 Παρά η η συ ο ή: συ ρονισμός ειτουρ ιών ώ ησης/εξώ ησης με δ μάτια (Cheng & Blelloch) 1: shared gate OP EN 2: shared popclients number of clients currently in the pop room 3: shared pushclients number of clients currently in the push room 4: procedure R () 5: while gate OP EN do do nothing:wait 6: F A A (&popclients, 1) try to start popping 7: while gate OP EN do 8: F A A (&popclients, 1) back out since did not succeed 9: while gate OP EN do do nothing:wait 10: F A A (&popclients, 1) try again 11: procedure R () 12: gate CLOSED 13: F A A (&pushclients, 1) move from popping to pushing 14: F A A (&popclients, 1) 15: while popclients > 0 do can t start pushing until none other popping 16: procedure R () 17: pushers F A A (&pushclients, 1) 1 stop pushing 18: if pushers = 0 then I was last in room: check termination 19: if E (sharedstack) then 20: gate OP EN 21: return true 22: else 23: gate OP EN 24: return false

134 134 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων Σ ήμα 8.3: Εξι νίαση κυρίαρ ου νήματος. Τα νήματα 0 έ ς 2 με ρώμα μαύρο κρι και άσπρο αντίστοι α, έ ουν εξι νιάσει ένα ράφο αντικειμέν ν. Το ρώμα κά ε αντικειμένου υποδεικνύει τον επεξερ αστή στη μνήμη του οποίου α αντι ραφεί. Το πρώτο πεδίο κά ε αντικειμένου είναι η επικεφα ίδα του. Το νήμα T 0 είναι αυτό που τε ευταίο κ είδ σε το αντικείμενο X. και δεύτερον ένα ζ ντανό αντικείμενο πρέπει να αντι ραφεί μόνο μία φορά. Ο αντα νισμός ια την εκ ώρηση μνήμης ε α ιστοποιείται με τη ρήση τοπικών απομον τών εκ ώρησης ια κά ε νήμα-αντι ραφέα, τόσο ια την αντι ραφή στους ώρους επιζώντ ν στη νέα ενεά όσο και ια την προα ή στην πα αιά ενεά. Για να αντι ράψει ένα αντικείμενο, ένα νήμααντι ραφέας πρα ματοποιεί μια υπο ετική εκ ώρηση στον τοπικό του απομον τή εκ ώρησης και στη συνέ εια επι ειρεί μια εντο ή C A S στον δείκτη προώ ησης. Αν η τε ευταία πετύ ει, το νήμα-αντι ραφέας αντι ράφει το αντικείμενο. Αν ό ι, επιστρέφει την τιμή του δείκτη προώ ησης που ε κατέστησε το νήμα-νικητής. Ο δια ειριστής μνήμης του Ogasawara [84] αμ άνει υπόψη τη μη ομοιόμορφη προσπέ αση μνήμης και διαιρεί το σ ρό σε τμήματα με μία ή περισσότερες σε ίδες και κά ε τμήμα απεικονίζεται σε έναν επεξερ αστή. Ο εκ ρητής μνήμης, ο οποίος ρησιμοποιείται τόσο από τα νήματα-τροποποιητές όσο και από τα νήματα-συ έκτες προτιμά να εκ ρεί μπ οκ από τη μνήμη του προτιμώμενου επεξερ αστή. Για ένα νήμα-τροποποιητή, αυτός ταυτίζεται με τον επεξερ αστή στον οποίο εκτε είται το νήμα. Τα νήματα-συ έκτες προσπα ούν πάντοτε να αντι ράψουν ζ ντανά αντικείμενα σε σε ίδες μνήμης που σ ετίζονται με τον προτιμώμενο επεξερ αστή τ ν τε ευταί ν. Κα ώς το νήμα-τροποποιητής στο οποίο εκ ρή ηκε ένα αντικείμενο δεν είναι απαραίτητα και το νήμα που το ρησιμοποιεί περισσότερο συ νά, ο συ έκτης ρησιμοποιεί π ηροφορία κυρίαρ ου νήματος ια να προσδιορίζει τον προτιμώμενο επεξερ αστή κά ε αντικειμένου. Πρώτον, ο προτιμώμενος επεξερ αστής αντικειμέν ν προς τα οποία υπάρ ουν άμεσες αναφορές από τη στοί α ενός νήματος-τροποποιητή α είναι ο επεξερ αστής στον οποίο το νήμα εκτε έσ ηκε ια τε ευταία φορά. Αυτό πι ανόν να δημιουρ εί την απαίτηση τα νήματα να ενημερώνουν περιοδικά την ταυτότητα του προτιμώμενου επεξερ αστή τους. Δεύτερον, ο συ έκτης μπορεί να ρησιμοποιήσει π ηροφορίες σ ετικές με το κ είδ μα αντικειμέν ν ια να ταυτοποιήσει το κυρίαρ ο νήμα. Οι μη ανισμοί κ ειδ μάτ ν συ νά απο ηκεύουν την ταυτότητα του νήματος-τροποποιητή που έ ει κ ειδώσει ένα αντικείμενο σε μια έξη στην επικεφα ίδα του αντικειμένου. Παρότι με αυτόν τον τρόπο ταυτοποιείται το νήμα-τροποποιητής (και συνεπώς και ο αντίστοι ος επεξερ αστής) που τε- ευταίο κ είδ σε το αντικείμενο, η προσέ ιση αυτή φαντάζει αρκετή κα ώς τα περισσότερα αντικείμενα δεν ξεφεύ ουν ποτέ από το νήμα-τροποποιητή στο οποίο εκ ρή ηκαν. Τέ ος, ο συ έκτης μπορεί να διαδώσει την ταυτότητα του προτιμώμενου επεξερ αστή από αντικείμενα ονείς σε αντικείμενα παιδιά.

135 8.7 Παράλληλη εκκαθάριση Ξε ριστοί ημι ώροι-από και ημι ώροι-προς Ο Halstead [71] παρα η οποιεί τη συ ο ή απορριμμάτ ν με αντι ραφή παρα ρώντας σε κά ε συ έκτη κατά Cheney το δικό του ξε ριστό ώρο-από και ώρο-προς. Παρότι κά ε νήμα αντι ραφής δια έτει το δικό του συνε όμενο κομμάτι μνήμης προς σάρ ση, αυτό ρίσκεται σε αντα νισμό με τα υπό οιπα νήματα ια την αντι ραφή αντικειμέν ν και την ε κατάσταση δεικτών προώ ησης. Η απ ή αυτή σ εδίαση στόσο μπορεί να οδη ήσει σε αμη ή ποιότητα εξισορρόπησης φορτίου ερ ασίας, κα ώς ένας επεξερ αστής ενδέ εται να ξεμείνει από δου ειά και ενώ οι υπό οιποι είναι απασ ο ημένοι. Επιπ έον, απαιτεί κάποιο μη- ανισμό ειρισμού της περίπτ σης όπου υπερ ει ίζει ο ώρος-προς ενός νήματος-αντι ραφέα παρότι υπάρ ει ώρος σε ά ους ώρους-προς Σ ροί ορ αν μένοι κατά μπ οκ Μία προσέ ιση είναι να υπερ-διαμερισ εί ο ώρος-προς και στη συνέ εια τα νήματα να τε ούν σε αντα νισμό ια την απόκτηση μπ οκ σάρ σης και αντι ραφής. Οι Imai κ.ά. [65] διαιρούν το σ ρό σε κομμάτια στα ερού με έ ους και παρέ ουν σε κά ε νήμα-αντι ραφέα τα δικά του κομμάτια σάρ σης και αντι ραφής επιζώντ ν αντικειμέν ν. Όταν το κομμάτι αντι ραφής ενός νήματος-αντι ραφέα εμίσει, αυτό μεταφέρεται σε μια κα ο ική δεξαμενή και τα ανενερ ά νήματα αντα νίζονται ια την απόκτηση και σάρ ση του και το αρ ικό νήμα-αντι ραφέας αποκτά ένα καινούριο κομμάτι από το δια ειριστή ε εύ ερ ν κομματιών. Δύο μη ανισμοί ρησιμοποιούνται ια την εξισορρόπηση του φορτίου ερ ασίας. Αρ ικά, τα κομμάτια αντι ραφής (τα οποία ονομάζουν μονάδες επέκτασης σ ρού) είναι σ ετικά μικρά (256 έξεις). Δεύτερον, κά ε κομμάτι διαιρείται σε μικρότερα μπ οκ (τα οποία ονομάζουν μονάδες κατανομής φορτίου), με τυπικό μέ ε ος 32 έξεις. Κά ε νήμα-αντι ραφέας προσφέρεται να παρα ρήσει μερικά από τα μη σαρ μένα μπ οκ του οποτεδήποτε ρειάζεται ένα νέο μπ οκ σάρ σης. Μετά τη σάρ ση ενός πεδίου και την αύξηση του δείκτη σάρ σης, ένα νήμα-αντι ραφέας ε έ ει αν ο τε ευταίος έ ει φ άσει το τέ ος του μπ οκ. Αν ναι και το επόμενο αντικείμενο είναι μικρότερο από ένα μπ οκ, το νήμα-αντι ραφέας ε ράφει στο δείκτη σάρ σης τη διεύ υνση του τρέ οντος μπ οκ αντι ραφής. Με τον τρόπο αυτό μειώνεται η συμφόρηση στην κα ο ική δεξαμενή κα ώς το νήμα-αντι ραφέας δε ρειάζεται να αντα νισ εί ια την απόκτηση ενός μπ οκ σάρ σης. Αν πά ι το αντικείμενο είναι με α ύτερο από ένα μπ οκ και μικρότερο από ένα κομμάτι, το νήμα-αντι ραφέας ε ράφει στο δείκτη σάρ σης τη διεύ υνση του τρέ οντος κομματιού αντι ραφής. Αν το αντικείμενο είναι με ά ο, το νήμα-αντι ραφέας συνε ίζει τη σάρ ση του. Τέ ος, τα με ά α αντικείμενα μετακινούνται στην κα ο ική δεξαμενή αμέσ ς μετά την αντι- ραφή τους. 8.7 Παρά η η εκκα άριση Εξετάζουμε τώρα πώς μπορούν να παρα η οποιη ούν οι φάσεις της εκκα άρισης και της συμπύκν σης. Και οι δύο φάσεις έ ουν την ιδιότητα π ς η εξι νίαση έ ει ο οκ ηρ εί και τα ζ ντανά αντικείμενα του σ ρού εντοπισ εί. Επίσης και οι δύο είναι ε ενώς παρα η οποιήσιμες.

136 136 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων Η παρα η οποίηση της εκκα άρισης μπορεί να επιτευ εί είτε διαμερίζοντας στατικά το σ ρό σε συνε όμενες περιο ές, είτε υπερ-διαμερίζοντας τον σε μπ οκ και αφήνοντας να νήματα να αντα νίζονται ια την εκκα άριση ενός μπ οκ σε μία κα ο ική ε εύ ερη ίστα μπ οκ. Ωστόσο, με την υιο έτηση αυτής της απ ής στρατη ικής είναι πι ανόν η ε εύ ερη ίστα να καταστεί σημείο συμφόρησης και η συ ο ή να σειριοποιη εί. Ευτυ ώς όμ ς σε ένα τέτοιου είδους παρά η ο σύστημα, κά ε επεξερ αστής διατηρεί συνή ς τοπικές ξε ριστές ε εύ ερες ίστες με μπ οκ διαφορετικών με ε ών ια την εκ ώρηση μνήμης και έτσι το πρό ημα του αντα νισμού ανά εται στο ειρισμό της επιστροφής ο όκ ηρ ν ε εύ ερ ν μπ οκ σε έναν κα ο ικό εκ ρητή μπ οκ. Επιπ έον, η οκνηρή εκκα άριση αποτε εί από τη φύση της μιας παρά η η ύση στο πρό ημα της εκκα άρισης μερικώς εμάτ ν μπ οκ η οποία εξισορροπεί τις ερ ασίες εκκα άρισης σύμφ να με τους ρυ μούς εκ ώρησης μνήμης στα νήματα-τροποποιητές. Το πρώτο και μοναδικό ήμα της φάσης εκκα άρισης όταν η τε ευταία πρα ματοποιείται οκνηρώς είναι η ταυτοποίηση π ήρ ς άδει ν μπ οκ και η επιστροφή τους στον εκ ρητή μπ οκ. Για να μειώσουν τον αντα νισμό μεταξύ τ ν νημάτ ν-εκκα αριστών, οι Endo κ.ά. [50] παρέ ουν σε κά ε ένα από αυτά έναν αρι μό από συνε όμενα μπ οκ προς τοπική επεξερ ασία. Ο συ έκτης τους ρησιμοποιεί bitmap σήμανσης, τα οποία απο ηκεύονται στις επικεφα ίδες τ ν μπ οκ, ξε ριστά από αυτά. Αυτή η προσέ ιση κα ιστά εύκο ο τον προσδιορισμό του κατά πόσο ένα μπ οκ είναι τε εί ς κενό από ζ ντανά αντικείμενα. Τα άδεια μπ οκ ταξινομούνται και συνενώνονται πριν επιστραφούν σε μια τοπική ε εύ ερη ίστα. Τα μερικώς εμάτα από ζ ντανά αντικείμενα μπ οκ εισά ονται σε τοπικές ξε ριστές ίστες ανάκτησης ια μπ οκ ξε ριστών με ε ών προς με οντική οκνηρή εκκα άριση από τα νήματα-τροποποιητές. Μό- ις ένας επεξερ αστής ο οκ ηρώσει την εκκα άριση του τοπικού του συνό ου εκκα άρισης, συ νεύει την ε εύ ερη ίστα μπ οκ του με την κα ο ική ε εύ ερη ίστα μπ οκ. Η τε- ευταία ερώτηση που μένει να απαντη εί αφορά στο τι κάνει ένα νήμα-τροποποιητής στην περίπτ ση που τόσο η τοπική ίστα ανάκτησης όσο και η κα ο ική δεξαμενή μπ οκ είναι άδειες. Μια ύση είναι να κ έψει ένα μπ οκ από ένα ά ο νήμα-τροποποιητή, κάτι που απαιτεί το συ ρονισμό της απόκτησης του επόμενου μπ οκ προς εκκα άριση. Το κόστος αυτό δεν είναι με ά ο αν ανα ο ισ εί κανείς π ς αφενός η απόκτηση ενός μπ οκ προς εκκα άριση συμ αίνει πιο σπάνια από ότι η αίτηση ια εκ ώρηση μνήμης στο εσ τερικό ενός μπ οκ και αφετέρου ο αντα νισμός πο ών νημάτ ν ια την απόκτηση ενός μπ οκ προς εκκα άριση δεν αναμένεται να συμ αίνει συ νά στην πράξη. 8.8 Παρά η η συμπύκν ση Η παρα η οποίηση α ορί μ ν συ ο ής απορριμμάτ ν με σήμανση και συμπύκν ση αφορά στην παρά η η σήμανση τ ν ζ ντανών αντικειμέν ν και στη συνέ εια στην παρά η η μετακίνηση αυτών. Ωστόσο η παρά η η ο ισ αίνουσα συμπύκν ση είναι απ ούστερη από την παρά η η αντι ραφή, του ά ιστον σε συνε όμενους σ ρούς. Για παράδει μα, όταν τα ζ ντανά αντικείμενα έ ουν σημαν εί ο προορισμός τ ν αντικειμέν ν που α μετακινη ούν δεν α άζει: οι καταστάσεις συνα νισμού επηρεάζουν την επίδοση και ό ι τόσο την ορ ότητα. Μετά τη φάση της σήμανσης, οι περισσότεροι συ έκτες με σήμανση και συμπύκν ση απαιτούν δύο ή και περισσότερα περάσματα στο σ ρό προκειμένου να προσδιορίσουν τη διεύ υνση πρoώ ησης κά ε αντικειμένου, να ενημερώσουν τις αναφορές προς κά ε αντικείμενο και να μετακινήσουν τα αντικείμενα. Όπ ς είδαμε στο κεφά αιο 3 διαφορετικοί α όρι μοι μπορεί να εκτε ούν αυτές τις ερ ασίες με διαφορετική σειρά ή να συνδυάσουν την εκτέ εση δύο ερ ασιών σε ένα μόνο πέρασμα.

137 8.8 Παράλληλη συμπύκνωση 137 Σ ήμα 8.4: Διαίρεση του σ ρού σε μία περιο ή ανά νήμα-συμπυκν τή και ενα α ή της κατεύ υνσης ο ίσ ησης αντικειμέν ν μεταξύ δύο διαδο ικών νημάτ ν. Οι Flood κ.ά. [53] ρησιμοποιούν παρά η η σήμανση και παρά η η συμπύκν ση ια τη δια είριση της πα αιάς ενεάς στον παρά η ο ενεα ο ικό συ έκτη της εικονικής τους μη ανής ια τη ώσσα Java. Ο συ έκτης ρησιμοποιεί τρεις επιπ έον φάσεις μετά την ο οκ ήρ ση της παρά η ης σήμανσης ια να (i) υπο ο ίσει διευ ύνσεις προώ ησης (ii) ενημερώσει αναφορές και (iii) μετακινήσει αντικείμενα. Το ενδιαφέρον αρακτηριστικό της σ εδίασης τους είναι π ς ρησιμοποιούν διαφορετική στρατη ική εξισορρόπησης φορτίου σε κά ε διαφορετική φάση συμπύκν σης. Οι α όρι μοι συμπύκν σης ια μονοεπεξερ αστικά συστήματα πρα ματοποιούν την ο ίσ ηση τ ν ζ ντανών αντικειμέν ν στο ένα άκρο του σ ρού. Αν όμ ς πο απ ά νήματα-συμπυκν τές μετακινούν αντικείμενα παρά η α, τότε απαιτείται προσο ή ούτ ς ώστε να αποτραπεί η ε ραφή δεδομέν ν ενός ζ ντανού αντικειμένου από ένα νήμα-συμπυκν τή πριν τη μετακίνηση του αντικειμένου από ένα ά ο νήμα-συμπυκν τή. Για το ό ο αυτό, οι Flood κ.ά. δε συμπυκνώνουν ό α τα αντικείμενα σε ένα πυκνό άκρο του σ ρού, α ά αντί ετα διαιρούν το σ ρό σε περιο ές και ανα έτουν σε κά ε νήμα συμπύκν σης τη δική του περιο ή. Κά ε νήμα-συμπυκν τής είναι υπεύ υνο ια την ο ίσ ηση ζ ντανών αντικειμέν ν μόνο στη δική του περιο ή. Επιπ έον, προκειμένου να μει εί ο (περιορισμένος) κατακερματισμός που μπορεί να προκύψει από τη ρήση αυτής της στρατη ικής διαμέρισης του σ ρού, η κατεύ υνση ο ίσ ησης αντικειμέν ν ενα άσσεται μεταξύ δύο διαδο ικών περιο ών (σ ήμα 8.4). Το πρώτο ήμα είναι η ε κατάσταση ενός δείκτη προώ ησης στην επικεφα ίδα κά ε ζ ντανού αντικειμένου. Ο δείκτης αυτός α απο ηκεύει τη διεύ υνση στην οποία το αντικείμενο πρόκειται να μετακινη εί. Σε αυτή τη φάση, ο σ ρός υπερ-διαμερίζεται ια να ε τι εί η εξισορρόπηση φορτίου. Ο ώρος διαιρείται σε M μονάδες ευ υ ραμμισμένες με άση τα αντικείμενα και η κά ε μονάδα έ ει σ εδόν το ίδιο μέ ε ος. Οι Flood κ.ά. υπο ό ισαν π ς μία κα ή επι ο ή ια τον UltraSPARC διακομιστή είναι ο αρι μός τ ν ρησιμοποιούμεν ν μονάδ ν να είναι τετραπ άσιος του αρι μού τ ν νημάτ ν-συμπυκν τών (M = 4N). Τα νήματα-συμπυκν τές αντα νίζονται μεταξύ τους ια την απόκτηση μονάδ ν και στη συνέ εια υπο ο ίζουν τον ό κο τ ν ζ ντανών δεδομέν ν σε κά ε μονάδα. Μά ιστα, ια να διευκο υν ούν οι επόμενες φάσεις, συνενώνουν ειτονικά απορρίμματα. Μό ις ο ό κος τ ν ζ ντανών δεδομέν ν σε κά ε μονάδα ίνει ν στός, ο σ ρός μπορεί να διαιρε εί σε N περιο ές που κα εμία απ τις οποίες περι αμ άνει σ εδόν τον ίδιο ό κο ζ ντανών δεδομέν ν. Αυτές οι περιο ές είναι ευ υ ραμμισμένες με τις μονάδες της προη ούμενης φάσης. Επίσης υπο ο ίζεται η διεύ υνση προορισμού ια κά ε ζ ντανό αντικείμενο, αμ άνοντας υπόψη την κατεύ υνση ο ίσ ησης σε κά ε περιο ή. Τα νήματα-συμπυκν τές π έον αντα νίζονται μεταξύ τους ια την απόκτηση μονάδ ν και ε κα ιστούν τους δείκτες προώ ησης σε κά ε ζ ντανό αντικείμενο τ ν μονάδ ν τους. Η επόμενη φάση πρα ματοποιεί την ενημέρ ση τ ν κατά η ν αναφορών με τις νέες διευ- ύνσεις τ ν μετακινη έντ ν αντικειμέν ν. Ως συνή ς αυτό απαιτεί τη σάρ ση στοι ών τ ν

138 138 Κεφάλαιο 8. Παράλληλη συλλογή απορριμμάτων Σ ήμα 8.5: Συμπύκν ση με ο ίσ ηση μπ οκ. Ο Abuaiadh κ.ά. ο ισ αίνουν ο ισ αίνουν ο όκ ηρα μπ οκ και ό ι ξε ριστά αντικείμενα. νημάτ ν-τροποποιητών, τ ν αναφορών σε αντικείμενα ενός υπο ώρου του σ ρού που είναι απο ηκευμένες σε πεδία αντικειμέν ν εκτός της μονάδας κα ώς επίσης και τ ν ζ ντανών αντικειμέν ν αυτού του υπο ώρου του σ ρού ( ια παράδει μα στην πα αιά ενεά). Οποιαδήποτε κατά η η στρατη ική διαμοιρασμού φορτίου μπορεί να ρησιμοποιη εί. Οι Flood κ.ά. ρησιμοποιούν εκ νέου τη διαμέριση σε μονάδες ια τη σάρ ση του προς συμπύκν ση υπο ώρου του σ ρού (της πα αιάς ενεάς) παρότι η σάρ ση της νέας ενεάς πρα ματοποιείται ς μια αδιαίρετη ερ ασία, δη αδή σειριακά. Η τε ευταία φάση μετακινεί τα αντικείμενα. Οι Flood κ.ά. ανα έτουν σε κά ε νήμα-συμπυκν τή τη μετακίνηση αντικειμέν ν μιας περιο ής. Αυτή η προσέ ιση εξισορροπεί το φόρτο ερ ασίας ομοιόμορφα μεταξύ τ ν νημάτ ν- συμπυκν τών, αφού οι περιο ές ορίσ ηκαν ώστε να έ ουν σ εδόν τον ίδιο ό κο ζ ντανών δεδομέν ν. Υπάρ ουν δύο μειονεκτήματα όσον αφορά τον τρόπο που ο α όρι μος συμπυκνώνει αντικείμενα. Πρώτον, πρα ματοποιεί τρία περάσματα στο σ ρό. Δεύτερον, αντί να συμπυκνώσουν ό α τα ζ ντανά αντικείμενα στο ένα άκρο της πα αιάς ενεάς του σ ρού, οι Flood κ.ά. συμπυκνώνουν την πα αιά ενεά σε N πυκνά τμήματα, αφήνοντας N+1 2 κενά ια εκ ώρηση. Δε σπατα άται ώρος σε κά ε συμπυκν μένο τμήμα εκτός ίσ ς ια ό ους ευ υ ράμμισης τ ν αντικειμέν ν. Ωστόσο, αν ο αρι μός τ ν περιο ών ή νημάτ ν-συμπυκν τών είναι πο ύ με ά ος, η εκ ώρηση με ά ν αντικειμέν ν στα νήματα-τροποποιητές μπορεί να καταστεί αδύνατη. Οι Abuaiadh κ.ά. [2] ια να αντιμετ πίσουν το πρώτο πρό ημα υπο ο ίζουν μόνο και δεν απο ηκεύουν τις διευ ύνσεις προώ ησης, ρησιμοποιώντας το bitmap σήμανσης και ένα διάνυσμα μετατόπισης που απο ηκεύει τη νέα διεύ υνση του πρώτου ζ ντανού αντικειμένου σε κά ε μικρό μπ οκ του σ ρού. Λύνουν το δεύτερο πρό ημα υπερ-διαμερίζοντας το σ ρό σε έναν αρι μό σ ετικά με ά ν περιο ών. Για παράδει μα, προτείνουν το π ή ος τ ν περιο ών να είναι τετραπ άσιο του αρι μού τ ν επεξερ αστών και η κά ε περιο ή να έ ει μέ ε ος του ά ιστον 4 MB. Οι περιο ές του σ ρού συμπυκνώνονται με τη σειρά. Τα νήματα- συμπυκν τές αντα νίζονται ια την απόκτηση μιας περιο ής ρησιμοποιώντας μια ατομική ειτουρ ία ια να αυξήσουν έναν κα ο ικό μετρητή (ή δείκτη). Αν η αύξηση είναι επιτυ- ής, το νήμα-συμπυκν τής έ ει αποκτήσει την περιο ή. Αν πά ι ό ι, η συ κεκριμένη περιο ή ρίσκεται στην κατο ή κάποιου ά ου νήματος-συμπυκν τή και το νήμα προσπα εί να αποκτήσει την επόμενη περιο ή. Ένας πίνακας απο ηκεύει δείκτες προς την αρ ή του ε εύ ερου ώρου κά ε περιο ής. Αφού αποκτήσει μια περιο ή ια συμπύκν ση, ένα νήμα-συμπυκν τής διεκδικεί μία περιο ή στην οποία μπορεί να μετακινήσει αντικείμενα. Ένα νήμα-συμπυκν τής αποκτά μια περιο ή προσπα ώντας να ράψει την ειδική τιμή null στο αντίστοι ο πεδίο του πίνακα. Τα νήματα-συμπυκν τές ποτέ δε συμπυκνώνουν από ή προς μια περιο ή της οποίας ο αντίστοι ος δείκτης στον πίνακα έ ει την τιμή null, ενώ δε μεταφέρονται αντικείμενα από κάποια περιο ή με μικρότερο αρι μό προς κάποια περιο ή με με α ύτερο αρι μό. Η πρόοδος εξασφα ίζεται αφού ένα νήμα-συμπυκν τής μπορεί πάντοτε να συμπυκνώσει μια περιο ή στον

Παρά η η Δια είριση Δεδομέν ν

Παρά η η Δια είριση Δεδομέν ν 17 Παρά η η Δια είριση Δεδομέν ν Ο όρος "με ά α δεδομένα" εμφανίστηκε στα μέσα της δεκαετίας του 2000 και έ ει έσει νέες προκ ήσεις στα ΣΔΒΔ. Συνοπτικά, οι προκ ήσεις αυτές απορρέουν κυρί ς από τον πο

Διαβάστε περισσότερα

Κανονισμός Εποπτικού Συμ ου ίου

Κανονισμός Εποπτικού Συμ ου ίου Κανονισμός Εποπτικού Συμ ου ίου Περιφερειακής Ένωσης Δήμων (Π.Ε.Δ.) Ιονίων Νήσων Περιφερειακή Έν ση Δήμ ν (Π.Ε.Δ.) Ιονί ν Νήσ ν ΠΕΔ ΙΝ Ιανουάριος 2012 2 Περιε όμενα 1 Αντικείμενο του Κανονισμού 4 2 Σύν

Διαβάστε περισσότερα

Α όρι μοι και Πο υπ οκότητα 1η Σειρά Γραπτών Ασκήσε ν

Α όρι μοι και Πο υπ οκότητα 1η Σειρά Γραπτών Ασκήσε ν .. Α όρι μοι και Πο υπ οκότητα 1η Σειρά Γραπτών Ασκήσε ν CoReLab ΣΗΜΜΥ - Ε.Μ.Π. Επιμέ εια διαφανειών: Χάρης Α ε ιδάκης 12 Δεκεμ ρίου, 2011 Outline. 1 Άσκηση 1. 2 Άσκηση 2. 3 Άσκηση 3. 4 Άσκηση 4. 5 Άσκηση

Διαβάστε περισσότερα

Κανονισμός Εκτε εστικής Επιτροπής

Κανονισμός Εκτε εστικής Επιτροπής Κανονισμός Εκτε εστικής Επιτροπής Περιφερειακής Ένωσης Δήμων (Π.Ε.Δ.) Ιονίων Νήσων Περιφερειακή Έν ση Δήμ ν (Π.Ε.Δ.) Ιονί ν Νήσ ν ΠΕΔ ΙΝ Ιανουάριος 2012 2 Περιε όμενα 1 Αντικείμενο 4 2 Σύν εση εκτε εστικής

Διαβάστε περισσότερα

Ανάπτυξη Βι ιο ήκης Γραφικών ια Ενσ ματ μένο Σύστημα

Ανάπτυξη Βι ιο ήκης Γραφικών ια Ενσ ματ μένο Σύστημα ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ Ανάπτυξη Βι ιο ήκης Γραφικών ια Ενσ ματ μένο Σύστημα ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

Διαβάστε περισσότερα

Κανονισμός Οικονομικής Δια είρισης

Κανονισμός Οικονομικής Δια είρισης Κανονισμός Οικονομικής Δια είρισης Περιφερειακής Ένωσης Δήμων (Π.Ε.Δ.) Ιονίων Νήσων Περιφερειακή Έν ση Δήμ ν (Π.Ε.Δ.) Ιονί ν Νήσ ν ΠΕΔ ΙΝ Ιανουάριος 2012 2 Περιε όμενα Άρ ρο 1: Αντικείμενο Κανονισμού 4

Διαβάστε περισσότερα

Κανονισμός Διοικητικού Συμ ου ίου

Κανονισμός Διοικητικού Συμ ου ίου Κανονισμός Διοικητικού Συμ ου ίου Περιφερειακής Ένωσης Δήμων (Π.Ε.Δ.) Ιονίων Νήσων Περιφερειακή Έν ση Δήμ ν (Π.Ε.Δ.) Ιονί ν Νήσ ν -3mm-3mm ΠΕΔ ΙΝ Ιανουάριος 2012 2 Περιε όμενα 1 Αντικείμενο του κανονισμού

Διαβάστε περισσότερα

Ο Κατά ο ος Υπο ραφών

Ο Κατά ο ος Υπο ραφών 7 Ο Κατά ο ος Υπο ραφών Περιε όμενα Κεφα αίου 7.1 Εισα ή............................ 144 7.2 Μέ οδοι Εξα ής Υπο ραφών................ 144 7.2.1 Βασικές Μέ οδοι Εξα ής Υπο ραφών....... 145 7.2.2 Εξα ή Υπο

Διαβάστε περισσότερα

Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών. Διπ ματική Ερ ασία

Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών. Διπ ματική Ερ ασία Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών Με έτη και Υ οποίηση Α ορί μ ν ια Βιο ο ικές Εφαρμο ές σε MapReduce Περι

Διαβάστε περισσότερα

Ο Αντεστραμμένος Κατά ο ος

Ο Αντεστραμμένος Κατά ο ος 6 Ο Αντεστραμμένος Κατά ο ος Περιε όμενα Κεφα αίου 6.1 Εισα ή............................ 118 6.2 Η Δομή του Αντεστραμμένου Κατα ό ου........... 118 6.3 Χρήση του Κατα ό ου στην Επεξερ ασία Ερ τημάτ ν...

Διαβάστε περισσότερα

Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών. Διπ ματική Ερ ασία

Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών. Διπ ματική Ερ ασία Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών Υ οποίηση κατασκευής δέντρου επι εμάτ ν σε Hadoop Mapreduce Διπ ματική

Διαβάστε περισσότερα

Το Λο ικό Μοντέ ο. Περιε όμενα Κεφα αίου

Το Λο ικό Μοντέ ο. Περιε όμενα Κεφα αίου 3 Το Λο ικό Μοντέ ο Περιε όμενα Κεφα αίου 3.1 Εισα ή............................ 52 3.2 Το Απ ό Λο ικό Μοντέ ο................... 52 3.2.1 Βασικές Έννοιες.................... 53 3.2.2 Τε εστές Γειτονικότητας

Διαβάστε περισσότερα

Το Διανυσματικό Μοντέ ο

Το Διανυσματικό Μοντέ ο 4 Το Διανυσματικό Μοντέ ο Περιε όμενα Κεφα αίου 4.1 Εισα ή............................ 74 4.2 Βασικές Έννοιες........................ 74 4.2.1 Υπο ο ισμός Σημαντικότητας Όρ ν......... 76 4.2.2 Υπο ο ισμός

Διαβάστε περισσότερα

Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Η εκτρικής Ισ ύος. Διπ ματική Ερ ασία

Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Η εκτρικής Ισ ύος. Διπ ματική Ερ ασία Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Η εκτρικής Ισ ύος Εφαρμο ές της Θε ρίας Παι νί ν στα Μικροδίκτυα Διπ ματική Ερ ασία του ΠΕΤΡΟΥ Χ. ΑΡΙΣΤΕΙΔΟΥ Επι

Διαβάστε περισσότερα

Ανάκτηση Π ηροφορίας στον Πα κόσμιο Ιστό

Ανάκτηση Π ηροφορίας στον Πα κόσμιο Ιστό 9 Ανάκτηση Π ηροφορίας στον Πα κόσμιο Ιστό Περιε όμενα Κεφα αίου 9.1 Εισα ή............................ 204 9.2 Πα κόσμιος Ιστός και Μη ανές Αναζήτησης......... 204 9.2.1 Οι Προκ ήσεις του Πα κόσμιου Ιστού........

Διαβάστε περισσότερα

Ανάκτηση Π ηροφορίας. Συ ραφή Απόστο ος Ν. Παπαδόπου ος Ι άννης Μαν όπου ος Κ νσταντίνος Τσί ας. Κριτικός Ανα νώστης Δημήτριος Κατσαρός

Ανάκτηση Π ηροφορίας. Συ ραφή Απόστο ος Ν. Παπαδόπου ος Ι άννης Μαν όπου ος Κ νσταντίνος Τσί ας. Κριτικός Ανα νώστης Δημήτριος Κατσαρός Ανάκτηση Π ηροφορίας Συ ραφή Απόστο ος Ν. Παπαδόπου ος Ι άννης Μαν όπου ος Κ νσταντίνος Τσί ας Κριτικός Ανα νώστης Δημήτριος Κατσαρός Συντε εστές Έκδοσης ΓΛΩΣΣΙΚΗ ΕΠΙΜΕΛΕΙΑ: Α. Ν. Παπαδόπου ος, Ι. Μαν

Διαβάστε περισσότερα

Ορ ανισμός Εσ τερικής Υπηρεσίας

Ορ ανισμός Εσ τερικής Υπηρεσίας Ορ ανισμός Εσ τερικής Υπηρεσίας Περιφερειακής Ένωσης Δήμων (Π.Ε.Δ.) Ιονίων Νήσων Περιφερειακή Έν ση Δήμ ν (Π.Ε.Δ.) Ιονί ν Νήσ ν ΠΕΔ ΙΝ Ιανουάριος 2012 2 Περιε όμενα Άρ ρο 1: Περιε όμενο του Ορ ανισμού

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΨΗΦΙΑΚΗΣ ΕΠΕΞΕΡΓΑΣΙΑΣ ΣΗΜΑΤΩΝ ΚΑΙ ΕΙΚΟΝΩΝ Ρομποτικά Εκπαιδευτικά

Διαβάστε περισσότερα

Επέκταση του συστήματος ανοι τού κώδικα Pig

Επέκταση του συστήματος ανοι τού κώδικα Pig Επέκταση του συστήματος ανοι τού κώδικα Pig Εμμανουή Ζουμπου άκης AEM: 1462 Επι έπ ν κα η ητής: Αναστάσιος Γούναρης, Λέκτορας τμ. Π ηροφορικής Α.Π.Θ. Ιούνιος 2012 2 2 Abstract The tremendous Internet growth

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΗΛΕΚΤΡΙΚΩΝ ΒΙΟΜΗΧΑΝΙΚΩΝ ΔΙΑΤΑΞΕΩΝ ΚΑΙ ΣΥΣΤΗΜΑΤΩΝ ΑΠΟΦΑΣΕΩΝ ΜΕΛΕΤΗ ΚΑΙ ΠΡΟΣΟΜΟΙΩΣΗ BLDC ΚΙΝΗΤΗΡΑ ΣΕ ΠΕΡΙΒΑΛΛΟΝ MATLAB/SIMULINK

Διαβάστε περισσότερα

ἔστω www.esto.gr Ο...πισινός μας! American Bar το καναμε για όλους μας. * * * www.esto.gr κι από τη Σκιά τους. σε κάθε νησί;

ἔστω www.esto.gr Ο...πισινός μας! American Bar το καναμε για όλους μας. * * * www.esto.gr κι από τη Σκιά τους. σε κάθε νησί; American Bar το καναμε * κι από τη Σκιά τους. * κι απο τις Συνιστώσες τους. * για όλους μας. * * * σε κάθε νησί; * σε κάθε υπουργείο. * έξω από το σπίτι του. * * * Ποιος είναι πίσω μας; * Ο...πισινός μας!

Διαβάστε περισσότερα

Π Ε Δ (Π.Ε.Δ.) Ι Ν ΠΕΔ. Κανονισμοί. ΟΕΥ Προσωπικού Διοικητικού Συμβουλίου Εκτελεστικής Επιτροπής Οικονομικής Διαχείρισης Εποπτικού Συμβουλίου

Π Ε Δ (Π.Ε.Δ.) Ι Ν ΠΕΔ. Κανονισμοί. ΟΕΥ Προσωπικού Διοικητικού Συμβουλίου Εκτελεστικής Επιτροπής Οικονομικής Διαχείρισης Εποπτικού Συμβουλίου Π Ε Δ (Π.Ε.Δ.) Ι Ν ΠΕΔ ΙΝ Κανονισμοί ΟΕΥ Προσωπικού Διοικητικού Συμβουλίου Εκτελεστικής Επιτροπής Οικονομικής Διαχείρισης Εποπτικού Συμβουλίου Ιανουάριος 2012 Σύντομα Περιε όμενα 1 Ορ ανισμός Εσ τερικής

Διαβάστε περισσότερα

Το Πι ανοκρατικό Μοντέ ο

Το Πι ανοκρατικό Μοντέ ο 5 Το Πι ανοκρατικό Μοντέ ο Περιε όμενα Κεφα αίου 5.1 Εισα ή............................ 94 5.2 Βασικές Έννοιες Θε ρίας Πι ανοτήτ ν............ 95 5.3 Υπο ο ισμός Σ ετικότητας Ε ράφ ν............ 96 5.3.1

Διαβάστε περισσότερα

Ε νικό Μετσό ιο Πο υτε νείο

Ε νικό Μετσό ιο Πο υτε νείο Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών Ερ α είο Αυτοματοποιημένης Εξερεύνησης Απόδοσης - Επιφάνειας Υ ικού - Ισ

Διαβάστε περισσότερα

Αποτίμηση Αποτε εσματικότητας

Αποτίμηση Αποτε εσματικότητας 2 Αποτίμηση Αποτε εσματικότητας Περιε όμενα Κεφα αίου 2.1 Εισα ή............................ 26 2.2 Βασικά Μέτρα Αποτε εσματικότητας............. 26 2.2.1 Ανάκ ηση, Ακρί εια και Αστο ία........... 27 2.2.2

Διαβάστε περισσότερα

Απ ή υ οποίηση α ορί μου Fast Multipole Method ανεξάρτητου συνάρτησης πυρήνα

Απ ή υ οποίηση α ορί μου Fast Multipole Method ανεξάρτητου συνάρτησης πυρήνα Αριστοτέ ειο Πανεπιστήμιο Θεσσα ονίκης Πο υτε νική Σ ο ή Τμήμα Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Η εκτρονικής και Υπο ο ιστών Απ ή υ οποίηση α ορί μου Fast Multipole Method ανεξάρτητου

Διαβάστε περισσότερα

Εισα ή στην Ανάκτηση Π ηροφορίας

Εισα ή στην Ανάκτηση Π ηροφορίας 1 Εισα ή στην Ανάκτηση Π ηροφορίας Περιε όμενα Κεφα αίου 1.1 Εισα ή............................ 2 1.2 Η Διαδικασία της Ανάκτησης Π ηροφορίας.......... 8 1.2.1 Βασικές Λειτουρ ίες.................. 9 1.2.2

Διαβάστε περισσότερα

Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Επικοιν νιών, Η εκτρονικής και Συστημάτ ν Π ηροφορικής

Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Επικοιν νιών, Η εκτρονικής και Συστημάτ ν Π ηροφορικής Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Τομέας Επικοιν νιών, Η εκτρονικής και Συστημάτ ν Π ηροφορικής Υ οποίηση Εικονικού Μετα έα ια Εφαρμο ές του Ίντερνετ του

Διαβάστε περισσότερα

Υ οποίηση αντα α ής κ ειδιού DH και ψηφιακών υπο ραφών ασισμένη σε ε ειπτικές καμπύ ες

Υ οποίηση αντα α ής κ ειδιού DH και ψηφιακών υπο ραφών ασισμένη σε ε ειπτικές καμπύ ες Υ οποίηση αντα α ής κ ειδιού DH και ψηφιακών υπο ραφών ασισμένη σε ε ειπτικές καμπύ ες Νίκος Γιανναράκης Ζ ή Παρασκευοπού ου Σ ο ή Η εκτρο ό ν Μη ανικών και Μη ανικών Υπο ο ιστών Ε νικό Μετσό ιο Πο υτε

Διαβάστε περισσότερα

Σ εδιασμός Συστημάτ ν Ε έ ου

Σ εδιασμός Συστημάτ ν Ε έ ου Σ εδιασμός Συστημάτ ν Ε έ ου ΔΠΜΣ Συστήματα Αυτοματισμού 2014-2015 Δρ Γ Παπα άμπρου Λέκτορας ΕΜΠ georgepapalambrou@lmentuagr Ερ αστήριο Ναυτικής Μη ανο ο ίας (Κτίριο Λ) Σ ο ή Ναυπη ών Μη ανο ό ν Μη ανικών

Διαβάστε περισσότερα

Ανάπτυξη Συστήματος Συστάσε ν Συνερ ατικής Διή ησης με ρήση Ιεραρ ικών Α ορί μ ν Κατάταξης

Ανάπτυξη Συστήματος Συστάσε ν Συνερ ατικής Διή ησης με ρήση Ιεραρ ικών Α ορί μ ν Κατάταξης ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Μεταπτυχιακή Διπλωματική Εργασία Ανάπτυξη Συστήματος Συστάσε ν Συνερ ατικής Διή ησης με ρήση Ιεραρ ικών Α ορί μ ν Κατάταξης της Μαριάννας Κουνέ

Διαβάστε περισσότερα

ΚΑΝΟΝΙΣ ΜΟ Ι ΙΕΞΑΓΩΓΗΣ ΑΓΩΝΩΝ 1 / 8 SCALE IC TRA CK ΕΛ. Μ. Ε

ΚΑΝΟΝΙΣ ΜΟ Ι ΙΕΞΑΓΩΓΗΣ ΑΓΩΝΩΝ 1 / 8 SCALE IC TRA CK ΕΛ. Μ. Ε ΚΑΝΟΝΙΣ ΜΟ Ι ΙΕΞΑΓΩΓΗΣ ΑΓΩΝΩΝ 1 / 8 SCALE IC TRA CK ΕΛ. Μ. Ε. 2 0 1 9 Κλ ά δο ς θερ µ ι κώ ν τη λ εκα τ ευθυ νό µ εν ω ν α υ το κι νή τω ν. Υπ εύ θυνο ς Κ λ ά δ ο υ Ζωτιαδης Κωστας bo d @ e l - m e. gr

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΕΠΙΚΟΙΝΩΝΙΩΝ, ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΣΥΣΤΗΜΑΤΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Ανά υση Συναισ ήματος σε Δεδομένα Κοιν νικών Δικτύ ν με

Διαβάστε περισσότερα

Ε νικό Μετσό ιο Πο υτε νείο

Ε νικό Μετσό ιο Πο υτε νείο Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Μη ανο ό ν Μη ανικών Τομέας Ρευστών Ερ αστήριο Θερμικών Στρο ι ομη ανών Μονάδα Παρά η ης Υπο ο ιστικής Ρευστοδυναμικής& Βε τιστοποίησης Η συνε ής συζυ ής μέ οδος ια περιοδικές

Διαβάστε περισσότερα

Ε νικό Μετσό ιο Πο υτε νείο. Α όρι μοι Επανε ραφής Τροποποιημέν ν Ερ τημάτ ν ια Βατές Περι ραφικές Λο ικές

Ε νικό Μετσό ιο Πο υτε νείο. Α όρι μοι Επανε ραφής Τροποποιημέν ν Ερ τημάτ ν ια Βατές Περι ραφικές Λο ικές dummy line Ε νικό Μετσό ιο Πο υτε νείο ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΥΠΟΛΟΓΙΣΤΩΝ Α όρι μοι Επανε ραφής Τροποποιημέν ν Ερ τημάτ ν ια Βατές Περι

Διαβάστε περισσότερα

ΕΠΑΝΑΛΗΠΣΙΚΕ ΑΚΗΕΙ ΜΙΓΑΔΙΚΟΤ-ΟΡΙΑ-ΤΝΕΧΕΙΑ

ΕΠΑΝΑΛΗΠΣΙΚΕ ΑΚΗΕΙ ΜΙΓΑΔΙΚΟΤ-ΟΡΙΑ-ΤΝΕΧΕΙΑ (ΠΕΡΙΕΧΕΙ ΑΚΗΕΙ ΚΑΙ ΑΠΟ ΣΗΝ ΣΡΑΠΕΖΑ ΘΕΜΑΣΩΝ ΣΗ Ε.Μ.Ε) ΑΚΗΗ 1 Έςτω ςυνεήσ ςυνάρτηςη :RR, με (0)=2 η οποία ικανοποιεί τη ςέςη ( ) 4 = 6 ια κά ε R α) Να βρείτε τισ τιμέσ (2) και (-2) β) Να απο είξετε τι υπάρει

Διαβάστε περισσότερα

Ε νικό Μετσό ιο Πο υτε νείο. Πρακτικά Συστήματα Συ ο ιστικής ια Εκφραστικές Ασαφείς Περι ραφικές Λο ικές

Ε νικό Μετσό ιο Πο υτε νείο. Πρακτικά Συστήματα Συ ο ιστικής ια Εκφραστικές Ασαφείς Περι ραφικές Λο ικές Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Η εκτρο ό ν Μη ανικών Και Μη ανικών Υπο ο ιστών Τομέας Τε νο ο ίας Π ηροφορικής και Υπο ο ιστών Πρακτικά Συστήματα Συ ο ιστικής ια Εκφραστικές Ασαφείς Περι ραφικές Λο

Διαβάστε περισσότερα

Πα κ έ τ ο Ε ρ γ α σ ί α ς 4 Α ν ά π τ υ ξ η κ α ι π ρ ο σ α ρ µ ο γ ή έ ν τ υ π ο υ κ α ι η λ ε κ τ ρ ο ν ι κ ο ύ ε κ π α ι δ ε υ τ ι κ ο ύ υ λ ι κ ο

Πα κ έ τ ο Ε ρ γ α σ ί α ς 4 Α ν ά π τ υ ξ η κ α ι π ρ ο σ α ρ µ ο γ ή έ ν τ υ π ο υ κ α ι η λ ε κ τ ρ ο ν ι κ ο ύ ε κ π α ι δ ε υ τ ι κ ο ύ υ λ ι κ ο ΠΑΝΕΠΙΣΤΗΜΙΟ Θ ΕΣΣΑΛ ΙΑΣ ΠΟΛ Υ ΤΕΧ ΝΙΚ Η ΣΧ ΟΛ Η ΤΜΗΜΑ ΜΗΧ ΑΝΟΛ ΟΓ Ω Ν ΜΗΧ ΑΝΙΚ Ω Ν Β ΙΟΜΗΧ ΑΝΙΑΣ ΑΝΑΜΟΡΦΩΣΗ Π Π Σ ΣΥ ΝΟΠ Τ Ι Κ Η Ε Κ Θ Ε ΣΗ ΠΕ 4 Α Ν Α ΠΤ Υ Ξ Η Κ Α Ι ΠΡ Ο Σ Α Ρ Μ Ο Γ Η ΕΝ Τ Υ ΠΟ Υ Κ Α

Διαβάστε περισσότερα

Ανάπτυξη συντακτικού ανα υτή φυσικής ώσσας με ρήση του φορμα ισμού LFG. Πανα ιώτης Μίνος

Ανάπτυξη συντακτικού ανα υτή φυσικής ώσσας με ρήση του φορμα ισμού LFG. Πανα ιώτης Μίνος Ανάπτυξη συντακτικού ανα υτή φυσικής ώσσας με ρήση του φορμα ισμού LFG Πανα ιώτης Μίνος 18 Φε ρουαρίου 2014 Περί ηψη Η παρούσα μεταπτυ ιακή διπ ματική ερ ασία αναφέρεται στον σ εδιασμό και την υ οποίηση

Διαβάστε περισσότερα

Π α σα πνο η αι νε σα τω τον Κυ ρι. Π α σα πνο η αι νε σα α τω τον. Ἕτερον. Τάξις Ἑωθινοῦ Εὐαγγελίου, Ὀ Ν Ψαλµός. Μέλος Ἰωάννου Ἀ. Νέγρη.

Π α σα πνο η αι νε σα τω τον Κυ ρι. Π α σα πνο η αι νε σα α τω τον. Ἕτερον. Τάξις Ἑωθινοῦ Εὐαγγελίου, Ὀ Ν Ψαλµός. Μέλος Ἰωάννου Ἀ. Νέγρη. Τάξις Ἑωθινοῦ Εὐαγγελίου, Ὀ Ν Ψαλµός. Μέλος Ἰωάννου Ἀ. Νέγρη. Κυ ρι ε ε λε η σον Ἦχος Πα Α µην Π α σα πνο η αι νε σα τω τον Κυ ρι ον Ἕτερον. Π α σα πνο η αι νε σα α τω τον Κυ υ ρι ι ον 1 ΙΩΑΝΝΟΥ Α. ΝΕΓΡΗ

Διαβάστε περισσότερα

Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019

Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019 Σχεδίαση Γλωσσών Προγραμματισμού Εαρινό Εξάμηνο 2018-2019 Lec03 18/02/2019 Γλώσσες με δομή Block Γλώσσες με δομή Block Απλό μοντέλο Μηχανής Εκτέλεσης Διαχείριση Μνήμης Εμβέλεια και διάρκεια ζωής Εμβέλεια

Διαβάστε περισσότερα

JEAN-CHARLES BLATZ 02XD34455 01RE52755

JEAN-CHARLES BLATZ 02XD34455 01RE52755 ΟΡΘΗ ΕΠΑΝΑΛΗΨΗ ΤΩΝ ΕΝ Ι ΑΜ ΕΣ ΩΝ ΟΙ Κ ΟΝΟΜ Ι Κ ΩΝ Κ ΑΤΑΣ ΤΑΣ ΕΩΝ ΤΗΣ ΕΤΑΙ ΡΙ ΑΣ Κ ΑΙ ΤΟΥ ΟΜ Ι ΛΟΥ Α Τρίµηνο 2005 ΑΝΩΝΥΜΟΣ Γ ΕΝΙ Κ Η ΕΤ ΑΙ Ρ Ι Α Τ ΣΙ ΜΕΝΤ ΩΝ Η Ρ ΑΚ Λ Η Σ ΑΡ. ΜΗ Τ Ρ. Α.Ε. : 13576/06/Β/86/096

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΣΥΣΤΗΜΑΤΩΝ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΛΙΚΩΝ Αποτίμηση δυναμικών α η επίδρασης νευρών ν κατά τη διάρκεια

Διαβάστε περισσότερα

20/5/ /5/ /5/ /5/2005

20/5/ /5/ /5/ /5/2005 ΜΕΤΑΦΟΡΙΚΕΣ ΕΠ ΙΧ ΕΙΡΗ ΣΕΙΣ FINDA Α.Ε. ΥΠΟ Ε Κ Κ Α Θ Α Ρ Ι Σ Η ΟΙΚΟΝΟΜΙΚΕΣ ΚΑ Τ Α ΣΤ Α ΣΕΙΣ Γ ΙΑ Τ Η Ν Χ Ρ Η ΣΗ Π ΟΥ ΕΛ Η Ξ Ε Τ Η Ν 19.5.2006 ΠΕΡΙΕΧΟΜΕΝΑ Έ κ θ εσ η Eλέ γ χ ο υ Ε λεγ κ τ ώ ν 3 Κ α τ ά

Διαβάστε περισσότερα

Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Χημικών Μη ανικών. Με έτη και σ εδιασμός με όδ ν Εξόρυξης Δεδομέν ν και εφαρμο ές σε προ ήματα Μετα ο ομικής

Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Χημικών Μη ανικών. Με έτη και σ εδιασμός με όδ ν Εξόρυξης Δεδομέν ν και εφαρμο ές σε προ ήματα Μετα ο ομικής Ε νικό Μετσό ιο Πο υτε νείο Σ ο ή Χημικών Μη ανικών Διπλωματική Εργασία Με έτη και σ εδιασμός με όδ ν Εξόρυξης Δεδομέν ν και εφαρμο ές σε προ ήματα Μετα ο ομικής Γεράσιμος Α. Χουρδάκης Επι έπ ν : Αν. Κα

Διαβάστε περισσότερα

Εξόρυξη νώσης από μέσα κοιν νικής δικτύ σης: Με έτη περίπτ σης στο Twitter.

Εξόρυξη νώσης από μέσα κοιν νικής δικτύ σης: Με έτη περίπτ σης στο Twitter. Πανεπιστήμιο Πατρών Τμήμα Μα ηματικών Τμήμα Μη ανικών Η/Υ & Π ηροφορικής Διατμηματικό Πρό ραμμα Μεταπτυ ιακών Σπουδών "Μα ηματικά τ ν Υπο ο ιστών και τ ν Αποφάσε ν". Εξόρυξη νώσης από μέσα κοιν νικής δικτύ

Διαβάστε περισσότερα

Η Αρ ιτεκτονική αναφοράς Μα ησιακών Χώρ ν CROP - Μια πρώτη προσέ ιση

Η Αρ ιτεκτονική αναφοράς Μα ησιακών Χώρ ν CROP - Μια πρώτη προσέ ιση Η Αρ ιτεκτονική αναφοράς Μα ησιακών Χώρ ν CROP - Μια πρώτη προσέ ιση Τε νική Έκ εση ια την εκπ ήρ ση της διατρι ής με τίτ ο Οντο ο ίες και Λο ική Παρα ή με Εφαρμο ές σε Υπηρεσίες Μά ησης στο Σημασιο ο

Διαβάστε περισσότερα

α κα ρι ι ο ος α α νηρ ος ου ουκ ε πο ρε ε ευ θη εν βου λη η η α α σε ε ε βων και εν ο δω ω α α µαρ τω λω ων ουουκ ε ε ε

α κα ρι ι ο ος α α νηρ ος ου ουκ ε πο ρε ε ευ θη εν βου λη η η α α σε ε ε βων και εν ο δω ω α α µαρ τω λω ων ουουκ ε ε ε Ἦχος Νη α κα ρι ι ο ος α α νηρ ος ου ουκ ε πο ρε ε ευ θη εν βου λη η η α α σε ε ε βων και εν ο δω ω α α µαρ τω λω ων ουουκ ε ε ε στη η και ε πι κα α θε ε ε ε δρα α λοι οι µων ου ουκ ε ε κα θι ι σε ε ε

Διαβάστε περισσότερα

ΣΧΕΔΙΑΣΗ ΚΑΙ ΑΝΑΠΤΥΞΗ ΠΛΑΤΦΟΡΜΑΣ ΠΑΡΟΧΗΣ ΥΠΗΡΕΣΙΩΝ ΣΤΟ ΔΙΑΔΙΚΤΥΟ ΜΕ ΕΜΦΑΣΗ ΣΤΙΣ ΕΦΑΡΜΟΓΕΣ ΧΡΟΝΟΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΓΕΩΡΓΙΟΣ ΓΟΥΛΑΣ

ΣΧΕΔΙΑΣΗ ΚΑΙ ΑΝΑΠΤΥΞΗ ΠΛΑΤΦΟΡΜΑΣ ΠΑΡΟΧΗΣ ΥΠΗΡΕΣΙΩΝ ΣΤΟ ΔΙΑΔΙΚΤΥΟ ΜΕ ΕΜΦΑΣΗ ΣΤΙΣ ΕΦΑΡΜΟΓΕΣ ΧΡΟΝΟΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΓΕΩΡΓΙΟΣ ΓΟΥΛΑΣ ΣΧΕΔΙΑΣΗ ΚΑΙ ΑΝΑΠΤΥΞΗ ΠΛΑΤΦΟΡΜΑΣ ΠΑΡΟΧΗΣ ΥΠΗΡΕΣΙΩΝ ΣΤΟ ΔΙΑΔΙΚΤΥΟ ΜΕ ΕΜΦΑΣΗ ΣΤΙΣ ΕΦΑΡΜΟΓΕΣ ΧΡΟΝΟΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΔΙΔΑΚΤΟΡΙΚΗ ΔΙΑΤΡΙΒΗ ΓΕΩΡΓΙΟΣ ΓΟΥΛΑΣ ΔΙΠΛΩΜΑΤΟΥΧΟΣ ΗΛΕΚΤΡΟΛΟΓΟΣ ΜΗΧΑΝΙΚΟΣ & ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ

Διαβάστε περισσότερα

Ε.Ε. Π α ρ.ι(i), Α ρ.3932, 10/12/2004 Ο ΠΕΡΙ ΚΟΙΜΗΤΗΡΙΩΝ (ΤΑΦΗ ΚΑΙ ΕΚΤΑΦΗ) ΝΟΜΟΣ. H Βουλή των Αντιπροσώπων ψηφίζει ως ακολούθως:

Ε.Ε. Π α ρ.ι(i), Α ρ.3932, 10/12/2004 Ο ΠΕΡΙ ΚΟΙΜΗΤΗΡΙΩΝ (ΤΑΦΗ ΚΑΙ ΕΚΤΑΦΗ) ΝΟΜΟΣ. H Βουλή των Αντιπροσώπων ψηφίζει ως ακολούθως: Ο ΠΕΡΙ ΚΟΙΜΗΤΗΡΙΩΝ (ΤΑΦΗ ΚΑΙ ΕΚΤΑΦΗ) ΝΟΜΟΣ H Βουλή των Αντιπροσώπων ψηφίζει ως ακολούθως: Συνοπτικός τίτλος. 1. Ο παρών Νόμος θα αναφέρεται ως ο περί Κοιμητηρίων (Ταφή και Εκταφή) Νόμος του 2004. ΜΕΡΟΣ

Διαβάστε περισσότερα

Η ΑΕΠΠ IN A GLANCE! ΦΡΟΝΤΙΣΤΗΡΙΑ ΠΟΛΥΜΕΝΗ

Η ΑΕΠΠ IN A GLANCE! ΦΡΟΝΤΙΣΤΗΡΙΑ ΠΟΛΥΜΕΝΗ Η ΑΕΠΠ IN A GLANCE! Κατανομή μονάδων: 40 μονάδες το 1 ο Θέμα, από 20 τα υπόλοιπα τρία. Μην χαίρεστε όμως γιατί η «καθαρή» θεωρία περιορίζεται συνήθως- σε 5 ερωτήσεις σωστού ή λάθους και σε 1-2 ερωτήσεις

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΣΥΣΤΗΜΑΤΩΝ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΛΙΚΩΝ Αποτίμηση της αταξίας ειτουρ ικών δυναμικών η εκτροε κεφα

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΟΤΕΧΝΙΚΗ ΑΝΑΛΥΣΗ ΕΝΟΣ ΕΝΕΡΓΕΙΑΚΑ ΑΥΤΟΝΟΜΟΥ ΝΗΣΙΟΥ ΜΕ Α.Π.Ε

ΟΙΚΟΝΟΜΟΤΕΧΝΙΚΗ ΑΝΑΛΥΣΗ ΕΝΟΣ ΕΝΕΡΓΕΙΑΚΑ ΑΥΤΟΝΟΜΟΥ ΝΗΣΙΟΥ ΜΕ Α.Π.Ε Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε. ΟΙΚΟΝΟΜΟΤΕΧΝΙΚΗ ΑΝΑΛΥΣΗ ΕΝΟΣ ΕΝΕΡΓΕΙΑΚΑ ΑΥΤΟΝΟΜΟΥ ΝΗΣΙΟΥ ΜΕ Α.Π.Ε Πτυχιακή Εργασία Φοιτητής: Γεμενής Κωνσταντίνος ΑΜ: 30931 Επιβλέπων Καθηγητής Κοκκόσης Απόστολος Λέκτορας

Διαβάστε περισσότερα

14/5/ /12/ /5/ /5/2007

14/5/ /12/ /5/ /5/2007 ΜΕΤΑΦΟΡΙΚΕΣ ΕΠ ΙΧ ΕΙΡΗ ΣΕΙΣ FINDA Α.Ε. ΕΤΗΣΙΕΣ Ο ΙΚ Ο Ν Ο Μ ΙΚ ΕΣ Κ Α ΤΑ ΣΤΑ ΣΕΙΣ ΣΥ Μ Φ Ω Ν Α Μ Ε ΤΑ ΙΕΘ Ν Η Π Ρ Ο ΤΥ Π Α Χ Ρ ΗΜ Α ΤΟ Ο ΙΚ Ο Ν Ο Μ ΙΚ ΗΣ Π Λ ΗΡ Ο Φ Ο Ρ ΗΣΗΣ ΤΗΣ Χ Ρ ΗΣΗΣ Π Ο Υ ΕΛ ΗΞ Ε

Διαβάστε περισσότερα

αναλυτικός απλός 1 Ο αναλυτικός βλέπει τον κόσμο σαν να αποτελείται από πολλά μικρά κομμάτια.

αναλυτικός απλός 1 Ο αναλυτικός βλέπει τον κόσμο σαν να αποτελείται από πολλά μικρά κομμάτια. αναλυτικός απλός 1 Ο αναλυτικός βλέπει τον κόσμο σαν να αποτελείται από πολλά μικρά κομμάτια. Σπάν άνια δέχ εται τα πράγ μα τα όπω πως είνα ναι. Θεω εωρε ρεί ότι όλα πρέπ έπει να τα ανα ναλύ ουμε εξο ξονυ

Διαβάστε περισσότερα

Ανάπτυξη διαδικτυακής διαδραστικής εκπαιδευτικής εφαρμογής σε λειτουργικό σύστημα Android

Ανάπτυξη διαδικτυακής διαδραστικής εκπαιδευτικής εφαρμογής σε λειτουργικό σύστημα Android Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε. Ανάπτυξη διαδικτυακής διαδραστικής εκπαιδευτικής εφαρμογής σε λειτουργικό σύστημα Android Πτυχιακή Εργασία Φοιτητής:

Διαβάστε περισσότερα

ΣΤΟ ΧΟΣ- Ε ΠΙ ΔΙΩ ΞΗ ΠΛΑΙ ΣΙΟ ΧΡΗ ΜΑ ΤΟ ΔΟ ΤΗ ΣΗΣ

ΣΤΟ ΧΟΣ- Ε ΠΙ ΔΙΩ ΞΗ ΠΛΑΙ ΣΙΟ ΧΡΗ ΜΑ ΤΟ ΔΟ ΤΗ ΣΗΣ ΣΤΟ ΧΟΣ- Ε ΠΙ ΔΙΩ ΞΗ Στό χος του Ο λο κλη ρω μέ νου Προ γράμ μα τος για τη βιώ σι μη α νά πτυ ξη της Πίν δου εί ναι η δια μόρ φω ση συν θη κών α ει φό ρου α νά πτυ ξης της ο ρει νής πε ριο χής, με τη δη

Διαβάστε περισσότερα

ο Θε ος η η µων κα τα φυ γη η και δυ υ υ να α α α µις βο η θο ος ε εν θλι ψε ε ε σι ταις ευ ρου ου ου ου ου σαις η η µα α α ας σφο ο ο ο

ο Θε ος η η µων κα τα φυ γη η και δυ υ υ να α α α µις βο η θο ος ε εν θλι ψε ε ε σι ταις ευ ρου ου ου ου ου σαις η η µα α α ας σφο ο ο ο Ἐκλογή ἀργοσύντοµος εἰς τὴν Ἁγίν Κυρικήν, κὶ εἰς ἑτέρς Γυνίκς Μάρτυρς. Μέλος Ἰωάννου Ἀ. Νέγρη. Ἦχος Νη ε Κ ι δυ υ υ υ ν µι ις Α λ λη λου ου ου ι ι ι ι ο Θε ος η η µων κ τ φυ γη η κι δυ υ υ ν µις βο η θο

Διαβάστε περισσότερα

Πρι τ αρακτηρ οτικ λαπλ ουοτηματα μικρ ετ εξεργατ δ π υ τ

Πρι τ αρακτηρ οτικ λαπλ ουοτηματα μικρ ετ εξεργατ δ π υ τ ι ε α τ Τ εγνα α α ετ κ λε τ υργικ ο τημα Η οτ ρ α τ υ αρ Γ ζε τ τη Φ λα δ α απ τ α φ ιτητ τ υ Πα ετ τημ υ τ υ λ νκ ξεκ νη ε αν μ α τ ρ τ Θε α να δημ υργηθε ακαλ τερ Ενα τ υ αμτ ρε ααντατ κρ ετα καλ τερα

Διαβάστε περισσότερα

---------------------------------------------------------------------------------------- 1.1. --------------

---------------------------------------------------------------------------------------- 1.1. -------------- ΕΚΘΕΣΗ Τ Ο Υ Ι Ο Ι ΚΗΤ Ι ΚΟ Υ ΣΥ Μ Β Ο Υ Λ Ι Ο Υ Π Ρ Ο Σ Τ ΗΝ Τ Α ΚΤ Ι ΚΗ Γ ΕΝ Ι ΚΗ ΣΥ Ν ΕΛ ΕΥ ΣΗ Τ Ω Ν Μ ΕΤ Ο Χ Ω Ν Kύριοι Μ έ τ οχοι, Σ ύµ φ ω ν α µ ε τ ο Ν όµ ο κ α ι τ ο Κα τ α σ τ α τ ικ ό τ ης ε

Διαβάστε περισσότερα

ΣΥΜΒΑΣΗ ΜΕΤΑΞΥ ΠΑΡΟΧΟΥ ΚΑΤΑΡΤΙΣΗΣ- ΜΕΛΟΣ ΤΟΥ ΜΗΤΡΩΟΥ ΠΑΡΟΧΩΝ, ΩΦΕΛΟΥΜΕΝΟΥ- ΜΕΛΟΣ ΤΟΥ ΜΗΤΡΩΟΥ ΩΦΕΛΟΥΜΕΝΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΗΣ ΠΡΑΚΤΙΚΗΣ ΑΣΚΗΣΗΣ

ΣΥΜΒΑΣΗ ΜΕΤΑΞΥ ΠΑΡΟΧΟΥ ΚΑΤΑΡΤΙΣΗΣ- ΜΕΛΟΣ ΤΟΥ ΜΗΤΡΩΟΥ ΠΑΡΟΧΩΝ, ΩΦΕΛΟΥΜΕΝΟΥ- ΜΕΛΟΣ ΤΟΥ ΜΗΤΡΩΟΥ ΩΦΕΛΟΥΜΕΝΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΗΣ ΠΡΑΚΤΙΚΗΣ ΑΣΚΗΣΗΣ ΣΥΜΒΑΣΗ ΜΕΤΑΞΥ ΠΑΡΟΧΟΥ ΚΑΤΑΡΤΙΣΗΣ- ΜΕΛΟΣ ΤΟΥ ΜΗΤΡΩΟΥ ΠΑΡΟΧΩΝ, ΩΦΕΛΟΥΜΕΝΟΥ- ΜΕΛΟΣ ΤΟΥ ΜΗΤΡΩΟΥ ΩΦΕΛΟΥΜΕΝΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΗΣ ΠΡΑΚΤΙΚΗΣ ΑΣΚΗΣΗΣ Για τη Συμμετοχή σε Δράση με Αντικείμενο «Επιταγή Εισόδου στην

Διαβάστε περισσότερα

Εικονογραφημένο Λεξικό Το Πρώτο μου Λεξικό

Εικονογραφημένο Λεξικό Το Πρώτο μου Λεξικό ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ, ΠΟΛΙΤΙΣΜΟΥ ΚΑΙ ΑΘΛΗΤΙΣΜΟΥ Ι.Τ.Υ.Ε. «ΔΙΟΦΑΝΤΟΣ» Αή Εί Ηίς Δής Μί Μά Ιί Αύ Εέ Λό Τ Πώ Λό Τός 9ς (Μ, (έ) Ν,) Εέ Λό Α, Β, Γ Δύ Τ Πώ Λό Τός 9ς (Μ, (έ) Ν,) ΣΥΓΓΡΑΦΕΙΣ Αή

Διαβάστε περισσότερα

20/5/ /5/ /5/ /5/2006

20/5/ /5/ /5/ /5/2006 ΜΕΤΑΦΟΡΙΚΕΣ ΕΠ ΙΧ ΕΙΡΗ ΣΕΙΣ FINDA Α.Ε. ΥΠΟ Ε Κ Κ Α Θ Α Ρ Ι Σ Η ΕΤΗΣΙΕΣ Ο ΙΚ Ο Ν Ο Μ ΙΚ ΕΣ Κ Α ΤΑ ΣΤΑ ΣΕΙΣ ΕΚ Κ Α Θ Α Ρ ΙΣΗΣ ΣΥ Μ Φ Ω Ν Α Μ Ε ΤΑ ΙΕΘ Ν Η Λ Ο Γ ΙΣΤΙΚ Α Π Ρ Ο ΤΥ Π Α Χ Ρ ΗΜ Α ΤΟ Ο ΙΚ Ο Ν Ο

Διαβάστε περισσότερα

Η κ άσση L A TEX dithesis

Η κ άσση L A TEX dithesis ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Η κ άσση L A TEX dithesis Ι άννης Π. Μαντζουράτος Επι έπ ν: Α έξης Δε ής, Κα

Διαβάστε περισσότερα

ΘΕΜΑ: ΔΙΑΡΘΡΩΤΙΚΑ ΧΑ ΡΑ ΚΤ ΗΡ ΙΣ ΤΙ ΚΑ ΤΗΣ ΑΝΕΡΓΙΑΣ - ΠΤΥΧΙΑΚΗ ΕΡΓΑ ΣΙ Α - ΚΑΡΑ ΣΑ ΒΒ ΟΓ ΠΟ Υ ΑΝ ΑΣΤΑΣΙΟΣ

ΘΕΜΑ: ΔΙΑΡΘΡΩΤΙΚΑ ΧΑ ΡΑ ΚΤ ΗΡ ΙΣ ΤΙ ΚΑ ΤΗΣ ΑΝΕΡΓΙΑΣ - ΠΤΥΧΙΑΚΗ ΕΡΓΑ ΣΙ Α - ΚΑΡΑ ΣΑ ΒΒ ΟΓ ΠΟ Υ ΑΝ ΑΣΤΑΣΙΟΣ ΤΕΧΝ Οη ΟΓ ΙΚ Ο Ε Κ ΠΟ ΙΔ ΕΥ ΤΙ ΚΟ ΙΔΡΥΜΟ ΚΟΒΟΠΑΕ ΕΧΟΠΗ ΔΙϋΙ ΚΗ ΕΗ Σ ΚΑΙ Ο Ι ΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ηο ΓΙ ΣΤ ΙΚ ΗΣ ΘΕΜΑ: ΔΙΑΡΘΡΩΤΙΚΑ ΧΑ ΡΑ ΚΤ ΗΡ ΙΣ ΤΙ ΚΑ ΤΗΣ ΑΝΕΡΓΙΑΣ - ΠΤΥΧΙΑΚΗ ΕΡΓΑ ΣΙ Α - Καθηγητή ΚΑΡΑ ΣΑ ΒΒ

Διαβάστε περισσότερα

Προσοµοίωση Π ρ ο µ ο ί ω Μ η χ α ν ο ί Ε λ έ γ χ ο υ τ ο υ Χ ρ ό ν ο υ Φάσεις σο ση ς ισµ ιδάσκων: Ν ικό λ α ο ς Α µ π α ζ ή ς Φάσεις τ η ς π ρ ο σο µ ο ί ω ση ς i. Κατασκευή το υ µ ο ν τέ λ ο υ π ρ ο

Διαβάστε περισσότερα

FAX : 210.34.42.241 spudonpe@ypepth.gr) Φ. 12 / 600 / 55875 /Γ1

FAX : 210.34.42.241 spudonpe@ypepth.gr) Φ. 12 / 600 / 55875 /Γ1 Ε Λ Λ Η Ν Ι Κ Η Η Μ Ο Κ Ρ Α Τ Ι Α Υ ΠΟΥ ΡΓΕΙΟ ΕΘΝ. ΠΑ Ι ΕΙΑ Σ & ΘΡΗΣ Κ/Τ Ω ΕΝΙΑ ΙΟΣ ΙΟΙΚΗΤ ΙΚΟΣ Τ ΟΜ ΕΑ Σ Σ ΠΟΥ Ω Ν ΕΠΙΜ ΟΡΦΩ Σ ΗΣ ΚΑ Ι ΚΑ ΙΝΟΤ ΟΜ ΙΩ Ν /ΝΣ Η Σ ΠΟΥ Ω Τ µ ή µ α Α Α. Πα π α δ ρ έ ο υ 37

Διαβάστε περισσότερα

Tη λ.: +30 (210) Fax: +30 (210)

Tη λ.: +30 (210) Fax: +30 (210) ΕΠΕΝ ΥΣΗ ΣΙ Λ Ο ΠΟ Ρ Τ ΣΑΪ Α.Ε. ΟΙΚΟΝΟΜΙΚΕΣ ΚΑ Τ Α ΣΤ Α ΣΕΙΣ Γ ΙΑ Τ Η Ν Π Ρ Ω Τ Η Π ΕΡ ΙΟ Ο Α ΝΑ Β ΙΩ ΣΗ Σ Π ΟΥ ΕΛ Η Ξ Ε Τ Η Ν 31.12.005 30.11.2005 έ ω ς 31.12.2005 ΠΕΡΙΕΧΟΜΕΝΑ Έ κ θ η γ χ ο υ Ο ρ κ ω

Διαβάστε περισσότερα

Οι τα α α α α α α α Κ. ε ε ε ε ε ε ε ε ε Χε ε ε. ε ε ε ε ε ε ρου ου βι ι ι ι ι ι ι. ιµ µυ στι κω ω ω ω ω ως ει κο ο

Οι τα α α α α α α α Κ. ε ε ε ε ε ε ε ε ε Χε ε ε. ε ε ε ε ε ε ρου ου βι ι ι ι ι ι ι. ιµ µυ στι κω ω ω ω ω ως ει κο ο ΧΕΡΟΥΒΙΟ ΛΕΙΤΟΥΡΓΙΑ ΟΙΝΩΝΙΟ Λ. Β Χερουβικόν σε ἦχο πλ. β. Ἐπιλογές Ἦχος Μ Α µη η η η ην Οι τ Χε ε ε ε ε ε ε ε ε ε ε ε ε ε ε ε ε Χε ε ε ε ε ε ε ε ε ρου ου βι ι ι ι ι ι ι ιµ µυ στι κω ω ω ω ω ως ει κο ο

Διαβάστε περισσότερα

procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }

procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; } Σχεδίαση Γλωσσών & Μεταγλωττιστές Ενότητα 2: Εμβέλεια Τμήμα Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που

Διαβάστε περισσότερα

ΗΛΙΑΣ Γ. ΚΑΡΚΑΝΙΑΣ - ΕΦΗ Ι. ΣΟΥΛΙΩΤΟΥ ΤΕΤΡΑΔΙΟ ΠΡΩΤΗΣ ΓΡΑΦΗΣ. τ... μαθητ... ΤΑΞΗ Α ΣΧΟΛΙΚΟ ΕΤΟΣ... Β Τεύχος

ΗΛΙΑΣ Γ. ΚΑΡΚΑΝΙΑΣ - ΕΦΗ Ι. ΣΟΥΛΙΩΤΟΥ ΤΕΤΡΑΔΙΟ ΠΡΩΤΗΣ ΓΡΑΦΗΣ. τ... μαθητ... ΤΑΞΗ Α ΣΧΟΛΙΚΟ ΕΤΟΣ... Β Τεύχος ΗΛΙΑΣ Γ. ΚΑΡΚΑΝΙΑΣ - ΕΦΗ Ι. ΣΟΥΛΙΩΤΟΥ ΤΕΤΡΑΔΙΟ ΠΡΩΤΗΣ ΓΡΑΦΗΣ τ... μαθητ...... ΤΑΞΗ Α ΣΧΟΛΙΚΟ ΕΤΟΣ... Β Τεύχος Çëßáò Ã. ÊáñêáíéÜò - Έφη Ι. Σουλιώτου Τετράδιο Πρώτης Γραφής Α Δημοτικού Β ΤΕΥΧΟΣ Απαγορεύεται

Διαβάστε περισσότερα

Tηλ.: +30 (210) Fax: +30 (210)

Tηλ.: +30 (210) Fax: +30 (210) ΕΤΗΣΙΑ Ο ΙΚ Ο Ν Ο Μ ΙΚ Η ΕΚ Θ ΕΣΗ ΤΗΣ Χ Ρ ΗΣΕΩ Σ Π Ο Υ ΕΛ ΗΞ Ε ΤΗΝ 31 η ΕΚ ΕΜ Β Ρ ΙΟ Υ 2009 ΤΗΣ Ν ΑΥ ΤΙΚ ΗΣ ΕΤΑΙΡ ΕΙΑΣ «ΝΑΥΣΙΚΑ» ΠΕΡΙΕΧΟΜΕΝΑ Ε Κ Θ Ε ΣΗ Τ Ο Υ Ι Ο Ι Κ Η Τ Ι Κ Ο Υ ΣΥ Μ Β Ο Υ Λ Ι Ο Υ Π Ρ

Διαβάστε περισσότερα

ε ε λε η σον Κυ ρι ε ε ε

ε ε λε η σον Κυ ρι ε ε ε Ἡ τάξις τοῦ ἑωθινοῦ Εὐαγγελίου ᾶσα νοὴ Αἰνεσάτω ὁ ιάκονος: Τοῦ Κυρίου δεηθῶµεν Κυ ρι ε ε λε η σον ὁ Ἱερεύς: Ὅτι Ἅγιος εἶ ὁ Θεὸς ἡµῶν, Ἦχος η α σα πνο η αι νε σα α τω τον Κυ ρι ον Αι νε σα α τω πνο η πα

Διαβάστε περισσότερα

Ό λοι οι κα νό νες πε ρί με λέ της συ νο ψί ζο νται στον ε ξής έ να: Μά θε, μό νο προκει μέ νου. Friedrich Schelling. σελ. 13. σελ. 17. σελ.

Ό λοι οι κα νό νες πε ρί με λέ της συ νο ψί ζο νται στον ε ξής έ να: Μά θε, μό νο προκει μέ νου. Friedrich Schelling. σελ. 13. σελ. 17. σελ. σελ. 13 σελ. 17 σελ. 21 σελ. 49 σελ. 79 σελ. 185 σελ. 263 σελ. 323 σελ. 393 σελ. 453 σελ. 483 σελ. 509 σελ. 517 Ό λοι οι κα νό νες πε ρί με λέ της συ νο ψί ζο νται στον ε ξής έ να: Μά θε, μό νο προκει

Διαβάστε περισσότερα

Ε νικό και Καποδιστριακό Πανεπιστήμιο Α ηνών. Δι οτομίες Πο υπ οκότητας σε Προ ήματα Μέτρησης

Ε νικό και Καποδιστριακό Πανεπιστήμιο Α ηνών. Δι οτομίες Πο υπ οκότητας σε Προ ήματα Μέτρησης Ε νικό και Καποδιστριακό Πανεπιστήμιο Α ηνών Τμήμα Μα ηματικών Μεταπτυ ιακό Πρό ραμμα Λο ικής και Θε ρίας Α ορί μ ν και Υπο ο ισμού Δι οτομίες Πο υπ οκότητας σε Προ ήματα Μέτρησης Διπ ματική Ερ ασία του

Διαβάστε περισσότερα

ΤΜΗΜΑ ΦΩΚΑ/ΤΕΤΑΡΤΗ

ΤΜΗΜΑ ΦΩΚΑ/ΤΕΤΑΡΤΗ ΤΜΗΜΑ ΦΩΚΑ/ΤΕΤΑΡΤΗ 09.00 -.00 5 ZE MI WA 0 0 0 9 0,95 9 ΑΓ ΓΕ ΠΑ 0 0 0 0 0 0 95 ΑΔ ΡΟ ΙΩ 0 0 0 0 0 0 97 ΑΙ ΚΩ ΠΑ 0 0 0 0 0 0 5 507 ΑΛ ΕΥ ΤΖ 0 0 0 0 0 0 6 99 ΑΝ ΟΡ ΚΩ 7 5 0 0 0,65 7 95 ΑΝ ΙΩ ΟΡ 9 9 9 6

Διαβάστε περισσότερα

Τι μπορεί να δει κάποιος στο μουσείο της Ι.Μ. Μεγάλου Μετεώρου

Τι μπορεί να δει κάποιος στο μουσείο της Ι.Μ. Μεγάλου Μετεώρου 18/05/2019 Τι μπορεί να δει κάποιος στο μουσείο της Ι.Μ. Μεγάλου Μετεώρου / Ιερές Μονές Η μο νή του Με γά λου Με τε ώ ρου δι α μόρ φω σε μί α σει ρά α πό πε ρι κα λείς μου σεια κούς χώ ρους, για την α

Διαβάστε περισσότερα

Θέ α: ωσ ή ια ροφή και άσκηση ια ο ς εφήβο ς.

Θέ α: ωσ ή ια ροφή και άσκηση ια ο ς εφήβο ς. 4ο Ε Α α ο σίο Α' ίο 4-2015 ρε νη ική ρ ασία Θέ α: ωσ ή ια ροφή και άσκηση ια ο ς εφήβο ς. 4η Ο ά α 1ο Τ τ ά η ο Y ο ώτη α: ι ές α ές άσ ησης ια ο ς φήβο ς. Γενικές αρχές άσκησης: Εί η Άσ ησης Ια ι ός

Διαβάστε περισσότερα

ΘΕΜΑ: Οδηγίες για την αποστολή στοιχείων απλήρωτων υποχρεώσεων & ληξιπρόθεσµων οφειλών του Προγράµµατος ηµοσίων Επενδύσεων

ΘΕΜΑ: Οδηγίες για την αποστολή στοιχείων απλήρωτων υποχρεώσεων & ληξιπρόθεσµων οφειλών του Προγράµµατος ηµοσίων Επενδύσεων Αθήνα, 27/11/2012 Αρ.Πρ:50858/ Ε6152 ΕΛΛΗΝΙΚΗ ΗΜΟΚΡΑΤΙΑ ΥΠΟΥΡΓΕΙΟ ΑΝΑΠΤΥΞΗΣ, ΑΝΤΑΓΩΝΙΣΤΙΚΟΤΗΤΑΣ, ΥΠΟ ΟΜΩΝ, ΜΕΤΑΦΟΡΩΝ & ΙΚΤΥΩΝ ΓΕΝΙΚΗ ΓΡΑΜΜΑΤΕΙΑ ΗΜΟΣΙΩΝ ΕΠΕΝ ΥΣΕΩΝ - ΕΣΠΑ ΓΕΝΙΚΗ ΙΕΥΘΥΝΣΗ ΑΝΑΠΤΥΞΙΑΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Διαβάστε περισσότερα

Α Α Α Α Α Α Α Α Α Α Α Ο

Α Α Α Α Α Α Α Α Α Α Α Ο 3ω η Α Α Α Α Α Α Α Α Α Α Α Α Α Ο 9/5/2014 Ο Α Α Α ιο οιώ ας α α α ά ω α αθέ α α οσ αθήσ α α α ήσ σ α ω ή α α ο α ο ο θού : Ο Α Ο Α Α «Π ι ὸ Τὲ ὑ ὑ ῖ ὑ ὶ ὰ Τ Τ ὶ ὺ Τ» (DK 14.7) Α «ὴ ὑ ὶ ὺ Τ ὑ Τ Τ ὑ Τῆ ῖ

Διαβάστε περισσότερα

Περιεχόµ εν α. Εισαγω γή. Επ ισκόπ ηση υπ ο βο λής φακέλω ν (IUCLID 5) Επ ισκόπ ηση υπ ο βο λής φακέλω ν (Reach-IT) Ερω τήσεις καιαπ αν τήσεις

Περιεχόµ εν α. Εισαγω γή. Επ ισκόπ ηση υπ ο βο λής φακέλω ν (IUCLID 5) Επ ισκόπ ηση υπ ο βο λής φακέλω ν (Reach-IT) Ερω τήσεις καιαπ αν τήσεις Περιεχόµ εν α Εισαγω γή Επ ισκόπ ηση υπ ο βο λής φακέλω ν (IUCLID 5) Επ ισκόπ ηση υπ ο βο λής φακέλω ν (Reach-IT) Ερω τήσεις καιαπ αν τήσεις Συµ π εράσµ ατα καιµ ελλο ν τικά διαδικτυακά σεµ ιν άρια http://echa.europa.eu

Διαβάστε περισσότερα

1.2.3 ιαρ θρω τι κές πο λι τι κές...35 1.2.4 Σύ στη μα έ λεγ χου της κοι νής α λιευ τι κής πο λι τι κής...37

1.2.3 ιαρ θρω τι κές πο λι τι κές...35 1.2.4 Σύ στη μα έ λεγ χου της κοι νής α λιευ τι κής πο λι τι κής...37 ΠΕΡΙΕΧΟΜΕΝΑ ΕΙΣΑΓΩΓΙΚΟ ΚΕ Φ Α Λ ΑΙΟ ΤΟ ΙΚΑΙΟ ΤΗΣ ΑΛΙΕΙΑΣ... 21 ΚΕ Φ Α Λ ΑΙΟ 1 o Η ΑΛΙΕΥΤΙΚΗ ΠΟΛΙΤΙΚΗ 1.1 Η Α λιεί α ως Οι κο νο μι κή ρα στη ριό τη τα...25 1.2 Η Κοι νο τι κή Α λιευ τι κή Πο λι τι κή...28

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΕΣ ΚΑΤ ΑΣΤ ΑΣΕΙΣ Τ Η Σ ΕΤ ΑΙΡ ΙΑΣ ΑΜΠ ΕΡ Α.Ε. Γ ΙΑ Τ Η Χ Ρ Η ΣΗ Π ΟΥ ΕΛ Η Ξ Ε Τ Η Ν 31 η ΕΚΕΜΒ Ρ ΙΟΥ 2005 ΠΕΡΙΕΧΟΜΕΝΑ Σελ. Κ Α Τ Α ΣΤ Α ΣΗ Α Π Ο Τ Ε Λ Ε ΣΜ Α Τ Ω Ν Τ Η Σ Χ Ρ Η ΣΗ Σ Π Ο Υ Ε Λ Η

Διαβάστε περισσότερα

υφ υ., Β ί,. υ, Βί φ υ α π ί αμ υ Γ α - α ί υ. α. πί. V ( α μ μ μ α, α α π ία μ ί α πα μ υπ ) π αμ α 8 α, α φ μα α υ α ί υ α Βαφ π. α ί α, π ( α ί), φ

υφ υ., Β ί,. υ, Βί φ υ α π ί αμ υ Γ α - α ί υ. α. πί. V ( α μ μ μ α, α α π ία μ ί α πα μ υπ ) π αμ α 8 α, α φ μα α υ α ί υ α Βαφ π. α ί α, π ( α ί), φ Φ Γ Θ ΓΓ Γ ON Β Γ Θ Γ Ω Γ φ α α (..) Θ α ία ί α α ί α (φ μα α Ο αμ υ π φα α ) π υ α α α μ αφ απ υ υ υ υ υ (φ μα υ α α α αμ υ α υ Ο υ φυ υ). Β α ί α ί α υ α ί α α α Θ α ία, α α ία μ μ α ί π GR 16 α GR 17.

Διαβάστε περισσότερα

ΚΒΑΝΤΙΚΟΙ ΥΠΟΛΟΓΙΣΤΕΣ

ΚΒΑΝΤΙΚΟΙ ΥΠΟΛΟΓΙΣΤΕΣ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε. ΚΒΑΝΤΙΚΟΙ ΥΠΟΛΟΓΙΣΤΕΣ Πτυχιακή Εργασία Φοιτητής: ΜIΧΑΗΛ ΖΑΓΟΡΙΑΝΑΚΟΣ ΑΜ: 38133 Επιβλέπων Καθηγητής Καθηγητής Ε.

Διαβάστε περισσότερα

ΑΔΑ: 6ΓΜΒ465ΦΘ3-8ΔΗ. α ούσι, 26/06/2015 Α / 26917/ ς. αθ ός Ασφα ίας: -----

ΑΔΑ: 6ΓΜΒ465ΦΘ3-8ΔΗ. α ούσι, 26/06/2015 Α / 26917/ ς. αθ ός Ασφα ίας: ----- INFORMATICS DEVELOPMEN T AGENCY Digitally signed by INFORMATICS DEVELOPMENT AGENCY Date: 2015.06.26 12:33:38 EEST Reason: Location: Athens ΑΔΑ: 6ΓΜΒ465ΦΘ3-8ΔΗ Α Α, Α Α Α Α Ω Ω Ω Α Α Α Α Α Α.. Α Α Α & Ω..

Διαβάστε περισσότερα

2006 (20/5/06 31/12/06)

2006 (20/5/06 31/12/06) ΤΣΙΜΕΝΤΑ Χ ΑΛ Κ Ι Ο Σ ΙΕΘ ΝΗ Σ Α.Ε. ΥΠΟ Ε Κ Κ Α Θ Α Ρ Ι Σ Η ΟΙΚΟΝΟΜΙΚΕΣ ΚΑ Τ Α ΣΤ Α ΣΕΙΣ ΜΕΤ Α ΣΧ Η ΜΑ Τ ΙΣΜΟΥ ΣΥ ΜΦ Ω ΝΑ ΜΕ Τ Α ΙΕΘ ΝΗ Π Ρ ΟΤ Υ Π Α Χ Ρ Η ΜΑ Τ ΟΟΙΚΟΝΟΜΙΚΗ Σ Π Λ Η Ρ ΟΦ ΟΡ Η ΣΗ Σ Γ ΙΑ Τ

Διαβάστε περισσότερα

Προσοµοίωση Ανάλυση Απ ο τ ε λε σµ άτ ω ν ιδάσκων: Ν ικό λ α ο ς Α µ π α ζ ή ς Ανάλυση Απ ο τ ε λε σµ άτ ω ν Τα απ ο τ ε λ έ σ µ ατ α απ ό τ η ν π αρ αγ ω γ ή κ αι τ η χ ρ ή σ η τ υ χ αί ω ν δ ε ι γ µ

Διαβάστε περισσότερα

ΠΑΡΟΙΜΙΑΚΕΣ ΦΡΑΣΕΙΣ ΨΑΛΤΗΡΙΟΥ & ΕΡΜΗΝΕΙΑ ΑΓΙΟΝΙΚΟΔΗΜΙΚΗ

ΠΑΡΟΙΜΙΑΚΕΣ ΦΡΑΣΕΙΣ ΨΑΛΤΗΡΙΟΥ & ΕΡΜΗΝΕΙΑ ΑΓΙΟΝΙΚΟΔΗΜΙΚΗ ΠΑΡΟΙΜΙΑΚΕΣ ΦΡΑΣΕΙΣ ΨΑΛΤΗΡΙΟΥ & ΕΡΜΗΝΕΙΑ ΑΓΙΟΝΙΚΟΔΗΜΙΚΗ Στην καθημερινή ομιία μας χρησιμοιούμε κάποτε κάποτε και φράσεις παροιμιακές και ποές από αυτές είναι επηρεασμένες από ακούσματα εκκησιαστικά ή από

Διαβάστε περισσότερα

LAFARGE BETON A.B.E.E

LAFARGE BETON A.B.E.E ΕΤΗΣΙΑ Ο ΙΚ Ο Ν Ο Μ ΙΚ Η ΕΚ Θ ΕΣΗ ΤΗΣ Χ Ρ ΗΣΗΣ Π Ο Υ ΕΛ ΗΞ Ε ΤΗΝ 31 ΕΚ ΕΜ ΒΡ ΙΟ Υ 2012 ΤΗΣ ΕΤΑΙΡ ΙΑΣ LAFARGE BETON Α.Β.Ε.Ε LAFARGE BETON A.B.E.E ΑΡ. Γ.Ε.Μ Η.: 000236501000 19,3 χ λµ Λ εω φ. Μ αρ κο πο

Διαβάστε περισσότερα

(RTS) & RTS 16. COBB DOUGLAS ( σ = 1 ) 24 (CES) 27 M2SM COBB DOUGLAS 28 ; 31 COBB DOUGLAS 33

(RTS) & RTS 16. COBB DOUGLAS ( σ = 1 ) 24 (CES) 27 M2SM COBB DOUGLAS 28 ; 31 COBB DOUGLAS 33 ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΙΑΤΜΗΜΑΤΙΚΟ ΜΕ ΤΑΠ ΤΥ Χ ΙΑΚΟ ΠΡ ΟΓ Ρ ΑΜΜΑ ΣΠ ΟΥ Ω Ν ΜΑΘ ΗΜΑΤΙΚΑ ΤΩ Ν ΥΠ ΟΛ ΟΓ ΙΣ ΤΩ Ν ΚΑΙ ΤΩ Ν ΑΠ ΟΦ ΑΣ Ε Ω Ν ΘΕΩΡΙΑ ΠΑΡΑΓ ΩΓ Η Σ ΜΕΤΑΠΤΥΧΙΑΚΗ ΙΠΛ Ω Μ ΑΤΙΚΗ ΕΡ Γ ΑΣ ΙΑ ΑΙΚΑΤΕΡΙΝΗ ΝΙΚΑΚΗ

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΕΙΔΙΚΟΣ ΛΟΓΑΡΙΑΣΜΟΣ ΚΟΝΔΥΛΙΩΝ ΕΡΕΥΝΑΣ

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΕΙΔΙΚΟΣ ΛΟΓΑΡΙΑΣΜΟΣ ΚΟΝΔΥΛΙΩΝ ΕΡΕΥΝΑΣ ANAΡΤΗΤΕΑ ΣΤΟ ΔΙΑΔΙΚΤΥΟ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΕΙΔΙΚΟΣ ΛΟΓΑΡΙΑΣΜΟΣ ΚΟΝΔΥΛΙΩΝ ΕΡΕΥΝΑΣ Αθήνα, 26/9/2012 ΠΡΟΣΚΛΗΣΗ ΕΚΔΗΛΩΣΗΣ ΕΝΔΙΑΦΕΡΟΝΤΟΣ ΓΙΑ ΥΠΟΒΟΛΗ ΠΡΟΤΑΣΗΣ ΓΙΑ ΚΑΤΑΡΤΙΣΗ ΣΥΜΒΑΣΗΣ

Διαβάστε περισσότερα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα

Διαβάστε περισσότερα

0a1qqW+1a1`qÁlw n εν σοί Κύ ρι ε τρο πού μαι τού τον.

0a1qqW+1a1`qÁlw n εν σοί Κύ ρι ε τρο πού μαι τού τον. n 00211000Aqq11j1w Εκ νε ό τη τός μου ο εχ θρό ός με πει ρά ζει, 00qaj-1`q`qq+0)q11l1 ταίς η δο ναίς φλέ γει με ε γώ δέ πε ποι θώς, 0a1qqW+1a1`qÁlw n εν σοί Κύ ρι ε τρο πού μαι τού τον. 211`w1l1+000 0wl1

Διαβάστε περισσότερα

Θεωρι α Γραφημα των 2η Δια λεξη

Θεωρι α Γραφημα των 2η Δια λεξη Θεωρι α Γραφημα των 2η Δια λεξη Α. Συμβω νης Ε Μ Π Σ Ε Μ Φ Ε Τ Μ Φεβρουα ριος 2015 Α. Συμβω νης (ΕΜΠ) Θεωρι α Γραφημα των 2η Δια λεξη Φεβρουα ριος 2015 23 / 47 Βαθμοι Κορυφω ν Βαθμός κορυφής: d G (v) =

Διαβάστε περισσότερα

Αρ έ ονα αρυτικά κύματα από τον κοσμο ο ικό π η ρισμό και CMB

Αρ έ ονα αρυτικά κύματα από τον κοσμο ο ικό π η ρισμό και CMB Ε ηνική Δημοκρατία Ε νικό και Καποδιστριακό Πανεπιστήμιο Α ηνών Πτυ ιακή Ερ ασία τμήματος Φυσικής Αρ έ ονα αρυτικά κύματα από τον κοσμο ο ικό π η ρισμό και CMB Πο υκράτης Γιώρ ος AM: 0100186 Επι έπον:

Διαβάστε περισσότερα

ΑΣΚΗΣΗ (γραμμικός προγραμματισμός) Μια εταιρεία χρησιμοποιεί δύο διαφορετικούς τύπους ζωοτροφών (τον τύπο Ι και τον τύπο ΙΙ), ως πρώτες ύλες, τις οποίες αναμιγνύει για την εκτροφή γαλοπούλων ώστε να πετύχει

Διαβάστε περισσότερα

Εικονογραφημένο Λεξικό Το Πρώτο μου Λεξικό

Εικονογραφημένο Λεξικό Το Πρώτο μου Λεξικό ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ, ΠΟΛΙΤΙΣΜΟΥ ΚΑΙ ΑΘΛΗΤΙΣΜΟΥ Ι.Τ.Υ.Ε. «ΔΙΟΦΑΝΤΟΣ» Αή Εί Ηίς Δής Μί Μά Ιί Αύ Εέ Λό Τ Πώ Λό Τός 12ς (Π, (ίς- )) Εέ Λό Α, Β, Γ Δύ Τ Πώ Λό Τός 12ς (Π, (ίς- )) ΣΥΓΓΡΑΦΕΙΣ

Διαβάστε περισσότερα

ΥΠEΡΙΑ ΟΜΙΛΙΕΣ

ΥΠEΡΙΑ ΟΜΙΛΙΕΣ Η Η Α Α Α Η Η ΧΗ Η Α Η Η Η Η Α Α Η Α Α Ω Η Α Ω ΑΪ Ω Α Ο Ο Ο - ΠΟ Ο Π Η Ο Α α α αφ θού σ α ία ς σ ο ής ς ο ι ής σ α όσ ια α ά οσ ο ι ισ ι ή ο ο ιά αι σ α ία ς «ιφ ια ής» ο ο ιάς σ ο ή ς α οσ ιο οί σ ς αι

Διαβάστε περισσότερα

1 Θέμα Γενική Περι ραφή Θέματος Υ ικά Εξαρτήματα και Τε νο ο ίες Συνδεσμο ο ία... 2

1 Θέμα Γενική Περι ραφή Θέματος Υ ικά Εξαρτήματα και Τε νο ο ίες Συνδεσμο ο ία... 2 Περιε όμενα 1 Θέμα 1 1.1 Γενική Περι ραφή Θέματος.......................... 1 2 Υ ικά 1 2.1 Εξαρτήματα και Τε νο ο ίες......................... 1 2.2 Συνδεσμο ο ία................................ 2 3 Arduino

Διαβάστε περισσότερα