47
Διαχείριση Μνήμης (Memory Management) Πως κατανέμεται η μνήμη στις διάφορες διεργασίες

Διαχείριση Μνήμης (Memory Management)

  • Upload
    gusty

  • View
    31

  • Download
    0

Embed Size (px)

DESCRIPTION

Διαχείριση Μνήμης (Memory Management). Πως κατανέμεται η μνήμη στις διάφορες διεργασίες. Τύποι Μνήμης. Η μνήμη με μηχανικά μέρη είναι σημαντικά πιο αργή αλλά και αρκετά πιο φθηνή. Οι καταχωριτές (registers) είναι ο πιο ακριβός τύπος μνήμης ενώ η μαγνητική ταινία ο πιο φθηνός τύπος. - PowerPoint PPT Presentation

Citation preview

Page 1: Διαχείριση Μνήμης  (Memory Management)

Διαχείριση Μνήμης (Memory Management)

Πως κατανέμεται η μνήμη στις διάφορες διεργασίες

Page 2: Διαχείριση Μνήμης  (Memory Management)

Τύποι Μνήμης

Η μνήμη με μηχανικά μέρη είναι σημαντικά πιο αργή αλλά και αρκετά πιο φθηνή.

Οι καταχωριτές (registers) είναι ο πιο ακριβός τύπος μνήμης ενώ η μαγνητική ταινία ο πιο φθηνός τύπος.

Προσωρινές και μόνιμες (volatile / non-volatile memory)

Page 3: Διαχείριση Μνήμης  (Memory Management)

Παράδειγμα

Υποθέτουμε ένα σύστημα με 32ΜΒ κύρια μνήμα Το ΛΣ χρειάζεται 16ΜΒ Διεργασίες Α-Δ χρειάζονται 4ΜΒ η κάθε μια. Διεργασίες Ε και Ζ χρειάζονται 2ΜΒ η κάθε μια. Πως θα κατανείμετε την μνήμη στις ακόλουθες

περιπτώσεις Μονοπρογραμματισμός (batch system - Μία

διεργασία κάθε φορά). Πολυπρογραμματισμός.

Τι θα συμβεί εάν οι διεργασίες Ε και Ζ ζητήσουν από 1 επιπρόσθετο ΜΒ.

Page 4: Διαχείριση Μνήμης  (Memory Management)

Μονοπρογραμματισμός

Συστήματα τύπου 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

Page 5: Διαχείριση Μνήμης  (Memory Management)

Πολυπρογραμματισμός με Σταθερή Κατανομή

Η Μνήμη χωρίζεται σε σταθερά διαμερίσματα ή τμήματα (πιθανόν το κάθε ένα με άνισο χώρο).

Σε κάθε διεργασία κατανέμεται ένα διαμέρισμα στο οποίο θα μπορέσει να χωρέσει. Π.χ., μπορεί να μπει στο

μικρότερο ελεύθερο διαμέρισμα στο οποίο χωρεί.

0

Operating System

100Κ

200Κ

Partition 1

Partition 2

Partition M

300Κ

700Κ

1M

Page 6: Διαχείριση Μνήμης  (Memory Management)

Πολυπρογραμματισμός με Σταθερή Κατανομή

Εάν δεν υπάρχει ελεύθερο διαμέρισμα με τον απαιτούμενο χώρο ή εάν η πολιτική είναι να μην «σπαταλούμε» μεγάλα διαμερίσματα για σχετικά μικρές διεργασίες, τότε η διεργασία μπαίνει σε μια ουρά Υπάρχουν διάφορα πιθανά

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

200Κ

0

Operating System

Partition 1

Partition 2

Partition M

300Κ

700Κ

1M

P1 Process 1

P2 Process 2

P4P5 Process 3

Αχρησιμοποίητη μνήμη

Page 7: Διαχείριση Μνήμης  (Memory Management)

0

Operating System

1000

2000

1976

4000

0

Operating System

1000

3000

1976

Μετατόπιση Διεργασίας και Προστασία Μνήμης

JMP 1976……

JMP 1976……

Page 8: Διαχείριση Μνήμης  (Memory Management)

Μετατόπιση Διεργασίας και Προστασία της Μνήμης

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

