Κεφάλαιο 5 | Ενότητα 8 | Ερωτήσεις επισκόπησης | Επόμενο | Λεξικό όρων

  'Εννοια και λειτουργία των Διακοπών
 

Η επιβάρυνση που επιφέρει ένα σχήμα διασύνδεσης εξέτασης (polling interface) αναγνωρίστηκε πολύ καιρό πριν, οδηγώντας στην εφεύρεση των διακοπών (interrupts), για να ειδοποιείται ο επεξεργαστής όταν μία συσκευή I/O απαιτεί την προσοχή του. Το σύστημα εισόδου/εξόδου οδηγούμενο από διακοπές (interrupt-driven), το οποίο χρησιμοποιείται από όλα σχεδόν τα συστήματα τουλάχιστον για κάποιες συσκευές, χρησιμοποιεί τις διακοπές I/O για να δηλώσει στον επεξεργαστή ότι μία συσκευή I/O χρειάζεται την παρέμβασή του.

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

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

Διακοπές και λειτουργικό σύστημα: Ενας εναλλακτικός μηχανισμός είναι να κάνουμε τη μεταφορά των δεδομένων οδηγούμενη από διακοπές (interrupt-driven). Σε αυτή την περίπτωση, και πάλι το λειτουργικό σύστημα θα μετέφερε τα δεδομένα σε μικρά πλήθη bytes από τη συσκευή ή προς αυτή. Αλλά επειδή η λειτουργία I/O είναι οδηγούμενη από διακοπές, το λειτουργικό σύστημα ασχολείται με άλλες εργασίες όσο τα δεδομένα διαβάζονται από τη συσκευή ή γράφονται σε αυτή. Οταν το λειτουργικό σύστημα αναγνωρίσει ότι έγινε μία διακοπή από τη συσκευή, διαβάζει την κατάστασή της για να ελέγξει για λάθη. Αν δεν υπάρχει κανένα λάθος, το λειτουργικό σύστημα μπορεί να παράσχει το επόμενο τμήμα δεδομένων, για παράδειγμα, μέσω μίας ακολουθίας από εγγραφές απεικονισμένες στη μνήμη (βλέπε ενότητα 7). Οταν και το τελευταίο byte μίας αίτησης I/O έχει μεταδοθεί και η λειτουργία I/O έχει ολοκληρωθεί, το λειτουργικό σύστημα μπορεί να ενημερώσει το πρόγραμμα σχετικά.

Ο επεξεργαστής και το λειτουργικό σύστημα κάνουν όλη τη δουλειά σε αυτή τη διεργασία, προσπελάσσοντας τη συσκευή και τη μνήμη για κάθε τμήμα δεδομένων που μεταφέρεται.

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 1

Θυμάστε τι είναι η μέθοδος Ι/Ο απεικονισμένο στη μνήμη και για ποιο λόγο χρησιμοποιείται; Στην περίπτωση που δυσκολεύεστε να απαντήσετε στην ερώτηση, κρίνεται σκόπιμο να ανατρέξετε στην 7η ενότητα του κεφαλαίου αυτού και συγκεκριμένα στην υποενότητα με τίτλο: «Δίνοντας ο επεξεργαστής εντολές στις συσκευές Ι/Ο».



 

Παράδειγμα λειτουργίας.

Θεωρήστε μια διεργασία που απαιτεί να εκτελεστούν κάποιοι υπολογισμοί και να εκτυπωθούν τα αποτελέσματα σε ένα εκτυπωτή γραμμής. Στη συνέχεια ακολουθούν ακόμη περισσότεροι υπολογισμοί και εκτυπώσεις, και ούτω καθεξής. Υποθέτουμε ότι το πρόγραμμα αποτελείται από δύο ρουτίνες, τις ΥΠΟΛΟΓΙΣΕ (για συντομία ΥΠ) και ΕΚΤΥΠΩΣΕ (για συντομία ΕΚ). Ας θεωρήσουμε ότι η ΥΠ παράγει n γραμμές εξόδου, οι οποίες θα εκτυπωθούν από τη ρουτίνα ΕΚ.

Απάντηση

Η απαιτούμενη διεργασία μπορεί να έρθει σε πέρας με την επαναλαμβανόμενη εκτέλεση πρώτα της ρουτίνας ΥΠ και στη συνέχεια της ΕΚ. Ο εκτυπωτής δέχεται μόνο μια γραμμή κειμένου κάθε φορά. Ετσι, η ΕΚ θα πρέπει να στέλνει μια γραμμή κειμένου, να αναμένει ώσπου αυτή να εκτυπωθεί, μετά να στείλει την επόμενη γραμμή μέχρις ότου εκτυπωθούν όλα τα αποτελέσματα.

Το μειονέκτημα αυτής της απλής προσέγγισης είναι ότι ο επεξεργαστής ξοδεύει ένα σημαντικό ποσοστό του χρόνου του περιμένοντας τον εκτυπωτή να ξαναγίνει έτοιμος για εκτύπωση. Αν ήταν δυνατό να εκτελούταν η ΥΠ κατά τη διάρκεια της εκτύπωσης, θα επιτυγχάναμε μια συνολικά γρηγορότερη ταχύτητα εκτέλεσης. Το παραπάνω είναι δυνατό ως εξής:

