ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ - ΣΗΜΕΙΩΣΕΙΣ

Σχετικά έγγραφα
Λειτουργικά Συστήματα Η/Υ

ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Εικονική Μνήµη. Κεφάλαιο 8. Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι. Λειτουργικά Συστήματα Ι ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Επ. Καθ. Κ. Λαμπρινουδάκης

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Διδάσκοντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη Λειτουργικά Συστήματα

Εικονική Μνήμη (Virtual Memory)

HY150a Φροντιστήριο 3 24/11/2017

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στα Λειτουργικά Συστήματα

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

3. Σελιδοποίηση μνήμης 4. Τμηματοποίηση χώρου διευθύνσεων

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

Ιεραρχία Μνήμης. Εικονική μνήμη (virtual memory) Επεκτείνοντας την Ιεραρχία Μνήμης. Εικονική Μνήμη. Μ.Στεφανιδάκης

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Μεθόδων Επίλυσης Προβλημάτων

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαχείριση μνήμης II

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Εικονική Μνήμη (Virtual Μemory)

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Εικονική Μνήμη. (και ο ρόλος της στην ιεραρχία μνήμης)

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Δομημένος Προγραμματισμός (ΤΛ1006)

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 8. Χειμερινό Εξάμηνο

Λειτουργικά Συστήματα

Διαδικασιακός Προγραμματισμός

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

Επιπλέον διδακτικό υλικό κρυφών μνημών: set-associative caches, πολιτικές αντικατάστασης, χειρισμός εγγραφών

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Διάλεξη 6: Δείκτες και Πίνακες

C: Από τη Θεωρία στην Εφαρμογή

Δομημένος Προγραμματισμός (ΤΛ1006)

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στον Προγραμματισμό

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

Η γλώσσα προγραμματισμού C

Λειτουργικά Συστήματα (ΗΥ321)

ΠΛΕ- 027 Μικροεπεξεργαστές 9ο μάθημα: Αρχιτεκτονική συστήματος μνήμης: Κρυφές μνήμες εισαγωγή

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαχείριση μνήμης Εργαστηριακές Ασκήσεις

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Αλγόριθμοι Ταξινόμησης Μέρος 1

Εικονική Μνήμη (virtual memory)

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Σελίδα Φορτώθηκε Προσπελάστηκε Συχνότητα R Μ (dirty)

Ανάπτυξη και Σχεδίαση Λογισμικού

Διάλεξη 8η: Αλφαριθμητικά (strings)

Οργάνωση Υπολογιστών

Η γλώσσα προγραμματισμού C

Λειτουργικά Συστήματα

Διάλεξη 15 Απόδοση της Ιεραρχίας Μνήμης Βελτιστοποίηση της απόδοσης

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Διαδικασιακός Προγραμματισμός

Αρχιτεκτονική υπολογιστών

Λειτουργικά Συστήματα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαχείριση μνήμης II

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κατακερματισμός (Hashing)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Λειτουργικά Συστήματα

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Κρυφές Μνήμες. (οργάνωση, λειτουργία και απόδοση)

Ιεραρχία Μνήμης. Ιεραρχία μνήμης και τοπικότητα. Σκοπός της Ιεραρχίας Μνήμης. Κρυφές Μνήμες

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 18η: Διαχείρηση Αρχείων

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Εισαγωγή στον Προγραμματισμό

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Διάλεξη 11η: Δείκτες, μέρος 1

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

12. Συναρτήσεις (Μέρος ΙI)

