Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Weatherly (2009) MinixVM: An Implementation of Virtual Memory in Minix 3.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Weatherly (2009) MinixVM: An Implementation of Virtual Memory in Minix 3."— Μεταγράφημα παρουσίασης:

1 Weatherly (2009) MinixVM: An Implementation of Virtual Memory in Minix 3

2 Σκοπός Η ενσωμάτωση υποστήριξης για virtual memory στο Minix 3 Βάση τροποποιήσεων η έκδοση 3.1.3α

3 Προβλήματα Ανάθεση ολόκληρου του process – Οδηγεί σε εσωτερικό κατακερματισμό της μνήμης οι διεργασίες δε χρησιμοποιούν πάντοτε όλη τη μνήμη που ανατίθεται – Και εξωτερικό κατακερματισμό Σχηματισμός πολλών οπών που είναι δύσκολο να χρησιμοποιηθούν – Στο Minix τουλάχιστον το read-only κομμάτι διαμοιράζεται στα processes Αλλά τα προβλήματα παραμένουν

4 Προβλήματα Η ανάθεση μνήμης γίνεται στατικά – Όλοι οι πόροι πρέπει να δηλωθούν στον πηγαίο κώδικα – Ο κακός υπολογισμός των απαιτούμενων πόρων οδηγεί σε προβλήματα κατά το run-time Τερματισμός λόγω ανεπαρκούς μνήμης Σημαντικός εσωτερικός κατακερματισμός – Δύσκολο το porting προγραμμάτων καθώς τα περισσότερα θεωρούν τη μνήμη ως «άπειρη» Virtual memory!

5 Swapping Υπάρχει περιορισμένη υποστήριξη για swapping – Η ανάθεση μνήμης γίνεται σε κομμάτια που αφορούν όλη τη διεργασία – Μπορεί να γίνει swap, αλλά λόγω του τρόπου ανάθεσης μνήμης, πρέπει να γίνει swap όλο το process – Μπορεί να καταλήξει πολύ πιο γρήγορα σε καταστάσεις thrashing

6 MinixVM Βασική διαφορά, ο ορισμός εξ΄αρχής του memory object Στο minix 3, memory object -> η ανάθεση κομματιού μνήμης που χρειάζεται η διεργασία Στο minixVM, η ανάθεση γίνεται σε διακριτές σελίδες (pages) Η διαχείριση των σελίδων θα γίνει μέσω ενός νέου server (page server)

7 Έννοιες Για τη χρήση VM συνήθως χρειάζονται – Hardware – Page fault handler – Page allocator – Process manager – File system interface Μπορούν να τροποποιηθούν υπάρχοντα στοιχεία του minix 3 – Page fault handler στο kernel – PM για δρομολόγηση page-fault μηνυμάτων – VFS για την ανάγνωση εκτελέσιμων προγραμμάτων όταν γίνει page fault Για τον καλύτερο συντονισμό – page server

8 Page server Διαχείριση του address space για όλες τις διεργασίες Καθορισμός αν κάποιο page fault αντιπροσωπεύει έγκυρη απαίτηση πρόσβασης στη μνήμη για κάποια διεργασία Ο page server γίνεται memory manager, καθώς πρέπει να έχει τη διαχείριση και του physical address space

9 Page server Δομές δεδομένων – Process metadata Process ID, endpoint number Ακόμα ένας server που πρέπει να γνωρίζει για τη δημιουργία/τερματισμό διεργασιών – Hardware page tables Δομές που διαβάζει απ’ευθείας το MMU To kernel δε μπορεί να κάνει απ’ευθείας δυναμική εκχώρηση μνήμης αλλά μπορεί να διαβάσει όλες τις διευθύνσεις φυσικής μνήμης Υλοποίηση των hardware page tables σε userspace program

10 Page server Δομές δεδομένων – Supplemental page tables Χειρισμός περιπτώσεων όπου η μνήμη έχει εκχωρηθεί αλλά δε βρίσκεται στο κύριο υλικό (η σελίδα έχει γίνει swapped out στο δίσκο) Ο server πρέπει να γνωρίζει ποιές από τις σελίδες στο δίσκο ανήκουν σε ποιά διεργασία ώστε να μπορεί να ελέγχει την εγκυρότητα της αίτησης πρόσβασης σε αυτές

11 Υλοποίηση Στο minix, το kernel και οι κρίσιμοι servers γίνονται compile σε ένα ενιαίο binary το οποίο φορτώνεται από boot monitor κατά τη διαδικασία εκκίνησης Έτσι δεν έχει νόημα να φορτώσουμε τον page server πριν από άλλες υπηρεσίες καθώς τέτοια διαδικασία δεν υποστηρίζεται. Κατάληξη: οι servers τρέχουν σε non-paged mode

