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

Ας βουτήξουμε βαθιά στον μηχανισμό σηματοδότησης στο Linux και ας καταλάβουμε τι συμβαίνει στα παρασκήνια.

Βασικές έννοιες σήματος στο Linux

Στο Linux, οι διεργασίες παράγουν σήματα σε τρεις βασικές καταστάσεις:

  • Όταν συμβαίνει μια εξαιρετική κατάσταση από την πλευρά του υλικού. Για παράδειγμα, μπορείτε να σκεφτείτε συμβάντα όπως η εφαρμογή που προσπαθεί να αποκτήσει πρόσβαση σε μια περιοχή εκτός του επιτρεπόμενος χώρος διευθύνσεων (σφάλμα τμηματοποίησης) ή δημιουργία κώδικα μηχανής που περιλαμβάνει διαίρεση με το μηδέν λειτουργία.
  • Καταστάσεις όπως η χρήση συνδυασμών πλήκτρων όπως Ctrl + C ή Ctrl + Z στην κονσόλα από τον χρήστη, αλλαγή μεγέθους της οθόνης της κονσόλας ή αποστολή σήματος kill.
  • instagram viewer
  • Ο χρονοδιακόπτης που έχει οριστεί στην εφαρμογή λήγει, το όριο της CPU που δίνεται στην εφαρμογή είναι υψηλό, τα δεδομένα έρχονται σε μια περιγραφή ανοιχτού αρχείου κ.λπ.

Η έννοια των σημάτων υπήρχε από τις πρώτες εκδόσεις του Unix. Προηγουμένως, υπήρχαν αρκετές διαφορές μεταξύ των εκδόσεων Unix σχετικά με την επεξεργασία σήματος. Αργότερα, με την τυποποίηση POSIX φτιαγμένο για διαχείριση σήματος, το Linux και άλλα παράγωγα Unix άρχισαν να ακολουθούν αυτά τα πρότυπα. Για το λόγο αυτό, οι έννοιες των σημάτων Unix και των σημάτων POSIX, που μπορεί να συναντήσετε σε ορισμένα έγγραφα, δείχνουν τις διαφορές.

Αριθμοί σήματος

Τα σήματα έχουν διάφορες αριθμητικές τιμές, ξεκινώντας από μία. Για παράδειγμα, το σήμα 1 είναι α HUP σήμα σχεδόν σε κάθε σύστημα, ή το σήμα 9 είναι α ΣΚΟΤΩΝΩ σήμα.

Ωστόσο, η χρήση αυτών των αριθμών αποθαρρύνεται ιδιαίτερα όταν χρησιμοποιείτε σήματα στις εφαρμογές σας. Για σήματα POSIX, σήμα.χ αρχείο θα πρέπει να βρίσκεται στην εφαρμογή και ο προγραμματιστής θα πρέπει να χρησιμοποιεί τους σταθερούς ορισμούς των σχετικών αριθμών όπως π.χ ΣΙΓΧΟΥΠ, ΣΙΓΚΙΛ, και τα λοιπά. αντι αυτου.

Εάν εξετάσετε το /usr/include/signal.h αρχείο στο σύστημά σας, μπορείτε να δείτε τις πρόσθετες λειτουργίες και άλλα περιλαμβανόμενα αρχεία κοιτάζοντας τους ορισμούς τιμών όπως π.χ. __USE_POSIX, __USE_XOPEN, __USE_POSIX199309, και τα λοιπά. στο αρχείο. Μπορείτε να βρείτε τους διαθέσιμους αριθμούς σήματος σε συστήματα Linux στο /usr/include/asm-generic/signal.h αρχείο, το οποίο δεν χρειάζεται να συμπεριλάβετε απευθείας στον κωδικό της αίτησής σας.

Δημιουργία και αποστολή σήματος

Η παραγωγή σήματος συμβαίνει λόγω ενός γεγονότος. Ωστόσο, η αποστολή (παράδοση) του σήματος στη σχετική εφαρμογή δεν γίνεται ταυτόχρονα με την παραγωγή του σήματος.

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

Η έννοια του σήματος σε εκκρεμότητα

Κατά τη διάρκεια του χρόνου από τη γενιά στη μετάδοση του σήματος, τα σήματα βρίσκονται σε κατάσταση αναμονής. Μπορείτε να αποκτήσετε πρόσβαση στον αριθμό των σημάτων σε εκκρεμότητα και στον αριθμό των σημάτων σε εκκρεμότητα που επιτρέπονται για μια διαδικασία από το /proc/PID/status αρχείο.

