Το τμήμα του λειτουργικού συστήματος που διαχειρίζεται τη μνήμη λέγεται διαχειριστής μνήμης (memory manager). Μεταξύ άλλων, ο διαχειριστής της μνήμης παρακολουθεί ποια τμήματα της μνήμης είναι σε χρήση και ποια όχι.
Ανταλλαγή (Swapping)
Για να εκτελεστεί ένα πρόγραμμα πρέπει τόσο ο εκτελέσιμος κώδικάς του, όσο και τα δεδομένα του να έχουν φορτωθεί στην κύρια μνήμη. Ένας υπολογιστής συνήθως εξυπηρετεί ταυτόχρονα ένα σύνολο προγραμμάτων που για να εκτελεσθούν θα πρέπει να βρίσκονται στην κύρια μνήμη. Έτσι, συνήθως υπάρχουν προγράμματα που δε μπορούν να χωρέσουν ταυτόχρονα στην κύρια μνήμη. Τα προγράμματα αυτά βρίσκονται αποθηκευμένα στο δίσκο και, για να εκτελεσθούν, πρέπει πρώτα να έρθουν στην κύρια μνήμη. Για να φορτωθούν στην κύρια μνήμη πρέπει να ελευθερωθεί χώρος από κάποιο άλλο πρόγραμμα που θα μεταφερθεί με τη σειρά του στο δίσκο.
Η παραπάνω διαδικασία της μεταφοράς διεργασιών ονομάζεται ανταλλαγή (swapping). Βασικό μειονέκτημα της ανταλλαγής των διεργασιών είναι οι διάφορες χρονικές καθυστερήσεις που δημιουργούνται.
Τμήματα (Segments)
Τα λειτουργικά συστήματα των υπολογιστών επιτρέπουν τη διαίρεση των προγραμμάτων σε τμήματα. Τα τμήματα (segments) είναι υποσύνολα προγραμμάτων που μπορούν να φορτωθούν στη μνήμη ανεξάρτητα από το κύριο πρόγραμμα.
- Συνεχόμενη καταχώρηση (Single continuous allocation)
Η απλούστερη τεχνική διάθεσης μνήμης είναι αυτή στην οποία κάθε φορά έχουμε ένα μόνο πρόγραμμα στη μνήμη, το οποίο μπορεί να τη χρησιμοποιεί στο σύνολό της. Η μνήμη διαμοιράζεται ανάμεσα στο λειτουργικό σύστημα και σε ένα μόνο πρόγραμμα του χρήστη. Όταν το πρόγραμμα τελειώσει η μνήμη ελευθερώνεται.
- Διαβαθμισμένη καταχώρηση (Partitioned allocation)
Όσα συστήματα υποστηρίζουν πολυπρογραμματισμό επιτρέπουν πολλά προγράμματα να είναι ταυτόχρονα αποθηκευμένα στη μνήμη.
Η τμηματική διάθεση μνήμης είναι η απλούστερη τεχνική που μπορεί να υποστηρίξει πολυπρογραμματισμό. Η μνήμη χωρίζεται σε περιοχές ή χωρίσματα (partitions) και κάθε πρόγραμμα καταλαμβάνει από μια περιοχή. Ο διαχειριστής μνήμης αναζητά, για κάθε πρόγραμμα που φορτώνεται, μια αρκετά μεγάλη περιοχή (χώρισμα) της μνήμης που να το χωράει.
1.Στατικός προσδιορισμός των περιοχών (Staticpartitionspecification)
Ο απλούστερος τρόπος να χωρίσουμε τη μνήμη σε άνισες συνήθως περιοχές (partitions) είναι ο στατικός. Στην περίπτωση αυτή το μέγεθος της περιοχής αυτής παραμένει σταθερό καθόλη τη διάρκεια λειτουργίας του συστήματος.
Το βασικό μειονέκτημα της τεχνικής αυτής είναι ότι ένα μεγάλο μέρος της μνήμης μένει αχρησιμοποίητο, αφού οι περιοχές είναι σταθερού μεγέθους και οποιοδήποτε υπόλοιπο που δε χρησιμοποιείται από κάποιο πρόγραμμα, μένει αναξιοποίητο.
2.Δυναμικός προσδιορισμός των περιοχών (Dynamic partition specification)
Στη μέθοδο αυτή οι περιοχές είναι μεταβλητού μεγέθους. Ο αριθμός και το μέγεθος των περιοχών προσδιορίζεται κατά την εκτέλεση των προγραμμάτων, ώστε αυτές να καλύπτουν τις ανάγκες των συγκεκριμένων προγραμμάτων
Η ευελιξία που μας προσφέρεται στο δυναμικό προσδιορισμό των περιοχών, οφείλεται στο γεγονός ότι δε δεσμεύουμε τη μνήμη με σταθερό αριθμό περιοχών διαφορετικών μεγεθών (μικρών ή μεγάλων), όπως στο στατικό προσδιορισμό περιοχών. Έτσι αξιοποιούμε καλύτερα τις διάφορες περιοχές της μνήμης και αυξάνουμε την επίδοσή της.
Τα μειονεκτήματα της μεθόδου αυτής παρατηρούνται στους πολύπλοκους αλγόριθμους διάθεσης της μνήμης και παρακολούθησης των μεταβολών που συμβαίνουν σ? αυτή.
Εικονική μνήμη (Virtual memory)
Η εικονική μνήμη (virtual memory) βασίζεται στην ιδέα ότι το μέγεθος ενός προγράμματος και των δεδομένων του μπορεί να ξεπερνά τα όρια της διαθέσιμης φυσικής μνήμης που απαιτείται για τη φόρτωση και εκτέλεσή του.
Δύο σημαντικές χρήσεις της εικονικής μνήμης είναι να παρέχει στον προγραμματιστή ένα χώρο διευθύνσεων μεγαλύτερο από αυτόν της μηχανής του υπολογιστή και να επιτρέπει την εκτέλεση μιας διεργασίας ακόμα και αν αυτή δε βρίσκεται ολόκληρη στη μνήμη.
Τα περισσότερα συστήματα εικονικής μνήμης χρησιμοποιούν την τεχνική της σελιδοποίησης (paging) ή του τεμαχισμού (segmentation) ή συνδυασμού των δύο.
Σελιδοποίηση (Paging)
Η κύρια μνήμη (ο χώρος φυσικών διευθύνσεων) των υπολογιστών που χρησιμοποιούν σελιδοποίηση αποτελείται από ισομεγέθη τμήματα ορισμένου μήκους (μέγεθος σελίδας, page size) που ονομάζονται πλαίσια σελίδων (page frames) και το κάθε πρόγραμμα (ο χώρος εικονικών διευθύνσεων) θεωρείται ότι είναι διηρημένο σε σελίδες (pages) του ίδιου μεγέθους.
Τα πλαίσια σελίδων μπορούν να κατανεμηθούν στις διεργασίες που βρίσκονται στο
σύστημα, έτσι ώστε σε κάποια χρονική στιγμή μια διεργασία να έχει μερικές από τις σελίδες της (τις ενεργές της σελίδες, active pages) στην κύρια μνήμη και τις υπόλοιπες (τις μη ενεργές, inactive pages) στη βοηθητική μνήμη.
Για να υλοποιηθεί η σελιδοποίηση, το λειτουργικό σύστημα χρειάζεται να διατηρεί έναν πίνακα σελίδων (page table) για την κάθε διεργασία. Έτσι, ο πίνακας αυτός δείχνει, για κάθε σελίδα της εικονικής μνήμης, το πλαίσιο της σελίδας της φυσικής μνήμης που της αντιστοιχεί ή ότι η σελίδα βρίσκεται στη δευτερεύουσα μνήμη.
Η τεχνική της σελιδοποίησης επιτυγχάνει τη δυναμική μεταθεσιμότητα και εικονική μνήμη μεγάλης χωρητικότητας, που είναι δύο από τους σκοπούς της διαχείρισης της μνήμης που αναφέραμε παραπάνω.
Ένα μειονέκτημα της σελιδοποίησης είναι ο εσωτερικός κατακερματισμός (internal fragmentation), δηλαδή ότι η τελευταία σελίδα του προγράμματος δεν καλύπτει πλήρως το πλαίσιο της φυσικής μνήμης που τη “φιλοξενεί”.
Τεμαχισμός (Segmentation)
Όπως αναφέραμε, ένας σκοπός της διαχείρισης της μνήμης είναι η οργάνωση του προγράμματος σε δομοενότητες (modules). Ο σκοπός αυτός επιτυγχάνεται με την τεχνική του τεμαχισμού.
Ένας άλλος στόχος του τεμαχισμού είναι η αποφυγή του εσωτερικού κατακερματισμού, ώστε στο πρόγραμμα να δίνεται όση ακριβώς μνήμη του χρειάζεται.
Ο εικονικός χώρος διευθύνσεων του προγράμματος διαιρείται σε τμήματα διαφορετικού μεγέθους, που αντιστοιχούν στις δομοενότητες του προγράμματος, δηλαδή σε ομάδες υποπρογραμμάτων, ομάδες δομών δεδομένων κ.λπ.. Όπως και στη σελιδοποίηση, τα τμήματα δεν είναι απαραίτητο να καταλαμβάνουν συνεχόμενο χώρο στη μνήμη, ούτε να βρίσκονται όλα ταυτόχρονα σ? αυτήν.
Για κάθε διεργασία υπάρχει ένας πίνακας τμημάτων της διεργασίας. Κάθε στοιχείο του πίνακα περιέχει, μεταξύ άλλων, τη διεύθυνση της βάσης κάθε τμήματος (αρχική διεύθυνση στη μνήμη) και το μήκος του.
Τα όσα αναφέραμε για τη σελιδοποίηση ισχύουν και για τον τεμαχισμό, εκτός του ότι τα τμήματα έχουν διαφορετικά μεγέθη και μπορούν να είναι φορτωμένα σ? οποιοδήποτε σημείο της κύριας μνήμης (δηλαδή στην περίπτωση αυτή, η μνήμη δε θεωρείται διηρημένη σε πλαίσια). Το υλικό πραγματοποιεί την απεικόνιση μεταξύ των εικονικών διευθύνσεων των εντολών του προγράμματος και των φυσικών διευθύνσεων της κύριας μνήμης ως εξής:
Εκτός από τη λογική οργάνωση του προγράμματος σε δομοενότητες, η τεχνική του τεμαχισμού έχει επίσης το πλεονέκτημα ότι επιτρέπει την εύκολη υλοποίηση του (κατα) μερισμού κοινών τμημάτων, που βρίσκονται στη μνήμη, από περισσότερες της μίας διεργασίες.
Το βασικό μειονέκτημα του τεμαχισμού είναι ο εξωτερικός κατακερματισμός (external fragmentation) που προκύπτει από την ανταλλαγή τμημάτων διαφορετικού μεγέθους. Ο εξωτερικός κατακερματισμός είναι η εμφάνιση πολλών κενών (empty) περιοχών της μνήμης που ονομάζονται οπές (holes). Ένα άλλο μειονέκτημα είναι ότι το μέγιστο μέγεθος μιας δομοενότητας περιορίζεται από το μέγεθος της φυσικής μνήμης
Τεμαχισμός με Σελιδοποίηση (Paged Segmentation)
Σε όλους τους σύγχρονους υπολογιστές χρησιμοποιείται ένας συνδυασμός των δύο τεχνικών, η τεχνική του τεμαχισμού με σελιδοποίηση, γιατί συνδυάζει τα πλεονεκτήματα και των δύο μεθόδων. Επιπλέον, αποφεύγει το μειονέκτημα του τεμαχισμού ότι κάθε τμήμα καταλαμβάνει μια συνεχόμενη περιοχή στη μνήμη.
Στις μηχανές αυτές (paged segmented machines) η κύρια μνήμη θεωρείται χωρισμένη σε ισομεγέθη πλαίσια και ο εικονικός χώρος διευθύνσεων του προγράμματος διαιρείται σε τμήματα διαφορετικού μεγέθους που αντιστοιχούν στις λογικές δομοενότητες του προγράμματος. Το κάθε τμήμα αποτελείται από ισομεγέθεις σελίδες που έχουν το ίδιο μέγεθος με τα πλαίσια της μνήμης. Η κάθε εικονική διεύθυνση αποτελείται από έναν αριθμό τμήματος, έναν αριθμό σελίδας του τμήματος και έναν αριθμό λέξης μέσα στη σελίδα.
Το μειονέκτημα αυτής της μεθόδου είναι το αυξημένο κόστος του υλικού. Παρόλα αυτά η τεχνική αυτή χρησιμοποιείται στους περισσότερους σύγχρονους υπολογιστές, διότι συνδυάζει τα πλεονεκτήματα του τεμαχισμού και της σελιδοποίησης.