3. Η ιεραρχία της μνήμης



Σχετικά έγγραφα
ΜΕΡΟΣ Α ΒΙΒΛΙΟ ΕΡΓΑΣΙΩΝ ΟΝΟΜΑ.. ΤΑΞΗ...

Α Π Ο Σ Π Α Σ Μ Α. ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΝΟΜΟΣ ΒΟΙΩΤΙΑΣ ΔΗΜΟΣ ΟΡΧΟΜΕΝΟΥ Αρ.Πρωτ.: 298/

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

ΣΗΜΕΙΩΣΕΙΣ ΑΝΑΤΟΜΙΑΣ (Φύλλα διδασκαλίας) για Τμήματα: Εργοθεραπείας, ημόσιας Υγείας και Νοσηλευτικής. (Γεώργιος. Μπαμπλέκος.)

ΤΟ ΤΑΞΙΔΙ ΕΙΝΑΙ Η ΑΦΟΡΜΗ

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

ΤΟ ΠΛΗΡΕΣ ΚΕΙΜΕΝΟ ΤΗΣ ΜΕΛΕΤΗΣ

1 Εισαγωγή στην Ανάλυση των Κατασκευών 1.1 Κατασκευές και δομοστατική

ΕΣΩΤΕΡΙΚΟΙ ΚΑΝΟΝΙΣΜΟΙ ΛΕΙΤΟΥΡΓΙΑΣ ΤΟΥ ΣΧΟΛΕΙΟΥ

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

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

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΑΘΗΝΑ,

Αριστοτέλης Ο πατέρας της Δυτικής Επιστήμης

ΠΡΟΣΚΛΗΣΗ ΕΝΔΙΑΦΕΡΟΝΤΟΣ

Αρχαίοι Έλληνες μαθηματικοί. τους στη θετική σκέψη. Ερευνητική εργασία (Project)

Ι. ΛΕΙΤΟΥΡΓΙΑ ΦΡΟΝΤΙΣΤΗΡΙΟΥ

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. «Η ΟΡΓΑΝΩΣΕ ΤΟΥ ΤΜΙΙΜΑΤΟΣ ΠΡΟΜΗΘΕΙΩΝ ΣΕ ΜΙΑ ΕΠΙΧΕΙΡΗΣΗ i

ΔΙΑΚΗΡΥΞΗ ΠΡΟΧΕΙΡΗΣ ΔΗΜΟΠΡΑΣΙΑΣ

«Δημοκρατικοί» παραλογισμοί... και χαράτσια

ΣτΕ 4531/2009 Θέμα : [Νόμιμη απόρριψη αίτησης για οριοθέτηση ρέματος]

ΜΕΛΕΤΗ ΚΑΙ ΑΠΟΚΑΤΑΣΤΑΣΗ ΤΗΣ ΧΩΜΑΤΕΡΗΣ «ΑΣΤΙΜΙΤΣΙ» ΣΤΗΝ ΠΕΡΙΟΧΗ ΚΟΡΥΤΙΑΝΗΣ ΤΟΥ ΝΟΜΟY ΘΕΣΠΡΩΤΙΑΣ

ΥΠΟΜΝΗΜΑ. Στην Επιτροπή Κρίσεως Βαρέων και Ανθυγιεινών επαγγελμάτων του άρθρου 20 ν.3790/2009

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

Η ΠΡΟΣΩΡΙΝΗ ΑΠΑΣΧΟΛΗΣΗ

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

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

74 η ΣΥΝΟΔΟΣ ΠΡΥΤΑΝΕΩΝ & ΠΡΟΕΔΡΩΝ Δ.Ε. ΤΩΝ ΕΛΛΗΝΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΩΝ Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Θεσσαλονίκη, Δεκεμβρίου 2013

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

7. ΠΕΙΡΑΜΑΤΙΣΜΟΣ ΚΑΙ ΚΡΙΤΙΚΗ ΑΠΟ ΤΟΝ ΙΔΙΟ ΤΟΝ ΔΗΜΙΟΥΡΓΟ, ΣΕ ΚΑΘΕ ΒΗΜΑ ΤΟΥ ΣΧΕΔΙΑΣΜΟΥ. Μακέτα εργασίας 1/50.

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

ΔΙΑΚΗΡΥΞΗ Ο ΔΗΜΑΡΧΟΣ

Ευαγγελινή Αθανασοπούλου Κωνσταντία Λαδοπούλου Στέλλα Χαριτάκη

Η ΑΠΑΞΙΩΣΗ ΕΝΟΣ ΘΕΣΜΟΥ «ΘΗΤΕΙΑ» Του Αντιστρατήγου ε.α. Σ. Παναγοπούλου

ΕΦΟΡΕΙΑ ΠΡΟÏΣΤΟΡΙΚΩΝ ΚΑΙ ΚΛΑΣΙΚΩΝ ΑΡΧΑΙΟΤΗΤΩΝ

ΠΡΟΟΔΟΣ ΠΡΟΣΚΟΠΟΥ. Οι διακρίσεις αυτές συνοδεύονται από αντίστοιχο διακριτικό για τη στολή, όπως αυτά

ΔΙΑΜΕΣΟΛΑΒΗΣΗ 194/2013. (Άρθρο 77 παρ. 3 Ν.3852/2010) Προς. 3. Kύριο *** *** *** Κοινοποίηση

Πρακτικό 24/2013 της συνεδρίασης της Οικονομικής Επιτροπής του Δήμου Λήμνου, της 23 ης Οκτωβρίου 2013

Επιμέλεια εργασίας: Ιωάννης Τραγουδάρας Αριθμός Μητρώου

Η ΒΙΟΜΗΧΑΝΙΚΗ ΤΗΣ ΚΟΛΥΜΒΗΣΗΣ

Θ Ε Μ Α : «Εφαρμογή της παραγράφου 2β του άρθρου 1 του Ν. 4250/2014 για την διενέργεια δειγματοληπτικού ελέγχου»

ΔΙΑΚΗΡΥΞΗ ΔΙΑΓΩΝΙΣΜΟΥ

ΑΙΤΙΟΛΟΓΙΚΗ ΕΚΘΕΣΗ ΣΤΟ ΣΧΕ ΙΟ ΝΟΜΟΥ «για τη δίκαιη δίκη και την αντιµετώπιση φαινοµένων αρνησιδικίας» Α. ΓΕΝΙΚΟ ΜΕΡΟΣ

άρθρα ανακοινώσεις Ο σκοπός του περιοδικού... Αντώνης Δεσπότης Διευθύνων Σύμβουλος Νέες Συλλογικές Συμβάσεις Εργασίας για το σελ.

Ο ΝΟΜΟΣ 1963/91 ΓΙΑ ΤΗΝ Ι ΡΥΣΗ ΚΑΙ ΛΕΙΤΟΥΡΓΙΑ ΤΩΝ ΦΑΡΜΑΚΕΙΩΝ (ΝΟΜΟΣ 1963/91 ΦΕΚ. ΤΡΟΠΟΠΟΙΗΣΗ ΚΑΙ ΣΥΜΠΛΗΡΩΣΗ ΤΗΣ ΦΑΡΜΑΚΕΥΤΙΚΗΣ ΝΟΜΟΘΕΣΙΑΣ ΚΑΙ ΑΛΛΕΣ

Κοινωνική Οικονομία: Μια βιώσιμη εναλλακτική?

ΘΕΜΑ: Ανακοίνωση-Πρόσκληση για εκδήλωση ενδιαφέροντος σχετικά με μετάταξη υπαλλήλων στο Εθνικό Αστεροσκοπείο Αθηνών (Ν.Π.Δ.Δ.)

ΣΧΕΔΙΑΣΜΟΣ- ΠΟΣΟΣΤΑ. Στόχοι της διδασκαλίας

ΟΙΚΟΝΟΜΙΚΩΝ ΥΠΗΡΕΣΙΩΝ ΠΡΟΜΗΘΕΙΩΝ ΚΑΙ ΔΙΑΧΕΙΡΙΣΗΣ ΥΛΙΚΟΥ. ΤΗΛΕΦΩΝΟ: ΦΑΞ: E mail:

Συνήγορος του Καταναλωτή Νομολογία ΠολΠρωτΑθ 2960/1996

ΠΡΟΣ : ΘΕΜΑ : ΑΝΑΚΟΙΝΩΣΗ - ΠΡΟΣΚΛΗΣΗ ΕΚΔΗΛΩΣΗΣ ΕΝΔΙΑΦΕΡΟΝΤΟΣ ΓΙΑ ΜΕΤΑΤΑΞΕΙΣ ΥΠΑΛΛΗΛΩΝ ΣΤΟ ΔΗΜΟ ΜΥΚΟΝΟΥ Σχετ :

Υπεύθυνη Προγράμματος: Μουστάκα Ορσαλία

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ Τμήμα Εφαρμοσμένης Πληροφορικής Πρόγραμμα Μεταπτυχιακών Σπουδών Εφαρμοσμένης Πληροφορικής

Ι. ΠΡΟΪΣΤΟΡΙΑ ΚΕΦΑΛΑΙΟ Β': Η ΕΠΟΧΗ ΤΟΥ ΧΑΛΚΟΥ ( π.Χ.) 3. Ο ΜΙΝΩΙΚΟΣ ΠΟΛΙΤΙΣΜΟΣ

Μεταπτυχιακό Πρόγραμμα Σπουδών: Κατεύθυνση Α: Αειφορική Διαχείριση Ορεινών Υδρολεκανών με Ευφυή Συστήματα και Γεωγραφικά Συστήματα Πληροφοριών

Ε.Β.ΖΑΧΑΡΗΣ Α.Ε. Θεσσαλονίκη 17/12/2013

Μπορούμε να πούμε ότι η δεύτερη δύναμη είναι πολύ πιο ισχυρή από την πρώτη.

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

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

Μάρτιος- Απρίλιος 2009, Έτος 13ο - Τεύχος 72ο. Εκδίδεται από το Γρ α φ ε ί ο Νεότητας της Ιεράς Μητροπόλεως Λαρίσης και Τυρνάβου

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

Θέμα: Η ΑΓΟΡΑ ΣΤΟΝ ΚΑΠΙΤΑΛΙΣΜΟ

ΕΦΗΜΕΡΙΣ ΤΗΣ ΚΥΒΕΡΝΗΣΕΩΣ

Η ΡΩΣΙΚΗ ΕΠΑΝΑΣΤΑΣΗ Η

2 Η απασχόληση στον τομέα του εμπορίου: Διάρθρωση και εξελίξεις

ΕΦΗΜΕΡΙΣ ΤΗΣ ΚΥΒΕΡΝΗΣΕΩΣ

ΕΡΓΟΝΟΜΙΑ ΦΩΤΙΣΜΟΥ. 1. Εισαγωγή

Η παρούσα πτυχικακή εργασία έρχεται μετά από λίγα χρόνια να συμπληρώσει μία ακόμη σχεδιαστική πρόταση για την «Ανάπλαση της Αλάνας της Τούμπας», θέμα

ΕΛΛΗΝΙΚΗ ΠΟΔΟΣΦΑΙΡΙΚΗ ΟΜΟΣΠΟΝΔΙΑ. Παράρτημα Β Διατάξεις Εφαρμογής Κανονισμού για τους Ερασιτέχνες Ποδοσφαιριστές

ΕΜΦΥΤΕΥΣΙΜΟΙ ΚΑΡΔΙΟΜΕΤΑΤΡΟΠΕΙΣ- ΑΠΙΝΙΔΩΤΕΣ. ΤΙ ΠΡΕΠΕΙ ΝΑ ΓΝΩΡΙΖΟΥΜΕ.

ΘΕΜΑ: Κάλυψη κενών θέσεων τακτικού προσωπικού σε νησιωτικούς δήμους. Δυόμισι χρόνια μετά την εφαρμογή του Προγράμματος Καλλικράτης και την

ΑΝΑΡΤΗΤΕΟ ΣΤΟ ΔΙΑΔΙΚΤΥΟ Ε Λ Λ Η Ν Ι Κ Η Δ Η Μ Ο Κ Ρ Α Τ Ι Α

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Καβάλας Σχολή Τεχνολογικών Εφαρμογών Τμήμα Μηχανολογίας ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Λυμπεράκης Δημήτριος Α.Μ.

1) ΠΑΥΣΑΝΙΟΥ ΕΛΛΑΔΟΣ ΠΕΡΙΗΓΗΣΙΣ Ηλιακά (Εκδοτική Αθηνών)

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