Συμβολοσειρές Ορίσματα στη main()

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαχείριση μνήμης II

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός (ΤΛ1006)

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Η γλώσσα προγραμματισμού C

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εικονική Μνήµη (Virtual Memory)

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Transcript:

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ - ΣΗΜΕΙΩΣΕΙΣ Διαχείριση Μνήμης Όλα τα σύγχρονα Λειτουργικά Συστήματα (ΛΣ) χρησιμοποιούν εικονική μνήμη πάνω από τη φυσική μνήμη. Με αυτό τον τρόπο, οι διεργασίες δεν μπορούν να έχουν πρόσβαση στη φυσική μνήμη. Αντίθετα, ο πυρήνας συνδέει κάθε μια διεργασία με ένα μοναδικό χώρο εικονικών διευθύνσεων μνήμης. Το ΛΣ χειρίζεται αυτό το χώρο γραμμικά υπό την έννοια ότι οι διευθύνσεις ξεκινούν από το 0 και αυξάνονται μέχρι μια μέγιστη τιμή. Ο εικονικός χώρος διευθύνσεων μνήμης αποτελείται από ένα σύνολο σελίδων (pages). Το μέγεθος κάθε σελίδας είναι συνήθως 4 ΚΒ για 32-bit συστήματα ή 8 ΚΒ για 64-bit συστήματα. Οι σελίδες είναι είτε έγκυρες (valid) ή μη έγκυρες (invalid). Μια έγκυρη σελίδα συνδέεται με μια έγκυρη σελίδα της φυσικής μνήμης ή ένα δευτερεύοντα αποθηκευτικό χώρο. Μια μη έγκυρη σελίδα δεν συνδέεται με κάποια σελίδα φυσικής μνήμης ή κάποιο αποθηκευτικό χώρο και σημαδεύεται ως μη χρησιμοποιούμενος, μη συνδεόμενος χώρος. Τα προγράμματα δεν μπορούν να χρησιμοποιήσουν σελίδες που βρίσκονται σε δευτερεύοντα αποθηκευτικό χώρο μέχρι να συνδεθούν με μια σελίδα στη φυσική μνήμη. Όταν μια διεργασία προσπαθήσει να προσπελάσει μια τέτοια σελίδα, τότε η Μονάδα Διαχείρισης Μνήμης (ΜΔΜ) θα παράξει ένα σφάλμα σελίδας (page fault). Σε αυτή την περίπτωση ο πυρήνας παρεμβαίνει και φέρνει τη σελίδα από το δευτερεύοντα αποθηκευτικό χώρο στη φυσική μνήμη. Λόγω του ότι η φυσική μνήμη μπορεί να είναι γεμάτη, ο πυρήνας βγάζει σελίδες από τη φυσική μνήμη ώστε να τοποθετήσει σελίδες που βρίσκονται στον δευτερεύοντα αποθηκευτικό χώρο. Για την βελτιστοποίηση της απόδοσης έχουν προταθεί και χρησιμοποιούνται αλγόριθμοι που αποφασίζουν το πώς θα γίνει η αντικατάσταση σελίδων στη μνήμη. Συναρτήσεις Διαχείρισης Μνήμης Η γλώσσα C προσφέρει μια οικογένεια συναρτήσεων για τη διαχείριση των φυσικών (raw) bytes μνήμης. Αυτές οι συναρτήσεις έχουν ως ακολούθως:

Ανάθεση bytes Η συνάρτηση memset θέτει τιμή στα n bytes που ξεκινούν από το s και τελειώνουν στο byte c και επιστρέφει s. Παράδειγμα: Η συνάρτηση bzero θέτει μηδενικά σε ένα τμήμα μνήμης. Παράδειγμα: Code 1 #include <stdio.h> #include <string.h> int main () char str[50]; strcpy(str,"this is string.h library function"); puts(str); memset(str,'$',7); puts(str); return(0); Σύγκριση bytes Για τη σύγκριση δύο τμημάτων μνήμης μπορούμε να χρησιμοποιήσουμε τις ακόλουθες συναρτήσεις. Η memcmp συγκρίνει n bytes, τα s1 και s2, και επιστρέφει 0 αν είναι ίσα, τιμή μικρότερη του 0 αν το s1 είναι μικρότερο του s2 και θετική τιμή αν το s1 είναι μεγαλύτερο από το s2. Η συνάρτηση bcmp συγκρίνει τα πρώτα n bytes των s1 και s2 επιστρέφοντας 0 αν είναι ίδια ενώ σε διαφορετική περίπτωση επιστρέφει μια τιμή διαφορετική από το 0.

Λόγω του structure padding (ο compiler προσθέτει bytes σε διάφορους τύπους δεδομένων ώστε να εξασφαλίσει τον minimum αριθμό bytes για κάθε τύπο δεδομένων, π.χ. οι integers θα μπουν σε 4 bytes), η χρήση απ ευθείας των συναρτήσεων memcmp και bcmp δεν είναι αξιόπιστη. Για παράδειγμα, ο ακόλουθος κώδικας θα πρέπει να αποφεύγεται. Αντίθετα θα πρέπει να υιοθετείται κώδικας όπως ο ακόλουθος: Μετακίνηση bytes Η συνάρτηση memmove αντιγράφει τα πρώτα n bytes του src στο dst. Η συνάρτηση memcpy κάνει ακριβώς το ίδιο αλλά είναι γρηγορότερη. Στην memcpy τα src και dst μπορεί να μην επικαλύπτονται. Code 2 #include <stdio.h> #include <string.h> int main () const char src[50] = "Department of Computer Science"; char dest[50]; printf("before memcpy dest = %s\n", dest); memcpy(dest, src, strlen(src)+1); printf("after memcpy dest = %s\n", dest);