12 Περιορισμοί υλοποίησης Κάποιες διεργασίες δε μπορούν να γίνουν paged – Servers Περιορισμένο heap space – Καθώς ο page server δεν είναι paged, έχει τον ίδιο περιορισμό του heap με τις παραδοσιακές διεργασίες, καθώς απαιτεί στατική εκχώρηση μνήμης.

13 Βασικές αρχές Εκκίνηση 1.Το boot monitor φορτώνει και περνάει τον έλεγχο στο kernel 2.Το kernel κάνει αρχικοποιήση και μεταφέρει τον έλεγχο στον PM 3.O PM ζητά το χάρτη της μνήμης από το boot monitor, καθώς αυτό ξέρει ποιά κομμάτια μνήμης χρησιμοποιούνται ήδη 4.Το boot monitor στέλνει το χάρτη 5.O PM επιστρέφει τον έλεγχο στο kernel 6.Αργότερα το kernel μεταφέρει τον έλεγχο στον κώδικα αρχικοποίησης του page server 7.Ο page server ζητά το χάρτη της μνήμης από τον PM 8.Ο PM στέλνει το χάρτη 9.O Page server επιστρέφει τον έλεγχο στο kernel. Αν δεν χρειάζονται αρχικοποίηση άλλοι servers, το kernel εκτελεί την init.

14 Exec notification 1.O χρήστης ζητά ένα exec() στέλνοντας μήνυμα στον PM (blocking call οπότε η διεργασία σταματά μέχρι την εκτέλεση του exec) 2.O PM στέλνει μήνυμα στον page server ότι ξεκινά μια νέα διεργασία (blocking call γιατί ο PM χρειάζεται το page directory base address από τον page server για να συνεχίσει) 3.O page server απαντά στον PM με το page directory base register για το καινούριο process 4.O PM ειδοποιεί το kernel (sys_exec()) για την ολοκλήρωση του exec (blocking call καθώς ο PM πρέπει να απαντήσει συγχρονισμένα στην καλούσα διεργασία) 5.Το kernel απαντά με το exec status 6.Ο PM περνά το exec status στην καλούσα διεργασία

15 Page fault handling 1.To hardware εντοπίζει ένα page fault exception και στέλνει τον έλεγχο στον σημείο που ορίζει το kernel (page fault handler) 2.To kernel στέλνει non- blocking ειδοποίηση στον PM 3.Ο PM επεξεργάζεται την ειδοποίηση από το kernel και επιστρέφει μήνυμα για να πάρει τις λεπτομέρειες του page fault. Μπλοκάρει μέχρι να λάβει απάντηση 4.To kernel επιστρέφει τις λεπτομέρειες

16 Page fault handling 5.Ο PM στέλει μήνυμα στον page server για να ελέγξει την εγκυρότητα του page fault request 6.O page server απαντά. Αν δεν είναι έγκυρο, το PM αναφέρει στο kernel 7.Αλλιώς στέλνει μήνυμα στο VFS για να διαβάσει τη σχετική σελίδα. 8.O VFS παντά με το σχετικό status 9.O PM στέλνει μήνυμα στον page server για να ειδοποιήσει για το αποτέλεσμα της επεξεργασίας του page fault 10.O PM στέλει μήνυμα στο kernel, για να ειδοποιήσει για το αποτέλεσμα της επεξεργασίας του page fault

17 Χρήση registers CR0 – το paging είναι διαθέσιμο όταν το 31 ο bit αυτού του register είναι ενεργοποιημένο CR2 – με τη λήψη ενός page fault exception, το υλικό βάζει στο register αυτό τη γραμμική διεύθυνση που προκάλεσε το fault CR3 – περιέχει τη διεύθυνση της βάσης για τα hardware page tables και αλλάζει σε κάθε context switch διεργασίας

18 Σύνοψη αλλαγών Kernel – Register access Για αρχιτεκτονική Intel, φορτώνεται το register CR2 που περιέχει τη γραμμική διεύθυνση που προκάλεσε το page fault Προστέθηκε μια assembly routine ώστε η τιμή να μπορεί να περάσει τον page fault handler – Page fault exception handler Η default δράση ήταν να στέλνεται ένα SIGSEGV σήμα στην διεργασία που προκάλεσε το πρόβλημα. Τώρα διαβάζεται η διεύθυνση από το CR2 και ειδοποιείται ο PM. – VM mapping Προστέθηκαν συναρτήσεις για τη μετάφραση εικονικών σε πραγματικές διευθύνσεις (mapping) – Exec system call Τροποποιήθηκε το SYS_EXEC ώστε να καταγράφει το page directory base address στο process data structure του kernel, με σκοπό να είναι διαθέσιμο στο register CR3 κατά τη διάρκεια ενός context switch – Process switch Το kernel πρέπει να φορτώσει το CR3 με το base address των hardware page tables. Τροποποιήθηκε ο σχετικός κώδικας.