Γ31/2960/ ΠΡΟΚΗΡΥΞΗ ΔΗΜΟΣΙΟΥ ΠΛΕΙΟΔΟΤΙΚΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΓΙΑ ΤΗΝ ΕΚΜΙΣΘΩΣΗ ΙΔΙΟΚΤΗΤΟΥ ΟΙΚΟΠΕΔΟΥ ΣΤΗ ΛΑΡΙΣΑ ΩΣ ΥΠΑΙΘΡΙΟΥ ΧΩΡΟΥ ΣΤΑΘΜΕΥΣΗΣ.

591 Κ.Ι\ ΘΕΜΑ: ΚΑΩΣΤΟΥΦΑΝΤΟΥΡΓΙΑ & ΠΕΡΙΒΑλλΟΝ ΕΙΣΗΓΗΤΗΣ: ΤΜΗΜΑ ΚΛΩΣΤΟΥΦΑΝΤΟΥΡΓΙΑΣ. Τ.Ε.Ι Πειραιά για την απόκτηση του πτυχίου.

ΑΡΧΑΙΑ. 1 ο ΔΙΑΓΩΝΙΣΜΑ. Α Αρχαίο Κείμενο

ΕΠΙΤΡΟΠΗ ΔΗΜΟΣΙΑΣ ΔΙΟΙΚΗΣΗΣ ΔΗΜΟΣΙΑΣ ΤΑΞΗΣ ΚΑΙ ΔΙΚΑΙΟΣΥΝΗΣ

ΝΟΜΟΣΧΕΔΙΟ ΠΟΥ ΤΙΤΛΟΦΟΡΕΙΤΑΙ

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

ΚΑΝΟΝΙΣΜΟΣ ΣΥΝΕΡΓΑΣΙΑΣ ΜΕ ΔΙΑΜΕΣΟΛΑΒΗΤΕΣ

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

Ε.Ε. Π α ρ.ι(i), Α ρ.4083, 20/4/2006 ΝΟΜΟΣ ΠΟΥ ΠΡΟΝΟΕΙ ΓΙΑ ΤΗΝ ΕΓΚΑΘΙΔΡΥΣΗ ΑΝΕΞΑΡΤΗΤΗΣ ΕΠΙΤΡΟΠΗΣ ΓΙΑ

ΒΙΟΛΟΓΙΑ Γ ΓΥΜΝΑΣΙΟΥ

Νικόλαος Τεντολούρης. Αθηνών και Διαβητολογικό Κέντρο, Γ.Ν.Α. Λαϊκό. πληθυσμού. Η συχνότητα του διαβήτη τύπου 2 εμφανίζει μεγάλη αύξηση σε παγκόσμια

ΠΙΝΑΚΑΣ ΕΠΙΔΡΑΣΕΩΝ ΑΛΚΟΟΛ. Άτομα νηφάλια, ελαφρές διαταραχές δύσκολα διαγνώσιμες

ΠΤΥΧΙΑΚΗ «ΠΡΟ ΙΑΓΡΑΦΕΣ & ΠΑΡΑΓΩΓΗ ΣΤΡΑΤΙΩΤΙΚΗΣ ΣΤΟΛΗΣ ΑΣΚΗΣΕΩΝ ΕΚΣΤΡΑΤΕΙΑΣ Μ - 08 ΠΑΡΑΛΛΑΓΗΣ ΑΣΟΥΣ» ΣΠΟΥ ΑΣΤΕΣ: ΕΠΟΠΤΕΙΑ:

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

Παιδαγωγική ή Εκπαίδευση ΙΙ

καταλογίζονται η μείωση των επαναλαμβανόμενων επισκέψεων, ο κίνδυνος μείωσης της προσέλευσης του κοινού, η μείωση των εσόδων καθώς αποφεύγουν οι

Προπτυχιακή Εργασία. Βιτωράκη Ανδριάνα. Ιδιωτικοποίηση και Συνταγματικά Δικαιώματα ΕΡΓΑΣΙΑ ΣΤΑ ΑΤΟΜΙΚΑ & ΚΟΙΝΩΝΙΚΑ ΔΙΚΑΙΩΜΑΤΑ

ΒΙΟΗΘΙΚΗ. 4ο Επιστημονικό Συνέδριο - Retreat

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

Πρακτικό 1/2014 της συνεδρίασης της Οικονομικής Επιτροπής του Δήμου Λήμνου, της 10 ης Ιανουαρίου 2014

ΚΟΙΝΗ ΑΓΡΟΤΙΚΗ ΠΟΛΙΤΙΚΗ

Η οικονομική κρίση και ύφεση ανασχεθούν δεν θα αποφύγει να μετεξελιχθεί οι προοπτικές της ευρω- ζώνης αναιμικές η Ευρώπη Κινητήρια δύναμη

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

ΕΙΔΙΚΗ ΘΕΜΑΤΙΚΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑ Β'ΛΥΚΕΙΟΥ 1ου ΕΠΑΛ ΚΙΑΤΟΥ

ΑΠΟΦΑΣΗ Ο ΥΠΟΥΡΓΟΣ ΕΘΝΙΚΗΣ ΑΜΥΝΑΣ

Transcript:

Κεφάλαιο 3: Η ιεραρχία της μνήμης 44 3. Η ιεραρχία της μνήμης 3.1.1 Η τεχνολογία της ιεραρχημένης μνήμης Για τους προγραμματιστές θα ήταν επιθυμητό να γινόταν προπέλαση σε απεριόριστες ποσότητες μνήμης με ταχύτητα ίση ή μεγαλύτερη από αυτή του επεξεργαστή. Φυσικά αυτό δεν είναι πρακτικά δυνατό. Οι γρηγορότερες μνήμες είναι οι μνήμες ημιαγωγών. Ωστόσο, όσο πιο μεγάλη είναι η μνήμη τόσο πιο αργή είναι καθώς αλλάζει η τεχνολογία (το πλήθος τρανζίστορ ανά bit) για λόγους πυκνότητας. Από ένα μέγεθος και πάνω η τεχνολογία ημιαγωγών γίνεται απαγορευτικά ακριβή και έτσι μεταβαίνουμε στην τεχνολογία των μαγνητικών ή οπτικών μέσων αποθήκευσης (σκληροί δίσκοι, CD, DVD). Έτσι γίνεται ιεράρχηση της μνήμης σε μια πυραμίδα (Σχήμα 12) που ξεκινάει από την αργή μνήμη μαζικής αποθήκευσης (δίσκοι, CD, κλπ), προχωράει προς τα πάνω με την κύρια μνήμη (μνήμη ημιαγωγών) η οποία είναι σαφώς ταχύτερη αλλά και σαφώς πιο ακριβή, συνεχίζει με ταχείες συσχετιστικές μνήμες cache, και καταλήγει στους καταχωρητές οι οποίοι βρίσκονται μέσα στην μονάδα επεξεργασίας και είναι ταχύτατοι. Σχήμα 12. Η ιεραρχία της μνήμης. Η ταχύτητα (και το κόστος) αυξάνει αντιστρόφως ανάλογα με τη χωρητικότητα του μέσου αποθήκευσης.

Κεφάλαιο 3: Η ιεραρχία της μνήμης 45 Chip επεξεργαστή Χ ω ρ η τ ι κ ό τ η τ α Μονάδα επεξεργασίας Καταχωρητές Μνήμη cache Επ. 1 Μνήμη cache Επ. 2 Μνήμη cache Επ. 3 Κύρια μνήμη ημιαγωγών (DRAM) Τ α χ ύ τ η τ α Σκληροί δίσκοι, CD, κλπ Η αντίστροφη σχέση μεταξύ χωρητικότητας του μέσου αποθήκευσης και της ταχύτητας φαίνεται στον Πίνακας 11 όπου ενδεικτικά αναφέρουμε τυπικά σημερινά μεγέθη χωρητικότητας και ταχύτητας για τα διάφορα επίπεδα ιεραρχίας της μνήμης. Πίνακας 11. Τυπικές χωρητικότητες και χρόνοι προσπέλασης διαφόρων επιπέδων στην ιεραρχία της μνήμης με σημερινή τεχνολογία (2011). Η ταχύτητα μιας μνήμης είναι αντιστρόφως ανάλογη του χρόνου προσπέλασης. Χωρητικότητα Χρόνος προσπέλασης Τεχνολογία Καταχωρητές 1KB 8KB 0.2 0.5 ns CMOS Cache L1 8KB 64KB 1 2 ns CMOS SRAM Cache L2 64ΚΒ 256ΚΒ 2 5 ns CMOS SRAM Cache L3 2ΜΒ 16ΜΒ 10 20 ns CMOS SRAM Κύρια Μνήμη 2GB 16GB >20 ns CMOS DRAM Δίσκος >100GΒ 5 8 ms Μαγνητικό μέσο Σκοπός της ύπαρξης ιεραρχίας της μνήμης με διάφορα επίπεδα ενδιάμεσης χωρητικότητας και ταχύτητας είναι η μείωση του χρόνου αναμονής της κεντρικής μονάδας επεξεργασίας για την λήψη δεδομένων από τη μνήμη. Ο λόγος ύπαρξης της ιεραρχίας είναι να κλείσει με ομαλό και διαβαθμισμένο τρόπο την τεράστια διαφορά που υπάρχει ανάμεσα στην

Κεφάλαιο 3: Η ιεραρχία της μνήμης 46 ταχύτητα της CPU (π.χ. κύκλος 0.3 nsec) και των μέσων μαζικής αποθήκευσης δεδομένων όπως οι σκληροί δίσκοι (π.χ. χρόνος πρόσβασης 8 msec). Η ιεράρχηση της μνήμης μπορεί να αποδώσει εντυπωσιακά αποτελέσματα και να πολλαπλασιάσει την ταχύτητα με την οποία ο επεξεργαστής τροφοδοτείται με δεδομένα χάρη στην παρακάτω παρατήρηση: Αρχή της τοπικότητας (locality principle). Στα περισσότερα προγράμματα διαδοχικές εντολές ή δεδομένα στο χρόνο καλούνται από διαδοχικές ή κοντινές περιοχές της μνήμης. Έτσι θα δούμε, για παράδειγμα, ότι είναι δυνατόν να επιταχύνουμε το χρόνο προσπέλασης του επεξεργαστή στην κύρια μνήμη παρεμβάλλοντας μια ενδιάμεση γρήγορη μνήμη η οποία φυλάσσει δεδομένα και εντολές από γειτονικές περιοχές της μνήμης. Ομοίως μπορούμε να επιταχύνουμε την πρόσβαση στο δίσκο φυλάσσοντας ενιαία τμήματα του δίσκου στην κύρια μνήμη. 3.2 Οργάνωση της μνήμης Cache Η cache είναι το πρώτο επίπεδο μνήμης που συναντάει μια διεύθυνση η οποία βγαίνει από τον επεξεργαστή. Η λέξη cache σημαίνει στην κυριολεξία ένα κρυφό μέρος όπου κρύβουμε και αποθηκεύουμε πράγματα. Ο λόγος που λέγεται έτσι είναι το γεγονός ότι η μνήμη cache είναι κρυφή από τον επεξεργαστή οποίος δεν ξέρει την ύπαρξή της αλλά ούτε και χρειάζεται να την ξέρει. Η φιλοσοφία της cache είναι απλή: καθώς ο επεξεργαστής ζητάει κάποιο δεδομένο από κάποια θέση μνήμης η διεύθυνση αυτή δεν αποστέλλεται κατευθείαν στην κύρια μνήμη αλλά ελέγχεται αν η cache έχει αυτό το δεδομένο στη δική της μνήμη η οποία είναι πιστό αντίγραφο κάποιων επιλεγμένων διευθύνσεων της κύριας μνήμης. Αν το δεδομένο υπάρχει στην cache, τότε το δεδομένο αποστέλλεται στον επεξεργαστή με μεγαλύτερη ταχύτητα απόκρισης (π.χ. 1 ns) σε σύγκριση με την περίπτωση όπου αυτό το δεδομένο είχε παρθεί από την κύρια μνήμη (π.χ. 30 ns). Αν πάλι το δεδομένο δεν βρεθεί στην cache τότε αυτό καλείται από την κύρια μνήμη όπως θα γινόταν κι αν δεν υπήρχε η cache. Ορίζουμε συχνότητα επιτυχίας (hit-rate), τη συχνότητα με την οποία βρίσκονται τα δεδομένα στην cache και δεν χρειάζεται κλήση της κύριας μνήμης συχνότητα αποτυχίας (miss-rate) την πιθανότητα αποτυχίας εύρεσης ενός δεδομένου στην cache. Εφόσον τα hit-rate και miss-rate μετρώνται σε μονάδες επί τοις εκατό ισχύει: [miss-rate] = 100% [hit-rate] Αν μετρώνται ως πιθανότητες από 0 έως 1 τότε ισχύει: [miss-rate] = 1 [hit-rate] Η βελτίωση της ταχύτητας απόκρισης της μνήμης επιτυγχάνεται με τη βελτίωση του δείκτη επιτυχίας (hit-rate). Σήμερα τα περισσότερα συστήματα επιτυγχάνουν hit-rate πάνω από

