Διαχείριση μνήμης
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Απλή διαχείριση μνήμης
Η διαχείριση μνήμης (memory managemenr)
επιτρέπει στο λειτουργικό σύστημα την καλύτερη δυνατή
κατανομή μνήμης ανάμεσα σε διεργασίες.
Σε συστήματα που εξυπηρετούν μια διεργασία η μνήμη μπορεί να
οργανωθεί ως εξής:
Πρόγραμμα χρήστη |
Λειτουργικό σύστημα στη RAM |
Λειτουργικό σύστημα σε ROM |
Πρόγραμμα χρήστη |
Οδηγοί συσκευών σε ROM (BIOS) |
Πρόγραμμα χρήστη |
Λειτουργικό σύστημα σε RAM |
- Προλυπρογραμματιστικά συστήματα μπορούν να διαχειριστούν τη
μνήμη σε σταθερά τμήματα.
- Η αύξηση της μνήμης αυξάνει την αξιοποίηση του επεξεργαστή αυξάνοντας
το βαθμό πολυπρογραμματισμού.
- Η διαχείριση της μνήμης μπορεί να επιτευχθεί με το διαχωρισμό της
σε σταθερά τμήματα.
Οι εργασίες για τα τμήματα αυτά μπορούν να επιλέγονται:
- από μια ουρά για όλα τα τμήματα.
- από μια ουρά ανά τμήμα ανάλογα με το μέγεθός του.
- Η μετατόπιση (relocation) επιτρέπει σε προγράμματα
και δεδομένα να εκτελούνται αδιάφορα από το τμήμα της μνήμης στο οποίο
έχουν φορτωθεί.
- Η προστασία (protection) απομονώνει τις διαφορετικές
διεργασίες.
Το λειτουργικό σύστημα διασφαλίζει ότι
κάθε διεργασία απαγορεύει σε άλλες διεργασίες την πρόσβαση στη μνήμη της.
Αυτό μπορεί να επιτευχθεί με τη χρήση ειδικών καταχωρητών:
Εναλλαγή
Η εναλλαγή (swapping)
μέσω της μετακίνησης διεργασιών από τη μνήμη στο δίσκο και
αντίστροφα επιτρέπει την ταυτόχρονη εκτέλεση περισσοτέρων
διεργασιών απ' όσες χωράν στην κεντρική μνήμη.
Σε συστήματα που βασίζονται σε εναλλαγή η διαχείριση της
μνήμης γίνεται με βάση μεταβλητά τμήματα.
Καταμερισμός μνήμης
Η διαχείριση της μνήμης μπορεί να γίνει με:
Η επιλογή του τμήματος της μνήμης από τη λίστα μπορεί
να γίνει με ένα από τα παρακάτω κριτήρια:
Ιδεατή μνήμη
Η ιδεατή μνήμη (virtual memory)
παρουσιάζει στις διεργασίες παραπάνω μνήμη από αυτή
που διαθέτει το σύστημα.
Αυτό γίνεται χρησιμοποιώντας
ιδεατές διευθύνσεις (virtual addresses) οι οποίες
μεταφράζονται σε πραγματικές από τη
μονάδα διαχείρισης μνήμης (memory management unit).
Αντικατάσταση σελίδων
Η αντικατάσταση των σελίδων μπορεί να γίνει:
Σχεδιασμός σελιδοποίησης
Επανεκκίνηση εντολής
Μια εντολή μηχανής μπορεί να διακοπεί στη μέση της εκτέλεσής της.
Την επανεκκίνηση της εντολής
-
μπορεί να αναλάβει ο επεξεργαστής
από το σημείο στο οποίο σταμάτησε ή
- το λειτουργικό
σύστημα από την αρχική της κατάσταση.
Θέματα υλοποίησης
Κλείδωμα σελίδων
Σε περίπτωση που μια σελίδα χρησιμοποιείται για την καταχώρηση πίνακα
σελίδων, περιγραφέα ή ως ενταμιευτής εισόδου / εξόδου από / προς κάποιο
περιφερειακό τότε αυτή πρέπει να κλειδωθεί στη μνήμη και να μην
επιτρέπεται η αντικατάστασή της.
Σελιδοποίηση κώδικα και δεδομένων
Σε ορισμένα λειτουργικά συστήματα ο κώδικας μιας διεργασίας και τα
δεδομένα της μπορεί να απεικονίζονται σε σελίδες των οποίων η θέση
στο δίσκο να είναι τα αντίστοιχα αρχεία που περιέχουν τον κώδικα
της διεργασίας ή τα δεδομένα της.
Διαμοιραζόμενες σελίδες
Ειδικά τις σελίδες του κώδικα ή στατικών δεδομένων
(π.χ. το κείμενο βοηθείας μιας εφαρμογής) μπορούν να τις μοιράζονται και
περισσότερες από μια διαδικασίες μια και αυτές δεν μεταβάλλονται.
Διεργασία σελιδοποίησης
Η διεργασία σελιδοποίησης (paging daemon) τρέχει στο
περιθώριο με σκοπό να ερευνά τις σελίδας και να καταγράφει σελίδες που
είναι υποψήφιες για αντικατάσταση.
Κατάτμηση
Η κατάτμηση (segmentation) επιτρέπει το διαχωρισμό
της μνήμης μιας διεργασίας σε πολλά γραμμικά τμήματα.
Τα τμήματα αυτά για κάθε διεργασία μπορούν να περιέχουν:
- Τον κώδικα
- Τη στοίβα
- Τα αρχικοποιημένα δεδομένα
- Το χώρο ανάπτυξης της δυναμικής μνήμης
Η κατάτμηση επιτρέπει:
- την εύκολη μεταφορά του κώδικα, αφού κάθε τμήμα του
εκφράζεται σχετικά με την αρχή του τμήματος.
- την προστασία των δεδομένων ανάλογα με τον τύπο τους. Π.χ.
Κώδικας | Μόνο εκτέλεση |
Αρχικοποιημένα δεδομένα | Μόνο ανάγνωση |
Σωρός | Ανάγνωση και εγγραφή |
Δυναμική μνήμη | Ανάγνωση και εγγραφή |
- Την υλοποίηση
διαμοιραζομένων βιβλιοθηκών (shared libraries)
Η κατάτμηση υλοποιείται με βάση δομών στη μνήμη που καλούνται
περιγραφείς (descriptors) και
περιέχουν τα χαρακτηριστικά στοιχεία κάθε τμήματος (θέση
στην πραγματική μνήμη, προστασία, μέγεθος).
Βιβλιογραφία
- Andrew S. Tanenbaum
Σύγχρονα λειτουργικά συστήματα. σ. 103-198
Εκδόσεις Παπασωτηρίου, 1993.
- Maurice J. Bach.
The
Design of the UNIX Operating System, pages 271–352.
Prentice-Hall, 1986.
- Bruce Javob and Trevor
Mudge.
Virtual memory: Issues of implementation.
Computer, 31(6):33–43, June 1998.
- Samuel J. Leffler,
Marshall Kirk McKusick, Michael J. Karels, and John S. Quarterman.
The
Design and Implementation of the 4.3BSD Unix Operating System,
pages 109–163.
Addison-Wesley, 1988.
- Andrew S. Tanenbaum.
Operating Systems: Design and Implementation, pages 191–247.
Prentice-Hall, 1987.
Εργασία στο εργαστήριο
Παρατηρήστε στοιχεία της μνήμης από την έξοδο της εντολής vmstat:
vmstat 1
procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
1 0 0 0 300 6572 9032 0 0 17 3 106 17 1 1 99
1 0 0 0 272 6372 8892 0 0 0 73 145 25 94 5 1
1 0 0 0 1552 6284 8784 0 0 74 47 141 153 54 43 3
1 0 0 0 1228 6284 8784 0 0 0 0 105 9 97 3 0
1 0 0 0 852 6284 8784 0 0 0 0 105 13 97 3 0
1 0 0 0 2552 6284 8768 0 0 0 45 139 133 73 23 4
1 0 0 0 960 6348 8768 0 0 1 77 130 55 74 13 14
1 0 0 0 952 6348 8768 0 0 0 12 113 63 81 19 0
1 0 0 0 964 6348 8772 0 0 2 24 123 82 73 25 2
1 0 0 0 1052 6348 8772 0 0 0 24 122 83 83 16 2
1 0 0 0 2484 6348 8772 0 0 0 36 131 120 67 32 1
1 0 0 0 2416 6348 8772 0 0 0 113 136 68 80 15 6
2 0 0 0 2404 6348 8772 0 0 0 48 141 164 57 40 3
και από το περιεχόμενο του αρχείου meminfo:
kerkis:/proc$ more /proc/meminfo
total: used: free: shared: buffers: cached:
Mem: 31559680 31137792 421888 15089664 3870720 7208960
Swap: 0 0 0
MemTotal: 30820 kB
MemFree: 412 kB
MemShared: 14736 kB
Buffers: 3780 kB
Cached: 7040 kB
SwapTotal: 0 kB
SwapFree: 0 kB