Page 9: Διαχείριση Μνήμης  (Memory Management)

0

Operating System

1000

4000

2976

Μετατόπιση Διεργασίας και Προστασία Μνήμης

JMP 976……

2000

1976Base

Limit

If(Base+976 < Limit)

JMP Base+976;

Else

Error;

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

Page 10: Διαχείριση Μνήμης  (Memory Management)

Δυναμική Κατανομή Μνήμης

Για να αποφευχθεί η αχρησιμοποίητη μνήμης, μπορεί να χρησιμοποιήσουμε δυναμική κατανομή. Η μνήμη κατανέμεται στις διεργασίες

όταν χρειάζονται και όση χρειάζονται

0

Operating System

Process 1

Process 2

Process 3

Process 4

Κατακερματισμός της Μνήμης (Memory fragmentation)

Επεξεργαστής μπορεί να «μετατοπίσει» όλες τις διεργασίες αλλά η λύση αυτή είναι χρονοβόρα.

Page 11: Διαχείριση Μνήμης  (Memory Management)

Ανταλλαγή Μνήμης

Τι θα συμβεί εάν ο χώρος της μνήμης είναι μικρότερος απ’ ότι χρειάζονται όλες οι διεργασίες; Το ΛΣ αποφασίζει να ανταλλάξει κάποιες

διεργασίες από την κύρια μνήμη στο δίσκο (process swapping)

Το πρόβλημα της διαχείρισης της μνήμης θα ήταν αρκετά πιο εύκολο αν ξέραμε από την αρχή πόση μνήμη θα χρειαστεί η κάθε διεργασία. Τι θα συμβεί εάν η Διεργασία 1 ζητήσει

επιπρόσθετα 75Κ μνήμης (π.χ. με την εντολή malloc()).

Τι θα συμβεί εάν η Διεργασία 1 ζητήσει επιπρόσθετα 105Κ μνήμης

0

Operating System

Process 1

Process 2

500Κ

600Κ

200Κ

900Κ

Page 12: Διαχείριση Μνήμης  (Memory Management)

0

Operating System

Κατανομή Μνήμης

Χώρος για επέκταση

Χώρος πουχρησιμοποιείται

Χώρος για επέκταση

Χώρος πουχρησιμοποιείται

0

Operating System

Χώρος επέκτασης

Πρόγραμμα Α

Δεδομένα Α

Stack A

Χώρος επέκτασης

Πρόγραμμα B

Δεδομένα B

Stack B

Το πρόβλημα παραμένει: Τι θα συμβεί εάν ο μια διεργασία χρειαστεί περισσότερο χώρο από όσο της έχει κατανεμηθεί;

Page 13: Διαχείριση Μνήμης  (Memory Management)

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

Πως το ΛΣ ξέρει πια τμήματα είναι δεσμευμένα και πια ελεύθερα; 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) της ολικής μνήμης.

Page 14: Διαχείριση Μνήμης  (Memory Management)

Bitmap

Υποθέστε πως σε κάποιο ΛΣ το μικρό διάστημα u είναι 32 bits. Η συνολική μνήμη του συστήματος είναι 256ΜΒ.

Πόσο μεγάλο πρέπει να είναι το bitmap;

Υποθέστε πως το ΛΣ θέλει να φορτώσει ένα πρόγραμμα το οποίο χρειάζεται 4ΜΒ μνήμης. Πως το ΛΣ θα βρει το τμήμα στο οποίο να τοποθετήσει το πρόγραμμα; Θα ψάξει για 1,048,576 (1Μ = 220) συνεχόμενα 0!

Το ψάξιμο ενός bitmap για το κατάλληλο χώρο στο οποίο θα τοποθετηθεί μια διεργασία είναι γενικά χρονοβόρα διαδικασία.

2568,134,408 bytes

33

MB

Page 15: Διαχείριση Μνήμης  (Memory Management)