Κεφάλαιο 3: Η ιεραρχία της μνήμης 47 97%. Ας δούμε τι σημαίνει αυτό στην πράξη. Έστω ότι η πρόσβαση στην κύρια μνήμη έχει χρόνο απόκρισης 30 ns ενώ η απόκριση της cache είναι 1 ns. Αν το hit-rate είναι π.χ. 95% τότε οι 95 στις 100 κλήσεις στη μνήμη θα εξυπηρετούνται από την cache και άρα θα έχουν χρόνο πρόσβασης 1 ns. Το υπόλοιπο 5% θα κάνει (α) μια αποτυχημένη κλήση στην cache (1 ns) και (β) μια κλήση στην κύρια μνήμη (επί πλέον 30 ns). Έτσι κατά μέσο όρο μια κλήση στη μνήμη θα εξυπηρετείται σε χρόνο 0.95*(1 ns) + 0.05*(1 ns + 30 ns) = 2.5 ns Αν δεν χρησιμοποιούσαμε cache ο χρόνος απόκρισης θα ήταν 30 ns δηλαδή με την cache πετυχαίνουμε βελτίωση 30/2.5 = 12 φορές στο μέσο χρόνο απόκρισης. Γενικά αν Τ cache και Τ mem είναι οι χρόνοι απόκρισης της μνήμης cache και της κύριας μνήμης αντίστοιχα, και το hit-rate της cache είναι [hr %] τότε ο μέσος χρόνος απόκρισης του συνολικού συστήματος μνήμης (cache + κύρια μνήμη) είναι T av = [hr/100]*(t cache ) + [1hr/100]*(T cache + T mem ) και επιτυγχάνεται βελτίωση n φορές στο χρόνο απόκρισης όπου n = T mem /T av = 1 / [ 1(hr/100) + (T cache /T mem ) ]. Η επίτευξη συχνότητας επιτυχίας άνω του 90% είναι εφικτή ακριβώς χάρη στην αρχή της τοπικότητας. Αν η cache φυλάσσει π.χ. τις εντολές του προγράμματος γύρω από την εντολή που εκτελείται αυτή τη στιγμή τότε οι πιθανότητες ότι η επόμενη εντολή θα βρίσκεται στην cache είναι αρκετά μεγάλη όπως ήδη είδαμε. Παρόμοια τοπικότητα ισχύει και στα δεδομένα. Αν οι εντολές και τα δεδομένα δεν είχαν αυτή την τοπικότητα και ήταν Πλήρως συσχετιστική: το block 20 μπορεί να τοποθετηθεί οπουδήποτε Τμηματικά συσχετιστική: το block 20 μπορεί να τοποθετηθεί οπουδήποτε μέσα στο set 0 (0 = 20 mod 4) Άμεσης απεικόνισης: το block 20 μπορεί να τοποθετηθεί μόνο στη θέση 4 (4 = 20 mod 8) Αριθμός Αριθμός Αριθμός block 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 block 0 1 2 3 4 5 6 7 block set 0 set 1 set 2 set 3 Αριθμός block 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 Κύρια μνήμη Σχήμα 13. Παραδείγματα οργάνωσης μνήμης cache: Full associative (πλήρως συσχετιστική), Set associative (τμηματικά συσχετιστική), και Direct mapped (άμεσης απεικόνισης).

Κεφάλαιο 3: Η ιεραρχία της μνήμης 48 τελείως τυχαία η επόμενη θέση μνήμης που θα καλείταν τότε η ιδέα της cache θα ήταν άχρηστη. 3.2.1 Τοποθέτηση και αναζήτηση δεδομένων στην cache Το μικρότερο κομμάτι δεδομένων που φυλάσσει μια cache λέγεται block. Στο Σχήμα 13 φαίνονται τρία παραδείγματα οργάνωσης μνήμης cache. Το παράδειγμα δεν είναι ρεαλιστικό ως προς το μέγεθος των μνημών αλλά βοηθάει στην κατανόηση των βασικών εννοιών. Στο παράδειγμα αυτό λοιπόν, η βασική μνήμη αποτελείται από 32 block (αριθμημένα από 0 έως 31). Κάθε block μπορεί για παράδειγμα να αποτελείται από 4, 16, 32 κλπ, συνεχόμενα bytes. Αν η cache φυλάει πάντα τις ίδιες θέσεις μνήμης τότε ουσιαστικά είναι άχρηστη αφού είναι συντριπτικά μικρότερη σε μέγεθος από την κύρια μνήμη και άρα σπάνια θα έχει επιτυχίες. Αυτό που χρειάζεται είναι να ενημερώνεται το περιεχόμενό της ανάλογα με την εξέλιξη του προγράμματος και την αλλαγή του program counter (αν πρόκειται για cache εντολών) ή με την αλλαγή στη χρήση των δεδομένων (αν είναι cache δεδομένων). Πρώτ' απ' όλα πρέπει να αποφασίσουμε πότε πρέπει να προσθέσουμε ένα νέο block στην cache. Γενικά ένα νέο block προστίθεται όταν υπάρχει αποτυχία της cache (cache-miss). Αν αποφασίσουμε να βάλουμε ένα block της μνήμης στην cache υπάρχουν 3 βασικές στρατηγικές για να γίνει αυτό 1. Πλήρως συσχετιστική οργάνωση (fully associative): Το block μπορεί να τοποθετηθεί οπουδήποτε μέσα στην cache 2. Τμηματικά συσχετιστική οργάνωση (set associative): Το block μπορεί να μπει οπουδήποτε μέσα σε ένα συγκεκριμένο τμήμα της cache που λέγεται set. Έστω ότι χωρίζουμε την cache σε n τέτοια τμήματα, για παράδειγμα χωρίζουμε μια cache 8 θέσεων σε 4 τμήματα των 2 θέσεων. Το block μπορεί να τοποθετηθεί οπουδήποτε μέσα στο τμήμα που ορίζεται από τη συνάρτηση [Διεύθυνση του block] MOD [Αριθμός τμημάτων στην cache] Η συνάρτηση (x MOD y) δηλώνει το υπόλοιπο της διαίρεσης του x από το y. Για παράδειγμα, το block 20 μπορεί να τοποθετηθεί οπουδήποτε μέσα στο τμήμα με αριθμό 20 MOD 4 = 0 (θυμηθείτε ότι υπάρχουν 4 τμήματα στην cache). Το τμήμα αυτό έχει 2 θέσεις. 3. Οργάνωση άμεσης απεικόνισης (direct mapped): Το block μπορεί να τοποθετηθεί μόνο σε συγκεκριμένη θέση μέσα στην cache. Συνήθως η θέση του block δίνεται από μια απλή συνάρτηση της μορφής [Διεύθυνση του block] MOD [Αριθμός block στην cache]

Κεφάλαιο 3: Η ιεραρχία της μνήμης 49 Έτσι π.χ. στο συγκεκριμένο παράδειγμα το block με διεύθυνση 20 θα μπει στη θέση 20 MOD 8 = 4 (= το υπόλοιπο της διαίρεσης 20 δια 8) αφού υπάρχουν μόνο 8 θέσεις στην cache. Γενικά, αν n είναι ο αριθμός των τμημάτων της cache, N είναι ο συνολικός αριθμός των block σε όλη την cache, και B είναι ο αριθμός των block σε ένα τμήμα, τότε οι τρεις περιπτώσεις που περιγράψαμε παραπάνω συνοψίζονται στις παρακάτω τρεις γραμμές 1. Πλήρως συσχετιστική B = N, n = 1, 2. Τμηματικά συσχετιστική Ν > B > 1, n > 1, 3. Άμεσης απεικόνισης B = 1, n = Ν. Σε κάθε περίπτωση ισχύει B = N/n και φυσικά n = N/B οπότε έχουμε δύο ακραίες περιπτώσεις: n = 1 n = N Πλήρως συσχετιστική Άμεσης απεικόνισης ενώ κάθε ενδιάμεση περίπτωση ανήκει στο τμηματικά συσχετιστικό μοντέλο. Αντικατάσταση των block. Στην πλήρως συσχετιστική και στην τμηματικά συσχετιστική cache κάθε τμήμα έχει πάνω από ένα block. Συνήθως τα block αυτά περιέχουν πληροφορία όταν έρχεται ένα νέο block να τοποθετηθεί στο τμήμα. Προφανώς το νέο block θα διώξει και θα αντικαταστήσει κάποιο παλιό block. Επομένως τίθεται το ερώτημα «πως αποφασίζουμε ποιο block θα αντικατασταθεί;». Υπάρχουν δύο βασικές μέθοδοι αντικατάστασης

Κεφάλαιο 3: Η ιεραρχία της μνήμης 50 η τυχαία μέθοδος η μέθοδος της αντικατάστασης του πιο παλαιού block (least recently used LRU). Στη μέθοδο αυτή τα block μαρκάρονται με τη χρονική στιγμή που χρησιμοποιήθηκαν πιο πρόσφατα. Το block το οποίο αντικαθίσταται είναι αυτό με την αρχαιότερη χρονολογία χρησιμοποίησης. Το πλεονέκτημα της πρώτης μεθόδου είναι ότι υλοποιείται εύκολα με τη χρήση μιας γεννήτριας τυχαίων αριθμών σε hardware. Το πλεονέκτημα της δεύτερης μεθόδου είναι ότι χρησιμοποιεί την αρχή της τοπικότητας αφού το λιγότερο πρόσφατα χρησιμοποιημένο block πιθανότατα ανήκει σε τμήμα του κώδικα ή των δεδομένων που έχει ήδη περάσει και σύμφωνα με την αρχή αυτή μάλλον δε θα χρησιμοποιηθεί και στο εγγύς μέλλον. Έτσι η δεύτερη μέθοδος έχει καλύτερη απόδοση από την πρώτη αλλά φυσικά απαιτεί πιο πολύπλοκη υλοποίηση αφού πρέπει να φυλάσσεται επί πλέον πληροφορία σχετικά με το πόσο πρόσφατα χρησιμοποιήθηκε κάθε block στην cache. Εξομοιώσεις των δύο μοντέλων αντικατάστασης πάντως δείχνουν ότι η μέθοδος LRU δεν υπερτερεί πολύ της τυχαίας μεθόδου ενώ το πλεονέκτημα σχεδόν εξαφανίζεται με την αύξηση του μεγέθους της cache (βλ. Πίνακας 12). Επίσης το ποσοστό αποτυχίας φαίνεται να μειώνεται, για μικρές cache ανάλογα, με τον αριθμό των τμημάτων. Πίνακας 12. Ποσοστά αποτυχίας (miss-rates) για τμηματικά συσχετιστικές cache με 2, 4, 8 τμήματα, και με χρήση μεθόδων αντικατάσταση LRU και Τυχαίας. Τμηματικά Συσχετιστική cache 2 τμήματα 4 τμήματα 8 τμήματα Μέγεθος LRU Τυχαία LRU Τυχαία LRU Τυχαία 16KB 5.18% 5.69% 4.67% 5.29% 4.39% 4.96% 64KB 1.88% 2.01% 1.54% 1.66% 1.39% 1.53% 256KB 1.15% 1.17% 1.13% 1.13% 1.12% 1.12% Αναζήτηση ενός block στην cache. Αφού βάλουμε τα δεδομένα στην cache με κάποιο από τους παραπάνω τρόπους πρέπει να έχουμε κάποιο τρόπο να ελέγχουμε αν μια διεύθυνση που μας ζητήθηκε βρίσκεται στην cache (hit) ή πρέπει να αναζητηθεί στην κύρια μνήμη (miss). Η αναζήτηση γίνεται παράλληλα σε όλα τα δεδομένα της cache, αφού φυλάμε σ αυτήν όχι μόνο τα δεδομένα αλλά και τις διευθύνσεις της κύριας μνήμης στις οποίες αυτά αντιστοιχούν (για την ακρίβεια φυλάμε τμήμα της διεύθυνσης). Στο Σχήμα 14 φαίνεται η διεύθυνση ενός δεδομένου στη μνήμη. Αυτή χωρίζεται σε τρία τμήματα: το offset που μας λέει σε ποιο byte μέσα στο block βρίσκεται το δεδομένο. Αν ένα block έχει μέγεθος B bytes τότε το offset έχει log 2 (B) bits. τον δείκτη (index) που μας λέει σε ποιο τμήμα (set) της cache θα μπει αυτό το δεδομένο όταν θα πάει στην cache. Αν η cache έχει S τμήματα τότε το πεδίο δείκτη έχει

