Κλήση συστήματος εναντίον Διακοπή
Ένας τυπικός επεξεργαστής εκτελεί οδηγίες μία προς μία. Αλλά μπορεί να υπάρχουν περιπτώσεις που ο επεξεργαστής πρέπει να σταματήσει προσωρινά και να κρατήσει την τρέχουσα εντολή και να εκτελέσει κάποιο άλλο πρόγραμμα ή τμήμα κώδικα (που βρίσκεται σε κάποιο άλλο μέρος). Αφού γίνει αυτό, ο επεξεργαστής επιστρέφει στην κανονική εκτέλεση και συνεχίζει από εκεί που σταμάτησε. Μια κλήση συστήματος και μια διακοπή είναι τέτοιες περιπτώσεις. Μια κλήση συστήματος είναι μια κλήση σε μια υπορουτίνα ενσωματωμένη στο σύστημα. Μια διακοπή είναι μια διακοπή ελέγχου προγράμματος που προκαλείται από εξωτερικά συμβάντα υλικού.
Τι είναι μια κλήση συστήματος;
Οι κλήσεις συστήματος παρέχουν στα προγράμματα που εκτελούνται στον υπολογιστή μια διεπαφή για συνομιλία με το λειτουργικό σύστημα. Όταν ένα πρόγραμμα χρειάζεται να ζητήσει μια υπηρεσία (για την οποία το ίδιο δεν έχει άδεια) από τον πυρήνα του λειτουργικού συστήματος, χρησιμοποιεί μια κλήση συστήματος. Οι διεργασίες σε επίπεδο χρήστη δεν έχουν τα ίδια δικαιώματα με τις διεργασίες που αλληλεπιδρούν άμεσα με το λειτουργικό σύστημα. Για παράδειγμα, για επικοινωνία με και εξωτερική συσκευή I/O ή για αλληλεπίδραση με άλλες διεργασίες, ένα πρόγραμμα πρέπει να χρησιμοποιεί κλήσεις συστήματος.
Τι είναι η Διακοπή;
Κατά την κανονική εκτέλεση ενός προγράμματος υπολογιστή, ενδέχεται να υπάρξουν συμβάντα που μπορεί να προκαλέσουν προσωρινή διακοπή της CPU. Συμβάντα όπως αυτό ονομάζονται διακοπές. Οι διακοπές μπορεί να προκληθούν είτε από σφάλματα λογισμικού είτε από σφάλματα υλικού. Οι διακοπές υλικού ονομάζονται (απλά) Διακοπές, ενώ οι διακοπές λογισμικού ονομάζονται Εξαιρέσεις ή Παγίδες. Μόλις εγείρεται μια διακοπή (λογισμικό ή υλικό), ο έλεγχος μεταφέρεται σε μια ειδική υπορουτίνα που ονομάζεται ISR (Interrupt Service Routine) που μπορεί να χειριστεί τις συνθήκες που δημιουργούνται από τη διακοπή.
Όπως αναφέρθηκε παραπάνω, ο όρος Διακοπή χρησιμοποιείται συνήθως για διακοπές υλικού. Είναι διακοπές ελέγχου προγράμματος που προκαλούνται από εξωτερικά συμβάντα υλικού. Εδώ, εξωτερικό σημαίνει εξωτερικό της CPU. Οι διακοπές υλικού συνήθως προέρχονται από πολλές διαφορετικές πηγές, όπως τσιπ χρονομέτρου, περιφερειακές συσκευές (πληκτρολόγια, ποντίκι, κ.λπ.), θύρες εισόδου/εξόδου (σειριακές, παράλληλες κ.λπ.), μονάδες δίσκου, ρολόι CMOS, κάρτες επέκτασης (κάρτα ήχου, βίντεο κάρτα, κλπ). Αυτό σημαίνει ότι σχεδόν ποτέ δεν συμβαίνουν διακοπές υλικού λόγω κάποιου συμβάντος που σχετίζεται με το πρόγραμμα εκτέλεσης. Για παράδειγμα, ένα συμβάν όπως ένα πάτημα πλήκτρων στο πληκτρολόγιο από τον χρήστη ή ένα εσωτερικό χρονόμετρο υλικού μπορεί να προκαλέσει αυτό το είδος διακοπής και μπορεί να ενημερώσει την CPU ότι μια συγκεκριμένη συσκευή χρειάζεται κάποια προσοχή. Σε μια τέτοια κατάσταση, η CPU θα σταματήσει οτιδήποτε έκανε (δηλαδή θα σταματήσει το τρέχον πρόγραμμα), θα παρέχει την υπηρεσία που απαιτείται από τη συσκευή και θα επιστρέψει στο κανονικό πρόγραμμα.
Ποια είναι η διαφορά μεταξύ Κλήσης συστήματος και Διακοπής;
Η κλήση συστήματος είναι μια κλήση σε μια υπορουτίνα ενσωματωμένη στο σύστημα, ενώ η Διακοπή είναι ένα συμβάν, το οποίο αναγκάζει τον επεξεργαστή να κρατήσει προσωρινά την τρέχουσα εκτέλεση. Ωστόσο, μια σημαντική διαφορά είναι ότι οι κλήσεις συστήματος είναι σύγχρονες, ενώ οι διακοπές δεν είναι. Αυτό σημαίνει ότι οι κλήσεις συστήματος πραγματοποιούνται σε καθορισμένο χρόνο (συνήθως καθορίζεται από τον προγραμματιστή), αλλά οι διακοπές μπορούν να συμβούν ανά πάσα στιγμή λόγω ενός απροσδόκητου συμβάντος, όπως το πάτημα πλήκτρων στο πληκτρολόγιο από τον χρήστη. Επομένως, κάθε φορά που εμφανίζεται μια κλήση συστήματος, ο επεξεργαστής πρέπει μόνο να θυμάται πού να επιστρέψει, αλλά σε περίπτωση διακοπής, ο επεξεργαστής πρέπει να θυμάται τόσο το μέρος στο οποίο θα επιστρέψει όσο και την κατάσταση του συστήματος. Σε αντίθεση με μια κλήση συστήματος, μια διακοπή συνήθως δεν έχει καμία σχέση με το τρέχον πρόγραμμα.