Συνδεδεμένη Λίστα (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

Page 16: Διαχείριση Μνήμης  (Memory Management)

Διαχείριση Συνδεδεμένης Λίστα

Πως θα μεταβληθεί η λίστα όταν εισέλθει η Δ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

Page 17: Διαχείριση Μνήμης  (Memory Management)

Διαχείριση Συνδεδεμένης Λίστα

Πως θα τοποθετούσατε την Δ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

Page 18: Διαχείριση Μνήμης  (Memory Management)

Μονάδα Διαχείρισης Μνήμης (ΜΔΜ)

Ο επεξεργαστής είναι εξοπλισμένος με την ΜΔΜ η οποία είναι υπεύθυνη να μεταφράζει τις εικονικές διευθύνσεις (virtual address) σε πραγματικές διευθύνσεις.

Π.χ., όταν ο επεξεργαστής εκτελέσει την εντολή

MOV REG 1000η ΜΔΜ βρίσκει σε πιο σημείο της πραγματικής μνήμης αντιστοιχεί η διεύθυνση 1000.

Page 19: Διαχείριση Μνήμης  (Memory Management)

Εικονική Μνήμη

Όταν τρέχει κάποιο πρόγραμμα, είναι υποχρεωτικό να είναι ολόκληρο φορτωμένο στην κύρια μνήμη; Όχι κατ’ ανάγκη!

Βασική ιδέα Το ΛΣ θα μπορούσε να φορτώσει το «αρχικό» μέρος του

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

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

Τότε το ΛΣ αναλαμβάνει να βρει χώρο στην κύρια μνήμη (πιθανόν ανταλλάσσοντας (swapping) κάποιον άλλο χώρο) και φορτώνει το ζητούμενο κομμάτι.

Αυτό επαναλαμβάνεται όσο χρειάζεται.

Page 20: Διαχείριση Μνήμης  (Memory Management)

Εικονικές Διευθύνσεις (Virtual Addresses)

Ένα πρόγραμμα υποθέτει ότι ξεκινά πάντα στην διεύθυνση 0 Κάθε φορά που αναφέρεται σε μια διεύθυνση (π.χ., 1876) δεν

αναφέρεται στη πραγματική διεύθυνση 1876 αλλά στην διεύθυνση που απέχει 1876 bytes από την αρχή του προγράμματος (θυμηθείτε τους καταχωρητές base και limit).

Οι διευθύνσεις αυτές (οι οποίες δημιουργούνται από το πρόγραμμα) ονομάζονται εικονικές διευθύνσεις virtual addresses.

Επίσης κάθε πρόγραμμα υποθέτει πως μπορεί να έχει όλη την δυνατή μνήμη στην διάθεση του (virtual address space). Π.χ., σε 32-bit σύστημα, κάθε πρόγραμμα μπορεί να χρησιμοποιήσει όλο

τον χώρο από 0 έως 232 = 4096ΜΒ. Με αυτό τον τρόπο είναι δυνατόν να τρέξουμε προγράμματα τα οποία

είναι κατά πολύ μεγαλύτερα από το μέγεθος της φυσική μνήμης που υπάρχει στο σύστημα.

Π.χ., σε υπολογιστή με 256ΜΒ μνήμη μπορούμε να τρέξουμε πρόγραμμα το οποίο μπορεί να είναι μέχρι 4096ΜΒ.

Page 21: Διαχείριση Μνήμης  (Memory Management)

Σελιδοποίηση (Paging)

Ολόκληρος ο χώρος των εικονικών διευθύνσεων χωρίζεται σε σελίδες (pages).

Ολόκληρη η πραγματική μνήμη χωρίζεται επίσης σε σελίδες πλαίσια (page frames)

Όλες οι σελίδες και σελίδες πλαίσια είναι του ίδιου μεγέθους (π.χ., 4KB).

Η ΜΔΜ για κάθε διεργασία διατηρεί ένα πίνακα με δείκτες στον οποίο φαίνεται ποιες από τις σελίδες (εικονικές) είναι φορτωμένες στην κύρια μνήμη και σε πια σελίδα πλαίσιο της πραγματικής μνήμης είναι τοποθετημένη.

Εάν ζητηθεί σελίδα η οποία δεν είναι φορτωμένη στην πραγματική μνήμη τότε η ΜΔΜ στέλνει «σφάλμα μνήμης» (page fault) στο ΛΣ το οποίο θα πρέπει να φροντίσει να φορτωθεί η σελίδα και να ενημερώσει τη ΜΔΜ.

Page 22: Διαχείριση Μνήμης  (Memory Management)

Παράδειγμα

Υποθέτουμε ένα 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

Page 23: Διαχείριση Μνήμης  (Memory Management)

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

Page 24: Διαχείριση Μνήμης  (Memory Management)

Μονάδα Διαχείρισης Μνήμης

Θεωρητικά, κάθε διεργασία θα μπορούσε να έχει τον δικό της πίνακα φυλαγμένο σε καταχωρητές της ΜΔΜ. Κάθε φορά που η διεργασία αναφέρεται στη μνήμη, τότε «εύκολα» βρίσκει

τη φυσική διεύθυνση. Γιατί μια τέτοια λύση δεν είναι εφικτή;

Υποθέστε ένα σύστημα με 32-bit διευθύνσεις και 4KB σελίδες. Πόσες δυνατές σελίδες υπάρχουν;

Απάντηση: 220 = 1Μ Υποθέστε ένα σύστημα με 64-bit διευθύνσεις και 4KB σελίδες. Πόσες

δυνατές σελίδες υπάρχουν; Απάντηση: 252 !!

Το μέγεθος της αναγκαίας μνήμης είναι τεράστιο με αποτέλεσμα η ανταλλαγή διεργασιών (process switching) να είναι χρονοβόρα!

Θα μπορούσε ο πίνακας αυτός να φυλαγόταν στην κύρια μνήμη; Όχι, αφού για κάθε αναφορά στην μνήμη θα χρειαζόταν επιπρόσθετη

αναφορά για την ανεύρεση της φυσικής διεύθυνσης!

Page 25: Διαχείριση Μνήμης  (Memory Management)

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 26: Διαχείριση Μνήμης  (Memory Management)

Δομή Καταχωρήσεων στο Πίνακα ΜΔΜ

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

Page Frame NumberprotectionUnused

Present/absent bit

Modified

Referenced

Caching disabled

Protection (1-3bits): Προνόμια πρόσβασης στη σελίδα Modified/referenced bits: χρήση της σελίδας Caching disabling: Χρησιμοποιείται κυρίως για συσκευές

Ε/Ε οι οποίες παρουσιάζονται σαν διευθύνσεις μνήμης.

Page 27: Διαχείριση Μνήμης  (Memory Management)

Αρχή της «Τοπικότητας»Principle of Locality or Locality of Reference

Οι αναφορές στη μνήμη συνήθως γίνονται από / προς «κοντινές» διευθύνσεις. Εάν σε μια επανάληψη υπήρξε αναφορά στη διεύθυνση

xyz τότε υπάρχει σχετικά ψηλή πιθανότητα ότι και η επόμενη αναφορά θα είναι σε κάποια διεύθυνση πολύ κοντά xyz.

Κάποιος μπορεί να χρησιμοποιήσει την αρχή της τοπικότητας για να μειώσει το μέγεθος του πίνακα στην ΜΔΜ καθώς και για να αποφασίσει ποιες σελίδες να φορτώσει στην κύρια μνήμη. Πώς;

Page 28: Διαχείριση Μνήμης  (Memory Management)

Translation Lookaside Buffers TLB

Λόγω του μεγάλου μεγέθους του πίνακα πολλά συστήματα αποφεύγουν να φορτώνουν ολόκληρο τον πίνακα στην ΜΔΜ.

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

ψάχνει το TLB. Για καλύτερη απόδοση, η ΜΔΜ μπορεί να είναι εξοπλισμένη με υλικό

το οποίο ελέγχει όλες τις καταχωρήσεις του TLB παράλληλα. Εάν η ζητούμενη σελίδα δεν βρεθεί στο TLB τότε η ΜΔΜ ψάχνει τη

σελίδα στον πίνακα που είναι φορτωμένος στην κύρια μνήμη. Χρησιμοποιώντας την αρχή της τοπικότητας, η ΜΔΜ ενημερώνει το

TLB προσθέτοντας την νέα σελίδα και αφαιρώντας κάποια άλλη. Το TLB συνήθως έχει το πολύ 64 καταχωρήσεις.

Για απλοποίηση του υλικού της ΜΔΜ, σε πολλά συστήματα το ρόλο της διαχείρισης της ΜΔΜ αναλαμβάνει το ΛΣ.

Page 29: Διαχείριση Μνήμης  (Memory Management)

Αλγόριθμοι Αντικατάστασης Σελίδων

Πως αποφασίζουμε ποιες σελίδες θα φορτωθούν στην κύρια μνήμη και ποιες θα μείνουν στον σκληρό δίσκο;

Βέλτιστος αλγόριθμος αντικατάστασης (optimal replacement algorithm) Στο σύνολο των διεργασιών που είναι φορτωμένες στη μνήμη,

υπολογίζουμε το χρόνο που θα ξαναχρησιμοποιηθεί η κάθε μια. Επιλέγουμε αυτή που πρόκειται να χρησιμοποιηθεί πιο μακριά στο μέλλον.

Γενικά ο αλγόριθμος αυτός δεν είναι εφαρμόσιμος αφού το ΛΣ δεν μπορεί να προβλέψει τους χρόνους που θα χρησιμοποιηθεί η κάθε σελίδα.

Ο αλγόριθμος αυτός γενικά χρησιμοποιείται σαν μέτρο σύγκρισης των εφαρμόσιμων αλγορίθμων.

Page 30: Διαχείριση Μνήμης  (Memory Management)

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) και πιθανόν να έχει ξαχαχρησιμοποιηθεί αρκετές φορές από τότε που φορτώθηκε πρώτη φορά!