Κεφάλαιο 3: Η ιεραρχία της μνήμης 51 log 2 (S) bits. Αν η cache είναι πλήρως συσχετιστική τότε δεν υπάρχει παρά μόνο ένα τμήμα (S=1) και άρα το πεδίο δείκτη έχει 0 bits (δεν υπάρχει). το υπόλοιπο (tag) και το οποίο τελικά θα χρησιμοποιηθεί στη σύγκριση που θα γίνει για να δούμε αν το block βρίσκεται στην cache. Σχήμα 14. Τα τρία τμήματα της διεύθυνσης ενός δεδομένου. Διεύθυνση του block Tag Index Offset Διεύθυνση του δεδομένου Εκτός από το δεδομένο και τη διεύθυνσή του στην κύρια μνήμη φυλάμε και ένα bit που μας λέει αν η καταχώρηση είναι έγκυρη ή όχι. Η αναζήτηση ενός δεδομένου γίνεται παράλληλα σε όλη την cache. Συμμετέχουν μόνο οι καταχωρήσεις με valid-bit = 1 και όλες οι υπόλοιπες αγνοούνται. Το πεδίο Tag της διεύθυνσης που ζητάει η CPU συγκρίνεται (συσχετίζεται) με τα πεδία Tag που φυλάσσονται στην cache και αν βρεθεί τέλεια ομοιότητα τότε παραδίδεται στην CPU το συγκεκριμένο δεδομένο αυτό από το πεδίο δεδομένων της cache. Πρωτόκολλα εγγραφής (write) με χρήση cache. Στα περισσότερα προγράμματα οι εντολές ανάγνωσης από τη μνήμη (read) είναι πολύ περισσότερες από τις εντολές εγγραφής (write) στη μνήμη. Για παράδειγμα, τουλάχιστον, ο κώδικας ενός προγράμματος πάντα διαβάζεται και ποτέ δεν γράφεται από το ίδιο πρόγραμμα. Οι στατιστικές δείχνουν όμως ότι ακόμα και τα δεδομένα διαβάζονται πιο συχνά απ' ότι γράφονται. Κατά μέσο όρο μόλις 7-10% της συνολικής κυκλοφορίας μεταξύ επεξεργαστή και μνήμης είναι εντολές write. Έτσι μεγαλύτερη έμφαση έχει δοθεί στην ταχεία ανάγνωση των δεδομένων από την cache σε σχέση με την ταχεία εγγραφή δεδομένων στην cache. Υπάρχουν δύο βασικές στρατηγικές διαχείρισης των εγγραφών όταν βρεθεί το αντίστοιχο block στην cache (writehit): Write through. Στο πρωτόκολλο αυτό όταν γίνεται κάποια εγγραφή ενημερώνεται τόσο η cache (εφόσον έχει το αντίστοιχο block) όσο και η κύρια μνήμη.

Κεφάλαιο 3: Η ιεραρχία της μνήμης 52 Write back. Στο πρωτόκολλο αυτό ο επεξεργαστής γράφει μόνο στην cache και όχι στην κύρια μνήμη. Έτσι θα δημιουργηθεί ασυνέπεια μεταξύ των περιεχομένων της cache και των περιεχομένων της μνήμης. Ωστόσο αφού ο επεξεργαστής διαβάζει τα δεδομένα πρώτα από την cache και μόνο αν δεν τα βρει εκεί καταφεύγει στην κύρια μνήμη δεν υπάρχει πρόβλημα. Απλά όταν ένα block της cache στο οποίο έχουμε κάνει εγγραφή πρέπει να αντικατασταθεί για να δώσει τη θέση του σε κάποιο άλλο (σε περίπτωση π.χ. read miss), τότε χρειάζεται να γράψουμε το block αυτό στη μνήμη. Έτσι για να μειωθεί η συχνότητα επικοινωνίας μεταξύ cache και μνήμης χρησιμοποιείται ένα ακόμα bit το λεγόμενο dirty-bit το οποίο δεικνύει αν το block έχει γραφτεί ή όχι. Αν dirty-bit=1 τότε το block χρειάζεται να γραφτεί στη μνήμη πριν αντικατασταθεί από κάποιο άλλο, διαφορετικά το αντικαθιστούμε χωρίς καμία άλλη ενέργεια. Το πρωτόκολλο write-through δεν έχει πρόβλημα συνέπειας μεταξύ μνήμης και cache και επομένως δε χρειάζεται να φυλάσσεται έξτρα πληροφορία για το block όπως το dirtybit. Από την άλλη μεριά το πρωτόκολλο write-back είναι ταχύτερο λόγω της τοπικότητας των κλήσεων της μνήμης ιδιότητα που ισχύει και για τις εγγραφές. Έτσι αν έχουμε π.χ. 5 εγγραφές στο ίδιο block, το πρωτόκολλο write-through θα κάνει 5 εγγραφές στη μνήμη και 5 στην cache ενώ το πρωτόκολλο write-back θα κάνει 5 εγγραφές στην cache και μόνο 1 στη μνήμη όταν θα χρειαστεί να αντικατασταθεί το block. Μια ανεπιθύμητη παρενέργεια του πρωτοκόλλου write-back είναι το γεγονός ότι μπορεί να προκληθεί εγγραφή στη μνήμη ακόμα και όταν ο επεξεργαστής ζητήσει να διαβάσει κάτι. Για παράδειγμα αν γίνει μια αποτυχία ανάγνωσης (read-miss) και χρειαστεί να φέρουμε από την μνήμη κάποιο block το οποίο θα αντικαταστήσει ένα «βρώμικο» block τότε το βρώμικο block πρέπει να γραφτεί πρώτα στη μνήμη πριν γίνει η ανάγνωση. Σε περίπτωση αποτυχίας κατά την εγγραφή (write-miss) συνήθως χρησιμοποιείται μια από τις παρακάτω δυο επιλογές: Write allocate (ή fetch-on-write). Στο πρωτόκολλο αυτό φέρνουμε το block από τη μνήμη στην cache. Χρησιμοποιείται συνήθως μαζί με το πρωτόκολλο write-back. No-write allocate (ή write-around). Στο πρωτόκολλο αυτό δεν φέρνουμε το block στην cache. Χρησιμοποιείται μαζί με το πρωτόκολλο write-through. Παράδειγμα οργάνωσης της cache. Το Σχήμα 15 δείχνει με λεπτομέρεια την cache του επεξεργαστή DEC Alpha (AXP 21064). Ο επεξεργαστής αυτός έχει μέγεθος διεύθυνσης 34 bits. Η cache του έχει blocks μεγέθους 2 5 =32 bytes, άρα το offset έχει μήκος 5 bits (5 bits αρκούν για να ορίσουν τη θέση ενός byte μέσα σε ένα block).

Κεφάλαιο 3: Η ιεραρχία της μνήμης 53 Διεύθυνση κύριας μνήμης <21> <8> <5> Tag Index Offset 1 CPU Διεύθυνση Data In Data Out Valid <1> Tag <21> Block data <256> 256 blocks 2............. miss Σύγκριση 3 Πολυπλέκτης (multiplexer) 4 : 1 Σχήμα 15. Η cache του DEC Alpha (AXP 21064). Η μνήμη cache περιέχει 8192 bytes, δηλαδή 256 blocks (256 = 8192/32). Τα blocks της cache χωρίζονται σε 2 8 =256 τμήματα, δηλαδή έχουμε οργάνωση απ ευθείας απεικόνισης, με ένα block ανά τμήμα. Το πεδίο δείκτη της διεύθυνσης έχει 8 bits. Τα υπόλοιπα 21 bits της διεύθυνσης αποτελούν το Tag το οποίο φυλάσσεται και στην cache. Αφού κάθε block έχει 32 bytes η cache φυλάσσει και 256=328 bits δεδομένων για κάθε block. Το συνολικό εύρος κάθε καταχώρησης στην cache είναι: 1(valid-bit) + 21(Tag) + 256(Data) = 278 bits. Για τις εγγραφές χρησιμοποιείται το πρωτόκολλο write-through. Στο Σχήμα 15 φαίνεται η ροή της πληροφορίας από τον επεξεργαστή προς την cache και τη μνήμη.

Κεφάλαιο 3: Η ιεραρχία της μνήμης 54 Βήμα 1. Πρώτα στέλνεται η διεύθυνση στην cache και αυτή κόβεται σε τρία κομμάτια (Tag, Index, Offset). Βήμα 2. Ο δείκτης (Index) περνά από κάποιο κύκλωμα αποκωδικοποίησης και επιλέγει μόνο ένα block της cache για σύγκριση (σκιασμένο block στο σχήμα). Βήμα 3. Γίνεται σύγκριση μεταξύ του Tag της διεύθυνσης που ζητήθηκε και του Tag που σχετίζεται με το block της cache. Στη σύγκριση συμμετέχει και το valid-bit: αν valid-bit=0 τότε η σύγκριση αποτυγχάνει πριν καν γίνει. Αν validbit=1 τότε γίνεται σύγκριση. Βήμα 4. Το bus δεδομένων στον Alpha έχει εύρος 64 bits. Έτσι σε περίπτωση ανάγνωσης (read) και αν η σύγκριση πετύχει στέλνονται 8 bytes από την cache στον επεξεργαστή. Η επιλογή των 8 αυτών bytes από τα 32 που έχει το block γίνεται με χρήση ενός πολυπλέκτη 4:1 (Multiplexer MUX). Σε περίπτωση εγγραφής (write) τα δεδομένα γράφονται τόσο στην cache όσο και στη μνήμη αφού το πρωτόκολλο που χρησιμοποιείται είναι το write-through. 3.2.2 Εκτίμηση της επίδοσης μιας cache Ένα κριτήριο επίδοσης της αρχιτεκτονικής μιας μνήμης cache θα μπορούσε να είναι η συχνότητα αποτυχίας (read/write miss rate). Το κριτήριο αυτό όμως αποκρύπτει δύο βασικά χαρακτηριστικά που επηρεάζουν την επίδοση της cache: το χρόνο προσπέλασης σε περίπτωση επιτυχίας (hit) και το χρόνο προσπέλασης σε περίπτωση αποτυχίας (miss). Ο χρόνος προσπέλασης σε περίπτωση αποτυχίας είναι το άθροισμα του χρόνου προσπέλασης της cache (αφού πρέπει να την προσπελάσουμε για να δούμε αν απέτυχε ή όχι) συν τον έξτρα χρόνο που χρειάζεται η προσπέλαση στην κύρια μνήμη, η μεταφορά κάποιων blocks από την κύρια μνήμη στην cache, κλπ. Τον έξτρα αυτό χρόνο τον ονομάζουμε κόστος αποτυχίας. Ορίζουμε λοιπόν σαν καταλληλότερο κριτήριο επίδοσης μιας cache το μέσο χρόνο προσπέλασης της μνήμης που ορίζεται ως εξής: [Μέσος χρόνος προσπέλασης μνήμης] = [Χρόνος προσπέλασης cache] + [Συχνότητα αποτυχίας] [Κόστος αποτυχίας] Εναλλακτικά, αντί για απόλυτους χρόνους μπορούμε να χρησιμοποιήσουμε αριθμούς κύκλων επεξεργαστή. Για παράδειγμα, έστω μια cache η οποία έχει χρόνο προσπέλασης ίσο με 2 κύκλους επεξεργαστή, έχει hit-rate 95% και χρειάζεται 50 κύκλους για να εξυπηρετήσει μια αποτυχημένη κλήση στην cache (στο χρόνο αυτό υπολογίζεται και ο χρόνος προσπέλασης στην cache για να δούμε αν έχουμε αποτυχία ή όχι). Σύμφωνα με τον ορισμό που δώσαμε παραπάνω το κόστος αποτυχίας είναι 48(=50 2) κύκλοι αφού μετράμε σ αυτό μόνο τον έξτρα χρόνο εξυπηρέτησης της αποτυχίας και όχι το χρόνο προσπέλασης της cache. Σύμφωνα με τα παραπάνω έχουμε

