1 / 26

Weatherly (2009)

Weatherly (2009). MinixVM : An Implementation of Virtual Memory in Minix 3. Σκοπ ός. Η ενσωμ άτωση υποστήριξης για virtual memory στο Minix 3 Βάση τροποποιήσεων η έκδοση 3.1.3α. Προβλ ήματα. Αν άθεση ολόκληρου του process Οδηγεί σε εσωτερικό κατακερματισμό της μνήμης

nikita
Download Presentation

Weatherly (2009)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Βασικές αρχές Εκκίνηση • Το boot monitor φορτώνει και περνάει τον έλεγχο στο kernel • Το kernel κάνει αρχικοποιήσηκαι μεταφέρει τον έλεγχο στον PM • O PM ζητά το χάρτη της μνήμης από το boot monitor, καθώς αυτό ξέρει ποιά κομμάτια μνήμης χρησιμοποιούνται ήδη • Το boot monitor στέλνει το χάρτη • O PM επιστρέφει τον έλεγχο στο kernel • Αργότερα το kernel μεταφέρει τον έλεγχο στον κώδικα αρχικοποίησης του page server • Ο page server ζητά το χάρτη της μνήμης από τον PM • Ο PM στέλνει το χάρτη • O Page server επιστρέφει τον έλεγχο στο kernel. Αν δεν χρειάζονται αρχικοποίηση άλλοι servers, το kernel εκτελεί την init.

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

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

  16. Page fault handling • Ο PM στέλει μήνυμα στονpage server για να ελέγξει την εγκυρότητα του page fault request • O page server απαντά. Αν δεν είναι έγκυρο, το PM αναφέρει στο kernel • Αλλιώς στέλνει μήνυμα στοVFS για να διαβάσει τη σχετική σελίδα. • O VFS παντά με το σχετικό status • O PM στέλνει μήνυμα στον page server για να ειδοποιήσει για το αποτέλεσμα της επεξεργασίας του page fault • 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 πάντα θα είναι αργότερη από κάποιο αντίστοιχο μονολιθικό σύστημα

More Related