Page 31: Διαχείριση Μνήμης  (Memory Management)

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;

Page 32: Διαχείριση Μνήμης  (Memory Management)

Σ 10 6

Second Chance Page Replacement Algorithm

Επιλέγουμε τη σελίδα η οποία ήταν φορτωμένη στη μνήμη το περισσότερο χρόνο.

Σε περίπτωση που το R=1, τότε ξέρουμε πως η σελίδα έχει χρησιμοποιηθεί τελευταία, οπόταν Θέτουμε το R=0. Ενημερώνουμε τον χρόνο φόρτωσής (θέτοντας τον στην δεδομένη στιγμή) Τοποθετούμε την συγκεκριμένη σελίδα στο τέλος της ουράς. Επιλέγουμε την επόμενη σελίδα και επαναλαμβάνουμε.

Σ 6 7 Σ 11 8 Σ 1210 Σ 3 12Σ 1013

Σελίδα που φορτώθηκε πρώτη

Σελίδα που φορτώθηκε τελευταία

Page 33: Διαχείριση Μνήμης  (Memory Management)

Clock Page Replacement Algorithm

Ο ίδιος με τον second chance page replacement αλγόριθμο. Η μόνη διαφορά είναι στην υλοποίηση όπου ο clock page replacement αλγόριθμος υλοποιεί μια κυκλική λίστα.