Κεφάλαιο 3: Η ιεραρχία της μνήμης 55 [Μέσος χρόνος προσπέλασης μνήμης] = 2 + 0.05 48 = 4.4 κύκλοι επεξεργαστή 3.2.3 Μέθοδοι βελτίωσης της επίδοσης μιας cache Σύμφωνα με το βασικό μας κριτήριο του μέσου χρόνου προσπέλασης της μνήμης η βελτίωση της επίδοσης μιας cache γίνεται με τρεις τρόπους: (α) με τη μείωση του χρόνου προσπέλασης της cache, (β) με την αύξηση της συχνότητας επιτυχίας (hit-rate) και (γ) με τη μείωση του κόστους αποτυχίας. Αυτοί οι τρεις βασικοί άξονες θα αναλυθούν με μεγαλύτερη λεπτομέρεια παρακάτω. 3.2.3.1 Μείωση του χρόνου προσπέλασης. Υπάρχουν διάφορες μέθοδοι επιτάχυνσης της προσπέλασης στην cache. Η πιο απλή μέθοδος είναι η σχεδίαση μικρών και απλών cache. Οι κυριότεροι χρόνοι που δαπανούνται στην cache είναι ο χρόνος αποκωδικοποίησης του δείκτη και ο χρόνος σύγκρισης του tag με τα tags του τμήματος της cache που επιλέχθηκε. Η βασική αρχή του hardware είναι «μικρότερο hardware = ταχύτερο hardware». Επίσης οι cache με οργάνωση απ ευθείας απεικόνισης είναι πιο γρήγορες αφού είναι και πολύ απλές: δεν χρειάζονται πρωτόκολλα αντικατάστασης ενώ κάθε block μπαίνει σε μια συγκεκριμένη θέση. Ίσως το σημαντικότερο πλεονέκτημα των cache με απ ευθείας απεικόνιση είναι ότι μπορεί να επικαλύπτεται χρονικά η μετάδοση των δεδομένων με την σύγκριση των tags. Πράγματι, η μετάδοση των δεδομένων διαρκεί πιο πολύ από τη σύγκριση. Έτσι μπορούμε να ξεκινήσουμε τη μετάδοση των δεδομένων πριν βγει η απόφαση αν όντως είναι τα σωστά δεδομένα. Αν όντως είναι τότε συνεχίζουμε κανονικά, διαφορετικά σταματάμε τη μετάδοση. 3.2.3.2 Αύξηση της συχνότητας επιτυχίας. Δύο είναι οι βασικότερες και απλούστερες μέθοδοι αύξησης της συχνότητας επιτυχίας (hitrate): (α) η αύξηση του μεγέθους των block ή/και το μεγέθους της cache, και (β) η αύξηση του αριθμού των blocks ανά τμήμα (set). Ο Πίνακας 13. Η συχνότητα αποτυχίας (miss-rate) σα συνάρτηση του μεγέθους της cache και του μεγέθους των block.πίνακας 13 δείχνει την επίδραση της αύξησης του μεγέθους της cache και του μεγέθους των block στη συχνότητα επιτυχίας. Βλέπουμε ότι όσο μεγαλώνει η cache τόσο μειώνεται η συχνότητα αποτυχίας, πράγμα πολύ λογικό. Παρατηρούμε επίσης το ενδιαφέρον φαινόμενο της αύξησης της συχνότητας αποτυχίας αν έχουμε πολύ μεγάλο μέγεθος block. Για παράδειγμα με 256 bytes ανά block έχουμε

Κεφάλαιο 3: Η ιεραρχία της μνήμης 56 μεγαλύτερες συχνότητες αποτυχίας σε σύγκριση με block μεγέθους 128 bytes όταν το μέγεθος της cache είναι από 1 έως 64Kbytes. Ο λόγος της αυξημένης αποτυχίας στην περίπτωση των πολύ μεγάλων block σε μικρές (ή σχετικά μικρές) cache είναι ότι έχουμε λίγα blocks. Σε αυτές τις περιπτώσεις η ζημιά που γίνεται από το μικρό αριθμό blocks είναι προφανώς πιο σημαντική από το κέρδος που έχουμε από το μεγάλο μέγεθός τους. Πίνακας 13. Η συχνότητα αποτυχίας (miss-rate) σα συνάρτηση του μεγέθους της cache και του μεγέθους των block. Μέγεθος cache Μέγεθος block 1Κ 4Κ 16Κ 64Κ 256Κ 16 15.1% 8.6% 3.9% 2.0% 1.1% 32 13.3% 7.2% 2.9% 1.4% 0.7% 64 13.8% 7.0% 2.6% 1.1% 0.5% 128 16.6% 7.8% 2.8% 1.0% 0.5% 256 22.0% 9.5% 3.3% 1.2% 0.5% Όσον αφορά τον αριθμό των τμημάτων σε μια cache υπάρχει ο ακόλουθος πρακτικός κανόνας Μια cache μεγέθους Ν με απ ευθείας απεικόνιση (1 block/τμήμα, αριθμός τμημάτων = αριθμός blocks) έχει περίπου την ίδια συχνότητα αποτυχίας με μια cache μεγέθους Ν/2 με 2 blocks/τμήμα (αριθμός τμημάτων = αριθμός blocks/2). Έτσι αυξάνοντας τον αριθμό των blocks ανά τμήμα αυξάνουμε και την συχνότητα επιτυχίας αν συγκρίνουμε δύο cache του ιδίου μεγέθους. 3.2.3.3 Μείωση του κόστους αποτυχίας. Μια συνηθισμένη τεχνική μείωσης του κόστους αποτυχίας είναι η εισαγωγή άλλης μιας cache δευτέρου επιπέδου μεταξύ της πρώτης cache και της κύριας μνήμης. Η δεύτερη αυτή cache είναι μεγαλύτερη και βραδύτερη από την πρώτη και αναλαμβάνει να διεκπεραιώσει τις αποτυχημένες συναλλαγές της πρώτης cache πριν αυτές φτάσουν στην κύρια μνήμη. Με την εισαγωγή της δεύτερης cache τα πράγματα γίνονται πιο πολύπλοκα. Πρώτ απ όλα το βασικό μας κριτήριο επίδοσης γράφεται υπό νέα μορφή [Μέσος χρόνος προσπέλασης μνήμης] = [Χρόνος προσπέλασης cache] 1 + [Συχνότητα αποτυχίας] 1 [Κόστος αποτυχίας] 1 όπου ο δείκτης 1 αντιστοιχεί στην πρώτη cache. Το κόστος αποτυχίας για την πρώτη cache είναι [Κόστος αποτυχίας] 1 = [Χρόνος προσπέλασης cache] 2 + [Συχνότητα αποτυχίας] 2 [Κόστος αποτυχίας] 2

Κεφάλαιο 3: Η ιεραρχία της μνήμης 57 Η συχνότητα αποτυχίας της δεύτερης cache είναι το ποσοστό των αποτυχημένων κλήσεων στην πρώτη cache που αποτυγχάνουν και στην δεύτερη cache. Για να μην υπάρχει ασάφεια ορίζουμε τη συχνότητα αυτή σαν την τοπική συχνότητα αποτυχίας (local miss rate). Θα ορίσουμε σαν ολική συχνότητα αποτυχίας (global miss rate) για τη δεύτερη cache τον αριθμό των αποτυχιών της διαιρεμένο με τον αριθμό των συνολικών κλήσεων στη μνήμη. Παράδειγμα. Έστω ότι έχουμε 1000 κλήσεις στη μνήμη από τις οποίες 40 αποτυγχάνουν στην πρώτη cache και 10 αποτυγχάνουν στη δεύτερη cache. Η συχνότητα αποτυχίας της πρώτης cache (τοπική ή ολική είναι το ίδιο) είναι 40/1000 = 4%. Η τοπική συχνότητα αποτυχίας για τη δεύτερη cache είναι 10/40 = 25%, ενώ Η ολική συχνότητα αποτυχίας είναι 10/1000 = 1 Επειδή η τοπική συχνότητα αποτυχίας της δεύτερης cache εξαρτάται από την συχνότητα αποτυχίας της πρώτης, δεν είναι καλό κριτήριο επίδοσης για τις cache δευτέρου επιπέδου. Αντίθετα η ολική συχνότητα αποτυχίας χρησιμοποιείται σαν καταλληλότερο κριτήριο επίδοσης. Η βασική διαφορά ανάμεσα στα δύο επίπεδα των cache είναι ότι η ταχύτητα της πρώτης επηρεάζει την ταχύτητα του επεξεργαστή ενώ η ταχύτητα της δεύτερης επηρεάζει μόνο το κόστος αποτυχίας της πρώτης cache. Έτσι στις cache δευτέρου επιπέδου έχουμε την πολυτέλεια να χρησιμοποιούμε μεγαλύτερο μέγεθος και μικρότερες ταχύτητες προσπέλασης. Η τάση είναι να χρησιμοποιούνται μεγάλες cache δευτέρου επιπέδου (π.χ. 1Mbyte). Γενικά δεν έχει νόημα η δεύτερη cache να είναι λίγο μεγαλύτερη από την πρώτη αφού συνήθως τα δεδομένα που υπάρχουν στην πρώτη υπάρχουν και στη δεύτερη (η ιδιότητα αυτή καλείται ιδιότητα εγκλεισμού). Οι ίδιες μέθοδοι μείωσης της συχνότητας αποτυχίας που συζητήσαμε παραπάνω ισχύουν και για τις cache δευτέρου επιπέδου. Ειδικότερα, η αύξηση του μεγέθους του block είναι συνηθισμένη λόγω και του μεγάλου μεγέθους της cache (π.χ. δεν είναι σπάνια blocks μεγέθους 256 bytes). Με την εισαγωγή δευτέρου επιπέδου cache η σχεδίαση του πρώτου επιπέδου γίνεται απλούστερη. Για παράδειγμα, το πρώτο επίπεδο μπορεί τώρα να χρησιμοποιήσει το πρωτόκολλο write-through και να αφήσει το write-back για το δεύτερο επίπεδο. 3.3 Οργάνωση της κύριας μνήμης Αμέσως μετά την cache ακολουθεί στην ιεραρχία της μνήμης η κύρια μνήμη η οποία εξυπηρετεί τόσο τις αποτυχίες της cache όσο και τις συναλλαγές εισόδου / εξόδου. Η κύρια μνήμη χαρακτηρίζεται από μεγαλύτερο όγκο πληροφορίας και μικρότερη ταχύτητα απόκρισης σε σχέση με την cache.

