Κεφάλαιο 3 | Ενότητα 5 | Επόμενο | Προηγούμενο | Λεξικό όρων

Ποια είναι η δυσκολία των διακοπών

Αν και οι διακοπές δεν είναι συχνές, ο υπολογιστής πρέπει να σχεδιαστεί με τέτοιο τρόπο, ώστε να είναι σε θέση να αποθηκεύσει όλες τις καταστάσεις του, καθώς και κάποιες ενδείξεις του γεγονότος που προκάλεσε τη διακοπή. Επίσης, πρέπει να αποθηκεύσει το περιεχόμενο του PC, που είναι η διεύθυνση της εντολής που θα εκτελεστεί αμέσως μετά την εξυπηρέτηση της διακοπής.
Αυτή η δυσκολία μεγαλώνει εξαιτίας του γεγονότος ότι πολλές διακοπές εμφανίζονται κατά τη διάρκεια εκτέλεσης μιας εντολής και μάλιστα σε πολλές εντολές απαιτείται από το υλικό να επιστρέψει στην κατάσταση που βρισκόταν πριν εμφανιστεί η διακοπή.

Διακοπές σε υπολογιστή VAX

Οι εντολές του VAX είναι μεταβλητού μήκους και μπορεί να αποτελούνται από πολλούς τελεστέους με πολλούς τρόπους διευθυνσιοδότησης για κάθε τελεστέο. Έτσι αν συμβεί μια διακοπή ενώ έχουν διαβαστεί οι περισσότεροι τελεστέοι αλλά δεν έχει ολοκληρωθεί το διάβασμα των τελεστέων, είναι εμφανής η δυσκολία. Για παράδειγμα είναι πιθανό να χρειαστεί να φορτωθεί ξανά μεγάλος αριθμός bytes της εντολής.
Οι εντολές οι οποίες είναι δύσκολο να ανακληθούν ξανά, είναι εκείνες που τροποποιούν μερικές καταστάσεις μηχανής πριν γίνει γνωστή η εμφάνιση διακοπής. Τέτοιες εντολές είναι οι εντολές αυτοαύξησης και αυτοελάττωσης του VAX. Για να αποφευχθεί αυτό το πρόβλημα οι τελευταίες μηχανές VAX χρησιμοποιούν μια ουρά (history queue) που περιέχει τους προσδιοριστές καταχωρητών και τις λειτουργίες που επιτελούνται, ώστε στην περίπτωση διακοπών οι λειτουργίες να μπορέσουν να αναστραφούν.
Δεν είναι μόνο οι τρόποι διευθυνσιοδότησης που κάνουν έναν υπολογιστή VAX δύσκολο στην επανεκκίνηση. Για εντολές που απαιτούν πολύ χρόνο για να εκτελεστούν, ο έλεγχος για διακοπές πρέπει να γίνεται κατά τη διάρκεια εκτέλεσής τους. Για παράδειγμα η εντολή MOVC3 αντιγράφει περισσότερα από 216  bytes και απαιτεί δεκάδες milliseconds για να τελειώσει (χρόνος πολύ μεγάλος για ένα γεγονός που επείγει). Από την άλλη αν μπορούσαμε να αναβάλουμε την εκτέλεση της εντολής, όποτε εμφανίζεται διακοπή, τότε λόγω του ότι οι διακοπές εμφανίζονται συχνά σε σχέση με το χρόνο που απαιτείται για την ολοκλήρωση της εντολής, η εντολή θα επαναλαμβανόταν συνέχεια χωρίς να μπορεί να ολοκληρωθεί.