Σ1

Σ6

Σ11

Σ5

Σ4

Σ7

Σ15 Σ3

Σ8 Σ13

Ο αλγόριθμος τρέχει κάθε φορά που το ΛΣ χρειάζεται να αντικαταστήσει μια σελίδα.

Page 34: Διαχείριση Μνήμης  (Memory Management)

Least Recently Used (LRU) Page Replacement Algorithm

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

Ο LRU είναι μια προσπάθεια υλοποίησης του βέλτιστου αλγορίθμου.

Ο LRU επιλέγει την σελίδα η οποία δεν έχει χρησιμοποιηθεί για τον περισσότερο χρόνο

Υλοποίηση: Οι σελίδες διατηρούνται σε μια συνδεδεμένη λίστα όπου η σελίδα

που χρησιμοποιήθηκε πιο πρόσφατα εμφανίζεται στην αρχή της λίστας και αυτή που χρησιμοποιήθηκε το λιγότερο πρόσφατα στο τέλος

Κάθε φορά που υπάρχει αναφορά σε μια σελίδα, αυτή μεταφέρεται στην αρχή της λίστας

Χρονοβόρα λύση αφού πρέπει να αλλάζουν οι δείκτες σε κάθε βήμα.

Page 35: Διαχείριση Μνήμης  (Memory Management)

Least Recently Used (LRU) Page Replacement Algorithm