Κεφάλαιο 3: Η ιεραρχία της μνήμης 58 Στην τεχνολογία της κύριας μνήμης ορίζεται ως χρόνος προσπέλασης (access time) ο χρόνος μεταξύ αίτησης ανάγνωσης και επιστροφής της ζητούμενης λέξης από τη μνήμη, ενώ ορίζεται ως χρόνος κύκλου μνήμης (cycle time) ή απλά κύκλος ο ελάχιστος επιτρεπόμενος χρόνος μεταξύ δύο κλήσεων στη μνήμη. Ο κύκλος της μνήμης είναι πάντοτε μεγαλύτερος από το χρόνο προσπέλασης για διάφορους λόγους. Ένας λόγος για παράδειγμα, είναι ότι οι γραμμές διευθύνσεων του bus της μνήμης πρέπει να σταθεροποιηθούν ηλεκτρικά πριν γίνει η επόμενη κλήση στη μνήμη. Ένας άλλος λόγος είναι ότι στις μνήμες DRAM που θα μελετήσουμε παρακάτω, απαιτείται κάποιος νεκρός χρόνος αναζωογόνησης της μνήμης μετά από κάθε ανάγνωση ή εγγραφή σ αυτήν. Ο χρόνος αυτός λέγεται refresh time και κατά τη διάρκεια του refresh δεν επιτρέπεται οποιαδήποτε συναλλαγή με τη μνήμη. Αλλά για τις μνήμες DRAM θα μιλήσουμε με περισσότερη λεπτομέρεια παρακάτω. Εδώ απλώς θα επισημάνουμε ότι οι μνήμες αυτού του τύπου είναι οι πλέον διαδεδομένες και τυπικά αποτελούν την κύρια μνήμη ενός συνηθισμένου υπολογιστή. 3.3.1 Βασικοί τύποι μνημών 3.3.1.1 Η μνήμη DRAM Η λέξη DRAM προέρχεται από τα αρχικά των λέξεων Dynamic Random Access Memory. Μια τυπική DRAM αποτελείται από ένα 2-διάστατο πλέγμα από τρανζίστορς. το οποίο είναι και η καρδιά της DRAM όπου φυλάσσονται τα δεδομένα της μνήμης. Σε κάθε τρανζίστορ αντιστοιχεί 1 bit πληροφορίας, οπότε μια DRAM 8 Mbit περιέχει τουλάχιστον 8 εκατομμύρια τρανζίστορς. Μπορούμε να προσπελάσουμε τα bits του πλέγματος επιλέγοντας την κατάλληλη γραμμή (Row) και την κατάλληλη στήλη (Column). Η επιλογή της γραμμής γίνεται θέτοντας το καλώδιο RAS=1 (RAS = Row Access Strobe) και μετατρέποντας το αντίστοιχο πεδίο (ROW) της διεύθυνσης με ένα αποκωδικοποιητή. Ομοίως γίνεται και η επιλογή της στήλης θέτοντας CAS=1 (CAS = Column Access Strobe). Το σχεδιάγραμμα μιας τυπικής DRAM φαίνεται στο Σχήμα 16. Για παράδειγμα, έστω ότι έχουμε μια μνήμη 1 Mbit η οποία αποτελείται από 1024 γραμμές και 1024 στήλες. Τα πρώτα 10 most-significant bits της διεύθυνσης είναι το πεδίο ROW το οποίο μας λέει ποια γραμμή από το πλέγμα θα επιλέξουμε. Τα 10 επόμενα bits της διεύθυνσης είναι το πεδίο COL που μας λέει ποια στήλη θα επιλέξουμε. Κάθε chip μνήμης συνήθως γράφει ή διαβάζει 1 bit δεδομένων. Στην περίπτωση αυτή για να γράψουμε ή να διαβάσουμε ένα byte χρειάζονται 8 chip. Υπάρχουν ωστόσο και μνήμες που μπορούν να χειριστούν ταυτόχρονα περισσότερα από 1 bit δεδομένων όπως θα δούμε παρακάτω.

Επιλογή γραμμής Κεφάλαιο 3: Η ιεραρχία της μνήμης 59 Σχήμα 16. Το σχεδιάγραμμα μιας τυπικής DRAM. ROW Διεύθυνση COL Επιλογή στήλης CAS Μνήμη 2-διάστατο πλέγμα Δεδομένα 1 bit RAS Read/Write Η επιλογή γραμμής και στήλης δεν γίνεται ταυτόχρονα. Πρώτα γίνεται η επιλογή της γραμμής ανεβάζοντας το καλώδιο RAS στην τιμή 1 και κατόπιν γίνεται η επιλογή της στήλης ανεβάζοντας το καλώδιο CAS στην τιμή 1. Μετά την επιλογή και της γραμμής και της στήλης τα δεδομένα (DATA) είναι έτοιμα προς εγγραφή ή ανάγνωση. Ο χρονισμός των

Κεφάλαιο 3: Η ιεραρχία της μνήμης 60 σημάτων φαίνεται στο Σχήμα 17. Συνήθως για εξοικονόμηση ακίδων σε μεγάλες DRAM οι γραμμές ROW και COL πολυπλέκονται, δηλαδή χρησιμοποιούν τις ίδιες ακίδες σε διαφορετικές χρονικές στιγμές. Αφού η ανάγνωση του COL γίνεται μετά την ανάγνωση του ROW δεν δημιουργείται πρόβλημα με αυτήν την πολύπλεξη. Εξ αιτίας του γεγονότος ότι ένα bit αντιπροσωπεύεται από μόλις ένα τρανζίστορ η DRAM έχει κάποιες ιδιαιτερότητες που σχετίζονται με τον χρόνο που μπορεί να φυλάξει ένα τρανζίστορ την πληροφορία του ενός bit. Το τρανζίστορ λειτουργεί ουσιαστικά σαν ένας πυκνωτής ο οποίος έχει μη-μηδενικό ρεύμα διαρροής και το ηλεκτρικό του φορτίο (δηλαδή η πληροφορία) μπορεί να διατηρηθεί μόνο για ένα πεπερασμένο χρονικό διάστημα. Έτσι υπάρχει η ανάγκη επαναφόρτισης των τρανζίστορ ανά τακτά χρονικά διαστήματα με μια διαδικασία που λέγεται αναζωογόνηση (refresh). Ένα τρανζίστορ επαναφορτίζεται κάθε φορά που γίνεται ανάγνωση σ αυτό, και η πληροφορία μπορεί να διατηρηθεί μετά την ανάγνωση για 8 msec (για παράδειγμα). Αυτό σημαίνει ότι κάθε bit της μνήμης πρέπει να διαβαστεί το πολύ μέσα σε 8 msec από την τελευταία ανάγνωση. Ευτυχώς όλα τα bit μιας γραμμής μπορούν να διαβαστούν ταυτόχρονα. και επομένως να αναζωογονηθούν ταυτόχρονα. Οι γραμμές αναζωογονούνται κυκλικά και πρέπει όλες να έχουν αναζωογονηθεί μέσα σε 8 msec. Έτσι π.χ. για μια DRAM με 1024 γραμμές αναζωογονούμε μια διαφορετική γραμμή κάθε 8 μsec (8 μsec 1024 = 8 msec). Στην πράξη αυτό υλοποιείται με κάποιο απλό κύκλωμα ενός κυκλικού μετρητή ο οποίος δίνει το σήμα αναζωογόνησης της κατάλληλης γραμμής την κατάλληλη χρονική στιγμή. Εννοείται ότι κατά τη διάρκεια της διαδικασίας αναζωογόνησης η DRAM τίθεται εκτός λειτουργίας και μπλοκάρεται κάθε προσπέλαση σ αυτή είτε για ανάγνωση είτε για εγγραφή. RAS CAS ROW COL DATA Α Β Γ Σχήμα 17. Ο κύκλος μνήμης μιας DRAM περιέχει τρεις φάσεις. Στη φάση Α διαβάζεται η γραμμή (ROW) θέτοντας RAS=1, στη φάση Β διαβάζεται η στήλη (COL) θέτοντας CAS=1 και στη φάση Γ τα δεδομένα είναι έτοιμα προς εγγραφή ή ανάγνωση. Οι τρεις αυτές φάσεις διακρίνονται με γκρίζα κουτάκια στο σχήμα.

Κεφάλαιο 3: Η ιεραρχία της μνήμης 61 3.3.1.2 Η μνήμη SRAM Η λέξη SRAM προκύπτει από τα αρχικά των λέξεων Static Random Access Memory. Εδώ η αποθήκευση της πληροφορίας είναι πιο μόνιμη σε σχέση με την DRAM και δεν υπάρχει ανάγκη αναζωογόνησης. Όμως από την άλλη μεριά, σε κάθε bit πληροφορίας αντιστοιχούν 5-8 τρανζίστορς δηλαδή η πυκνότητα της μνήμης σε πληροφορία είναι 5-8 φορές μικρότερη από την DRAM. Στην SRAM τα πράγματα είναι ακόμη πιο απλά όσον αφορά την προσπέλαση των δεδομένων: δεν υπάρχουν σήματα RAS και CAS και ολόκληρη η διεύθυνση χρησιμοποιείται ταυτόχρονα για την αποκωδικοποίηση της και την επιλογή του κατάλληλου bit. Επίσης συνήθως δεν υπάρχει πολύπλεξη των γραμμών ROW, COL. Η μόνη ομοιότητα με την DRAM είναι το γεγονός ότι κι εδώ συνήθως κάθε chip μπορεί να διαβάσει ή να γράψει 1 bit. 3.3.1.3 Σύγκριση DRAM / SRAM Το βασικό πλεονέκτημα της SRAM είναι η ταχύτητα, ενώ τα βασικά πλεονεκτήματα της DRAM είναι ο χωρητικότητα σε δεδομένα και το κόστος. Πράγματι η ύπαρξη ενός μόλις τρανζίστορ ανά bit στην DRAM επιτρέπει χωρητικότητες όπως 1, 8, 16, ή ακόμα και 256 Mbits ανά chip. Συγκριτικά οι SRAM έχουν πολύ μικρότερη χωρητικότητα όπως 0.5, 1, ή 2 Mbits ανά chip. Ομοίως και το κόστος μιας DRAM είναι ανάλογα μικρότερο από το κόστος μιας SRAM με την ίδια χωρητικότητα. Αντίθετα, η έλλειψη ανάγκης αναζωογόνησης από την SRAM και η ηλεκτρική σταθερότητα των bits επιτρέπει την ταχεία ανάγνωση και εγγραφή των δεδομένων. Έτσι για παράδειγμα μια τυπική SRAM έχει κύκλο 10 nsec ενώ μια τυπική DRAM έχει κύκλο 50 nsec. Επίσης στην SRAM δεν υπάρχει διαφορά ανάμεσα στον χρόνο προσπέλασης και στον κύκλο της μνήμης. Για όλους τους παραπάνω λόγους οι DRAM χρησιμοποιούνται σχεδόν αποκλειστικά ως κύριες μνήμες και ως μνήμες γραφικών ενώ οι SRAM χρησιμοποιούνται στις cache. Βέβαια υπάρχουν και εξαιρέσεις όπως π.χ. ο supercomputer C-90 της Cray που χρησιμοποιεί SRAM στην κύρια μνήμη. Ο παρακάτω πίνακας συνοψίζει τις βασικότερες διαφορές μεταξύ DRAM και SRAM. Πίνακας 14. Σύγκριση μεταξύ SRAM και DRAM. DRAM SRAM 1 τρανζίστορ / bit 5-8 τρανζίστορ / bit Χρήση αναζωογόνησης Όχι αναζωογόνηση (Χωρητικότητα DRAM) = 4 έως 8 (Χωρητικότητα SRAM) (Κύκλος DRAM) = 8 έως 16 (Κύκλος SRAM) 8 έως 16 (Κόστος DRAM) = (Κόστος SRAM) Χρησιμοποιείται σαν κύρια μνήμη Χρησιμοποιείται σε cache

