Λειτουργικά Συστήματα (Λ/Σ) Διαχείριση Μνήμης Βασίλης Σακκάς 6/12/2013 1
Διαχείριση Μνήμης 1 Το τμήμα του Λ/Σ που διαχειρίζεται τη μνήμη λέγεται Διαχειριστής Μνήμης (Memory manager). Καθήκον του είναι να παρακολουθεί ποια τμήματα της μνήμης είναι σε χρήση και ποια όχι, να χορηγεί μνήμη σε διεργασίες όποτε την χρειάζονται και την επαναχορηγεί σε άλλες όταν οι πρώτες ολοκληρώσουν την αποστολή του, καθώς και να διαχειρίζεται την εναλλαγή πληροφοριών (swapping) μεταξύ κύριας μνήμης και δίσκου όταν η κύρια μνήμη δεν είναι αρκετή για να εξυπηρετηθούν όλες οι διεργασίες. 2
Διαχείριση Μνήμης 2 Η μνήμη είναι μια συνεχής συλλογή από bits (σε ομάδες του byte 8 bits, 16, 32 ή 64- bits word) με καθορισμένες διευθύνσεις, που μοναδικά καθορίζουν το κάθε συγκεκριμένο τμήμα μνήμης 3
Διαχείριση Μνήμης 3 Kάθε πρόγραμμα για να εκτελεστεί από την ΚΜΕ χρειάζεται να πάρει θέση στη κύρια μνήμη, τόσο το ίδιο όσο και τα δεδομένα τα οποία χρησιμοποιεί. Τα λειτουργικά συστήματα που υποστηρίζουν πολυπρογραμματισμό έχουν τη δυνατότητα να έχουν τοποθετημένα περισσότερα του ενός προγράμματα ταυτόχρονα στη κύρια μνήμη. Το Λ/Σ, επομένως, παρακολουθεί σε κάθε χρονική στιγμή ποια προγράμματα βρίσκονται στη μνήμη καθώς και την ακριβή θέση τους σε αυτή. Η μνήμη είναι μία συνεχής συλλογή από δυαδικά ψηφία (bits) με καθορισμένες διευθύνσεις Το λειτουργικό σύστημα γνωρίζει την ακριβή θέση ενός προγράμματος στη μνήμη και μπορεί να μετατρέπει λογικές διευθύνσεις σε φυσικές διευθύνσεις. 4
Διαχείριση Μνήμης 4 Ένα πρόγραμμα είναι γεμάτο με αναφορές σε μεταβλητές και σε άλλα μέρη του κώδικα. Όταν το πρόγραμμα μεταγλωττίσει, αυτές οι αναφορές αλλάζουν σε διευθύνσεις στη μνήμη όπου τα δεδομένα και ο κώδικας υπάρχουν. Για να γίνει αυτό, χρειαζόμαστε δυο είδη διευθύνσεων. Η λογική διεύθυνση (γνωστή και ως νοητή ή σχετική διεύθυνση) είναι μια τιμή που προσδίδει μια γενική θέση, σχετική με ένα πρόγραμμα αλλά όχι με την κύρια μνήμη Κατά τη συγγραφή προγραμμάτων, ο προγραμματιστής γνωρίζει μόνο τη λογική διεύθυνση Είναι μια αναφορά σε μια αποθηκεμένη τιμή σχετική με το πρόγραμμα που κάνει τις αναφορές Η φυσική διεύθυνση είναι μια πραγματική διεύθυνση στην κύρια μνήμη. Το λειτουργικό σύστημα γνωρίζει την ακριβή θέση ενός προγράμματος στη μνήμη και μπορεί να μετατρέπει λογικές διευθύνσεις σε ακριβείς διευθύνσεις. 5
Διαχείριση Μνήμης 5 Όταν ένα πρόγραμμα μεταγλωττίσει, μια αναφορά σε π.χ. ένα όνομα μεταβλητής αλλάζει σε μια λογική διεύθυνση. Όταν το πρόγραμμα φορτωθεί στη μνήμη για να εκτελεστεί, κάθε λογική διεύθυνση αντιστοιχεί σε μια συγκεκριμένη φυσική διεύθυνση. 6
Διαχείριση Μνήμης 6 CPU RAM εδώ υπάρχει 0 1 2 3..1000 5000.. ένα πρόγραμμα (φυσική φυσικές διευθύνσεις διεύθυνση [1000 5000]) λογική διεύθυνση: 2 φυσική διεύθυνση: 1002 7
Διάχειριση Συνεχούς Μνήμης 1 μνήμη Υπάρχουν μόνο 2 προγράμματα στη μνήμη, κάθε χρονική στιγμή Το λειτουργικό σύστημα Ηεφαρμογή μόνο μια εφαρμογή εκτός του Λ/Σ. μπορεί να επεξεργαστεί κάθε φορά Αυτή η προσέγγιση ονομάζεται: Διαχείριση Συνεχούς Μνήμης ολόκληρο το πρόγραμμα της εφαρμογής φορτώνεται σε ένα μεγάλο κομμάτι της μνήμης. 8
Διαχείριση Συνεχούς Μνήμης 2 Μια λογική διεύθυνση είναι απλά μια αριθμητική τιμή σχετική με το σημείο εκκίνησης του προγράμματος. Δημιουργούνται «λες και» το πρόγραμμα φορτώνεται στη θέση 0 της κυρίας μνήμης. Για να προσδιορίσουμε τη φυσική διεύθυνση, απλά προσθέτουμε τη λογική διεύθυνση στη διεύθυνση του σημείου εκκίνησης του προγράμματος στη φυσική κύρια μνήμη φυσική διεύθυνση = λογική διεύθυνση + σημείο εκκίνησης προγράμματος 9
Διαχείριση Συνεχούς Μνήμης -3 σημείο εκκίνησης προγράμματος (φυσική διεύθυνση) π.χ. 555555 Διεύθυνση 0 Ηλογική διεύθυνση L (222222) (φυσική διεύθυνση) μεταφράζεται στη φυσική διεύθυνση A+L (777777) 10
Άλλοι Μέθοδοι Διαχείρισης Μνήμης Άλλοι τρόποι διαχείρισης μνήμης παρέχουν περισσότερη ευελιξία Διαμερισμένη μνήμη: η μνήμη είναι χωρισμένη σε κομμάτια σταθερού μεγέθους ή σε κομμάτια που το μέγεθός τους καθορίζεται από τις ανάγκες των προγραμμάτων Σελιδοποιημένη μνήμη: τα προγράμματα χωρίζονται σε σελίδες σταθερού μεγέθους που φυλάσσονται σε πλαίσια μνήμης όταν φορτώνονται στη μνήμη. 11
Διαχείριση Διαμοιρασμένης Μνήμης 1 Στητεχνικήαυτήηκύριαμνήμηείναιχωρισμένηείτεσετμήματα (partitions) σταθερού μεγέθους (fixed partitions) ή σε τμήματα των οποίων το μέγεθος καθορίζεται (dynamic partitions) από τις ανάγκες των προγραμμάτων. Κάθε φορά που ένα πρόγραμμα φορτώνεται στη κύρια μνήμη για να εκτελεστεί καταλαμβάνεται μόνο απαιτούμενος χώρος στην κύρια μνήμη. Αντίστοιχα με την ολοκλήρωση της εκτέλεσης κάποιου προγράμματος ο χώρος που αυτό καταλάμβανε απελευθερώνεται. Αν τα υπάρχοντα τμήματα στη μνήμη δεν επαρκούν για την τοποθέτηση του νέου προς εκτέλεση προγράμματος τότε το πρόγραμμα δεν μπορεί να εκτελεστεί. 12
Διαχείριση Διαμοιρασμένης Μνήμης 2 Σε περίπτωση που το προς εκτέλεση πρόγραμμα χωράει σε περισσότερα του ενός τμήματα τότε υπάρχουν τρεις διαφορετικές προσεγγίσεις σχετικά σε ποιο τμήμα θα τοποθετηθεί: Πρώτο ταίριασμα. Σε αυτή τη περίπτωση το πρόγραμμα τοποθετείται στο πρώτο τμήμα στο οποίο χωράει. Καλύτερο ταίριασμα. Σε αυτή τη περίπτωση το πρόγραμμα τοποθετείται στο μικρότερο τμήμα στο οποίο χωράει. Χειρότερο ταίριασμα. Σε αυτή τη περίπτωση το πρόγραμμα τοποθετείται στο μεγαλύτερο τμήμα μνήμης. 13
Διαχείριση Διαμοιρασμένης Μνήμης 3 Η δέσμευση μνήμης (ταύτιση λογικών με φυσικές διευθύνσεις) πραγματοποιείται με τον εξής μηχανισμό: Όταν κάποιο πρόγραμμα φορτωμένο στη κύρια μνήμη (διεργασία) πάρει σειρά εκτέλεσης από τη KME (δηλαδή περιέλθει σε κατάσταση running) τότε σε ένα καταχωρητή εντός της KME (καταχωρητής βάσης - base register) τοποθετείται η διεύθυνση αρχής του προγράμματος (διεύθυνση A στο παράδειγμα του σχήματος). Το μέγεθος του τμήματος μνήμης στο οποίο είναι αποθηκεμένο το πρόγραμμα (στο παράδειγμα του σχήματος η τιμή length) τοποθετείται σε ένα άλλο καταχωρητή εντός της KME (καταχωρητής ορίων - bounds register). Αφού ελεγχθεί ότι η λογική διεύθυνση βρίσκεται εντός του τμήματος (L < length) τότε η φυσική διεύθυνση προκύπτει από την άθροιση στη τιμής της λογικής διεύθυνσης (τιμή L) της τιμής που βρίσκεται στον καταχωρητή βάσης δίνοντας ως αποτέλεσμα τη φυσική διεύθυνση A+L. 14
Διαχείριση Σελιδοποιημένης Μνήμης Στητεχνικήαυτήηκύριαμνήμηείναιχωρισμένηείτεσεμικρά τμήματα (frames) σταθερού μεγέθους. Αντίστοιχα η μνήμη που απαιτούν τα προγράμματα είναι και αυτή χωρισμένη σε τμήματα, τα οποία ονομάζονται σελίδες (pages), συνήθως ιδίου μεγέθους όπως τα τμήματα της μνήμης. Τα προγράμματα φορτώνονται στη μνήμη ανά σελίδες οι οποίες τοποθετούνται, εν γένει, σε μη συνεχόμενα frames. Για κάθε πρόγραμμα δημιουργείται ένας πίνακας (Page-Map Table) ο οποίος περιλαμβάνει την αντιστοίχηση σελίδων με frames. Κάθε λογική διεύθυνση περιγράφεται από δύο αριθμούς (page,offset) τη σελίδα (page) στην οποία υπάγεται και τη θέση της εντός της σελίδας (offset). 15
Τεχνικές Διαχείρισης της Μνήμης Ποιο σκοπό έχουν οι διάφορες τεχνικές διαχείρισης της μνήμης Σκοπός των τεχνικών διαχείρισης της μνήμης είναι η καλύτερη αξιοποίηση της, λόγω του περιορισμένου μεγέθους της, και την αδυναμία της κύριας μνήμης να χωράει όλα τα προγράμματα μαζί. Τα συστήματα διαχείρισης μνήμης μπορούν να διαιρεθούν σε δύο κατηγορίες: σε αυτά που εναλλάσσουν διεργασίες μεταξύ κύριας μνήμης και δίσκου κατά την εκτέλεση τους, και σε αυτά που δεν εφαρμόζουν τέτοιες πρακτικές. Τα παλαιότερα συστήματα εκτελούσαν μόνο ένα πρόγραμμα σε κάθε χρονική στιγμή, ενώ η μνήμη διαμοιραζόταν ανάμεσα στο Λειτουργικό Σύστημα και στο συγκεκριμένο πρόγραμμα. Τα νεότερα συστήματα ακολουθούν τεχνικές εναλλαγής (swapping) και σελιδοποίησης (paging), που είναι τεχνητές οντότητες που επινοήθηκαν επειδή υπήρχε έλλειψη αρκετής κύριας μνήμης. 16
Ιεραρχία Μνήμης Πως είναι οργανωμένη η ιεραρχία της μνήμης; Ποιο είδος μνήμης βρίσκεται στην κορυφή της ιεραρχίας; Στην ιδανική περίπτωση θα θέλαμε μια απείρως μεγάλη και γρήγορη μνήμη, η οποία μάλιστα να είναι μη πτητική, δηλαδή να μη χάνει τα περιεχόμενα της όταν διακόπτεται η παροχή ρεύματος. υστυχώς όμως δεν υπάρχει τέτοια μνήμη. Οι περισσότεροι υπολογιστές διαθέτουν κάποια Ιεραρχία Μνήμης, δηλαδή μια μικρή ποσότητα ταχύτατης, πανάκριβης, πτητικής κρυφής μνήμης, δεκάδες Megabyte από,μνήμη μέσης ταχύτητας και μέσου κόστους (η κύρια μνήμη RAM), και δεκάδες ή εκατοντάδες Gigabyte αργού, φτηνού, μη πτητικού αποθηκευτικού χώρου (σκληρός δίσκος). Το Λ/Σ έχει σκοπό να συντονίζει όλες αυτές τις μνήμες. 17
Ιεραρχία Μνήμης 2 Σε μια τυπική ιεραρχία μνήμης, στο ανώτερο επίπεδο βρίσκονται οι καταχωρητές της ΚΜΕ, οι οποίοι χρησιμοποιούνται για την προσωρινή αποθήκευση εντολών και δεδομένων. Η ταχύτητα των καταχωρητών είναι πολύ υψηλή (ίση με τη ταχύτητα του επεξεργαστή), η χωρητικότητά τους είναι πολύ μικρή ενώ το κόστος κατασκευής των καταχωρητών είναι υψηλό. Ακολουθεί η κρυφή μνήμη η οποία διαθέτει ταχύτητα μεγαλύτερη από εκείνη της κύριας μνήμης. Η κρυφή μνήμη αξιοποιεί την αρχή της τοπικότητας της αναφοράς και περιέχει αντίγραφα τμημάτων της κύριας μνήμης, με σκοπό τη γρήγορη τροφοδότηση του επεξεργαστή με τα δεδομένα που χρειάζεται. Συνήθως υλοποιείται με ψηφίδες στατικής μνήμης (SRAM). Ακολουθεί η κύρια μνήμη, η οποία υλοποιείται με ψηφίδες δυναμικής μνήμης (DRAM), οι οποίες χαρακτηρίζονται από μεγαλύτερο χρόνο προσπέλασης και μικρότερο κόστος ανά μονάδα αποθηκευμένης πληροφορίας. Οι μαγνητικοί και οι οπτικοί δίσκοι τοποθετούνται στα δύο επόμενα επίπεδα, ενώ στη βάση συναντούμε τις μονάδες μαγνητικών ταινιών, με κύρια χρήση τη μόνιμη και ασφαλή αποθήκευση μεγάλου όγκου δεδομένων, αλλά και τη διατήρηση αντιγράφων ασφαλείας. Λόγω των ηλεκτρομηχανικών διαδικασιών προσπέλασης στα δεδομένα, η ταχύτητα προσπέλασης είναι σχετικά χαμηλή. Οι μαγνητικοί δίσκοι προσφέρονται για την υλοποίηση του μηχανισμού της εικονικής μνήμης. 18
Ιδεατή Μνήμη Για να εκτελεστεί ένα πρόγραμμα είναι απαραίτητο να φορτωθεί στην κύρια μνήμη του υπολογιστή. Όταν το πρόγραμμα είναι μικρότερο από το μέγεθος της κύριας μνήμης, τότε δεν υπάρχει κανένα πρόβλημα. Πρόβλημα υπάρχει, όταν το πρόγραμμα είναι μεγαλύτερο από την κύρια μνήμη ή από το τμήμα της κύριας μνήμης που διατίθεται γι αυτό, στην περίπτωση του πολυπρογραμματισμού. Στα σύγχρονα συστήματα υπολογιστών χρησιμοποιείται η τεχνική της ιδεατής μνήμης, η οποία υλοποιείται με τη χρήση ενός τμήματος του σκληρού δίσκου σαν μία λογική επέκταση της κύριας μνήμης. Το Λειτουργικό Σύστημα σε συνεργασία με το κατάλληλο υλικό κρατάει στην κύρια μνήμη εκείνα τα τμήματα του προγράμματος που χρησιμοποιούνται και τα υπόλοιπα τα διατηρεί στοσκληρόδίσκο. Τα τμήματα αυτά μεταφέρονται στην κύρια μνήμη, όταν ζητηθούν. Αντίστοιχα τμήματα της κύριας μνήμης μπορούν να μεταφερθούν στο δίσκο, όταν δε χρησιμοποιούνται. Για την επιλογή των τμημάτων που θα μεταφερθούν χρησιμοποιούνται ειδικοί αλγόριθμοι. Η διαδικασία αυτή ονομάζεται εναλλαγή (swapping). Η τεχνική αυτή απαλλάσσει τον προγραμματιστή από την ανάγκη να χωρίσει το πρόγραμμα του σε τμήματα ικανά να μεταφερθούν σε συγκεκριμένο μέγεθος της κύριας μνήμης. Τα προγράμματά χρησιμοποιούν ιδεατές διευθύνσεις, δηλαδή απευθύνονται σε μία ιδεατή μνήμη η οποία έχει πολύ μεγαλύτερο μέγεθος από την κύρια μνήμη ενός υπολογιστή. Όταν το πρόγραμμα εκτελεστεί, τότε το Λειτουργικό Σύστημα με τη συνεργασία του υλικού αναλαμβάνει να μετατρέψει τις ιδεατές διευθύνσεις σε πραγματικές. 19
Κατάτμηση (segmentation) Η Κατάτμηση (segmentation) είναι ένα σχήμα διαχείρισης της μνήμης που υποστηρίζει την άποψη του χρήστη για τη μνήμη. Η κατάτμηση επιτρέπει το διαχωρισμό της μνήμης μιας διεργασίας σε πολλά γραμμικά τμήματα. Τα τμήματα αυτά για κάθε διεργασία μπορούν να περιέχουν: Τον κώδικα Τη στοίβα Τα αρχικοποιημένα δεδομένα Το χώρο ανάπτυξης της δυναμικής μνήμης Η κατάτμηση επιτρέπει: την εύκολη μεταφορά του κώδικα, αφού κάθε τμήμα του εκφράζεται σχετικά με την αρχή του τμήματος. την προστασία των δεδομένων ανάλογα με τον τύπο τους. Πχ Κώδικας Αρχικοποιημένα δεδομένα Σωρός υναμική μνήμη Μόνο εκτέλεση Μόνο ανάγνωση Ανάγνωση και εγγραφή Ανάγνωση και εγγραφή Την υλοποίηση διαμοιραζομένων βιβλιοθηκών (shared libraries) Η κατάτμηση υλοποιείται με βάση δομών στη μνήμη που καλούνται περιγραφείς (descriptors) και περιέχουν τα χαρακτηριστικά στοιχεία κάθε τμήματος (θέση στην πραγματική μνήμη, προστασία, μέγεθος). 20
Λογική άποψη της κατάτμησης 1 2 1 4 3 4 2 3 Χώρος χρήστη Χώρος φυσικών διευθύνσεων 21
Παράδειγμα κατάτμησης 22
Διαμοιρασμός τμημάτων 23