Υλοποίηση 1 σε υλικό: Το σύστημα έχει ένα μετρητή (64-bit) ο οποίος αυξάνεται αυτόματα

σε κάθε βήμα. Η κάθε καταχώρηση στον πίνακα με τις σελίδες (page table entry)

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

καταχώρηση της αντιγράφεται η τιμή του μετρητή Ο αλγόριθμος επιλέγει τη σελίδα της οποίας ο μετρητής έχει την πιο

μικρή τιμή. Υλοποίηση 2 σε υλικό:

Το ΛΣ διατηρεί ένα πίνακα με nxn bits Κάθε φορά που γίνεται αναφορά στη σελίδα k όλα τα bits της σειράς

k γίνονται 1 και τα bits κάθε στήλης 0. Ο αλγόριθμος επιλέγει την σελίδα στην οποία αντιστοιχεί η

μικρότερη δυαδική τιμή

Page 36: Διαχείριση Μνήμης  (Memory Management)

Not Frequently Used (NFU) Page Replacement Algorithm

Οι προηγούμενοι 2 αλγόριθμοι χρειάζονται τη βοήθεια του υλικού, αλλά οι πλείστοι επεξεργαστές εν παρέχουν αυτή τη βοήθεια.

Αλγόριθμος σε λογισμικό Για κάθε σελίδα υπάρχει ένας καταχωρητής (shift register) Σε κάθε σήμα διακοπής από το ρολόι (clock interrupt) το ΛΣ

σπρώχνει την τιμή του R-bit στην πιο αριστερή θέση του καταχωρητή

Όταν το ΛΣ θέλει να επιλέξει σελίδα για να αντικαταστήσει επιλέγει αυτή της οποίας ο καταχωρητής έχει την μικρότερη τιμή

Σε περίπτωση που δύο ή περισσότεροι καταχωρητές έχουν την ίδια τιμή, διαλέγει μια στην τύχη.

Ποίες οι διαφορές του NFU από τον LRU; Στον NFU δεν ξεχωρίζουμε μεταξύ σελίδων που αναφέρθηκαν στον

ίδιο κύκλο του clock interrupt. Ο NFU «ξεχνά» μετά από κάποιους κύκλους.

Page 37: Διαχείριση Μνήμης  (Memory Management)

Working Set Page Replacement Algorithm

Χρησιμοποιώντας την αρχή της τοπικότητας, σε κάθε χρονική στιγμή μπορούμε να ορίσουμε τις σελίδες που αποτελούν το σύνολο εργασίας (working set) μιας διεργασίας

Η ιδέας του working set είναι σημαντική αφού περιορίζει τα σφάλματα σελίδας (page faults) και την καθυστέρηση αντικατάστασης σελίδων.

Πρακτικά το σύνολο εργασίας μπορεί να ορισθεί σαν το σύνολο των σελίδων που έχουν αναφερθεί στους τελευταίους n κύκλους ή τ msec. Για κάθε σελίδα υπάρχει καταχώρηση στον πίνακα σελίδων με τον χρόνο

στον οποίο αναφέρθηκε τελευταία η σελίδα. Σε κάθε κύκλο εάν το R-bit =1 τότε ενημερώνεται η καταχώρηση με τον

παρόν χρόνο. Εάν το R=0 και η ηλικία (age) της σελίδας είναι μεγαλύτερη από τ τότε η

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

working set) τότε επιλέγεται αυτή με την μεγαλύτερη ηλικία.

Page 38: Διαχείριση Μνήμης  (Memory Management)

Working Set Clock Page Replacement Algorithm

Όλες οι σελίδες οργανώνονται σε μια κυκλική λίστα στην οποία αναγράφεται επίσης ο χρόνος τελευταίας αναφοράς στη σελίδα.

Όταν α αλγόριθμος ψάχνει σελίδα για αντικατάσταση, ελέγχει το R bit. Εάν είναι 1 τότε ενημερώνεται ο τελευταίος χρόνος αναφοράς

Εάν είναι 0 και η ηλικία της σελίδας είναι μεγαλύτερη από το τ τότε η σελίδα είναι υποψήφια για αντικατάσταση

Σ11121

Σ6

Σ11

Σ51432

Σ41321

Σ7

Σ15Σ3

1220