Κεφάλαιο 3: Η ιεραρχία της μνήμης 62 3.3.2 Αρχιτεκτονική της κύριας μνήμης Τα σημαντικότερα προβλήματα που αφορούν την αύξηση της απόδοσης της κύριας μνήμης είναι (α) η αύξηση του εύρους ζώνης της επικοινωνίας της με την cache και (β) η αύξηση της ταχύτητας απόκρισης. Το μεν εύρος ζώνης επηρεάζει μόνο το κόστος της αποτυχίας μιας cache, η δε ταχύτητα απόκρισης είναι κρίσιμη παράμετρος τόσο για την εξυπηρέτηση της cache όσο και για την εξυπηρέτηση εισόδου / εξόδου. Ωστόσο το πρώτο πρόβλημα μπορεί να αντιμετωπιστεί με μια κατάλληλη αρχιτεκτονική επιλογή, ενώ το δεύτερο πρόβλημα είναι καθαρά πρόβλημα τεχνολογίας ημιαγωγών. Εδώ θα ασχοληθούμε κυρίως με το πρώτο πρόβλημα, δηλαδή με την επιλογή κατάλληλης αρχιτεκτονικής για την βελτίωση του εύρους ζώνης επικοινωνίας της μνήμης. Οι τρεις βασικές αρχιτεκτονικές επιλογές είναι (α) η βασική οργάνωση, (β) η ευρεία οργάνωση και (γ) η οργάνωση παρεμβολής όπως φαίνονται στο Σχήμα 18. Οι τρεις αυτές επιλογές που θα περιγραφούν παρακάτω δεν αφορούν συγκεκριμένα μνήμες DRAM ή μνήμες SRAM αλλά ισχύουν γενικά για οποιοδήποτε τύπο μνήμης. (α) Βασική Οργάνωση CPU (β) Ευρεία Οργάνωση CPU (γ) Οργάνωση παρεμβολής CPU Cache MUX Cache Cache MUX Μνήμη Μνήμη Τράπεζα Μνήμης 0 Τράπεζα Μνήμης 1 Τράπεζα Μνήμης 2 Τράπεζα Μνήμης 3 Σχήμα 18. Οι βασικές αρχιτεκτονικές της κύριας μνήμης.

Κεφάλαιο 3: Η ιεραρχία της μνήμης 63 3.3.2.1 Βασική Οργάνωση μνήμης. Η απλούστερη οργάνωση είναι η βασική η οποία δείχνεται στο Σχήμα 18α. Εδώ τόσο η μνήμη, όσο η cache, όσο και το bus δεδομένων της CPU έχουν το ίδιο εύρος, π.χ. 1word (= 32bits). Αυτό σημαίνει ότι η cache έχει εύρος επικοινωνίας με την CPU 1 word και η μνήμη με την cache πάλι 1 word. Αν υπάρξει μια αποτυχία της cache (cache-miss) και αν το block της cache έχει μέγεθος π.χ. 4 words, τότε χρειάζονται 4 κύκλοι μνήμης για την εξυπηρέτηση της αποτυχίας. 3.3.2.2 Ευρεία Οργάνωση μνήμης Η ευρεία οργάνωση που φαίνεται στο Σχήμα 18β έχει στόχο την αύξηση του εύρους ζώνης μεταξύ της cache και μνήμης. Τώρα η μνήμη μπορεί να δώσει ταυτόχρονα Ν words στην cache (για παράδειγμα Ν=4) οπότε μια αποτυχία της cache εξυπηρετείται σε 1 κύκλο μνήμης. Το εύρος ζώνης της CPU παραμένει σταθερό στο 1 word, οπότε χρησιμοποιείται ένας πολυπλέκτης (multiplexor MUX) μεταξύ cache και CPU για να επιλεγεί το ένα από τα Ν words που θα παραδοθεί τελικά στη CPU. Το κόστος της οργάνωσης αυτής είναι η αύξηση του εύρους του καναλιού μεταξύ μνήμης και cache που λέγεται και memory bus. Εκεί που στην οργάνωση (α) το bus θα είχε 32 καλώδια δεδομένων συν τα καλώδια διεύθυνσης και ελέγχου, τώρα το bus θα έχει (για Ν=4) 128 καλώδια δεδομένων συν τον ίδιο αριθμό καλωδίων διεύθυνσης και ελέγχου. Περισσότερα καλώδια στο bus σημαίνει ότι το bus καταλαμβάνει μεγαλύτερο χώρο στην κάρτα, και απαιτείται γενικά πιο ακριβή σχεδίαση. Απ την άλλη μεριά το σημαντικό πλεονέκτημα της οργάνωσης αυτής είναι η αύξηση του εύρους ζώνης του bus που μεταφράζεται σε ταχύτερη εξυπηρέτηση μιας αποτυχίας της cache. 3.3.2.3 Οργάνωση παρεμβολής Μια ενδιάμεση λύση μεταξύ της οργάνωσης (α) και (β) είναι η οργάνωση παρεμβολής (interleaved memory organization) που φαίνεται στο Σχήμα (3.7γ). Στην περίπτωση αυτή η cache επικοινωνεί τόσο με την CPU όσο και με την μνήμη με εύρος καναλιού 1 word όπως και στην περίπτωση (α). Ωστόσο, σε αντίθεση με την περίπτωση (α), η μνήμη είναι χωρισμένη σε τμήματα που λέγονται Τράπεζες Μνήμης (Memory Banks) τα οποία μπορούν να προσπελασθούν παράλληλα. Οι τράπεζες είναι οργανωμένες με τέτοιο τρόπο ώστε να φυλάσσουν διαδοχικές θέσεις μνήμης όπως φαίνεται στο παρακάτω Σχήμα: η τράπεζα 0 φυλάσσει τη διεύθυνση 0, η τράπεζα 1 τη διεύθυνση 1, η τράπεζα 2 τη διεύθυνση 2, η τράπεζα 3 τη διεύθυνση 3, και ξανά η τράπεζα 0 τη διεύθυνση 4, η τράπεζα 1 τη διεύθυνση 5, και ούτω καθεξής. Με άλλα λόγια μεταξύ δύο διαδοχικών διευθύνσεων στην ίδια τράπεζα μνήμης παρεμβάλλονται 3 διευθύνσεις οι οποίες φυλάσσονται στις άλλες τράπεζες. Έτσι η τράπεζα 0 φυλάσσει όλες τις διευθύνσεις που είναι πολλαπλάσια του 4, η τράπεζα 1 φυλάσσει όλες τις διευθύνσεις που είναι πολλαπλάσια του 4 συν 1, η τράπεζα 1 φυλάσσει όλες τις διευθύνσεις που είναι πολλαπλάσια του 4 συν 2, και η τράπεζα 1 φυλάσσει όλες τις διευθύνσεις που είναι πολλαπλάσια του 4 συν 3.

Κεφάλαιο 3: Η ιεραρχία της μνήμης 64 Διεύθυνση 0=0000 4=0100 8=1000 12=1100 Διεύθυνση 1=0001 5=0101 9=1001 13=1101 Διεύθυνση 2=0010 6=0110 10=1010 14=1110 Διεύθυνση 3=0011 7=0111 11=1011 15=1111 Τράπεζα 0 Τράπεζα 1 Τράπεζα 2 Τράπεζα 3 Αν προσέξουμε την δυαδική αναπαράσταση των διευθύνσεων που φυλάσσει η κάθε τράπεζα θα δούμε ότι η τράπεζα 0 φυλάσσει όλες τις διευθύνσεις των οποίων τα δύο τελευταία bits είναι 00, η τράπεζα 1 φυλάσσει όλες τις διευθύνσεις των οποίων τα δύο τελευταία bits είναι 01, η τράπεζα 2 φυλάσσει όλες τις διευθύνσεις των οποίων τα δύο τελευταία bits είναι 10, και η τράπεζα 3 φυλάσσει όλες τις διευθύνσεις των οποίων τα δύο τελευταία bits είναι 11. Επίσης παρατηρούμε ότι τα δύο πρώτα bits της διεύθυνσης μας δείχνουν σε ποια γραμμή της τράπεζας βρισκόμαστε. Έτσι αν τα δύο πρώτα bits είναι 00 τότε είμαστε στην πρώτη γραμμή, αν είναι 01 είμαστε στη δεύτερη, κοκ. Γενικεύοντας, μπορούμε να πούμε ότι σε μια μνήμη με οργάνωση παρεμβολής και με Ν τράπεζες μνήμης, τα τελευταία log 2 N bits της διεύθυνσης μας λένε σε ποια τράπεζα βρίσκεται το δεδομένο που ζητάμε ενώ τα υπόλοιπα bits της διεύθυνσης μας λένε σε ποια θέση μέσα στην εν λόγω τράπεζα βρίσκεται το δεδομένο αυτό. Παράδειγμα. Έστω ότι έχουμε κύρια μνήμη συνολικού μεγέθους 4 Gbytes (=2 32 bytes) με 8 τράπεζες μνήμης. (Ο αριθμός των τραπεζών μνήμης λέγεται και συντελεστής παρεμβολής interleaving factor). Κάθε διεύθυνση στην κύρια μνήμη έχει μέγεθος 32 bits <a 0 a 1... a 31 >. Από αυτά τα 3 τελευταία bits <a 29 a 30 a 31 > (Least-Significant Bits) μας λένε σε ποια τράπεζα βρίσκεται το δεδομένο ενώ τα πρώτα 29 bits <a 0 a 1... a 28 > (Most-Significant Bits) μας λένε σε ποια θέση μέσα στην συγκεκριμένη τράπεζα βρίσκεται το δεδομένο. Κάθε τράπεζα έχει προφανώς μέγεθος 4/8 Gbytes = 500 Mbytes = 2 29 bytes οπότε τα πρώτα 29 bits της διεύθυνσης είναι ακριβώς όσα χρειάζονται για να δείξουν οποιοδήποτε byte μέσα σε μια τράπεζα. Τα bits της διεύθυνσης <a 0 a 1... a 28 > χρησιμοποιούνται για να καλέσουν ταυτόχρονα και τις 8 τράπεζες ενώ τα bits <a 29 a 30 a 31 > χρησιμοποιούνται σαν σήματα ελέγχου στον πολυπλέκτη μεταξύ μνήμης και cache για να γίνει η επιλογή του κατάλληλου byte από τα 8 που κλήθηκαν. Το κέρδος της οργάνωσης παρεμβολής σε σχέση με τη βασική οργάνωση είναι ότι Ν bytes διαβάζονται ταυτόχρονα από Ν διαδοχικές θέσεις μνήμης. Επειδή τα blocks στην cache αποτελούνται από διαδοχικά bytes η παράλληλη ανάκλησή τους μειώνει το χρόνο προσπέλασης. Βέβαια και πάλι ένα-ένα byte θα σταλεί στην cache αλλά ο χρόνος ανάγνωσης θα είναι ίσος με ένα μόνο κύκλο μνήμης (αφού τα bytes διαβάζονται παράλληλα) και όχι Ν κύκλοι μνήμης όπως θα συνέβαινε στην βασική οργάνωση.