Αρχικά, η ΥΠ εκτελείται και παράγει τις n πρώτες γραμμές εξόδου. Στη συνέχεια, εκτελείται η ΕΚ και στέλνει στον εκτυπωτή την πρώτη γραμμή κειμένου. Σε αυτό το σημείο, αντί να περιμένουμε να εκτυπωθεί η γραμμή, η ΕΚ μπορεί να ανασταλεί προσωρινά και να συνεχιστεί η εκτέλεση της ΥΠ.  Οταν ο εκτυπωτής γίνει έτοιμος ειδοποιεί τον επεξεργαστή στέλνοντας ένα σήμα αίτησης διακοπής. Σε απάντηση, ο επεξεργαστής διακόπτει την εκτέλεση της ΥΠ και μεταθέτει τον έλεγχο στην ΕΚ. Η ΕΚ στέλνει τη δεύτερη γραμμή στον εκτυπωτή και αναστέλλεται ξανά. Τότε, η ΥΠ που είχε διακοπεί συνεχίζει την εκτέλεση από το σημείο της διακοπής. Αυτή η διεργασία συνεχίζεται μέχρις ότου εκτυπωθούν και οι n γραμμές. Η ρουτίνα που εκτελείται για να ικανοποιήσει μια αίτηση διακοπής λέγεται ρουτίνα εξυπηρέτησης διακοπών και είναι η ΕΚ. Τέλος παραδείγματος

Συνοπτικά, η ακολουθία των γεγονότων που συμβαίνουν κατά το χειρισμό μιας αίτησης διακοπής μιας συσκευής είναι η εξής:

  1. Η εντολή ενός προγράμματος επιτρέπει τις διακοπές στον επεξεργαστή.
  2. Η συσκευή θέτει μια αίτηση διακοπής.
  3. Ο επεξεργαστής διακόπτει το πρόγραμμα που εκτελείται εκείνη τη στιγμή.
  4. Απενεργοποιείται η δυνατότητα των συσκευών για διακοπές (ορισμένες φορές ο επεξεργαστής επιτρέπει σε κάποιες τη δυνατότητα διακοπής, ενώ λαμβάνει χώρα μια άλλη). Αυτό συμβαίνει γιατί η ρουτίνα επεξεργασίας διακοπών πρέπει πρώτα να μελετήσει και να προωθήσει την υπάρχουσα διακοπή, και στη συνέχεια να ασχοληθεί με άλλες. Η εμφάνιση διακοπής ενώ ήδη μελετάται μια άλλη μπορεί να είναι καταστροφική για το σύστημα!
  5. Η συσκευή πληροφορείται ότι η αίτησή της έχει αναγνωριστεί, και σε απάντηση, απενεργοποιεί το σήμα αίτησης διακοπής.
  6. Εκτελείται η λειτουργία που ζητήθηκε από τη διακοπή.
  7. Οι διακοπές ενεργοποιούνται ξανά.
  8. Συνεχίζεται η εκτέλεση του προγράμματος που είχε αρχικά διακοπεί.

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 2

Να αναφέρετε συνοπτικά την ακολουθία των γεγονότων που συμβαίνουν κατά το χειρισμό μιας αίτησης διακοπής μιας συσκευής. Να συγκρίνετε την απάντησή σας με την παράγραφο που μόλις διαβάσατε.



 

Μετάδοση πληροφοριών στον επεξεργαστή

Για να μεταδοθούν πληροφορίες στον επεξεργαστή, όπως η ταυτότητα της συσκευής που προκαλεί τη διακοπή, ένα σύστημα μπορεί να χρησιμοποιεί είτε διανυσματικές διακοπές (vectored interrupts) είτε ένα καταχωρητή Αιτίας εξαίρεσης (exception Cause register). Δηλαδή, όταν η διακοπή αναγνωρίζεται από τον επεξεργαστή, η συσκευή μπορεί να στείλει στον επεξεργαστή μέσω της αρτηρίας είτε τη διεύθυνση του διανύσματος διακοπής είτε ένα πεδίο κατάστασης, για να τοποθετηθεί στον καταχωρητή Αιτίας. Αυτό έχει ως αποτέλεσμα, όταν το λειτουργικό σύστημα λαμβάνει τον έλεγχο να γνωρίζει την ταυτότητα της συσκευής που προκάλεσε τη διακοπή και να μπορεί άμεσα να εξετάσει τη συσκευή.

Προτεραιότητες στις διακοπές

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

Τόσο οι εσωτερικά παραγόμενες εξαιρέσεις όσο και οι διακοπές I/O έχουν προτεραιότητες· τυπικά οι διακοπές I/O έχουν χαμηλότερη προτεραιότητα από τις εσωτερικές εξαιρέσεις. Μπορεί να υπάρχουν πολλαπλές προτεραιότητες διακοπών I/O, με τις συσκευές υψηλής ταχύτητας να λαμβάνουν τις υψηλότερες προτεραιότητες.

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

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 3

Να προσδιορίσετε τον τρόπο με τον οποίο αντιμετωπίζονται οι διαφορετικές προτεραιότητες των συσκευών Ι/Ο. Να συγκρίνετε την απάντησή σας με την παράγραφο «Προτεραιότητα στις διακοπές».