Σ8 Σ13

Page 39: Διαχείριση Μνήμης  (Memory Management)

Σχεδιασμός Συστημάτων Σελίδωσης

Πολιτικές για «τοπική» (local) ή «γενική» (global) κατανομή σελίδων.

Έλεγχος Φόρτου (Load control) Μέγεθος Σελίδας (Page size) Σελίδες για εντολές (πρόγραμμα) ή δεδομένα και Κοινές

σελίδες (Shared memory) Αντικατάσταση σελίδων (Cleaning policy)

Page 40: Διαχείριση Μνήμης  (Memory Management)

Πολιτικές για «τοπική» (local) ή «γενική» (global) κατανομή σελίδων

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

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

Διεργασία Σελίδα Ηλικία

Α

Α

Α

1

7

12

7

3

9

Β

Β

Β

5

2

6

2

10

1

Υποθέστε ότι στη δεδομένη στιγμή η διεργασία Α χρειάζεται τη σελίδα Α6. Ποια σελίδα θα πρέπει να αντικαταστήσει;

Τοπική πολιτική Α12 Γενική πολιτική Β2

Page 41: Διαχείριση Μνήμης  (Memory Management)

Πολιτικές για τοπική ή γενική κατανομή σελίδων

Σε σταθερές κατανομές, πως το ΛΣ αποφασίζει πόσες σελίδες να κατανείμει σε κάθε διεργασία; Κάθε διεργασία παίρνει ίσο μερίδιο Κάθε διεργασία παίρνει μερίδιο ανάλογο με το μέγεθος της

Οι γενικές κατανομές δουλεύουν καλύτερα απ’ ότι οι τοπικές κατανομές ειδικά σε περιπτώσεις που χρησιμοποιείται το working set. Εάν σε μια διεργασία με μικρό working set δώσουμε πολλές σελίδες, τότε

σπαταλούμε τη μνήμη Εάν σε μια διεργασία με μεγάλο working set δεν δώσουμε αρκετές σελίδες,

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

τρέξει Καθώς η διεργασία τρέχει μπορεί το ΛΣ να αλλάζει το αριθμό σελίδων

κάθε διεργασίας Π.χ. παρακολουθώντας τη συχνότητα σφαλμάτων σελίδας. Πως θα δούλευε

ένας τέτοιος αλγόριθμος;

Page 42: Διαχείριση Μνήμης  (Memory Management)

Έλεγχος Φόρτου (Load Control)

Ας υποθέσουμε πως υπάρχει τρόπος να υπολογίσουμε ακριβώς το working set της κάθε διεργασίας.

Μπορούμε με βεβαιότητα να περιορίσουμε τη συχνότητα των σφαλμάτων σελίδας; Thrashing: το φαινόμενο κατά το οποίο ο επεξεργαστής

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

Τι θα συμβεί στην περίπτωση που το working set όλων των έτοιμων (ready) διεργασιών είναι μεγαλύτερο από την διαθέσιμη μνήμη;

Σε τέτοιες περιπτώσει το ΛΣ θα πρέπει να μεταφέρει κάποιες διεργασίες στο δίσκο (swapping) μέχρι που κάποια διεργασία από αυτές που θα μείνουν τελειώσει.

Page 43: Διαχείριση Μνήμης  (Memory Management)

Μέγεθος Σελίδας (Page Size)

Γιατί μικρές σελίδες; Η τελευταία σελίδα κάθε προγράμματος ή δεδομένων δεν θα είναι

γεμάτη. Κατά μέσο όρο μόνο η μισή σελίδα θα είναι γεμάτη Εσωτερικός Κατακερματισμός (Internal Fragmentation )

Εάν οι σελίδες είναι μεγάλες τότε ένα μεγάλο μέρος του προγράμματος θα είναι φορτωμένο στη κύρια μνήμη. Όμως υπάρχει μεγάλη πιθανότητα μονό μικρό μέρος της σελίδας να είναι όντως στο working set της διεργασίας

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

(page table) και συνεπώς θα χρειάζεται μικρότερος πίνακας Σε κάποια συστήματα ο πίνακας σελίδων φορτώνεται σε καταχωρητές!

