Διαχείριση μνήμης

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Απλή διαχείριση μνήμης

Η διαχείριση μνήμης (memory managemenr) επιτρέπει στο λειτουργικό σύστημα την καλύτερη δυνατή κατανομή μνήμης ανάμεσα σε διεργασίες.

Σε συστήματα που εξυπηρετούν μια διεργασία η μνήμη μπορεί να οργανωθεί ως εξής:

Πρόγραμμα χρήστη
Λειτουργικό σύστημα στη RAM

Λειτουργικό σύστημα σε ROM
Πρόγραμμα χρήστη

Οδηγοί συσκευών σε ROM (BIOS)
Πρόγραμμα χρήστη
Λειτουργικό σύστημα σε RAM

Εναλλαγή

Η εναλλαγή (swapping) μέσω της μετακίνησης διεργασιών από τη μνήμη στο δίσκο και αντίστροφα επιτρέπει την ταυτόχρονη εκτέλεση περισσοτέρων διεργασιών απ' όσες χωράν στην κεντρική μνήμη.

Σε συστήματα που βασίζονται σε εναλλαγή η διαχείριση της μνήμης γίνεται με βάση μεταβλητά τμήματα.

Καταμερισμός μνήμης

Η διαχείριση της μνήμης μπορεί να γίνει με: Η επιλογή του τμήματος της μνήμης από τη λίστα μπορεί να γίνει με ένα από τα παρακάτω κριτήρια:

Ιδεατή μνήμη

Η ιδεατή μνήμη (virtual memory) παρουσιάζει στις διεργασίες παραπάνω μνήμη από αυτή που διαθέτει το σύστημα. Αυτό γίνεται χρησιμοποιώντας ιδεατές διευθύνσεις (virtual addresses) οι οποίες μεταφράζονται σε πραγματικές από τη μονάδα διαχείρισης μνήμης (memory management unit).

Αντικατάσταση σελίδων

Η αντικατάσταση των σελίδων μπορεί να γίνει:

Σχεδιασμός σελιδοποίησης

Επανεκκίνηση εντολής

Μια εντολή μηχανής μπορεί να διακοπεί στη μέση της εκτέλεσής της. Την επανεκκίνηση της εντολής

Θέματα υλοποίησης

Κλείδωμα σελίδων

Σε περίπτωση που μια σελίδα χρησιμοποιείται για την καταχώρηση πίνακα σελίδων, περιγραφέα ή ως ενταμιευτής εισόδου / εξόδου από / προς κάποιο περιφερειακό τότε αυτή πρέπει να κλειδωθεί στη μνήμη και να μην επιτρέπεται η αντικατάστασή της.

Σελιδοποίηση κώδικα και δεδομένων

Σε ορισμένα λειτουργικά συστήματα ο κώδικας μιας διεργασίας και τα δεδομένα της μπορεί να απεικονίζονται σε σελίδες των οποίων η θέση στο δίσκο να είναι τα αντίστοιχα αρχεία που περιέχουν τον κώδικα της διεργασίας ή τα δεδομένα της.

Διαμοιραζόμενες σελίδες

Ειδικά τις σελίδες του κώδικα ή στατικών δεδομένων (π.χ. το κείμενο βοηθείας μιας εφαρμογής) μπορούν να τις μοιράζονται και περισσότερες από μια διαδικασίες μια και αυτές δεν μεταβάλλονται.

Διεργασία σελιδοποίησης

Η διεργασία σελιδοποίησης (paging daemon) τρέχει στο περιθώριο με σκοπό να ερευνά τις σελίδας και να καταγράφει σελίδες που είναι υποψήφιες για αντικατάσταση.

Κατάτμηση

Η κατάτμηση (segmentation) επιτρέπει το διαχωρισμό της μνήμης μιας διεργασίας σε πολλά γραμμικά τμήματα. Τα τμήματα αυτά για κάθε διεργασία μπορούν να περιέχουν:

Η κατάτμηση επιτρέπει:

Η κατάτμηση υλοποιείται με βάση δομών στη μνήμη που καλούνται περιγραφείς (descriptors) και περιέχουν τα χαρακτηριστικά στοιχεία κάθε τμήματος (θέση στην πραγματική μνήμη, προστασία, μέγεθος).

Βιβλιογραφία

Εργασία στο εργαστήριο

Παρατηρήστε στοιχεία της μνήμης από την έξοδο της εντολής 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