19 Σύνοψη αλλαγών PM – Memory management Μεταφορά της διαχείρισης μνήμης στον page server, ώστε να έχει πλήρη έλεγχο του physical address space Αλλαγή των συναρτήσεων allocate, free, copy free memory holes σε μηνύματα προς τον page server – Page server initialization Αφού ο page server τρέχει μετά τον PM, με ανταλλαγή μηνυμάτων παίρνει το χάρτη της μνήμης από τον PM – Page fault processing Page fault exceptions: από το kernel στον PM με χρήση του HARD_INT προς τον PM (ανορθόδοξο αλλά ο μόνος τρόπος). Page fault validation: προστέθηκε μηχανισμός επικοινωνίας με τον page server ώστε να γνωρίζει ο PM για την εγκυρότητα της αίτησης Page reading: προστέθηκε μηχανισμός επικοινωνίας με τον VFS για τα αποτελέματα της ανάγνωσης από το δίσκο.

20 Σύνοψη αλλαγών PM – Exec processing Ελαφρά τροποποίηση ώστε να μη φορτώνεται το executable από το δίσκο, αφήνοντάς το να γίνει paged κατ’απαίτηση αργότερα. Υποστήριξη ειδοποίησης προς τον page server VFS – Executable data addition Πρόσθεση πληροφοριών στο vfs image κάποιου process ώστε να διατηρούνται: – Το inode του εκτελέσιμου – Το endpoint του file system driver για το file system στο οποίο βρίσκεται το εκτελέσιμο – Το μήκος του header του εκτελέσιμου για τον υπολογισμό offsets καθώς διαβάζονται τμήματά του προς τη μνήμη – Το μήκος του text section του εκτελέσιμου – Το μήκος της αρχικοποιημένης data section του εκτελέσιμου – Το μήκος της μη-αρχικοποιημένης data section του εκτελέσιμου

21 Σύνοψη αλλαγών VFS – Page reading Κώδικας για την ανάγνωση σελίδων από το file system Ανάγνωση ενός chunk μήκους μιας σελίδας ή του binary, αν είναι μικρότερο Αν αποτελείται από initialized data, τότε διαβάζεται όλο το page Αν αποτελείται από uninitialized data, τότε το page διαβάζεται κενό Aν αποτελείται από μείγμα, διαβάζεται το αρχικοποιημένο κομμάτι και το υπόλοιπο αφήνεται κενό

22 Νέα μηνύματα Kernel: 1 PM: 7 VFS: 1 Page Server: 7 Σύνολο 16 νέα μηνύματα

23 Ανάλυση Σετ κοινών λειτουργιών compression, decompression, archiving, compiling Χρήση ενός tarball (180mb, 4242 αρχεία) kbuild – χρόνος compilation για τους system servers & kernel (cc) Παρατηρείται αρκετό overhead με την paged έκδοση (1.08 φορές πιο αργά κατά ΜΟ).

24 Ανάλυση Sequential scan Δήλωση array τιμών από 2-64 σε δυνάμεις του 2 Αρχικοποίηση του array Απομείωση σε scalar Εκτύπωση του αποτελέσματος Περίπτωση Α: πρόγραμμα σε c και εκτέλεση Περίπτωση Β: PERL script (εκτελέσιμο το perl)

25 Ανάλυση Έντονες διαφορές που έχουν σχέση με τον τρόπο που εκτελούνται τα προγράμματα (compiled vs. interpreted)

26 Συμπέρασμα Το paging προκαλεί σε όλες τις περιπτώσεις overhead και μειώνει την απόδοση Οφείλεται περισσότερο στα συχνά mode switches (από user σε kernel mode και το αντίστροφο), παρά σε απαιτήσεις επεξεργαστικής ισχύος. Καθώς είναι αναπόφευκτα αυτά τα mode switches, σε ένα microkernel σύστημα η υλοποίηση paging και virtual memory πάντα θα είναι αργότερη από κάποιο αντίστοιχο μονολιθικό σύστημα


Κατέβασμα ppt "Weatherly (2009) MinixVM: An Implementation of Virtual Memory in Minix 3."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google