Προηγμένοι Μικροεπεξεργαστές Φροντιστήριο 4 Real Mode Interrupts
Επισκόπηση Μορφές control tranfer Γενικά μη προγραμματισμένες Ασυγχρονα προς την εκτέλεση του προγράμματος Hardware interrupts Σύγχρονα προς την εκτέλεση του προγράμματος Exceptions Software interrupts
Hardware Interrupts Προκαλούνται από εξωτερικές συσκευές Maskable interrupts στο pin INTR Συνήθως διαμέσου του PIC 8259 Μπορούν να απενεργοποιηθούν μέσω του IF στον eflags Non-maskable interrupt στο pin NMI Δεν μπορεί να απενεργοποιηθεί Χρησιμοποιείται για κρίσιμα γεγονότα που πρέπει να αντιμετωπιστούν άμεσα
Exceptions Δείχνουν κάποιο πρόβλημα στην συνέχιση ενός προγράμματος Faults: Πρόβλημα στην εκτέλεση της τρέχουσας εντολής Traps: Κάποιο γεγονός προκλήθηκε από την προηγούμενη εντολή Aborts: Το πρόβλημα αφορά συνολικότερα την κατάσταση του επεξεργαστή Δεν σχετίζεται με συγκεκριμένη εντολή
Software Interrupts Software interrupts (ΙΝΤ n) Προκαλούνται προγραμματιστικά από το πρόγραμμα με εντολές ΙΝΤΟ, ΙΝΤ 3 και INT n INT n : εκτέλεσε το interrupt n INT 3 : συντόμευση για το int 3 (breakpoint) INTO : συντόμευση για το int 4 (break if overflow) Παρά το ότι είναι interrupts, αντιμετωπίζονται ως exceptions από τον επεξεργαστή Συνήθης διεπαφή για την προσφορά υπηρεσιών από το λειτουργικό σύστημα
Interrupts και Exceptions Κάθε interrupt/exception έχει ως αποτέλεσμα την μεταφορά του ελέγχου του προγράμματος σε κάποιο άλλο σημείο Το που εξαρτάται από το mode λειτουργίας
Real mode Interrupts Interrupt Vector Table (IVT) Καλύπτει το πρώτο KB της μνήμης Ξεκινά στην θέση 0x000 Τελειώνει στην 0x3FF Περιέχει 256 vectors διακοπών, το καθένα 4 bytes 2 χαμηλότερα = offeset της ISR 2 υψηλότερα = segment της ISR Ο έλεγχος μεταφέρεται στο segment:offset που δίνει το vector που αντιστοιχεί στην διακοπή
Real mode Interrupts Δηλαδή: INT n call FAR [ 0x0 : n * 4] Πιο αναλυτικά: pushf call FAR [0x0 : n*4] push cs push ip ip [n * 4], cs [n*4 + 2] reset if, tf (disable maskable interrupts)
Interrupt Service Routines Οι συναρτήσεις που εξυπηρετούν interrupts είναι παρόμοιες με τις κανονικές far συναρτήσεις
Interrupt Service Routines Σημαντικές διαφορές στο state: Interrupts disabled on entry εκτός από το CS:IP, στην στοίβα και τα eflags Error number στην στοίβα για κάποιους τύπους exception
Interrupt Service Routines Σημαντικές διαφορές στην δομή: Έξοδος με iret αντί για ret Πρέπει να παίρνουν τον ελάχιστο δυνατό χρόνο Ελάχιστες μεταβλητές Αποφεύγονται τα push και pop Αν εξυπηρετούν hardware interrupt θα πρέπει να ενημερώνουν τον PIC 8259 για την εξυπηρέτηση (End of Interrupt σήμα - ΕΟΙ)
Α/Α interrupts Ο αύξων αριθμός του interrupt δίνει τον αύξων αριθμό του vector που αντιστοιχεί στο interrupt Exceptions: θέσεις 0-31 Interrupts: κανονικά θέσεις 32-255 Αλλά πολλά interrupts έχουν μικρότερο αριθμό Πχ timer interrupt στην 0x8 και στην 0x1c
Σημαντικά Exceptions/Interrupts Exceptions: 00h = divide error 01h = debug exceptions 03h = breakpoint 04h = overflow 08h = double exception 0Ah = invalid TSS 0Dh = GP violation 0Eh = Page Fault Interrupts: 02h = nmi 05h = print screen 08h = timer 09h = keyboard data ready 10h = BIOS video services 13h = BIOS disk services 21h = DOS services
Σημαντικότερα interrupts - Timer Ο hardware timer εξυπηρετείται από το interrupt 8 στην PC αρχιτεκτονική Το ίδιο που καλύπτει και το double exception H ρουτίνα εξυπηρέτησης πρέπει να καλύπτει και τα δύο! Στο DOS, το interrupt 8: απλά επιλέγει ποιο από τα δύο interrupts θα εξυπηρετήσει φροντίζει για την επικοινωνία με το hardware (ανάγνωση PIC για να βρεθεί αν υπάρχει timer interrupt, αποστολή EOI) Το interrupt που πραγματικά επεξεργάζεται το event είναι το interrupt 0x1c Καλείται με int 0x1c από το int 8 Αυξάνει τον timer του DOS στην θέση [0x40:0x6c]
Σημαντικότερα interrupts - DOS Το DOS παρέχει μία σειρά από υπηρεσίες μέσω του software interrupt 0x21 Ουσιαστικά δίνουν το API του DOS Καλύπτουν: υψηλού επιπέδου χρήση περιφερειακών συσκευών υπηρεσίες σχετικές με την διαχείριση του λειτουργικού συστήματος
Κυριότερα DOS Services Μέσω του int 0x21 παρέχονται πολλαπλές υπηρεσίες Η επιλογή γίνεται μέσω της τιμής του ΑΗ πριν το software interrupt Ah = 01h -> keyboard input with echo Ah = 07h -> direct console input without echo Ah = 0ah -> buffered keyboard input Ah = 3dh -> open file using handle Ah = 3eh -> close file using handle Ah = 3fh -> read file or device using handle Ah = 40h -> write file or device using handle
DOS Services Πλήρης λίστα: http://heim.ifi.uio.no/~stanisls/helppc/int_21.html