return(0); Αναζήτηση bytes Η συνάρτηση memchr εντοπίζει ένα συγκεκριμένο byte σε ένα block μνήμης. Η αναζήτηση γίνεται στα n bytes στη μνήμη που δείχνει ο δείκτης s για το χαρακτήρα c. Η συνάρτηση memrchr κάνει ακριβώς το ίδιο αλλά η αναζήτηση ξεκινά από το τέλος προς την αρχή. Και οι δύο επιστρέφουν ένα δείκτη στο πρώτο byte που ταιριάζει με το c αλλιώς σε περίπτωση λάθους επιστρέφουν το NULL. Code 3 #include <stdio.h> #include <string.h> int main () const char str[] = "Department of Computer Science"; const char ch = 'f'; char *ret; ret = memchr(str, ch, strlen(str)); printf("string after %c is - %s \n", ch, ret); return(0); Κλείδωμα Μνήμης Το demand paging επιτρέπει τις σελίδες μνήμης να μετακινηθούν από το δίσκο και να ανταλλαχθούν πίσω στο δίσκο όταν δεν χρειάζονται πλέον. Αυτό επιτρέπει τις εικονικές διευθύνσεις μνήμης να μην έχουν απ ευθείας σχέση με το σύνολο της φυσικής μνήμης αφού η συνεχής ανταλλαγή σελίδων από / προς το δίσκο δίνουν την ψευδαίσθηση του απεριόριστου όγκου της φυσικής μνήμης. Ως προγραμματιστές μπορούμε να προχωρήσουμε σε κλείδωμα μνήμης ώστε να εξασφαλίσουμε πως κάποιες σελίδες δεν θα τύχουν ανταλλαγής από / προς το δίσκο. Η συνάρτηση mlock κλειδώνει την εικονική μνήμη που ξεκινά στο addr και επεκτείνεται για len στη φυσική μνήμη. Αν η συνάρτηση επιτύχει, τότε θα επιστρέψει 0 αλλιώς το -1. Αν η κλήση περιλαμβάνει ένα μόνο byte, ολόκληρη η σελίδα που περιέχει το συγκεκριμένο byte θα κλειδωθεί και δεν θα τύχει ανταλλαγής.

Η συνάρτηση mlockall κλειδώνει όλες τις διευθύνσεις στο τρέχοντα χώρο διευθύνσεων. Τα flags είναι τα ακόλουθα: Για το ξεκλείδωμα των διευθύνσεων χρησιμοποιούνται οι συναρτήσεις munlock και munlockall. Code 4 #include <stdio.h> #include <stdlib.h> #include <sched.h> #include <sys/mman.h> #include <sys/resource.h> #define SIZE 500 int main(void) struct record char name[128]; int count; unsigned char dummy_array[1024000]; struct record *next; ; struct record *a[size]; struct sched_param param; int i; printf("starting mlockall_example\n"); /* * Preallocate memory required by the application before * real-time processing begins */ /* Insert code here */ /* * Lock down all pages mapped to the process */ printf("locking down process\n");

if(mlockall(mcl_current MCL_FUTURE) < 0) perror("mlockall"); return 1; /* * Begin real-time processing */ /* Insert RT code here */ /* * Release all memory belonging to this process */ printf("finished, cleaning up\n"); munlockall(); return 0; Αλγόριθμοι Αντικατάστασης Σελίδων Όταν παρουσιαστεί ένα σφάλμα σελίδας, το ΛΣ θα πρέπει να επιλέξει μια σελίδα η οποία θα αντικατασταθεί ώστε να απελευθερωθεί χώρος για να μπει η νέα σελίδα. Στη βιβλιογραφία έχουν προταθεί διάφοροι αλγόριθμοι αντικατάστασης σελίδων οι οποίοι περιγράφονται συνοπτικά στις επόμενες παραγράφους. Optimal Page Replacement Algorithm Όταν ένα σφάλμα σελίδας συμβαίνει, κάποιες σελίδες βρίσκονται ήδη στη μνήμη. Ο αλγόριθμος βασίζεται στο πότε και ποια σελίδα θα προσπελαστεί στο επόμενο χρονικό διάστημα. Κάποια σελίδα θα προσπελαστεί αμέσως μετά, κάποια άλλη μετά από 10, 100, 1000 εντολές, κ.λπ. Η σελίδα με την μεγαλύτερη ετικέτα αντικαθίσταται. Το πρόβλημα είναι ότι το ΛΣ δεν μπορεί να ξέρει το ποια σελίδα πρόκειται να προσπελαστεί στο επόμενο χρονικό διάστημα.

