Upload
gusty
View
31
Download
0
Embed Size (px)
DESCRIPTION
Διαχείριση Μνήμης (Memory Management). Πως κατανέμεται η μνήμη στις διάφορες διεργασίες. Τύποι Μνήμης. Η μνήμη με μηχανικά μέρη είναι σημαντικά πιο αργή αλλά και αρκετά πιο φθηνή. Οι καταχωριτές (registers) είναι ο πιο ακριβός τύπος μνήμης ενώ η μαγνητική ταινία ο πιο φθηνός τύπος. - PowerPoint PPT Presentation
Citation preview
Διαχείριση Μνήμης (Memory Management)
Πως κατανέμεται η μνήμη στις διάφορες διεργασίες
Τύποι Μνήμης
Η μνήμη με μηχανικά μέρη είναι σημαντικά πιο αργή αλλά και αρκετά πιο φθηνή.
Οι καταχωριτές (registers) είναι ο πιο ακριβός τύπος μνήμης ενώ η μαγνητική ταινία ο πιο φθηνός τύπος.
Προσωρινές και μόνιμες (volatile / non-volatile memory)
Παράδειγμα
Υποθέτουμε ένα σύστημα με 32ΜΒ κύρια μνήμα Το ΛΣ χρειάζεται 16ΜΒ Διεργασίες Α-Δ χρειάζονται 4ΜΒ η κάθε μια. Διεργασίες Ε και Ζ χρειάζονται 2ΜΒ η κάθε μια. Πως θα κατανείμετε την μνήμη στις ακόλουθες
περιπτώσεις Μονοπρογραμματισμός (batch system - Μία
διεργασία κάθε φορά). Πολυπρογραμματισμός.
Τι θα συμβεί εάν οι διεργασίες Ε και Ζ ζητήσουν από 1 επιπρόσθετο ΜΒ.
Μονοπρογραμματισμός
Συστήματα τύπου batch. Φορτώνεται μια διεργασία στη μνήμη. Τρέχει μέχρι το τέλος. Φορτώνεται η επόμενη …
Σε αυτά τα συστήματα η διαχείριση της μνήμης είναι εύκολή
User Program
Operating Systemin RAM 0
FF…
User Program
Operating Systemin ROM
0
FF…
User Program
Operating System 0
FF…Device Drivers
Mainframes Palmtops MS-DOS
Πολυπρογραμματισμός με Σταθερή Κατανομή
Η Μνήμη χωρίζεται σε σταθερά διαμερίσματα ή τμήματα (πιθανόν το κάθε ένα με άνισο χώρο).
Σε κάθε διεργασία κατανέμεται ένα διαμέρισμα στο οποίο θα μπορέσει να χωρέσει. Π.χ., μπορεί να μπει στο
μικρότερο ελεύθερο διαμέρισμα στο οποίο χωρεί.
0
Operating System
100Κ
200Κ
Partition 1
Partition 2
Partition M
…
300Κ
700Κ
1M
Πολυπρογραμματισμός με Σταθερή Κατανομή
Εάν δεν υπάρχει ελεύθερο διαμέρισμα με τον απαιτούμενο χώρο ή εάν η πολιτική είναι να μην «σπαταλούμε» μεγάλα διαμερίσματα για σχετικά μικρές διεργασίες, τότε η διεργασία μπαίνει σε μια ουρά Υπάρχουν διάφορα πιθανά
μοντέλα όπου είτε το κάθε διαμέρισμα έχει τη δική του ουρά είτε υπάρχει μια ουρά για όλα τα διαμερίσματα είτε υπάρχει μια ουρά για όλα τα διαμερίσματα κάθε χωρητικότητας 100Κ
200Κ
0
Operating System
Partition 1
Partition 2
Partition M
…
300Κ
700Κ
1M
P1 Process 1
P2 Process 2
P4P5 Process 3
Αχρησιμοποίητη μνήμη
0
Operating System
1000
2000
1976
4000
0
Operating System
1000
3000
1976
Μετατόπιση Διεργασίας και Προστασία Μνήμης
JMP 1976……
JMP 1976……
Μετατόπιση Διεργασίας και Προστασία της Μνήμης
0
0xFFFF
Operating System
User program and Data
Base
Limit
0
0xFFFF
Operating System
User program Base 1
Limit 1
Base 2
Limit 2User 1 Data
User 2 Data
Base 1
Limit 1
Base 2
Limit 2
0
Operating System
1000
4000
2976
Μετατόπιση Διεργασίας και Προστασία Μνήμης
JMP 976……
2000
1976Base
Limit
If(Base+976 < Limit)
JMP Base+976;
Else
Error;
Εναλλακτικά, κάθε πρόγραμμα, μπορεί να έχει μια λίστα με όλες τις διευθύνσεις τις οποίες καλεί και το ΛΣ να αλλάξει τη λίστα ανάλογα με το τμήμα στο οποίο φορτώθηκε το πρόγραμμα.
Δυναμική Κατανομή Μνήμης
Για να αποφευχθεί η αχρησιμοποίητη μνήμης, μπορεί να χρησιμοποιήσουμε δυναμική κατανομή. Η μνήμη κατανέμεται στις διεργασίες
όταν χρειάζονται και όση χρειάζονται
0
Operating System
Process 1
Process 2
Process 3
Process 4
Κατακερματισμός της Μνήμης (Memory fragmentation)
Επεξεργαστής μπορεί να «μετατοπίσει» όλες τις διεργασίες αλλά η λύση αυτή είναι χρονοβόρα.
Ανταλλαγή Μνήμης
Τι θα συμβεί εάν ο χώρος της μνήμης είναι μικρότερος απ’ ότι χρειάζονται όλες οι διεργασίες; Το ΛΣ αποφασίζει να ανταλλάξει κάποιες
διεργασίες από την κύρια μνήμη στο δίσκο (process swapping)
Το πρόβλημα της διαχείρισης της μνήμης θα ήταν αρκετά πιο εύκολο αν ξέραμε από την αρχή πόση μνήμη θα χρειαστεί η κάθε διεργασία. Τι θα συμβεί εάν η Διεργασία 1 ζητήσει
επιπρόσθετα 75Κ μνήμης (π.χ. με την εντολή malloc()).
Τι θα συμβεί εάν η Διεργασία 1 ζητήσει επιπρόσθετα 105Κ μνήμης
0
Operating System
Process 1
Process 2
500Κ
600Κ
200Κ
900Κ
0
Operating System
Κατανομή Μνήμης
Χώρος για επέκταση
Χώρος πουχρησιμοποιείται
Χώρος για επέκταση
Χώρος πουχρησιμοποιείται
0
Operating System
Χώρος επέκτασης
Πρόγραμμα Α
Δεδομένα Α
Stack A
Χώρος επέκτασης
Πρόγραμμα B
Δεδομένα B
Stack B
Το πρόβλημα παραμένει: Τι θα συμβεί εάν ο μια διεργασία χρειαστεί περισσότερο χώρο από όσο της έχει κατανεμηθεί;
Διαχείριση της Μνήμης
Πως το ΛΣ ξέρει πια τμήματα είναι δεσμευμένα και πια ελεύθερα; Bitmap
Η μνήμη χωρίζεται σε μικρές μονάδες u (π.χ., 4 bytes) Ορίζεται ένας πίνακας στον οποίο κάθε μονάδα u αντιπροσωπεύεται
από ένα bit. Εάν το u είναι δεσμευμένο, τότε το αντίστοιχο bit έχει την τιμή 1. Διαφορετικά παίρνει την τιμή 0
Μνήμη
u1 u2 u3 u4 …
Δ1 Δ2 Δ3 Δ4 Δ5
11111100
00110111
1111 1100
11 . . .
Πόση επιπρόσθετη μνήμη χρειάζεται αυτή η μέθοδος; Για κάθε u bits χρειάζεται 1 bit (δηλαδή η
μέθοδος αυτή χρησιμοποιεί το 1/(u+1) της ολικής μνήμης.
Bitmap
Υποθέστε πως σε κάποιο ΛΣ το μικρό διάστημα u είναι 32 bits. Η συνολική μνήμη του συστήματος είναι 256ΜΒ.
Πόσο μεγάλο πρέπει να είναι το bitmap;
Υποθέστε πως το ΛΣ θέλει να φορτώσει ένα πρόγραμμα το οποίο χρειάζεται 4ΜΒ μνήμης. Πως το ΛΣ θα βρει το τμήμα στο οποίο να τοποθετήσει το πρόγραμμα; Θα ψάξει για 1,048,576 (1Μ = 220) συνεχόμενα 0!
Το ψάξιμο ενός bitmap για το κατάλληλο χώρο στο οποίο θα τοποθετηθεί μια διεργασία είναι γενικά χρονοβόρα διαδικασία.
2568,134,408 bytes
33
MB
Συνδεδεμένη Λίστα (Linked List)
Ορίζεται μια δομή με 4 πεδία η οποία χαρακτηρίζει το κάθε τμήμα της μνήμης P/H (process/hole): Καθορίζει κατά πόσο το συγκεκριμένο τμήμα
είναι δεσμευμένο (κατανεμημένο σε κάποια διεργασία) ή ελεύθερο. Η διεύθυνση του πρώτου byte του τμήματος Το μέγεθος του τμήματος Δείκτης (pointer) στο επόμενο τμήμα
Μνήμη Δ1 Δ2 Δ3 Δ4 Δ5
P 0 6 H 6 4 P 10 2 H 12 1 P 13 7
Διαχείριση Συνδεδεμένης Λίστα
Πως θα μεταβληθεί η λίστα όταν εισέλθει η Δ6;Δ1 Δ2 Δ3 Δ4 Δ5
P 0 6 H 6 4 P 10 2 H 12 1 P 13 7
Δ6
H 6 4 P 10 2 H 12 1 P 13 7P 0 6P 0 12
Πως θα μεταβληθεί η λίστα όταν εισέλθει η Δ7;Δ1 Δ2 Δ3 Δ4 Δ5
P 0 6 H 6 4 P 10 2 H 12 1 P 13 7
Δ7
P 0 8 P 8 2
Διαχείριση Συνδεδεμένης Λίστα
Πως θα τοποθετούσατε την Δ19 η οποία έχει μέγεθος 2;
Ψάχνοντας τη λίστα από την αρχή μέχρι να βρούμε ελεύθερο χώρο (H-Hole) στον οποίο να χωρά η Δ19 (first fit).
Ψάχνοντας τη λίστα από το σημείο στο οποίο σταματήσαμε την προηγούμενη φορά μέχρι να βρούμε ελεύθερο χώρο (H-Hole) στον οποίο να χωρά η Δ19 (next fit).
Ψάχνοντας όλη τη λίστα βρίσκουμε τον ελεύθερο χώρο στον οποίο χωρά «καλύτερα» η Δ19 (best fit).
Διατηρώντας πολλαπλές λίστες, μια για κάθε «κοινό» μέγεθος διεργασίας (quick fit). Σε αυτή την περίπτωση η διαχείριση των λιστών γίνεται πολύπλοκη, γιατί;
P 0 4 H 4 6 P 10 2 H 12 1 P 13 7
Μονάδα Διαχείρισης Μνήμης (ΜΔΜ)
Ο επεξεργαστής είναι εξοπλισμένος με την ΜΔΜ η οποία είναι υπεύθυνη να μεταφράζει τις εικονικές διευθύνσεις (virtual address) σε πραγματικές διευθύνσεις.
Π.χ., όταν ο επεξεργαστής εκτελέσει την εντολή
MOV REG 1000η ΜΔΜ βρίσκει σε πιο σημείο της πραγματικής μνήμης αντιστοιχεί η διεύθυνση 1000.
Εικονική Μνήμη
Όταν τρέχει κάποιο πρόγραμμα, είναι υποχρεωτικό να είναι ολόκληρο φορτωμένο στην κύρια μνήμη; Όχι κατ’ ανάγκη!
Βασική ιδέα Το ΛΣ θα μπορούσε να φορτώσει το «αρχικό» μέρος του
προγράμματος το οποίο ξεκινά και τρέχει. Σε κάποιο σημείο, μόλις δηλαδή χρειαστεί μέρος του προγράμματος
το οποίο δεν είναι φορτωμένο στην κύρια μνήμη, στέλνει ένα σήμα στο ΛΣ ότι χρειάζεται κομμάτι του προγράμματος το οποίο δεν είναι διαθέσιμο στην κύρια μνήμη.
Τότε το ΛΣ αναλαμβάνει να βρει χώρο στην κύρια μνήμη (πιθανόν ανταλλάσσοντας (swapping) κάποιον άλλο χώρο) και φορτώνει το ζητούμενο κομμάτι.
Αυτό επαναλαμβάνεται όσο χρειάζεται.
Εικονικές Διευθύνσεις (Virtual Addresses)
Ένα πρόγραμμα υποθέτει ότι ξεκινά πάντα στην διεύθυνση 0 Κάθε φορά που αναφέρεται σε μια διεύθυνση (π.χ., 1876) δεν
αναφέρεται στη πραγματική διεύθυνση 1876 αλλά στην διεύθυνση που απέχει 1876 bytes από την αρχή του προγράμματος (θυμηθείτε τους καταχωρητές base και limit).
Οι διευθύνσεις αυτές (οι οποίες δημιουργούνται από το πρόγραμμα) ονομάζονται εικονικές διευθύνσεις virtual addresses.
Επίσης κάθε πρόγραμμα υποθέτει πως μπορεί να έχει όλη την δυνατή μνήμη στην διάθεση του (virtual address space). Π.χ., σε 32-bit σύστημα, κάθε πρόγραμμα μπορεί να χρησιμοποιήσει όλο
τον χώρο από 0 έως 232 = 4096ΜΒ. Με αυτό τον τρόπο είναι δυνατόν να τρέξουμε προγράμματα τα οποία
είναι κατά πολύ μεγαλύτερα από το μέγεθος της φυσική μνήμης που υπάρχει στο σύστημα.
Π.χ., σε υπολογιστή με 256ΜΒ μνήμη μπορούμε να τρέξουμε πρόγραμμα το οποίο μπορεί να είναι μέχρι 4096ΜΒ.
Σελιδοποίηση (Paging)
Ολόκληρος ο χώρος των εικονικών διευθύνσεων χωρίζεται σε σελίδες (pages).
Ολόκληρη η πραγματική μνήμη χωρίζεται επίσης σε σελίδες πλαίσια (page frames)
Όλες οι σελίδες και σελίδες πλαίσια είναι του ίδιου μεγέθους (π.χ., 4KB).
Η ΜΔΜ για κάθε διεργασία διατηρεί ένα πίνακα με δείκτες στον οποίο φαίνεται ποιες από τις σελίδες (εικονικές) είναι φορτωμένες στην κύρια μνήμη και σε πια σελίδα πλαίσιο της πραγματικής μνήμης είναι τοποθετημένη.
Εάν ζητηθεί σελίδα η οποία δεν είναι φορτωμένη στην πραγματική μνήμη τότε η ΜΔΜ στέλνει «σφάλμα μνήμης» (page fault) στο ΛΣ το οποίο θα πρέπει να φροντίσει να φορτωθεί η σελίδα και να ενημερώσει τη ΜΔΜ.
Παράδειγμα
Υποθέτουμε ένα 16-bit σύστημα με 32Κ πραγματικής μνήμης όπου η ΜΔΜ έχει τον εξής πίνακα
Virtual Addresses60K-64K
56K-60K52K-56K
48K-52K44K-48K
40K-44K36K-40K
32K-36K28K-32K
24K-28K20K-24K
16K-20K12K-16K
8K-12K4K-8K
0K-4K
Physical Addresses
28K-32K
24K-28K20K-24K
16K-20K12K-16K
8K-12K4K-8K
0K-4K15
2
04
63
7
Virtual Address
Physical Address
0
100
4096
20580
12290
Virtual Address
4096
4196
20480
100
Page fault
0000 0101 1101
Μονάδα Διαχείρισης Μνήμης
IVA: Input Virtual Address
Virtual Addresses15
1413
1211
109
87
65
43
21
0
Physical Addresses
28K-32K
24K-28K20K-24K
16K-20K12K-16K
8K-12K4K-8K
0K-4K1 0011 101
1 010
1 0001 100
1 1101 011
1 1110 0000 0000 000
0 0000 0000 000
0 0000 000
OPA: Output Physical Address
OPA:
0110 0000 0101 1101IVA:
100
0110 0101 0010OPA:
0001 0110 0101 0010IVA:
101
Present / absent bit
Μονάδα Διαχείρισης Μνήμης
Θεωρητικά, κάθε διεργασία θα μπορούσε να έχει τον δικό της πίνακα φυλαγμένο σε καταχωρητές της ΜΔΜ. Κάθε φορά που η διεργασία αναφέρεται στη μνήμη, τότε «εύκολα» βρίσκει
τη φυσική διεύθυνση. Γιατί μια τέτοια λύση δεν είναι εφικτή;
Υποθέστε ένα σύστημα με 32-bit διευθύνσεις και 4KB σελίδες. Πόσες δυνατές σελίδες υπάρχουν;
Απάντηση: 220 = 1Μ Υποθέστε ένα σύστημα με 64-bit διευθύνσεις και 4KB σελίδες. Πόσες
δυνατές σελίδες υπάρχουν; Απάντηση: 252 !!
Το μέγεθος της αναγκαίας μνήμης είναι τεράστιο με αποτέλεσμα η ανταλλαγή διεργασιών (process switching) να είναι χρονοβόρα!
Θα μπορούσε ο πίνακας αυτός να φυλαγόταν στην κύρια μνήμη; Όχι, αφού για κάθε αναφορά στην μνήμη θα χρειαζόταν επιπρόσθετη
αναφορά για την ανεύρεση της φυσικής διεύθυνσης!
10221023
21
0 0 .
1 .
1 .
0 .
0 .
10221023
21
0 1 .
1 .
0 .
0 .
0 .
10221023
21
0 1 .
1 .
1 .
0 .
0 .Πρώτο επίπεδο
Ιεραρχικοί Πίνακες ΜΔΜ
Η εικονική διεύθυνση χωρίζεται σε διάφορα πεδία.
Π.χ. υποθέστε 32-bit σύστημα με 4ΚΒ σελίδες. Ένας πιθανός διαχωρισμός είναι
π1
10 bits
π2
10 bits
offset
12 bits
10221023
21
0 0 .
0 .
1 .
0 .
0 .
Σε σελίδες
Δομή Καταχωρήσεων στο Πίνακα ΜΔΜ
Η δομή γενικά εξαρτάται από το συγκεκριμένο σύστημα. Σε πολλά συστήματα εμφανίζονται οι πιο κάτω καταχωρήσεις
Page Frame NumberprotectionUnused
Present/absent bit
Modified
Referenced
Caching disabled
Protection (1-3bits): Προνόμια πρόσβασης στη σελίδα Modified/referenced bits: χρήση της σελίδας Caching disabling: Χρησιμοποιείται κυρίως για συσκευές
Ε/Ε οι οποίες παρουσιάζονται σαν διευθύνσεις μνήμης.
Αρχή της «Τοπικότητας»Principle of Locality or Locality of Reference
Οι αναφορές στη μνήμη συνήθως γίνονται από / προς «κοντινές» διευθύνσεις. Εάν σε μια επανάληψη υπήρξε αναφορά στη διεύθυνση
xyz τότε υπάρχει σχετικά ψηλή πιθανότητα ότι και η επόμενη αναφορά θα είναι σε κάποια διεύθυνση πολύ κοντά xyz.
Κάποιος μπορεί να χρησιμοποιήσει την αρχή της τοπικότητας για να μειώσει το μέγεθος του πίνακα στην ΜΔΜ καθώς και για να αποφασίσει ποιες σελίδες να φορτώσει στην κύρια μνήμη. Πώς;
Translation Lookaside Buffers TLB
Λόγω του μεγάλου μεγέθους του πίνακα πολλά συστήματα αποφεύγουν να φορτώνουν ολόκληρο τον πίνακα στην ΜΔΜ.
Εναλλακτικά, φορτώνουν ένα μικρό πίνακα (TLB) στον οποίο περιγράφουν μόνο ποιες εικονικές σελίδες είναι φορτωμένες στην κύρια μνήμη και σε πιο σημείο. Κάθε φορά που υπάρχει αναφορά στην μνήμη, η ΜΔΜ πρώτα
ψάχνει το TLB. Για καλύτερη απόδοση, η ΜΔΜ μπορεί να είναι εξοπλισμένη με υλικό
το οποίο ελέγχει όλες τις καταχωρήσεις του TLB παράλληλα. Εάν η ζητούμενη σελίδα δεν βρεθεί στο TLB τότε η ΜΔΜ ψάχνει τη
σελίδα στον πίνακα που είναι φορτωμένος στην κύρια μνήμη. Χρησιμοποιώντας την αρχή της τοπικότητας, η ΜΔΜ ενημερώνει το
TLB προσθέτοντας την νέα σελίδα και αφαιρώντας κάποια άλλη. Το TLB συνήθως έχει το πολύ 64 καταχωρήσεις.
Για απλοποίηση του υλικού της ΜΔΜ, σε πολλά συστήματα το ρόλο της διαχείρισης της ΜΔΜ αναλαμβάνει το ΛΣ.
Αλγόριθμοι Αντικατάστασης Σελίδων
Πως αποφασίζουμε ποιες σελίδες θα φορτωθούν στην κύρια μνήμη και ποιες θα μείνουν στον σκληρό δίσκο;
Βέλτιστος αλγόριθμος αντικατάστασης (optimal replacement algorithm) Στο σύνολο των διεργασιών που είναι φορτωμένες στη μνήμη,
υπολογίζουμε το χρόνο που θα ξαναχρησιμοποιηθεί η κάθε μια. Επιλέγουμε αυτή που πρόκειται να χρησιμοποιηθεί πιο μακριά στο μέλλον.
Γενικά ο αλγόριθμος αυτός δεν είναι εφαρμόσιμος αφού το ΛΣ δεν μπορεί να προβλέψει τους χρόνους που θα χρησιμοποιηθεί η κάθε σελίδα.
Ο αλγόριθμος αυτός γενικά χρησιμοποιείται σαν μέτρο σύγκρισης των εφαρμόσιμων αλγορίθμων.
First-In First-Out Page Replacement Algorithm
Επιλέγουμε τη σελίδα η οποία ήταν φορτωμένη στη μνήμη το περισσότερο χρόνο.
Παράδειγμα: Υποθέστε πως βρισκόμαστε στον χρόνο 15 και πως θέλουμε να αντικαταστήσουμε μια σελίδα με την Σ11 η οποία χρειάζεται τώρα.
Σελίδα Χρόνος Φόρτωσης
Τελευταίος χρόνος αναφοράς
Σ10
Σ21
10
5
12
14
Σ13
Σ14
8
13
8
13
Με βάση την πολιτική FIFO πρέπει να αντικαταστήσουμε τη σελίδα Σ21. Παρατηρήστε όμως ότι παρόλο που η Σ21 φορτώθηκε πρώτη,
χρησιμοποιήθηκε πολύ πρόσφατα (14) και πιθανόν να έχει ξαχαχρησιμοποιηθεί αρκετές φορές από τότε που φορτώθηκε πρώτη φορά!
Not Recently Used (NRU) page replacement algorithm
NRU ψάχνει για μια σελίδα που δεν έχει χρησιμοποιηθεί «τελευταία».
Πως εφαρμόζεται η πολιτική: Θυμηθείτε τα bits R (referenced) και Μ (modified). Όταν μια σελίδα αλλάξει (write) τότε το bit Μ=1. Όταν μια σελίδα αναφερθεί τότε το bit R=1 Υπάρχει ένας διακόπτης ρολόι το οποίο περιοδικά στέλνει σήμα
στο ΛΣ να μετατρέψει το R=0. Οι διεργασίες κατηγοριοποιεί τις σελίδες ως ακολούθως
Κατηγορία 0: R=0, M=0 Κατηγορία 1: R=0, M=1 Κατηγορία 2: R=1, M=0 Κατηγορία 3: R=1, M=1
O NRU επιλέγει τυχαία από τις σελίδες της κατηγορίας με τον μικρότερο δυνατό αριθμό.
Τι πρέπει να κάνει το ΛΣ σε περίπτωση που επιλεχθεί σελίδα κατηγορίας 1;
Σ 10 6
Second Chance Page Replacement Algorithm
Επιλέγουμε τη σελίδα η οποία ήταν φορτωμένη στη μνήμη το περισσότερο χρόνο.
Σε περίπτωση που το R=1, τότε ξέρουμε πως η σελίδα έχει χρησιμοποιηθεί τελευταία, οπόταν Θέτουμε το R=0. Ενημερώνουμε τον χρόνο φόρτωσής (θέτοντας τον στην δεδομένη στιγμή) Τοποθετούμε την συγκεκριμένη σελίδα στο τέλος της ουράς. Επιλέγουμε την επόμενη σελίδα και επαναλαμβάνουμε.
Σ 6 7 Σ 11 8 Σ 1210 Σ 3 12Σ 1013
Σελίδα που φορτώθηκε πρώτη
Σελίδα που φορτώθηκε τελευταία
Clock Page Replacement Algorithm
Ο ίδιος με τον second chance page replacement αλγόριθμο. Η μόνη διαφορά είναι στην υλοποίηση όπου ο clock page replacement αλγόριθμος υλοποιεί μια κυκλική λίστα.
Σ1
Σ6
Σ11
Σ5
Σ4
Σ7
Σ15 Σ3
Σ8 Σ13
Ο αλγόριθμος τρέχει κάθε φορά που το ΛΣ χρειάζεται να αντικαταστήσει μια σελίδα.
Least Recently Used (LRU) Page Replacement Algorithm
Παρατήρηση: σελίδες που έχουν χρησιμοποιηθεί τελευταία έχουν μεγάλη πιθανότητα να ξαναχρησιμοποιηθούν στο μέλλον (αρχή τοπικότητας)
Ο LRU είναι μια προσπάθεια υλοποίησης του βέλτιστου αλγορίθμου.
Ο LRU επιλέγει την σελίδα η οποία δεν έχει χρησιμοποιηθεί για τον περισσότερο χρόνο
Υλοποίηση: Οι σελίδες διατηρούνται σε μια συνδεδεμένη λίστα όπου η σελίδα
που χρησιμοποιήθηκε πιο πρόσφατα εμφανίζεται στην αρχή της λίστας και αυτή που χρησιμοποιήθηκε το λιγότερο πρόσφατα στο τέλος
Κάθε φορά που υπάρχει αναφορά σε μια σελίδα, αυτή μεταφέρεται στην αρχή της λίστας
Χρονοβόρα λύση αφού πρέπει να αλλάζουν οι δείκτες σε κάθε βήμα.
Least Recently Used (LRU) Page Replacement Algorithm
Υλοποίηση 1 σε υλικό: Το σύστημα έχει ένα μετρητή (64-bit) ο οποίος αυξάνεται αυτόματα
σε κάθε βήμα. Η κάθε καταχώρηση στον πίνακα με τις σελίδες (page table entry)
έχει χώρο για να αποθηκευτεί η τιμή του μετρητή. Κάθε φορά που γίνεται αναφορά σε μια σελίδα, τότε στην
καταχώρηση της αντιγράφεται η τιμή του μετρητή Ο αλγόριθμος επιλέγει τη σελίδα της οποίας ο μετρητής έχει την πιο
μικρή τιμή. Υλοποίηση 2 σε υλικό:
Το ΛΣ διατηρεί ένα πίνακα με nxn bits Κάθε φορά που γίνεται αναφορά στη σελίδα k όλα τα bits της σειράς
k γίνονται 1 και τα bits κάθε στήλης 0. Ο αλγόριθμος επιλέγει την σελίδα στην οποία αντιστοιχεί η
μικρότερη δυαδική τιμή
Not Frequently Used (NFU) Page Replacement Algorithm
Οι προηγούμενοι 2 αλγόριθμοι χρειάζονται τη βοήθεια του υλικού, αλλά οι πλείστοι επεξεργαστές εν παρέχουν αυτή τη βοήθεια.
Αλγόριθμος σε λογισμικό Για κάθε σελίδα υπάρχει ένας καταχωρητής (shift register) Σε κάθε σήμα διακοπής από το ρολόι (clock interrupt) το ΛΣ
σπρώχνει την τιμή του R-bit στην πιο αριστερή θέση του καταχωρητή
Όταν το ΛΣ θέλει να επιλέξει σελίδα για να αντικαταστήσει επιλέγει αυτή της οποίας ο καταχωρητής έχει την μικρότερη τιμή
Σε περίπτωση που δύο ή περισσότεροι καταχωρητές έχουν την ίδια τιμή, διαλέγει μια στην τύχη.
Ποίες οι διαφορές του NFU από τον LRU; Στον NFU δεν ξεχωρίζουμε μεταξύ σελίδων που αναφέρθηκαν στον
ίδιο κύκλο του clock interrupt. Ο NFU «ξεχνά» μετά από κάποιους κύκλους.
Working Set Page Replacement Algorithm
Χρησιμοποιώντας την αρχή της τοπικότητας, σε κάθε χρονική στιγμή μπορούμε να ορίσουμε τις σελίδες που αποτελούν το σύνολο εργασίας (working set) μιας διεργασίας
Η ιδέας του working set είναι σημαντική αφού περιορίζει τα σφάλματα σελίδας (page faults) και την καθυστέρηση αντικατάστασης σελίδων.
Πρακτικά το σύνολο εργασίας μπορεί να ορισθεί σαν το σύνολο των σελίδων που έχουν αναφερθεί στους τελευταίους n κύκλους ή τ msec. Για κάθε σελίδα υπάρχει καταχώρηση στον πίνακα σελίδων με τον χρόνο
στον οποίο αναφέρθηκε τελευταία η σελίδα. Σε κάθε κύκλο εάν το R-bit =1 τότε ενημερώνεται η καταχώρηση με τον
παρόν χρόνο. Εάν το R=0 και η ηλικία (age) της σελίδας είναι μεγαλύτερη από τ τότε η
σελίδα επιλέγεται για αντικατάσταση Εάν η ηλικία όλων των σελίδων είναι μικρότερη το τ (όλες ανήκουν στο
working set) τότε επιλέγεται αυτή με την μεγαλύτερη ηλικία.
Working Set Clock Page Replacement Algorithm
Όλες οι σελίδες οργανώνονται σε μια κυκλική λίστα στην οποία αναγράφεται επίσης ο χρόνος τελευταίας αναφοράς στη σελίδα.
Όταν α αλγόριθμος ψάχνει σελίδα για αντικατάσταση, ελέγχει το R bit. Εάν είναι 1 τότε ενημερώνεται ο τελευταίος χρόνος αναφοράς
Εάν είναι 0 και η ηλικία της σελίδας είναι μεγαλύτερη από το τ τότε η σελίδα είναι υποψήφια για αντικατάσταση
Σ11121
Σ6
Σ11
Σ51432
Σ41321
Σ7
Σ15Σ3
1220
Σ8 Σ13
Σχεδιασμός Συστημάτων Σελίδωσης
Πολιτικές για «τοπική» (local) ή «γενική» (global) κατανομή σελίδων.
Έλεγχος Φόρτου (Load control) Μέγεθος Σελίδας (Page size) Σελίδες για εντολές (πρόγραμμα) ή δεδομένα και Κοινές
σελίδες (Shared memory) Αντικατάσταση σελίδων (Cleaning policy)
Πολιτικές για «τοπική» (local) ή «γενική» (global) κατανομή σελίδων
Μέχρι τώρα υποθέσαμε πως η αντικατάσταση σελίδων γίνεται μόνο με σελίδες της ίδιας διεργασίας
Όμως σε μια δεδομένη στιγμή μπορεί να τρέχουν αρκετές διεργασίες. Σε αυτή την περίπτωση θα βρούμε τη σελίδα που χρησιμοποιείται λιγότερο από Τις σελίδες της ίδιας διεργασίας (τοπική κατανομή). Όλες τις σελίδες όλων των διεργασιών (γενική κατανομή).
Διεργασία Σελίδα Ηλικία
Α
Α
Α
1
7
12
7
3
9
Β
Β
Β
5
2
6
2
10
1
Υποθέστε ότι στη δεδομένη στιγμή η διεργασία Α χρειάζεται τη σελίδα Α6. Ποια σελίδα θα πρέπει να αντικαταστήσει;
Τοπική πολιτική Α12 Γενική πολιτική Β2
Πολιτικές για τοπική ή γενική κατανομή σελίδων
Σε σταθερές κατανομές, πως το ΛΣ αποφασίζει πόσες σελίδες να κατανείμει σε κάθε διεργασία; Κάθε διεργασία παίρνει ίσο μερίδιο Κάθε διεργασία παίρνει μερίδιο ανάλογο με το μέγεθος της
Οι γενικές κατανομές δουλεύουν καλύτερα απ’ ότι οι τοπικές κατανομές ειδικά σε περιπτώσεις που χρησιμοποιείται το working set. Εάν σε μια διεργασία με μικρό working set δώσουμε πολλές σελίδες, τότε
σπαταλούμε τη μνήμη Εάν σε μια διεργασία με μεγάλο working set δεν δώσουμε αρκετές σελίδες,
τότε η διεργασία αυτή θα χάνει πολλή ώρα να φορτώνει σελίδες. Κάθε διεργασία χρειάζεται ένα ελάχιστο αριθμό σελίδων για να μπορεί να
τρέξει Καθώς η διεργασία τρέχει μπορεί το ΛΣ να αλλάζει το αριθμό σελίδων
κάθε διεργασίας Π.χ. παρακολουθώντας τη συχνότητα σφαλμάτων σελίδας. Πως θα δούλευε
ένας τέτοιος αλγόριθμος;
Έλεγχος Φόρτου (Load Control)
Ας υποθέσουμε πως υπάρχει τρόπος να υπολογίσουμε ακριβώς το working set της κάθε διεργασίας.
Μπορούμε με βεβαιότητα να περιορίσουμε τη συχνότητα των σφαλμάτων σελίδας; Thrashing: το φαινόμενο κατά το οποίο ο επεξεργαστής
σπαταλά πολλή ώρα στο να ανταλλάζει σελίδες από την κύρια μνήμη χωρίς να επιτυγχάνει πρόοδο στην εκτέλεση της διεργασίας.
Τι θα συμβεί στην περίπτωση που το working set όλων των έτοιμων (ready) διεργασιών είναι μεγαλύτερο από την διαθέσιμη μνήμη;
Σε τέτοιες περιπτώσει το ΛΣ θα πρέπει να μεταφέρει κάποιες διεργασίες στο δίσκο (swapping) μέχρι που κάποια διεργασία από αυτές που θα μείνουν τελειώσει.
Μέγεθος Σελίδας (Page Size)
Γιατί μικρές σελίδες; Η τελευταία σελίδα κάθε προγράμματος ή δεδομένων δεν θα είναι
γεμάτη. Κατά μέσο όρο μόνο η μισή σελίδα θα είναι γεμάτη Εσωτερικός Κατακερματισμός (Internal Fragmentation )
Εάν οι σελίδες είναι μεγάλες τότε ένα μεγάλο μέρος του προγράμματος θα είναι φορτωμένο στη κύρια μνήμη. Όμως υπάρχει μεγάλη πιθανότητα μονό μικρό μέρος της σελίδας να είναι όντως στο working set της διεργασίας
Γιατί μεγάλες σελίδες; Για κάθε σελίδα πρέπει να υπάρχει καταχώρηση στον πίνακα σελίδων
(page table) και συνεπώς θα χρειάζεται μικρότερος πίνακας Σε κάποια συστήματα ο πίνακας σελίδων φορτώνεται σε καταχωρητές!
Μεγάλες σελίδες φορτώνουν σχετικά πιο γρήγορα από ότι μικρές σελίδες Ο μεγαλύτερος χρόνος πρόσβασης στο δίσκο είναι ο χρόνος εντοπισμού του
ζητούμενου τμήματος
Ξεχωριστές Σελίδες για Πρόγραμμα ή Δεδομένα και Κοινές Σελίδες (Shared Memory)
Ένα πρόγραμμα μπορεί να έχει δύο ξεχωριστούς (εικονικούς) χώρους I-Space: Instruction space D-Space: Data Space Με αυτό τον τρόπο είναι δυνατό να αυξήσουμε ακόμα περισσότερο το
μέγεθος ενός προγράμματος Το υλικό ξέρει πως ότι
αν χρειάζεται εντολή πρέπει να ψάξει τον πίνακα σελίδων με τις εντολές της διεργασίας
αν χρειάζεται δεδομένα πρέπει να ψάξει τον πίνακα σελίδων με τα δεδομένα της διεργασίας
Κάποιες διεργασίες μπορούν να έχουν κοινό I-Space και διαφορετικό D-Space Μπορεί να υπάρχει δυνατότητα χρήσης κοινού D-Space αλλά σε
περιπτώσεις Read Only. Υπάρχει περίπτωση που σε προχωρημένα συστήματα οι χρήστες
να μπορούν να ελέγχουν την εικονική μνήμη για σκοπούς προγραμματισμού διεργασιών με κοινή μνήμη.
Αντικατάσταση Σελίδων (Cleaning Policy)
Η διαδικασία επιλογής της σελίδας που θα πρέπει να ανταλλαγεί καθώς και η μόνιμη αποθήκευση της στο δίσκο σε περίπτωση που έχει μεταβληθεί (για μελλοντική αναφορά) είναι χρονοβόρα.
Μια διεργασία paging daemon τρέχει περιοδικά και επιλέγει ένα σύνολο από σελίδες οι οποίες όταν χρειαστεί θα
μπορούσαν να αντικατασταθούν (ανάλογα με τον αλγόριθμο που έχουμε επιλέξει) και
σε περίπτωση που έχουν μεταβληθεί, τις αποθηκεύει επίσης στο δίσκο. Εάν μια από τις σελίδες που έχουν επιλεχθεί αναφερθεί στο άμεσο
μέλλον, τότε αυτή απλά αφαιρείται από το σύνολο των υποψήφιων για ανταλλαγή.
Μόλις συμβεί ένα σφάλμα μνήμης τότε επιλέγεται αμέσως μια σελίδα από το σύνολο υποψηφίων για ανταλλαγή
Τμηματοποίηση (Segmentation)
Πολλές φορές είναι πιο αποδοτικό να σπάσουμε το χώρο διευθύνσεων (address space) ενός προγράμματος σε διάφορα ανεξάρτητα κομμάτια Πιο εύκολη η πρόσβαση σε κομμάτια της μνήμης από πολλαπλές
διεργασίες (memory sharing) Καλύτερη προστασία
Για παράδειγμα υποθέστε ένα μεταγλωττιστή (compiler) ο οποίος χωρίζει τη εικονική μνήμη σε διάφορα μέρη Πρόγραμμα, πίνακας συμβόλων, πίνακας με τις σταθερές, το stack κλπ. Πόσος χώρος θα πρέπει να κατανεμηθεί για το κάθε μέρος; Τι θα συμβεί εάν ο μεταγλωττιστής τελικά χρειάζεται περισσότερο χώρο
από αυτόν που του έχει κατανεμηθεί; Η λύση είναι να τμηματοποιηθεί η εικονική μνήμη σε ανεξάρτητους
χώρους έτσι που να μπορούν να μεγαλώσουν όσο χρειάζονται
Τμηματοποίηση (Segmentation)
Σελιδοποίηση Τμηματοποίηση
Πρέπει ο προγραμματιστής να γνωρίζει τη μέθοδο;
Όχι Ναι
Πόσοι γραμμικοί χώροι διευθύνσεων 1 Πολλοί
Μπορεί ο χώρος διευθύνσεων να υπερβεί τη φυσική μνήμη;
Ναι Ναι
Μπορεί να ξεχωρίσει ο κώδικας από τα δεδομένα
Όχι Ναι
Υποστηρίζουν κοινή μνήμη Όχι Ναι
Μπορούν να χρησιμοποιηθούν πίνακες με διαφορετικό μέγεθος;
Όχι Ναι
Γιατί ανακαλύφθηκε η κάθε τεχνική; Δυνατόν να τρέξουν προγράμματα μεγαλύτερα από την φυσική μνήμη
Καλύτερη διαχείριση κοινής μνήμης