# Για μια διαδικασία με PID: 2299
cat /proc/2299/status

# Έξοδος
...
SigQ: 2/31630
...

Μάσκες σήματος και αποκλεισμός

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

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

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

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

Τύποι σήματος Linux

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

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

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

Οι ακόλουθες τιμές βασίζονται σε ένα υποδειγματική αρχιτεκτονική MIPS:

Σήμα Αριθμός Προεπιλεγμένη ενέργεια Μπορεί να πιαστεί;
ΣΙΓΧΟΥΠ 1 Τερματισμός εφαρμογής Ναί
ΣΗΜΕΙΩΣΗ 2 Τερματισμός εφαρμογής Ναί
SIGQUIT 3 Τερματισμός εφαρμογής (πυρήνας απόρριψης) Ναί
ΣΙΓΙΛ 4 Τερματισμός εφαρμογής (πυρήνας απόρριψης) Ναί
SIGTRAP 5 Τερματισμός εφαρμογής (πυρήνας απόρριψης) Ναί
SIGABRT 6 Τερματισμός εφαρμογής (πυρήνας απόρριψης) Ναί
ΣΙΓΦΠΕ 8 Τερματισμός εφαρμογής (πυρήνας απόρριψης) Ναί
ΣΙΓΚΙΛ 9 Τερματισμός εφαρμογής Οχι
SIGBUS 10 Τερματισμός εφαρμογής (πυρήνας απόρριψης) Ναί
SIGSEGV 11 Τερματισμός εφαρμογής (πυρήνας απόρριψης) Ναί
ΣΙΓΣΥΣ 12 Τερματισμός εφαρμογής (πυρήνας απόρριψης) Ναί
SIGPIPE 13 Τερματισμός εφαρμογής Ναί
SIGALRM 14 Τερματισμός εφαρμογής Ναί
SIGTERM 15 Τερματισμός εφαρμογής Ναί
SIGUSR1 16 Τερματισμός εφαρμογής Ναί
SIGUSR2 17 Τερματισμός εφαρμογής Ναί
SIGCHLD 18 Αγνοώ Ναί
SIGTSTP 20 Να σταματήσει Ναί
SIGURG 21 Αγνοώ Ναί
SIGPOLL 22 Τερματισμός εφαρμογής Ναί
SIGSTOP 23 Να σταματήσει Οχι
SIGCONT 25 Συνεχίστε αν σταματήσει Ναί
SIGTTIN 26 Να σταματήσει Ναί
ΣΙΓΤΤΟΥ 27 Να σταματήσει Ναί
SIGVTALRM 28 Τερματισμός εφαρμογής Ναί
ΣΙΓΠΡΟΦ 29 Τερματισμός εφαρμογής Ναί
SIGXCPU 30 Τερματισμός εφαρμογής (πυρήνας απόρριψης) Ναί
SIGXFSZ 31 Τερματισμός εφαρμογής (πυρήνας απόρριψης) Ναί

Κύκλος ζωής των σημάτων στο Linux

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

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

Όπως τα σήματα, οι διαδικασίες είναι επίσης αναπόσπαστο μέρος του οικοσυστήματος Linux. Η κατανόηση των διαδικασιών και του τρόπου λειτουργίας τους είναι ζωτικής σημασίας εάν σκοπεύετε να γίνετε διαχειριστής συστήματος Linux.

Τι είναι μια διαδικασία στο Linux;

Διαβάστε Επόμενο

ΜερίδιοΤιτίβισμαΜερίδιοΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ

Σχετικά θέματα

  • Linux
  • Πυρήνας Linux
  • Διαχείριση συστήματος

Σχετικά με τον Συγγραφέα

Fatih Küçükkarakurt (Δημοσιεύτηκαν 9 άρθρα)

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

Περισσότερα από τον Fatih Küçükkarakurt

Εγγραφείτε στο ενημερωτικό μας δελτίο

Εγγραφείτε στο ενημερωτικό μας δελτίο για συμβουλές τεχνολογίας, κριτικές, δωρεάν ebook και αποκλειστικές προσφορές!

Κάντε κλικ εδώ για να εγγραφείτε