ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Αρχιτεκτονική Υπολογιστών Υποσύστημα μνήμης Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Διακοπές (ExcepAons/Interrupts) Αρης Ευθυμίου
Το σημερινό μάθημα! Απρόβλεπτες καταστάσεις - > διακοπές! Χειρισμός διακοπών τί κάνει το υλικό τί κάνει το Λειτουργικό Σύστημα! Συνδιασμός διακοπών με εικονική μνήμη! Παράδειγμα υπορουτίνας χειρισμού αστοχίας TLB! Υλοποίηση διακοπών σε διοχετευμένο επεξεργαστή 2
Απρόβλεπτες καταστάσεις! Γενικά ένα πρόγραμμα πρέπει να προβλέπει και να χειρίζεται όλες τις δυνατές καταστάσεις! Κάποιες μπορούν να προβλευτούν, αλλά είναι τόσο σπάνιες ώστε το κόστος συνεχόμενου ελέγχου είναι μεγαλύτερο από αυτό χειρισμού της κατάστασης! Γενικά χρειάζονται πολύπλοκους χειρισμούς πολλές λεπτομέρειες να εξεταστούν! Η διαχείριση γίνεται με λογισμικό, αλλά χρειάζεται υποστήριξη από το υλικό 3
Απρόβλεπτες καταστάσεις - 2! Γενικός όρος: excep[on! Αν είναι λόγω εξωτερικής, από το πρόγραμμα που τρέχει στον επεξεργαστή αιτίας, ονομάζονται διακοπές (interrupts) συχνά χρησιμοποιείται και ο όρος trap! Παραδείγματα Εσωτερικές αιτίες: υπερχείλιση αποτελέσματος υπολογισμού (μπορεί και να αγνοηθεί), διαίρεση με το 0, αστοχία TLB, σφάλμα σελίδας, απόπειρα εκτέλεσης άγνωστης ή απαγορευμένης εντολής Εξωτερικές αιτίες: πάτημα πλήκτου, ανίχνευση λάθους υλικού,... 4
Χειρισμός! Ο χειρισμός γίνεται από το Λ.Σ. με βοήθεια από το υλικό! Το υλικό ανιχνεύει τις καταστάσεις ή διακόπτεται από εξωτερικά μηχανήματα (μνήμη, περιφερειακά) διακόπτει το εκτελούμενο πρόγραμμα αποθηκεύει την τιμή του PC και καλεί το Λ.Σ. που χειρίζεται την κατάσταση! κάτι σαν κλήση υπορουτίνας (jal) σε προκαθορισμένη διεύθυνση! ονομάζεται υπορουτίνα χειρισμού (διακοπών) interrupt handler! Στον MIPS: ειδικός καταχωρητής EPC (excep[on PC) κρατάει την τιμή του PC βρίσκεται στον συνεπεξεργαστη 0 (co- processor 0) Δείτε στον Mars το tab coproc 0 δίπλα στους καταχωρητές 5
Χειρισμός - 2! Τι κάνει το Λ.Σ.; Εξαρτάται από το είδος της διακοπής! Συνηθισμένες δράσεις: τερματισμός εκτέλεσης του προγράμματος εκτέλεση προκαθορισμένων βημάτων, π.χ. για υπερχείλιση αριθμών κινητής υποδιαστολής εκτέλεση κάποιας «υπηρεσίας» για το πρόγραμμα! π.χ. εμφάνιση μηνύματος στην οθόνη «διόρθωση» σφάλματος σελίδας 6
Χειρισμός - 3! Συχνά το πρόγραμμα μπορεί να συνεχίσει την εκτέλεση τις περισσότερες φορές ξανατρέχοντας την εντολή που διακόπηκε πρέπει όλη η κατάσταση της διεργασίας (process state) να αποθηκευτεί και να ανακτηθεί κατά την επιστροφή/συνέχιση εκτέλεσης! Η δυνατότητα μιας εντολής να ξανατρέξει (restartable) χρειάζεται προσεκτικό σχεδιασμό του υλικού π.χ. lw $s0, 0($s0) κίνδυνος απώλειας της τιμής του $s0! Αποθήκευση κατάστασης τιμές καταχωρητών, PC, δείκτης στον πίνακα σελίδων αποθήκευση στη στοίβα, όπως με τις υπορουτίνες γίνεται με λογισμικό (απλές εντολές sw) από την υπορουτίνα χειρισμού 7
Χειρισμός - 4! Πώς ξέρει το Λ.Σ. τι συνέβει;! Είτε: η αιτία κωδικοποιείται σε ένα ειδικό καταχωρητή που εξετάζει το Λ.Σ. το υλικό ξεκινάει διαφορετική υπορουτίνα του Λ.Σ. ανάλογα με τί συνέβη (vectored interrupt) 8
Vectored interrupts! Ενας πίνακας όπου κάθε θέση είναι μία εντολή εντολή άλματος στην «πραγματική» υπορουτίνα χειρισμού Μπορεί το Λ.Σ. να αλλάξει την εντολή στον πίνακα ώστε να καλεί μια άλλη υπορουτίνα αντί για την πρώτη! συχνά οι υπορουτίνες αυτές είναι chained: η καινούρια υπορουτίνα καλεί την παλιά! Σε μερικές περιπτώσεις υπάρχει χώρος για αρκετές εντολές σε κάθε θέση (βλ. πίνακα) για απλά προβλήματα που διορθώνονται εύκολα π.χ. TLB miss 9
Καταχωρητής αιτίας! Ο MIPS χρησιμοποιεί μία προκαθορισμένη διεύθυνση για την υπορουτίνα χειρισμού διακοπών (entry point) 0x8000 0180! Αναγνωρίζει την αιτία της διακοπής από έναν ειδικό καταχωρητή Cause στον coproc 0 10
Μηχανισμός διακοπών και προστασία! Mικρές αλλαγές στον μηχανισμό διακοπών => προστασία (isola[on) προγραμμάτων σε συνδιασμό με την εικονική μνήμη! Ο επεξεργαστής έχει 2 καταστάσεις λειτουργίας (modes) ανάλογα αν εκτελεί το ΛΣ ή πρόγραμμα χρήστη σε κατάσταση συστήματος (system/privileged mode), όλα επιτρέπονται! σε κατάσταση απλού χρήστη (user mode), ένα μέρος των εντολών επιτρέπονται και οι προσπελάσεις μνήμης περνούν από το μηχανισμό μετάφρασης MIPS: ένα πεδίο του καταχωρητή Status! στον coproc 0 11
Μετάβαση καταστάσεων καταχωρητής Status! Κάθε διακοπή, αλλάζει τη κατάσταση του επεξεργαστή σε κατάσταση συστήματος εκτελείται ο αντίστοιχος χειριστής διακοπής (handler)! Επιστροφή σε κατάσταση χρήστη ειδική εντολή, MIPS: eret αλλάζει σε κατάσταση χρήστη κάνει άλμα στη διεύθυνση που έχει ο καταχωρητής EPC 12
Κλήσεις συστήματος! Με το ίδιο μηχανισμό γίνονται και οι κλήσεις συστήματος (system calls) υπορουτίνες για διάφορες «δουλειές» π.χ. άνοιγμα αρχείου εντολές syscall του MIPS! Αντί για κάποια διακοπή, το πρόγραμμα εκτελεί μια ειδική εντολή που προκαλεί διακοπή! Γιατί όχι απευθείας κλήση μιας υπορουτίνας του Λ.Σ.; Με το σύστημα διακοπών ο χρήστης μπορεί να διαλέξει μια υπορουτίνα από ένα (ασφαλές) σύνολο. Οχι όποια θέλει! Διαφορά από άλλες διακοπές: επιστροφή τιμών σε καταχωρητές 13
Αγνόηση διακοπών! Το σύστημα είναι ευάλωτο από την αρχή της υπορουτίνας χειρισμού μέχρι να αποθηκευτεί η κατάσταση μιας διεργασίας αν γίνει άλλη μία διακοπή η πληροφορία στον EPC, χάνεται! Σε κάθε διακοπή, αυτόματα αγνοούνται όλες οι επόμενες διακοπές (disable excep[ons) υπάρχει σχετικό πεδίο στον καταχωρητή Status: interrupt enable! Η ρουτίνα χειρισμού μπορεί να ξαναεπιτρέψει διακοπές όταν ολοκληρωθεί η αποθήκευση γενικά ο χρόνος που αγνούνται οι διακοπές πρέπει να είναι μικρός 14
Αγνόηση διακοπών - 2! Μερικές φορές θέλουμε να μην γίνει διακοπή κάποιων ειδών μόνο (όχι όλες οι διακοπές)! Θέτουμε τα κατάλληλα bit στο interrupt mask του Status! Ο Cause μας πληροφορεί ποιές διακοπές περιμένουν ακόμη (pending) για να τις χειριστούμε Cause Status 15
Αναλυτικό παράδειγμα! Χειρισμός αστοχίας TLB στον MIPS συχνά γίνεται με υλικό στον MIPS παραδοσιακά γίνεται με λογισμικό! Οταν συμβεί: διακοπή του προγράμματος EPC διεύθυνση εντολής που διακόπηκε ειδικά για αστοχία TLB, το υλικό θέτει τιμές σε αρκετούς ειδικούς καταχωρητές για να βοηθήσει τον χειρισμό! Υπορουτίνα χειρισμού αστοχιών TLB στη διεύθυνση 0x8000 0000 παρέκλιση από το συνηθισμένο χειρισμό διακοπών του MIPS 16
Αστοχία TLB! (Εικονική) διεύθυνση που δεν βρέθηκε αποθηκεύεται στον καταχωρητή BadVAddr! Διεύθυνση του PTE στον πίνακα μετάφρασης: καταχωρητής Context! 12 πιο σημαντικά bit: καταχωρητής βάσης του πίνακα! 18 επόμενα bit: ο αριθμός (εικονικής) σελίδας! 2 τελευταία bit: 0 το PTE είναι 4 bytes ανάγνωση από αυτή τη διεύθυνση, δίνει το PTE της σελίδας που δεν βρέθηκε στο TLB 17
TLB miss handler! Εντολές m[š]c0 move to/from coprocessor 0 μεταφορά ειδικών καταχωρητών από τον c0 σε καταχωρητή! Καταχωρητές k1, k0 δεσμευμένοι για Λ.Σ. δεν χρειάζεται αποθήκευση, ανάκτηση! Εντολή tlbwr TLB write γράφει στο TLB, στη θέση που δείχνει ο καταχωρητής Random το PTE που υπάρχει στον καταχωρητή EntryLo Random τυχαία θέση στον TLB για επιλογή θύματος αντικατάστασης 18
Λεπτομέρειες TLB miss handler! Ο κώδικας του TLB miss handler δεν ελέγχει αν υπάρχει σφάλμα σελίδας (page fault) δεν εξετάζει το PTE για να δεί αν το valid bit είναι 1! Μετά τον handler, η εντολή που προκάλεσε την αστοχία του TLB, θα ξανατρέξει και το TLB θα ευστοχήσει! Αν το PTE δείξει ότι υπάρχει σφάλμα σελίδας, θα γίνει νέο excep[on θα χειρισθεί από το κανονικό χειριστή διακοπών! Οι περισσότερες αστοχίες TLB δεν προκαλούν σφάλματα μη ελέγχοντας το PTE κερδίζουμε χρόνο σε βάρος του χρόνο ενός κανονικού σφάλματος! που έτσι κι αλλιώς απαιτεί πάρα πολύ χρόνο 19
Χειρισμός διακοπών 20
Χειρισμός διακοπών - επιστροφή 21
Υλοποίηση διακοπών! Precise excep[ons: προηγούμενες εντολές έχουν ολοκληρωθεί και οι επόμενες να μπορούν να ξαναεκτελεστούν από την αρχή διευκολύνει εικονική μνήμη και υλοποίηση προτύπου IEEE για αριθμητική κινητής υποδιαστολής! Σε ένα διοχετευμένο επεξεργαστή υλοποιούμε τις διακοπές παρόμοια με κινδύνους ελέγχου σταματάμε τις επόμενες εντολές της διοχέτευσης! τις αλλάζουμε σε nops προσκομίζουμε εντολές από μια νέα διεύθυνση 22
Διακοπές στο MIPS 23
Προηγουμενη υλοποίηση 24
Υποστήριξη διακοπών ο EPC αποθηκεύει PC+4 διόρθωση από τον handler 25
Παράδειγμα 26
Παράδειγμα 27
Επόμενο μάθημα Είσοδος/έξοδος 28
Τέλος Ενότητας
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Σημειώματα
Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http://ecourse.uoi.gr/course/view.php?id=1307.
Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου. «Αρχιτεκτονική Υπολογιστών. Υποσύστημα μνήμης». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1307.
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/.