ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι Μάθημα: ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ Διδάσκοντες: Καθ. Κ. Λαμπρινουδάκης (clam@unipi.gr) Δρ. Α. Γαλάνη (agalani@unipi.gr) 1
ΜΕΓΕΘΟΣ ΣΕΛΙΔΑΣ To μέγεθος σελίδας είναι μία παράμετρος που μπορεί να επιλεγεί από το ΛΣ. π.χ. ακόμη και αν το υλικό έχει σχεδιαστεί με σελίδες των 4096byte, το ΛΣ μπορεί να θεωρήσει τα ζευγάρια σελίδων 0 & 1, 2 & 3, 4 & 5, κοκ. ως σελίδες των 8KB, εκχωρώντας 2 διαδοχικά πλαίσια σελίδας συνολικού μεγέθους 8192byte για κάθε μία από αυτές Για τον καθορισμό του βέλτιστου μεγέθους σελίδας πρέπει να εξισορροπούνται αρκετοί ανταγωνιστικοί παράγοντες=> δεν υπάρχει κάποια συνολική βέλτιστη Για την εξισορρόπηση των διαφορετικών αντικρουόμενων απαιτήσεων, τα ΛΣ κάποιες φορές χρησιμοποιούν διαφορετικά μεγέθη σελίδων για τα διάφορα μέρη του συστήματος (π.χ. μεγάλες σελίδες για τον πυρήνα και μιρότερες για τις διεργασίες χρήστη) 2
ΜΕΓΕΘΟΣ ΣΕΛΙΔΑΣ Πλεονεκτήματα Μικρό μέγεθος σελίδας Λιγότερη εσωτερική κατάτμηση (internal fragmentation) Διάφορες δομές δεδομένων χωράνε καλύτερα Λιγότερο αχρησιμοποίητο πρόγραμμα στην μνήμη Μειονεκτήματα Τα προγράμματα χρειάζονται περισσότερες σελίδες => μεγαλύτεροι πίνακες σελίδων Επιβάρυνση λόγω του πίνακα σελίδας και της εσωτερικής κατάτμησης 3
ΚΑΤΑΤΜΗΣΗ Η εικονική μνήμη μπορεί να μην είναι μονοδιάστατη (όπου οι εικονικές διευθύνσεις αρχίζουν από το 0 και συνεχίζονται μέχρι κάποια μέγιστη διεύθυνση, η μία μετά την άλλη) Σε πολλά προβλήματα είναι καλύτερο να υπάρχουν δύο ή περισσότεροι ξεχωριστοί εικονικοί χώροι διευθύνσεων, αντί μόνο για έναν => το σύστημα μπορεί να εφοδιαστεί με πολλούς ανεξάρτητους χώρους διευθύνσεων που καλούνται τμήματα (segments) To κάθε τμήμα αποτελείται από μια γραμμική ακολουθία διευθύνσεων που ξεκινά από το 0 και φτάνει μέχρι κάποια μέγιστη τιμή Τα διάφορα τμήματα μπορεί να έχουν διαφορετικό μήκος Η κατάτμηση (segmentation) επιτρέπει το διαχωρισμό της μνήμης μιας διεργασίας σε πολλά γραμμικά τμήματα. 4
ΚΑΤΑΤΜΗΣΗ Επειδή κάθε τμήμα αποτελεί έναν ξεχωριστό χώρο διευθύνσεων, τα διάφορα τμήματα μπορούν να αυξομειώνονται ανεξάρτητα χωρίς να αλληλοεπηρεάζονται 5
ΚΑΤΑΤΜΗΣΗ Αν η στοίβα σε κάποιο τμήμα χρειάζεται περισσότερο χώρο διευθύνσεων για να αναπτυχθεί, μπορεί να τον αποκτήσει διότι στον χώρο διευθύνσεων της δεν υπάρχει κάτι άλλο να την εμποδίζει Μπορεί βέβαια ένα τμήμα να γεμίσει αλλά τα τμήματα είναι συνήθως πολύ μεγάλα, και έτσι είναι σπάνιο να συμβεί κάτι τέτοιο Για να αναφερθεί σε μια διεύθυνση μέσα στην τμηματοποιημένη ή διδιάστατη μνήμη, το πρόγραμμα πρέπει να καθορίσει δύο στοιχεία της διεύθυνσης: Έναν αριθμό τμήματος (segment number) Mία διεύθυνση μέσα στο τμήμα 6
ΚΑΤΑΤΜΗΣΗ Η κατάτμηση επιτρέπει: την εύκολη μεταφορά του κώδικα. την προστασία των δεδομένων ανάλογα με τον τύπο τους. την υλοποίηση διαμοιραζομένων βιβλιοθηκών (shared libraries), όπου οι βιβλιοθήκες μπορούν να τοποθετηθούν σε ένα τμήμα και να είναι διαθέσιμη σε πολλές διεργασίες, χωρίς να χρειάζεται να βρίσκεται στους χώρους διευθύνσεων όλων των διεργασιών Η κατάτμηση υλοποιείται με βάση δομών στη μνήμη που καλούνται περιγραφείς (descriptors) και περιέχουν τα χαρακτηριστικά στοιχεία κάθε τμήματος (θέση στην πραγματική μνήμη, προστασία, μέγεθος). 7
ΚΑΤΑΤΜΗΣΗ -ΠΑΡΑΔΕΙΓΜΑ Ένας μεταγλωττιστής έχει πολλούς πίνακες που κατασκευάζονται καθώς προχωρά η μεταγλώττιση και περιλαμβάνει πιθανώς: Το κείμενο του πηγαίου κώδικα Τον πίνακα συμβόλων, ο οποίος περιέχει τα ονόματα και τις ιδιότητες των μεταβλητών Τον πίνακα που περιέχει όλες τις αριθμητικές σταθερές, τις ακέραιες σταθερές, και τις σταθερές κινητής υποδιαστολής Το δένδρο συντακτικής ανάλυσης, που περιέχει τη συντακτική ανάλυση του προγράμματος Τη στοίβα που χρησιμοποιείται για τις κλήσεις διαδικασιών μέσα στον μεταγλωττιστή Οι 4 πρώτοι πίνακες μεγαλώνουν καθώς προχωρά η μεταγλώττιση Ο τελευταίος αυξομειώνεται κατά τη διάρκεια της μεταγλώττισης με απρόβλεπτο τρόπο 8
ΣΕΛΙΔΟΠΟΙΗΣΗ vs ΚΑΤΑΤΜΗΣΗ ΣΕΛΙΔΟΠΟΙΗΣΗ ΚΑΤΑΤΜΗΣΗ Πόσοι γραμμικοί χώροι διευθύνσεων υπάρχουν; 1 Πολλοί Μπορεί ο συνολικός χώρος διευθύνσεων να υπερβαίνει το μέγεθος της φυσικής μνήμης; Μπορούν οι διαδικασίες και τα δεδομένα να είναιι διακριτά και να προστατεύονταιι ξεχωριστά; Είναι εύκολος ο χειρισμός πινάκων μεταβλητού μεγέθους; Ναι Όχι Όχι Ναι Ναι Ναι Διευκολύνεται η χρήση των διαδικασιών ανάμεσα στους χρήστες; Όχι Ναι Γιατί επινοήθηκε η τεχνική; Για να δημιουργηθεί μεγάλος και γραμμικός χώρος διευθύνσεων χωρίς να χρειάζεται να αγοραστεί πρόσθετη φυσική μνήμη Για να επιτραπεί στα προγράμματα και τα δεδομένα να χωρίζονται σε λογικά ανεξάρτητους χώρους διευθύνσεων, και να υποβοηθείται η κοινοχρησία και η προστασία 9
ΚΑΤΑΤΜΗΣΗ Διαφορά υλοποίησης κατάτμησης από σελιδοποίηση: οι σελίδες έχουν σταθερό μέγεθος ενώ τα τμήματα μεταβλητό Εξέλιξη του φαινομένου της σκακιεροποίησης (checkerboarding) ή εξωτερικής κατάτμησης (external fragmentation): αφού το σύστημα δουλέψει για λίγο, η μνήμη θα χωριστεί σε κομμάτια, μερικά από τα οποία θα περιέχουν τμήματα και άλλα οπές (holes) (=αχρησιμοποίητες περιοχές της μνήμης) Εξάλειψη της σκακιεροποίησης με σύμπτυξη 10
ΚΑΤΑΤΜΗΣΗ ΜΕ ΣΕΛΙΔΕΣ Αν τα τμήματα είναι μεγάλα τότε μπορεί να είναι άβολο ή αδύνατο να διατηρούνται ολόκληρα στη μνήμη -> ιδέα σελιδοποίησης: βρίσκονται στη μνήμη μόνο οι σελίδες που χρειάζονται πραγματικά Διάφορα ΛΣ υποστηρίζουν τα σελιδοποιημένα τμήματα MULTICS: ένα από τα ΛΣ που είχαν τη μεγαλύτερη επίδραση διαχρονικά σε διάφορα σημαντικά αντικείμενα Κάθε τμήμα λειτουργεί ως εικονική μνήμη, συνδυάζοντας τα πλεονεκτήματα της σελιδοποίησης (π.χ. ομοιόμορφο μέγεθος σελίδων, δεν είναι απαραίτητο να βρίσκεται ολόκληρο το τμήμα στη μνήμη αν χρησιμοποιείται μέρος του) με τα πλεονεκτήματα της κατάτμησης (εύκολος προγραμματισμός, αρθρωτή δομή, κοινή χρήση) 11
ΚΑΤΑΤΜΗΣΗ ΜΕ ΣΕΛΙΔΕΣ - MULTICS Kάθε πρόγραμμα στο MULTICS διέθετε έναν πίνακα τμημάτων (segment table), με έναν περιγραφέα (descriptor) ανά τμήμα Λόγω του μεγάλου αριθμού καταχωρήσεων στον πίνακα τμημάτων, ο πίνακας αποτελούσε και ο ίδιος τμήμα και γινόταν σελιδοποίηση και σε αυτόν Ο περιγραφέας τμήματος περιείχε μία ένδειξη για το αν το τμήμα βρισκόταν στην κύρια μνήμη ή όχι. Αν οποιοδήποτε κομμάτι του τμήματος βρισκόταν στη μνήμη, θεωρούνταν ότι το τμήμα βρισκόταν στην μνήμη, όπως και ο πίνακας σελίδων του. Όταν το τμήμα βρισκόταν στη μνήμη, ο περιγραφέας του περιείχε ένα δείκτη των 18bit προς τον πίνακα σελίδων του 12
ΚΑΤΑΤΜΗΣΗ ΜΕ ΣΕΛΙΔΕΣ - MULTICS Μία εικονική διεύθυνση (34bit) στο MULTICS είχε 2 μέρη: το τμήμα και τη διεύθυνση μέσα στο τμήμα. Η διεύθυνση μέσα στο τμήμα χωριζόταν περαιτέρω στον αριθμό της σελίδας και στη θέση μέσα στη σελίδα 13
ΚΑΤΑΤΜΗΣΗ ΜΕ ΣΕΛΙΔΕΣ - MULTICS Για τη μετατροπή μιας διμερούς διεύθυνσης του MULTICS σε διεύθυνση κύριας μνήμης, το ΛΣ εκτελούσε τον εξής αλγόριθμο: 1. Χρησιμοποιούσε τον αριθμό τμήματος για να βρει τον περιγραφέα του τμήματος 2. Γινόταν έλεγχος αν ο πίνακας σελίδων του τμήματος βρισκόταν στη μνήμη. Αν ναι, εντοπιζόταν η θέση του. Διαφορετικά, προέκυπτε σφάλμα τμήματος. Αν συνέβαινε παραβίαση προστασίας, προέκυπτε σφάλμα (παγίδευση) 3. Εξεταζόταν η καταχώριση του πίνακα σελίδων που αφορούσε τη ζητούμενη σελίδα. Αν η σελίδα δεν βρισκόταν στη μνήμη, προέκυπτε σφάλμα σελίδας. Αν η σελίδα βρισκόταν στη μνήμη, τότε εξαγόταν από τον πίνακα σελίδων η διεύθυνση της κύριας μνήμης που αντιστοιχούσε στην αρχή της σελίδας 4. Το σύστημα πρόσθετε τη σχετική διεύθυνση στη διεύθυνση της αρχής της σελίδας για να προσδιορίσει τη διεύθυνση της κύριας μνήμης στην οποία ήταν τοποθετημένη η λέξη 5. Τέλος, γινόταν η ανάγνωση ή εγγραφή 14