Προηγμένοι Μικροεπεξεργαστές Παρουσίαση Εργασιών
Γενικά 2 Projects για ένα άτομο 5 Projects για δύο άτομα 4 Project για ένα έως δύο άτομα
Γενικά Προθεσμία: Τέλος Εξεταστικής (Hard Deadline) Τυπικός απαιτούμενος χρόνος: 1-3 μέρες σχεδιασμός και προετοιμασία 3-8 μέρες δουλειά full time 1-2 μέρες για την αναφορά ή/και την παρουσίαση Παραδοτέα: Κώδικας και αναλυτική αναφορά Ενδεχομένως και παρουσίαση
Debugging To debugging είναι κομμάτι της δουλειάς σας: Δεν παραιτούμαστε με το παραμικρό πρόβλημα Αναλύουμε τον κώδικά μας Εκτυπώνουμε τιμές μεταβλητών και καταχωρητών με τις Hex2ASCII και printstr ώστε να βρούμε το πρόβλημα Ψάχνουμε στο manual και στο δίκτυο για πληροφορίες Αν το πρόβλημα επιμένει, έρχεστε για να κοιτάξουμε μαζί τον κώδικά σας Αλλά να έχετε φροντίσει να έχετε εντοπίσει που βρίσκεται το πρόβλημα
Κώδικας Ο κώδικας σας θα διαβαστεί και από άλλους Πρέπει να είναι: οργανωμένος και δομημένος (συναρτήσεις, structs, πολλαπλά αρχεία) καθαρογραμμένος (δηλώσεις σταθερών, σχόλια, περιγραφές συναρτήσεων, στοίχιση κώδικα)
Θέμα 1 ο Program Loader Υλοποίηση μηχανισμού μέσω του οποίου να μπορούμε να εκτελέσουμε δυναμικά object files Για 2 άτομα
Θέμα 1 ο Program Loader Μέχρι τώρα εκτελούμε μόνο tasks που έχουν περάσει από το build μαζί με τον κυρίως κωδικά Θέλουμε να δημιουργούμε ξεχωριστά object files από τον nasm και να τα φορτώνουμε και να τα εκτελούμε
Θέμα 1 ο Program Loader Για να γίνει αυτό πρέπει: Να ανοίξουμε το αρχείο που περιέχει το object code Να αντιγράψουμε byte-προς-byte τα δεδομένα σε μία ελεύθερη περιοχή μνήμης Να θέσουμε code, data και stack descriptors ώστε να δείχνουν σε αυτήν την περιοχή μνήμης Να αρχικοποιήσουμε tss και tss descriptors για αυτό το task Να μεταφέρουμε την εκτέλεση στο νέο task
Θέμα 1 ο Program Loader Δίνονται έτοιμα: Ο κώδικας που θα επεκτείνετε Ένας sample κώδικας που θα φορτώσετε με τον loader Η συναρτήση x86_rm_int που επιτρέπει την εκτέλεση real mode BIOS και DOS Services από Protected Mode (κυρίως για το άνοιγμα και το διάβασμα του αρχείου)
Θέμα 2 ο Filesystem Υλοποίηση ενός απλού filesystem Γραμμένο κυρίως σε C με κλήσεις προς assembly όπου χρειάζεται Προσπέλαση δισκέτας με BIOS Services Για 2 άτομα
Θέμα 2 ο Filesystem Υποτυπώδες filesystem: Ονόματα αρχείων μέχρι 8 χαρακτήρες (9 bytes μαζί με το null character) Μέχρι 16 αρχεία Τα αρχεία βρίσκονται συνεχόμενα στον δίσκο Ένα απλό allocation table στο πρώτο sector της δισκέτας που περιέχει όλες τις πληροφορίες για τα αρχεία: Όνομα / Block αρχής / Block τέλους Filename StartBlock EndBlock test.txt 1 42 readme 43 125........ 9 bytes 2 bytes 2 bytes
Θέμα 2 ο Filesystem Προσπέλαση δισκέτας BIOS Services + x86_rm_int Παρεχόμενες υπηρεσίες: Δημιουργία file system Εμφάνιση λίστας αρχείων Αντιγραφή αρχείου σε memory buffer Εγγραφή από memory buffer σε αρχείο Δημιουργία κενού αρχείου Διαγραφή αρχείου Επίδειξη με δύο απλές συναρτήσεις: Print: εμφάνιση αρχείου στην οθόνη Store: διάβασμα πληκτρολογίου και αποθήκευση σε αρχείο
Θέμα 2 ο Filesystem Σε C το μεγαλύτερο μέρος του προγράμματος Σε assembly η κλήση των DOS και BIOS Services και η εκτύπωση στην video memory Απαιτήσεις: Bochs για DOS Emulation (το Dosbox δεν επιτρέπει δισκέτες) gcc για το compile της C linux ή windows με cygwin Δίνονται έτοιμα: Ο κώδικας μέχρι και το πέρασμα σε C Οι assembly συναρτήσεις για την κλήση RM services Το bochs με σεταρισμένα τα configuration files και την δισκέτα Scripts για το build του εκτελέσιμου
Θέμα 3 ο Stack Protection Υλοποίηση μηχανισμού για προστασία από υπερχείλιση της στοίβας Για 1-2 άτομα
Θέμα 3 ο Stack Protection Επέκταση του κώδικα του εργαστηρίου Στον τρέχων κώδικα, αν εξαντλήσουμε τα 256 bytes της στοίβας, θα αρχίσουμε να γράφουμε πάνω σε χρήσιμα δεδομένα και κώδικα Θέλουμε να χρησιμοποιήσουμε το limit protection του protected mode, ώστε να συλλαμβάνουμε αυτές τις περιπτώσεις
Θέμα 3 ο Stack Protection Συγκεκριμένα: Αλλάζουμε τον stack descriptor ώστε να αξιοποιεί σωστά το expansiondirection bit Το expansion-direction bit αλλάζει την μετάφραση του limit: αν σεταριστεί έγκυρα offsets [limit+1, 64K-1] Αλλάζουμε το base address, ώστε base address + 64K-1 = stack_end Αλλάζουμε το limit ώστε base address + limit+1 = stack_start Γράφουμε ISR για το interrupt 12 (Stack Exception), ώστε όταν ο ESP πέσει κάτω από το limit+1, να τρέξει ο κωδικάς μας ο οποίος: θα μεταφέρει τα δεδομένα της στοίβας σε μεγαλύτερη κενή περιοχή θα τροποποιήσει τον stack descriptor ώστε να δείχνει σε αυτήν την περιοχή
Θέμα 3 ο Stack Protection Για την επίδειξη του μηχανισμού σας θα γράψετε μία μικρή recursive συνάρτηση, η οποία θα πιέζει υπερβολικά την στοίβα Δίνονται έτοιμα: Ο κώδικας που θα επεκτείνετε
Θέμα 4 ο TLB Διερεύνηση και παρουσίαση του τρόπου λειτουργίας των TLB Για 2 άτομα
Θέμα 4 ο TLB Ta TLB είναι μικρές κρυφές μνήμες του επεξεργαστή που επιταχύνουν το page translation Κρατάνε τις αντιστοιχίες virtual physical address για τα πιο πρόσφατα χρησιμοποιημένα pages TLB miss Αν ο επεξεργαστής προσπελάσει page για το οποίο η μετάφραση δεν υπάρχει στο TLB τότε πρέπει να βρει την σωστή μετάφραση στις δομές του virtual memory manager στην κύρια μνήμη και να την γράψει στο TLB
Θέμα 4 ο TLB Μικρό kernel module για Linux: Θα διαβάζει τον αριθμό των TLB misses μέσω των performance counters performance counters hardware counters των intel επεξεργαστών, μπορούν να μετρήσουν μία σειρά από events του επεξεργαστή Θα τον προσφέρει για ανάγνωση μέσω ψευδοαρχείου, πχ μέσω του /proc
Θέμα 4 ο TLB Πρόγραμμα χρήστη σε C: Θα ζητάει από το λειτουργικό μεσω της malloc διαρκώς μεγαλύτερες περιοχές μνήμης, τις οποίες θα διαβάζει/γράφει σειριακά πολλαπλές φορές Προτεινόμενα μεγέθη μνήμης: 4ΚΒ εώς 256ΜB, με διπλασιασμό σε κάθε βήμα Τα accesses σε κάθε βήμα να είναι τα ίδια. Πχ αν διαβάσουμε τα 256MB τέσσερις φορές 8 φορές τα 128ΜΒ 16 φορές τα 64ΜΒ κοκ Για κάθε βήμα θα βρίσκει τα TLB misses που προκλήθηκαν, διαβάζοντας το ψευδοαρχείο που δημιούργησε το kernel module
Θέμα 4 ο TLB Αναφορά: Παρουσίαση του τρόπου λειτουργίας των TLB Γράφημα που θα δείχνει την σχέση μεταξύ TLB misses και εύρους μνήμης που χρησιμοποιούμε Εξήγηση του γραφήματος και εύρεση (προσεγγιστικά) του μεγέθους του TLB με βάση τα δεδομένα μας Δίνονται: Παραδείγματα για το πως δημιουργούμε kernel modules στο linux και για το πως χρησιμοποιούμε performance counters
Θέμα 5 ο Virtual Mode Scheduler Υλοποίηση round-robin scheduler που θα εκτελεί ταυτόχρονα protected mode tasks και real mode tasks μέσω του virtual 8086 mode. Για 2 άτομα
Θέμα 5 ο Virtual Mode Scheduler Το Virtual Mode είναι mode συμβατότητας Φτιάχτηκε για εκτέλεση παλιού real mode κώδικα από protected mode Μένουμε σε PM αλλά το address translation γίνεται με τον RM τρόπο Ενεργοποιείται με το VM flag στον eflags Απενεργοποιείται με reset του VM flag ή με εκτέλεση sensitive εντολής
Θέμα 5 ο Virtual Mode Scheduler Για να εκτελεστεί ένα task σε virtual mode πρέπει στο TSS του: το VM flag αρχικοποιημένο σε 1(VM mode) οι segment registers με real mode τιμές o CS:EIP θα δείχνει στην RM address που θέλουμε να εκτελέσουμε
Θέμα 5 ο Virtual Mode Scheduler Κατά τα άλλα για τον scheduler το vm task συμπεριφέρεται όπως τα pm tasks Χρειάζεται όμως προσοχή: Πεδίο IOPL στον eflags Πως διαχειριζόμαστε τα interrupts σε virtual mode Θεωρήστε πολύ απλά vm tasks: Χωρίς software interrupts, I/O accesses Επίδειξη με 2 pm και 2 rm tasks References: 386 Intel Manual, Chapter 15 http://wiki.osdev.org/virtual_8086_mode
Θέμα 6 ο Paging Υλοποίηση απλού paging μηχανισμού επεκτείνοντας την άσκηση του task switching Για 1-2 άτομα
Θέμα 6 ο Paging Απλό paging Λίγα pages των 4ΚΒ που να καλύπτουν μόνο τον κώδικα και τα δεδομένα μας Virtual address == Physical address Αφού μπείτε σε protected mode Στήσιμο του paging (Page Directories, Page Tables) Ενεργοποίηση του paging Πειραματισμός με κοινή χρήση σελίδων από δύο διαφορετικά tasks Προσοχή στην σωστή τοποθέτηση των TSS
Θέμα 7 ο Access Violation Προσομοίωση του μηχανισμού access violation ενός λειτουργικού συστήματος Για ένα άτομο
Θέμα 7 ο Access Violation General Protection Exception προκαλούν οι προσπελάσεις μνήμης που: παραβιάζουν το limit protection παραβιάζουν τα δικαιώματα χρησης ενός segment καθώς και η φόρτωση segment registers με άκυρους/λάθος descriptors
Θέμα 7 ο Access Violation Θέλουμε: ISR για το General Protection Exception (GPE) που να αναγνωρίζει την πηγή σφάλματος και να την εκτυπώνει στην οθόνη Κώδικα επίδειξης σε privilege level 3 που να προκαλεί GPE Κώδικα που επιτελεί την ίδια λειτουργικότητα, αλλά να αποφεύγει το GPE 1) με χρήση call gate, 2) με χρήση conforming bit Παρουσίαση στην αναφορά των τρόπων με τους οποίους χειρίζονται τα GPE η οικογένεια των Windows '95 ('95, '98, Me) και η οικογένεια των Windows NT (NT, 2K, XP, Vista, 7)
Θέμα 8 ο I/O Map Διερεύνηση του πως αξιοποιείται το πεδίο I/O Map του TSS Πρόγραμμα επίδειξης που να χρησιμοποιεί αυτό το πεδίο Για 1-2 άτομα
Θέμα 8 ο I/O Map Αναλυτική περιγραφή στην αναφορά του πως λειτουργεί το πεδίο I/O Map και πως το αξιοποιούμε Επέκταση του κώδικα του εργαστηρίου: 2 tasks σε privilege level 3 Το πρώτο θα διαβάζει το πληκτρολόγιο (πρόσβαση μόνο στις θύρες του πληκτρολογίου) Το δεύτερο θα παράγει ήχο ανάλογο του πλήκτρου που πατήθηκε (πρόσβαση μόνο στις θύρες του PC Speaker) Παλιά projects για την ανάγνωση του πληκτρολογίου και την χρήση του PC Speaker δίνονται έτοιμα
Θέμα 9 ο Virtual Memory μέσω Segmentation Υλοποίηση virtual memory μηχανισμού χρησιμοποιώντας το segmentation Για 2 άτομα
Θέμα 9 ο Virtual Memory μέσω Segmentation Θέλουμε έναν virtual memory manager: Θα κρατάει στην μνήμη ένα υποσύνολο των χρησιμοποιούμενων segments Τα υπόλοιπα σε αρχεία στον δίσκο Το present bit των αντίστοιχων descriptors 1 0 Θα έχει τον έλεγχο του interrupt 11 (Segment not present) Αν το πρόγραμμα χρήστη προσπαθήσει να χρησιμοποιήσει segment που δεν βρίσκεται στην μνήμη: Θα μεταφέρει ένα segment εκτός μνήμης Θα φέρνει το segment που ζητήθηκε πίσω στην μνήμη
Θέμα 9 ο Virtual Memory μέσω Segmentation Η αντικατάσταση θα γίνεται με λογική not recently used (NRU) Το πεδίο accessed στους descriptors μας δείχνει ποια segments χρησιμοποιήθηκαν μετά τον τελευταίο καθαρισμό των accessed bit Όσα έχουν accessed bit = 0 υποψήφια για αντικατάσταση Τα segments του scheduler και του vm manager δεν πρέπει να φεύγουν ποτέ από την μνήμη Επίδειξη με δύο tasks που γράφουν συνεχώς σειριακά σε 8 διαφορετικα μη-αλληλοεπικαλυπτόμενα segments των 64ΚΒ Κάθε χρονική στιγμή μόνο 2 από τα segments δεδομένων των tasks θα βρίσκονται στην μνήμη
Θέμα 10 ο Μετάφραση x86 εντολών Βιβλιογραφική μελέτη και αναφορά για το πως μεταφράζει ο επεξεργαστής τις x86 εντολές ενός προγράμματος (CISC εντολές), ώστε να τις εκτελέσει το εσωτερικό κομμάτι του επεξεργαστή που δέχεται x86 u-ops (RISC εντολές) Για ένα άτομο
Θέμα 10 ο Μετάφραση x86 εντολών Η αναφορά πρέπει να εξετάσει: Γιατί μεταφράζονται οι εντολές Ποιοι μηχανισμοί συμμετέχουν στην μετάφραση Σε γενικές γραμμές πως γίνεται η μετάφραση Πως επιταχύνεται η μετάφραση στους σύγχρονους x86 Εναλλακτικές μέθοδοι αντί για μετάφραση μία προς μία του instruction stream Πχ επεξεργαστής Crusoe της Transmera
Θέμα 11 ο Processor bus και multithreaded εφαρμογές Μελέτη του βαθμού χρήσης του bus του επεξεργαστή από επιστημονικές multithreaded εφαρμογές, χρησιμοποιώντας performance counters Για 1-2 άτομα
Θέμα 11 ο Processor bus και multithreaded εφαρμογές Το bus του επεξεργαστή συνδέει τα διαφορετικά cores μεταξύ τους και τους παρέχει την διεπαφή με τον ελεγκτή μνήμης Κρίσιμο συστατικό του επεξεργαστή Είναι το bottleneck του συστήματος για multithreaded εφαρμογές με υψηλό βαθμό επικοινωνίας
Θέλουμε: Θέμα 11 ο Processor bus και multithreaded εφαρμογές Χρησιμοποιώντας προγράμματα που βασίζονται στους performance counters (πχ Intel Vtune ή oprofile) να μετρήσετε στατιστικά που σχετίζονται με το bus για την σουίτα benchmarks PARSEC Πολλαπλές μετρήσεις για διαφορετικό αριθμό δημιουργούμενων threads Παρουσίαση και ανάλυση των αποτελεσμάτων (πχ μέγεθος μεταφερόμενων δεδομένων, μέγιστο bandwidth, βέλτιστος αριθμός threads κοκ)
Απαιτήσεις: Θέμα 11 ο Processor bus και multithreaded εφαρμογές PC με σχετικά πρόσφατο επεξεργαστή της Intel Linux
Επίλογος Τα projects δίνονται με λογική First Come First Served Δεν έχουν όλα τα projects τον ίδιο βαθμό ευκολίας και αυτό το παίρνουμε υπόψιν στην βαθμολόγηση Πολύ δύσκολο project 80% τελειωμένο, θα πάρει αξιοπρεπή βαθμό Πολύ εύκολο project στο ίδιο επίπεδο ολοκλήρωσης, δεν περνάει Για ερωτήσεις στο γραφείο μου μέχρι και 22/12. Μετά πάλι από την 5/1 Ώρες φοιτητών: 12:00-14:00 Σε mail θα απαντάμε μόνο για διευκρινίσεις Μην αφήσετε το project για το τέλος της εξεταστικής Θα υπο-εκτιμήσετε το χρόνο που χρειάζεστε και δεν θα προλάβετε