Μεγάλες σελίδες φορτώνουν σχετικά πιο γρήγορα από ότι μικρές σελίδες Ο μεγαλύτερος χρόνος πρόσβασης στο δίσκο είναι ο χρόνος εντοπισμού του

ζητούμενου τμήματος

Page 44: Διαχείριση Μνήμης  (Memory Management)

Ξεχωριστές Σελίδες για Πρόγραμμα ή Δεδομένα και Κοινές Σελίδες (Shared Memory)

Ένα πρόγραμμα μπορεί να έχει δύο ξεχωριστούς (εικονικούς) χώρους I-Space: Instruction space D-Space: Data Space Με αυτό τον τρόπο είναι δυνατό να αυξήσουμε ακόμα περισσότερο το

μέγεθος ενός προγράμματος Το υλικό ξέρει πως ότι

αν χρειάζεται εντολή πρέπει να ψάξει τον πίνακα σελίδων με τις εντολές της διεργασίας

αν χρειάζεται δεδομένα πρέπει να ψάξει τον πίνακα σελίδων με τα δεδομένα της διεργασίας

Κάποιες διεργασίες μπορούν να έχουν κοινό I-Space και διαφορετικό D-Space Μπορεί να υπάρχει δυνατότητα χρήσης κοινού D-Space αλλά σε

περιπτώσεις Read Only. Υπάρχει περίπτωση που σε προχωρημένα συστήματα οι χρήστες

να μπορούν να ελέγχουν την εικονική μνήμη για σκοπούς προγραμματισμού διεργασιών με κοινή μνήμη.

Page 45: Διαχείριση Μνήμης  (Memory Management)

Αντικατάσταση Σελίδων (Cleaning Policy)

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

Μια διεργασία paging daemon τρέχει περιοδικά και επιλέγει ένα σύνολο από σελίδες οι οποίες όταν χρειαστεί θα

μπορούσαν να αντικατασταθούν (ανάλογα με τον αλγόριθμο που έχουμε επιλέξει) και

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

μέλλον, τότε αυτή απλά αφαιρείται από το σύνολο των υποψήφιων για ανταλλαγή.

Μόλις συμβεί ένα σφάλμα μνήμης τότε επιλέγεται αμέσως μια σελίδα από το σύνολο υποψηφίων για ανταλλαγή

Page 46: Διαχείριση Μνήμης  (Memory Management)

Τμηματοποίηση (Segmentation)

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

διεργασίες (memory sharing) Καλύτερη προστασία

Για παράδειγμα υποθέστε ένα μεταγλωττιστή (compiler) ο οποίος χωρίζει τη εικονική μνήμη σε διάφορα μέρη Πρόγραμμα, πίνακας συμβόλων, πίνακας με τις σταθερές, το stack κλπ. Πόσος χώρος θα πρέπει να κατανεμηθεί για το κάθε μέρος; Τι θα συμβεί εάν ο μεταγλωττιστής τελικά χρειάζεται περισσότερο χώρο

από αυτόν που του έχει κατανεμηθεί; Η λύση είναι να τμηματοποιηθεί η εικονική μνήμη σε ανεξάρτητους

χώρους έτσι που να μπορούν να μεγαλώσουν όσο χρειάζονται

Page 47: Διαχείριση Μνήμης  (Memory Management)

Τμηματοποίηση (Segmentation)

Σελιδοποίηση Τμηματοποίηση

Πρέπει ο προγραμματιστής να γνωρίζει τη μέθοδο;

Όχι Ναι

Πόσοι γραμμικοί χώροι διευθύνσεων 1 Πολλοί

Μπορεί ο χώρος διευθύνσεων να υπερβεί τη φυσική μνήμη;

Ναι Ναι

Μπορεί να ξεχωρίσει ο κώδικας από τα δεδομένα

Όχι Ναι

Υποστηρίζουν κοινή μνήμη Όχι Ναι

Μπορούν να χρησιμοποιηθούν πίνακες με διαφορετικό μέγεθος;

Όχι Ναι

Γιατί ανακαλύφθηκε η κάθε τεχνική; Δυνατόν να τρέξουν προγράμματα μεγαλύτερα από την φυσική μνήμη

Καλύτερη διαχείριση κοινής μνήμης