ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών Παρουσίαση Εργαστηρίου 6 ιδάσκων: Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy www.ece.ucy.ac.cy/courses/ece213
Περίληψη 1 ο Πρότζεκτ (Σενάριο Λειτουργίας και Προδιαγραφές) Χρησιµοποίηση του µετρητή χρόνου Ενεργοποίηση και ιαχείριση σηµάτων διακοπής Συνεπεξεργαστής 0 και αρχείο exceptions.s 2
Σενάριο Λειτουργίας Περιληπτικά, θα πρέπει να δηµιουργήσετε ένα σύστηµα το οποίο θα δέχεται ως είσοδο το αρχείο διαγωνίσµατος (test.txt) µέσα στο οποίο θα υπάρχουν όλα τα απαραίτητα στοιχεία του διαγωνίσµατος (όνοµα δηµιουργού του διαγωνίσµατος, κωδικός µαθήµατος, αριθµός ερωτήσεων, οι σωστές απαντήσεις και ο διαθέσιµος χρόνος για κάθε ερώτηση). Αφού το σύστηµα διαβάσει το αρχείο, το αποθηκεύσει στη µνήµη και το κλείσει, θα τοποθετεί τα διάφορα στοιχεία του αρχείου σε ανάλογες λίστες και µετά θα τυπώνει διαδοχικά τις ερωτήσεις πολλαπλής επιλογής και θα αναµένει την απάντηση από τον εξεταζόµενο (µια µόνο θα είναι η σωστή απάντηση σε κάθε ερώτηση). Σε περίπτωση που ο εξεταζόµενος δεν απαντήσει στο χρονικό περιθώριο που καθορίζεται στο αρχείο (test.txt) από τον εξεταστή, το σύστηµα θα εµφανίζει σχετικό µήνυµα και θα προχώρα στην εµφάνιση της επόµενης ερώτησης. Να σηµειωθεί εδώ ότι οποιαδήποτε απάντηση δοθεί εντός των πρώτων 2 δευτερολέπτων, δεν θα γίνεται αµέσως δεκτή από το σύστηµα. (Θα πρέπει να ζητείται επιβεβαίωση µε νέα καταχώρηση της απάντησης για να αποφευχθεί το ενδεχόµενο µια απάντηση που δίνεται ακριβώς µετά τη λήξη του χρόνου να θεωρηθεί από το σύστηµα ως απάντηση στην επόµενη ερώτηση που εµφανίστηκε αµέσως πριν το πάτηµα του πλήκτρου.) 3
Σενάριο Λειτουργίας Ο εξεταζόµενος θα πρέπει να έχει την δυνατότητα να προσπεράσει µια ερώτηση που δεν γνωρίζει αλλά δεν θα έχει την δυνατότητα να επιστρέψει πίσω σε οποιαδήποτε ερώτηση. Ερωτήσεις που δεν απαντώνται στο χρονικό πλαίσιο ή που ο εξεταζόµενος επιλέγει να προσπεράσει χωρίς απάντηση, θα θεωρούνται λανθασµένες για σκοπούς βαθµολόγησης. Μετά από κάθε απάντηση και πριν από την εµφάνιση της επόµενης ερώτησης, θα πρέπει να δίνεται κατάλληλο σχόλιο στον φοιτητή στο οποίο θα αναφέρεται και η σωστή απάντηση σε περίπτωση που ήταν λανθασµένη ή δεν απαντήθηκε. Στο τέλος του διαγωνίσµατος, ο εξεταζόµενος θα πρέπει να ενηµερώνεται για την επίδοσητουστοδιαγώνισµα (µετονβαθµότουναεµφανίζεταιωςποσοστό (%)των σωστών απαντήσεων) καθώς επίσης και για το συνολικό χρόνο επίλυσης του διαγωνίσµατος. Το σύστηµα θα πρέπει επίσης να εµφανίζει στο τέλος µια περίληψη µε το πλήθος αλλά και τους αριθµούς των ορθών, λανθασµένων και αναπάντητων ερωτήσεων. Στη συνέχεια οι σωστές απαντήσεις θα παρατίθενται δίπλα από όλες τις απαντήσεις του εξεταζόµενου. 4
ΠροδιαγραφέςΣυστήµατος 1. Κάθε διαδραστικό διαγώνισµα θα αποτελείται από τουλάχιστον 10 ερωτήσεις, όπου η κάθε ερώτηση θα ακολουθείται από 4-6 επιλογές (απαντήσεις). Μια µόνο από τις επιλογές (απαντήσεις) θα είναι ορθή. 2. Μην θέσετε ως σταθερές στον κώδικα σας τιµές οι οποίες µπορεί να αλλάξουν σε κάποιο άλλο διαγώνισµα όπως ο αριθµός ερωτήσεων και ο διαθέσιµος χρόνος για κάθε ερώτηση. 3. H µορφή του αρχείου διαγωνίσµατος πρέπει να ακολουθεί τις προδιαγραφές που σας δίνονται πιο κάτω και θα πρέπει να δώσετε ένα τουλάχιστον αρχείο µε τις δικές σας ερωτήσεις σε οποιοδήποτε θέµα που διδάσκεται στο ΗΜΥ213. 4. Το πρόγραµµα πρέπει αρχικά να καλωσορίζει τον εξεταζόµενο και να του δηλώνει πόσες ερωτήσεις περιλαµβάνονται στο διαγώνισµα και µε push να αποθηκεύει σε δική σας Στοίβα (ακολουθώντας την πολιτική της στοίβας) τις ορθές απαντήσεις. Στη συνέχεια, να ενηµερώνει τον εξεταζόµενο για τα πλήκτραµεταοποίαµπορείνααπαντάκαιτέλοςναζητάαπότονεξεταζόµενο να εκκινήσει το τεστ όταν είναι έτοιµος. 5
ΠροδιαγραφέςΣυστήµατος 5. Οι ερωτήσεις και ο διαθέσιµος χρόνος για απάντηση θα τυπώνονται διαδοχικά και ο χρήστης θα επιλέγει µε κάποια πλήκτρα την απάντηση του. Ο χρόνος µεταξύ της εκτύπωσης της ερώτησης και της πληκτρολόγησης του χρήστη θα θεωρείτε ότι είναι ο χρόνος που χρειάστηκε για να απαντηθεί η ερώτηση. Στην περίπτωση που ο εξεταζόµενος δεν γνωρίζει την απάντηση, θα µπορεί µε το πάτηµα ενός άλλου πλήκτρου να συνεχίσει στην επόµενη ερώτηση. 6. Στο τέλος του διαγωνίσµατος, µαζί µε τον βαθµό ο οποίος θα υπολογίζεται όπως αναφέρεται στο 2ο µέρος, θα παρουσιάζεται επίσης ο µέσος χρόνος απάντησης και ένας αναλυτικός πίνακας µε το πλήθος των ορθών απαντήσεων, καθώς και µε τους αριθµούς των ορθών, των λανθασµένων και αυτών που δεν απαντήθηκαν λόγω λήξης του χρόνου. Απαραίτητη είναι και η χρήση της pop για σύγκριση της κάθε απάντησης του χρήστη µε την σωστή απάντηση που υπάρχει στο αρχείο διαγωνίσµατος (test.txt). 7. Στο κάθε αρχείο διαγωνίσµατος πρέπει τουλάχιστον να περιλαµβάνονται τα στοιχεία που αναφέρονται πιο πάνω. 6
ΠροδιαγραφέςΣυστήµατος 8. Ηµορφήπουθαέχουντααρχείαπουθαδιαβάζειτοπρόγραµµασας,καθώςκαι όλες οι σχεδιαστικές αποφάσεις που θα πάρετε και οι λεπτοµέρειες υλοποίησης, πρέπει να τεκµηριωθούν και να φαίνονται ξεκάθαρα στην αναφορά που θα παραδώσετε. 9. Τοπρόγραµµάσαςθαπρέπειναείναιαπλό,εύχρηστο,καιπολύφιλικόπροςτον χρήστη και µε κάποιο στοιχειώδες interface. Σηµειώστε ότι ένα µέρος της βαθµολόγησης θα αφορά και την οπτική παρουσία του προγράµµατος σας, αλλά προτρέπεστε να επικεντρωθείτε στην τήρηση των προδιαγραφών ορθότητας/λειτουργικότητας. 7
Περιεχόµενο Αρχείου test.txt Here you can give instructions to the students.#george Zaggoulos#HMY213#10#a,a,b,b,c,e,a,d,d,a#8,10,10,15,20,7,8,15, 20,7#4,4,5,5,5,4,4,5,4,6# Qusetion 1: How many t registers exist in MIPS32? a Four b Ten c Eight d Nine; Qusetion 2: How many r registers exist in MIPS32? a Four b Two c Three d None;... Qusetion 10: How many bits are stored in a memory location in MIPS32? a 16 b 24 c 28 d 32;! 8
Interrupt Service Routine Όταν προκληθεί Exception τότε το σύστηµα µεταφέρει τη λειτουργία σε άλλο µονοπάτι. Στο SPIM καθορίζουµε µια συνάρτηση η οποία ονοµάζεται Interrupt Service Routine και «τοποθετείται» στην διεύθυνση 0x80000180. ηλαδή κάθε φορά που προκαλείται interrupt το σύστηµα ξεκινάει από τη διεύθυνση 0x80000180 και εκτελεί εντολές (ISR) Το σηµερινό παράδειγµα αφορά σε δύο ειδών interrupts Timer I/O 9
Καταχωρητές 8 BadAddr memory address at which an offending memory reference occurred 9 Count timer 11 Compare value compared against timer that causes interrupt when they match 12 Status interrupt mask and enable bits 13 Cause exception type and pending interrupt bits 14 EPC address of instruction that caused exception 16 Config configuration of machine 10
Χρησιµοποιούνται για τη δηµιουργία TIMEOUTS Timer Interrupts Κάθε ένα χρονικό κβάντο (για το SPIM είναι 10 msec) αυξάνεται ένας µετρητής αντίστοιχα ($9 $9). Πότε προκαλείται interrupt? Το σύστηµα προκαλεί interrupt όταν ο $9 γίνει ίσος µε τον $11 (καταχωρητής µε τον οποίο ελέγχουµε το TIMEOUT). 11
Καταχωρητές Status ($12), Cause ($13) και Exception Programme Counter ($14) mfc0 $t5, $13 # Copy Cause register value to $t5 mtc0 $v0, $12 # Copy $v0's value to Status register 12
Ειδικοί καταχωρητές (θέσεις µνήµης) που χρησιµοποιούνται για Interrupts 13
Ενεργοποίηση Interrupts - Register ($12) 1.Το bit στη θέση 0 ενεργοποιεί τα σήµατα διακοπής (global on/off control bit for all interrupts). 2.Αναλόγως των σηµάτων διακοπής που επιθυµείτε να επιτρέψετε, θέστε σε λογικό 1 τα bitς 11 και 15 του καταχωρητή Status τα οποία επιτρέπουν στην CPU να ανταποκρίνεται στα σήµατα διακοπής από το πληκτρολόγιο και το ρολόι αντίστοιχα. 3.Θέστε σε λογικό 1 το Interrupt Enable bit στον καταχωρητή Receiver Control Register (0xFFFF0000). Αυτό το bit επιτρέπει την δηµιουργία σηµάτων διακοπής από το πληκτρολόγιο όταν ο χρήστης πληκτρολογήσει οτιδήποτε. 14
ιαχείριση ενός Interrupt Όταν δηµιουργηθεί κάποιο σήµα διακοπής, τα επόµενα βήµατα εκτελούνται αυτόµατα από το υλικό του µικρό- επεξεργαστή: 1. Το Exception Level bit (bit 1) στον καταχωρητή Status γίνεται 1. Όταν αυτό το bit έχει τιµή 1, δεν µπορούν να δηµιουργηθούν άλλα σήµατα διακοπής. Αυτό συµβαίνει γιατί δεν µπορεί ο µικροεπεξεργαστής να διακόψει την λειτουργία εξυπηρέτησης κάποιας διακοπής για να εξυπηρετήσει µια 2 η διακοπή. 2. Ο καταχωρητής Cause παίρνει την ανάλογη τιµή από την οποία µπορούµε ως προγραµµατιστές να δούµε τί προκάλεσε τη διακοπή (το ρολόι ή το πληκτρολόγιο). 3. Ο καταχωρητής EPC παίρνει την τιµή που έχει αυτή την στιγµή ο Program Counter για να µπορεί µετά από την εξυπηρέτηση του interrupt να επιστρέψει στο σηµείο από το οποίο πρέπει να συνεχίσει. 15
Timer and Keyboard Interrupts Καλείστε να συµπληρώσετε τα δύο αρχεία (week6.s και excep_week6.s) αυτής της εβδοµάδας, έτσι ώστε να λειτουργεί ορθά η υπολογιστική µηχανή (+, -, *, / και χ^y). Ο χρήστης, αρχικά µε 2 κλήσεις συστήµατος (5) εισάγει τους δύο αριθµούς (χ και y). Στη συνέχεια µε keyboard interrupt, ο χρήστης θα επιλέγει την πράξη που επιθυµεί να εκτελέσει. Αν ο χρήστης δώσει αριθµούς και δεν επιλέξει την προς εκτέλεση πράξη, τότε µε timing interrupt το πρόγραµµα θα τερµατίζει (στα 7 δευτερόλεπτα)! 16
Αλλαγές στο week6.s Το αρχείο week6.s σας δίνεται σχεδόν έτοιµο. Αποµένει εσείς να: 1. Ενεργοποιήσετε το ρολόι και τα σήµατα διακοπής που χρειάζεστε. 2. Ελέγξετε το ρολόι και το πλήκτρο που επέλεξε ο χρήστης και να στείλετε το πρόγραµµα να εκτελεστεί το αντίστοιχο µέρος του κώδικα. 17
Αλλαγές στο excep_week6.s Το αρχείο excep_week6.s θα αντικαταστήσει το exceptions.s έτσι ώστε να κάνει αυτά που επιθυµείτε και τα οποία περιγράφονται πιο κάτω: Είναι και αυτό έτοιµο! Aποµένει εσείς να: 1. Ελέγξετε το λόγο που προκλήθηκε το σήµα διακοπής (ρολόι, πληκτρολόγιο, ή κάτι άλλο) 2. Γράψετε τον κώδικα που θέλετε να εκτελείται αναλόγως του interrupt. 3. Προσαρµόσετε τον κώδικα σας για να αδρανοποιεί τα πλήκτρα που δεν χρησιµοποιούνται στην επιλογή πράξης. 18
Προσοχή στο τρέξιµο του Κώδικα!!! Επιλέξτε στο QtSpim: Simulator/Settings/MIPS και στη συνέχεια επιλέξτε την επιλογή Mapped I/O και Load Exception Handler. (Αφήστε επιλεγµένη και την επιλογή Accept Pseudo Instructions Επιλέξτε το αρχείο isr.s που επιθυµείτε! Αν το αρχείο isr.s µετακινηθεί ΕΝ θα µπορεί να λειτουργήσει ξανά το QtSpim 19
Μαθησιακοί Στόχοι Εργαστήριο 6 1. Χρησιµοποίηση του µετρητή χρόνου 2. Ενεργοποίηση και ιαχείριση σηµάτων διακοπής 3. Συνεπεξεργαστής 0 και αρχείο exceptions.s 20