First In First Out (FIFO) Page Replacement Algorithm Το ΛΣ διατηρεί τις σελίδες που βρίσκονται στη μνήμη με τη σελίδα που είναι η παλαιότερη να βρίσκεται στην κορυφή της λίστας ενώ η πιο πρόσφατη βρίσκεται στο τέλος. Όταν ένα σφάλμα σελίδας συμβεί τότε αντικαθίσταται η σελίδα που βρίσκεται στην κορυφή της λίστας. Least Recently Used (LRU) Page Replacement Algorithm Ο αλγόριθμος βασίζεται στην υπόθεση ότι οι σελίδες που έχουν χρησιμοποιηθεί πολύ κατά το άμεσο παρελθόν θα χρησιμοποιηθούν και στο μέλλον. Αντίθετα, οι σελίδες που δεν έχουν χρησιμοποιηθεί πρόσφατα πιθανώς να μην χρησιμοποιηθούν και στο μέλλον. Ο αλγόριθμος αντικαθιστά τη σελίδα που δεν χρησιμοποιήθηκε για το περισσότερο χρονικό διάστημα. Not Recently Used (NRU) Page Replacement Algorithm Όταν συμβεί ένα σφάλμα σελίδας το ΛΣ βλέπει όλες τις σελίδες και τις διαιρεί σε τέσσερις κατηγορίες: Αρχικά το ΛΣ θέτει όλες τις σελίδες που μπαίνουν στο πίνακα σελίδων σαν να μη βρίσκονται στη μνήμη. Όταν συμβεί ένα σφάλμα σελίδας, τότε το ΛΣ θέτει το R bit (referenced) ίσο με 1 και ενημερώνει τον πίνακα σελίδων. Αν η ίδια σελίδα ακολούθως τροποποιηθεί τότε ένα άλλο σφάλμα σελίδας θα συμβεί και το ΛΣ θέτει το M bit (modified) ίσο με 1 (το συναντάμε και ως dirty bit). Το R bit αρχικοποιείται περιοδικά (π.χ. κάθε 20 msec) στο 0 ώστε να ξεχωρίζουν οι σελίδες που δεν έχουν αποκτήσει πρόσβαση πρόσφατα. Ο αλγόριθμος αντικαθιστά μια τυχαία σελίδα από αυτές που βρίσκονται στις χαμηλότερες κλάσεις (από το 0 προς το 3).

The Second Chance Page Replacement Algorithm Πρόκειται για μια παραλλαγή του FIFO αλγόριθμου. Ο αλγόριθμος έχει ως εξής: Η σελίδα που είναι η παλιότερη και έχει το R bit ίσο με 0 αντικαθίσταται. Αν το R bit είναι ίσο με 1, τότε τίθεται 0 και η σελίδα μπαίνει στο τέλος της λίστας. The Clock Page Replacement Algorithm Όλες οι σελίδες κρατιούνται σε μια κυκλική λίστα σε μια μορφή ρολογιού. Ένας δείκτης δείχνει στην παλιότερη σελίδα. Αν ένα σφάλμα σελίδας συμβεί, τότε ο αλγόριθμος αντικαθιστά τη σελίδα που δείχνει ο δείκτης εφόσον το R bit είναι ίσο με 0. Αν είναι ίσο με 1, τότε τίθεται ίσο με 0 και ο δείκτης προχωρά στην επόμενη σελίδα για την οποία επαναλαμβάνεται ο έλεγχος. The Working Set Page Replacement Algorithm Το working set είναι το σύνολο των k πιο πρόσφατα αναφερόμενων σελίδων. Το k επιλέγεται εκ των προτέρων και έπειτα από κάθε αναφορά στη μνήμη το σύνολο των σελίδων που χρησιμοποιήθηκαν στις προηγούμενες k αναφορές καθορίζεται μοναδικά. Με αυτό τον τρόπο το ΛΣ προσπαθεί να καθορίσει τις σελίδες που θα βρίσκονται στην μνήμη να είναι αυτές που θα προσπελαστούν στη συνέχεια. Προφανώς το working set αλλάζει με το πέρασμα του χρόνου. Η βασική ιδέα είναι να βρούμε τη σελίδα που δεν είναι στο working set και να την αντικαταστήσουμε.

Code 5 FIFO Page Replacement Algorithm #include<stdio.h> int main() int i,j,n,a[50],frame[10],no,k,avail,count=0; printf("\n ENTER THE NUMBER OF PAGES:\n"); scanf("%d",&n); printf("\n ENTER THE PAGE NUMBER :\n"); for(i=1;i<=n;i++) scanf("%d",&a[i]); printf("\n ENTER THE NUMBER OF FRAMES :"); scanf("%d",&no); for(i=0;i<no;i++) frame[i]= -1; j=0; printf("\tref string\t page frames\n"); for(i=1;i<=n;i++) printf("%d\t\t",a[i]); avail=0; for(k=0;k<no;k++) if(frame[k]==a[i]) avail=1; if (avail==0) frame[j]=a[i]; j=(j+1)%no; count++; for(k=0;k<no;k++) printf("%d\t",frame[k]); printf("\n");

printf("page Fault Is %d",count); return 0; Example Execution ENTER THE NUMBER OF PAGES: 20 ENTER THE PAGE NUMBER : 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 ENTER THE NUMBER OF FRAMES : 3