Κεφάλαιο 3: Η ιεραρχία της μνήμης 65 3.3.2.4 Παράδειγμα: Σύγκριση μεταξύ των διαφόρων οργανώσεων μνήμης. Έστω ότι ένας επεξεργαστής έχει κύκλο 0.5 nsec, δηλαδή λειτουργεί σε συχνότητα ρολογιού 2 GHz. Έστω επίσης ότι η μνήμη και το bus έχουν τα εξής χαρακτηριστικά: απαιτείται χρόνος 1 nsec = 2 ΚΕ (Κύκλοι Επεξεργαστή) για να μπει μια νέα διεύθυνση στο bus ο κύκλος της μνήμης είναι 20 nsec = 40 ΚΕ απαιτείται χρόνος 1 nsec = 2 ΚΕ για να μεταδοθούν τα δεδομένα από τη μνήμη στο bus Τα block της cache έχουν μέγεθος 4 words (α) Αν η μνήμη ακολουθεί τη βασική οργάνωση τότε το κόστος αποτυχίας της cache είναι ίσο με το χρόνο που απαιτείται για να γίνει η ανάγνωση 4 words από την κύρια μνήμη στην cache. Υποθέτουμε ότι η cache και η μνήμη επικοινωνούν με δίαυλο 1 word οπότε [Κόστος Αποτυχίας cache] = 4 (1+20+1) nsec = 88 nsec = 176 ΚΕ (β) Αν η μνήμη έχει ευρεία οργάνωση με δίαυλο εύρους 4 words μεταξύ μνήμης και cache τότε το κόστος αποτυχίας της cache είναι [Κόστος Αποτυχίας cache] = 1 (1+20+1) nsec = 22 nsec = 44 ΚΕ Αν ο δίαυλος μεταξύ μνήμης και cache είναι εύρους 2 words τότε το κόστος αποτυχίας της cache είναι [Κόστος Αποτυχίας cache] = 2 (1+20+1) nsec = 44 nsec = 88 ΚΕ (γ) Αν η μνήμη ακολουθεί την οργάνωση παρεμβολής με 4 τράπεζες μνήμης τότε το κόστος αποτυχίας της cache είναι ίσο με το εξής άθροισμα: [χρόνος τοποθέτησης της διεύθυνσης στη μνήμη] + [χρόνος προσπέλασης της μνήμης] + 4 [χρόνος μετάδοσης δεδομένων από την μνήμη στο bus], δηλαδή [Κόστος Αποτυχίας cache] = 1 + 20 + 4 1 nsec = 25 nsec = 50 ΚΕ Συμπέρασμα: την καλύτερη επίδοση (22 nsec) έχει η ευρεία αρχιτεκτονική με εύρος διαύλου 4 words. Κατόπιν έρχεται η αρχιτεκτονική παρεμβολής με (25 nsec) και ακολουθούν η ευρεία αρχιτεκτονική με εύρος 2 words (44 nsec) και η βασική αρχιτεκτονική (176 nsec). Ωστόσο η ευρεία αρχιτεκτονική έχει το μεγαλύτερο κόστος ενώ η αρχιτεκτονική παρεμβολής έχει μικρότερο κόστος αφού το εύρος του bus είναι στην περίπτωση αυτή 1 word. Αν η επίδοση της μνήμης δεν είναι τόσο κρίσιμη στην εφαρμογή μας όσο το κόστος τότε επιλέγουμε την αρχιτεκτονική παρεμβολής. Αν όμως η επίδοση είναι απολύτως σημαντική τότε επιλέγουμε την ευρεία οργάνωση. Τέλος επιλέγουμε την βασική αρχιτεκτονική αν το κόστος είναι το μόνο πράγμα που μας ενδιαφέρει ουσιαστικά.

Κεφάλαιο 3: Η ιεραρχία της μνήμης 66 3.3.3 Ειδικές τεχνικές για DRAM Όπως είδαμε και στην αρχή της ενότητας αυτής η κλήση στην DRAM περιέχει τρεις φάσεις: την επιλογή γραμμής, την επιλογή στήλης, και την ανάγνωση των δεδομένων. Νεώτερες DRAM έρχονται σε βελτιωμένες εκδόσεις όπου σε ένα κύκλο μπορεί να γίνει ανάγνωση ή εγγραφή περισσότερων του ενός bits. Μερικές από τις βελτιώσεις αυτές περιγράφονται παρακάτω: Nibble mode (nibble = μισό byte). Μια DRAM με nibble mode μπορεί να διαβάσει ή να γράψει 4 bits αρκεί αυτά να βρίσκονται στην ίδια σειρά και να είναι διαδοχικά. Page mode. Μια DRAM σε page mode μπορεί να διαβάσει ή να γράψει Ν μη διαδοχικά bits αρκεί αυτά να βρίσκονται στην ίδια γραμμή (συνήθως Ν=4 ή 8). Το διάγραμμα χρονισμού φαίνεται στο Σχήμα 19. Στατική στήλη. Μια DRAM με στατική στήλη λειτουργεί ακριβώς σαν μια DRAM σε page mode. H μόνη διαφορά είναι ότι στο διάγραμμα χρονισμού το σήμα CAS παραμένει σταθερό μεταξύ δύο RAS. Όπως ακριβώς και στο page mode έτσι κι εδώ μπορούμε να διαβάσουμε Ν μη διαδοχικά τυχαία bits από την ίδια γραμμή. RAS CAS ROW COL DATA Α Β0 Γ0 Β1 Γ1 Β2 Γ2 Β3 Γ3 Α Σχήμα 19. Διάγραμμα χρονισμού DRAM σε Page mode. Κατά τη φάση Α διαβάζεται η γραμμή (ROW). Κατά τις φάσεις Β0, Β1, Β2, Β3 γίνεται ανάγνωση κι από μιας διαφορετικής στήλης ενώ στις φάσεις Γ0, Γ1, Γ2, και Γ3 γίνεται η ανάγνωση ή η εγγραφή του αντίστοιχου bit. Έτσι όλα τα bit βρίσκονται στην ίδια γραμμή αλλά σε διαφορετικές στήλες. 3.4 Εικονική μνήμη (virtual memory) Συχνά τα διάφορα προγράμματα που εκτελούνται στον υπολογιστή καταλαμβάνουν στο σύνολό τους χώρο μνήμης μεγαλύτερο από το χώρο της κύριας μνήμης που διαθέτει ο υπολογιστής. Το πρόβλημα ήταν ιδιαίτερα οξύ στις πρώτες γενιές υπολογιστών όπου η κύρια μνήμη ήταν πολύ ακριβή και ως εκ τούτου μικρή σε μέγεθος. Αλλά ακόμα και

Κεφάλαιο 3: Η ιεραρχία της μνήμης 67 σήμερα που η μνήμη είναι σχετικά φτηνή και έχει αρκετά μεγάλη χωρητικότητα έτσι ώστε να χωράει ακόμα και το πιο μεγάλο πρόγραμμα, η εικονική μνήμη εξακολουθεί να χρησιμοποιείται αφού ένας τυπικός υπολογιστής εκτελεί πολλά προγράμματα ταυτόχρονα. Για παράδειγμα οι βασικές υπορουτίνες του λειτουργικού συστήματος αποθηκεύονται μόνιμα στην κύρια μνήμη καταλαμβάνοντας ένα συνήθως μη-αμελητέο χώρο. Έτσι τα υπόλοιπα προγράμματα που τρέχει ο χρήστης περιορίζονται στον υπόλοιπο χώρο που μένει ελεύθερος. Η εικονική μνήμη χρησιμοποιεί τον σκληρό δίσκο του υπολογιστή σα δευτερεύοντα χώρο αποθήκευσης της κύριας μνήμης. Έτσι αν ένα πρόγραμμα δε χωράει όλο στην κύρια μνήμη, τοποθετείται ένα μέρος του στο δίσκο. Ωστόσο το τμήμα του προγράμματος που περιέχει την εντολή η οποία εκτελείται αυτή τη στιγμή πρέπει να βρίσκεται υποχρεωτικά στην κύρια μνήμη. Έτσι ο δίσκος χρησιμοποιείται ουσιαστικά σαν ένα είδος πιο αργής μνήμης. 3.4.1 Κατάτμηση της εικονικής μνήμης Η εικονική μνήμη χωρίζεται σε πολλά μικρά κομμάτια με σκοπό την καλύτερη διαχείριση των προγραμμάτων που αποθηκεύονται εν μέρει στην κύρια μνήμη και εν μέρει στο δίσκο. Αν τα κομμάτια αυτά δεν έχουν σταθερό μέγεθος καλούνται τμήματα (segments) ενώ αν έχουν σταθερό μέγεθος καλούνται σελίδες (pages). Μια εικονική μνήμη είτε αποτελείται ολόκληρη από πολλές σελίδες είτε αποτελείται από τμήματα, όχι όμως και απ' τα δύο. Με άλλα λόγια δεν υπάρχει μικτή εικονική μνήμη που να περιέχει και τμήματα και σελίδες. Κάθε πρόγραμμα που εκτελείται κόβεται και αυτό σε τμήματα ή σελίδες ανάλογα με το είδος της εικονικής μνήμης. Για παράδειγμα, στο Σχήμα 20 φαίνεται το σχεδιάγραμμα μιας μικρής εικονικής μνήμης κομμένης σε σελίδες μεγέθους 4Kbytes. Η εικονική μνήμη στα αριστερά του Σχήματος έχει μέγεθος 32K, αποτελείται δηλαδή από 8 σελίδες (84K=32K). Αντίθετα η κύρια μνήμη που καλείται πλέον φυσική μνήμη έχει μέγεθος 20K, αποτελείται δηλαδή από 5 σελίδες. Πέντε από τις οχτώ σελίδες της εικονικής μνήμης κατοικούν στην φυσική μνήμη (στο Σχήμα είναι οι σελίδες E, C, A, G, F) ενώ οι υπόλοιπες τρεις σελίδες κατοικούν στο δίσκο (οι B, D, H). Όπως είναι φανερό η σειρά με την οποία φυλάσσονται οι σελίδες στην εικονική μνήμη δεν είναι η ίδια με τη σειρά που φυλάσσονται στην φυσική μνήμη ή στον δίσκο. Έτσι για παράδειγμα η εικονική διεύθυνση της σελίδας C είναι 8K ενώ η φυσική της διεύθυνση είναι 4K, κλπ.

Κεφάλαιο 3: Η ιεραρχία της μνήμης 68 Εικονική διεύθυνση 0K 4K 8K 12K 16K 18K 24K 28K Εικονική μνήμη Α Β C D E F G H Φυσική διεύθυνση 0K 4K 8K 12K 16K Φυσική μνήμη E C A G F Β D H Σκληρός δίσκος Σχήμα 20. Κατάτμηση της εικονικής μνήμης σε σελίδες μεγέθους 4Kbytes και τακτοποίηση των σελίδων είτε στην φυσική μνήμη είτε στο δίσκο. Ένα παρόμοιο σχεδιάγραμμα θα είχαμε και στην περίπτωση μιας τμηματικής εικονικής μνήμης, μόνο που στην περίπτωση αυτή τα διάφορα τμήματα δεν θα είχαν σταθερό μέγεθος 4K αλλά το κάθε τμήμα θα είχε διαφορετικό. Εναλλακτικά υπάρχει και μια τρίτη υβριδική μέθοδος κατάτμησης της μνήμης που καλείται σελιδοποιημένη τμηματοποίηση και τα κομμάτια της μνήμης καλούνται σελιδοποιημένα τμήματα (paged segments). Κατά τη μέθοδο αυτή υπάρχουν σελίδες διαφορετικών μεγεθών αλλά περιορισμένης ποικιλίας. Για παράδειγμα στον DEC Alpha, υπάρχουν 4 είδη σελίδων με μέγεθος 8K, 64K, 512K, και 4096K. Έτσι όλες οι σελίδες δεν έχουν το ίδιο μέγεθος αλλά ούτε κι επιτρέπονται όλα τα μεγέθη παρά μόνο τα συγκεκριμένα τέσσερα. Παρακάτω θα συγκρίνουμε τα θετικά και τα αρνητικά στοιχεία της κάθε μεθόδου. Σύγκριση μεταξύ "σελιδοποίησης" και "τμηματοποίησης" Ο επεξεργαστής εκδίδει εικονικές διευθύνσεις στο bus διευθύνσεων και αυτές μεταφράζονται σε φυσικές διευθύνσεις κύριας μνήμης ή διευθύνσεις στο δίσκο μέσα από ένα ειδικό τμήμα του υλικού. Συνήθως το bus διευθύνσεων έχει μέγεθος 32 bits (=1 word). Αν η εικονική μνήμη είναι σελιδοποιημένη και έχει μέγεθος μικρότερο από 4 Gbytes (2 32 = 4 δισεκατομμύρια) τότε αρκεί 1 word για να μας δώσει την εικονική διεύθυνση του δεδομένου. Αν όμως η εικονική μνήμη είναι τμηματοποιημένη τότε χρειαζόμαστε 2 words: 1 word για να μας δείξει το τμήμα, και 1 word για να μας δείξει την εσωτερική διεύθυνση του δεδομένου μέσα στο τμήμα (offset).