Πυρήνας (υπολογιστές)

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

 Σε κάθε ΛΣ ο πυρήνας αποτελεί το πιο χαμηλό επίπεδο αφαίρεσης υλικού, ειδικά των επεξεργαστών, της μνήμης και των μονάδων Εισόδου / Εξόδου (Ι/Ο). Ο πυρήνας είναι κώδικας χαμηλού επιπέδου, αποκλειστικά για την αρχιτεκτονική επεξεργαστή στην οποία στοχεύει το ΛΣ, γραμμένος συνήθως σε γλώσσα C ή και σε συμβολική γλώσσα, ο οποίος αναλαμβάνει όλες τις παραπάνω εργασίες. Ο κώδικας των εφαρμογών (κώδικας χρήστη) δεν έχει άμεση πρόσβαση στον πυρήνα αλλά ο τελευταίος παρέχει μία προγραμματιστική διασύνδεση, τις κλήσεις συστήματος, με την οποία τα προγράμματα χρήστη μπορούν να καλούν με ελεγχόμενο τρόπο διαδικασίες του πυρήνα που παρέχουν υπηρεσίες στον καλούντα. Έτσι ο πυρήνας παρουσιάζει μία πλασματική, αφαιρετική εκδοχή του υλικού για χρήση από το λογισμικό. Η σύνταξη, η σημασιολογία και η ονοματολογία των κλήσεων συστήματος διαφέρει από ΛΣ σε ΛΣ, με αποτέλεσμα ένα εκτελέσιμο συνήθως να μπορεί να τρέξει μόνο σε ένα ΛΣ. Ο κώδικας χρήστη δεν μπορεί να προσπελάσει μόνος του τους πόρους του υπολογιστή (π.χ. δίσκους, μνήμη συστήματος, περιφερειακά, δίκτυο κλπ) αλλά μπορεί να ζητήσει ό,τι χρειάζεται (π.χ. άνοιγμα ενός αρχείου στον δίσκο) από τον πυρήνα μέσω των κλήσεων συστήματος. Οι γλώσσες προγραμματισμού παρέχουν προτυποποιημένες βιβλιοθήκες που αποκρύπτουν αυτήν τη διαδικασία από τον προγραμματιστή και παρέχουν φορητότητα πηγαίου κώδικα από ΛΣ σε ΛΣ. Ο κώδικας που υλοποιεί τις κλήσεις συστήματος είναι ουσιαστικά τμήμα του πυρήνα οπότε η κλήση διαδικασιών από αυτές τις βιβλιοθήκες ζητά μετάβαση του επεξεργαστή σε κατάσταση πυρήνα, κατά την οποία μπορούν να εκτελεστούν εντολές με άμεση επίδραση στο υλικό και στους πόρους του υπολογιστή, και μεταφέρει τον έλεγχο στον κώδικα της αντίστοιχης κλήσης συστήματος. Όταν ο τελευταίος τερματίσει ο επεξεργαστής μεταβαίνει πάλι σε κατάσταση χρήστη και η διαδικασία χρήστη συνεχίζει την εκτέλεσή της από την εντολή που ακολουθεί την κλήση συστήματος. Διάφοροι τύποι πυρήνων έχουν υλοποιηθεί σε διαφορετικά λειτουργικά συστήματα. Ο πιο συνηθισμένος είναι ο μονολιθικός πυρήνας, όλα τα τμήματα του οποίου εκτελούνται σε έναν ενιαίο χώρο διευθύνσεων και σε κατάσταση πυρήνα. Αυτό γίνεται για λόγους αυξημένης απόδοσης καθώς η μετάβαση από χώρο χρήστη σε χώρο πυρήνα παρουσιάζει σημαντικό χρονικό κόστος, μία επιβάρυνση η οποία μειώνει τις επιδόσεις του υπολογιστή όταν ένα πρόγραμμα εκτελεί πολλές κλήσεις συστήματος. Με το πέρασμα του καιρού όμως εμφανίστηκαν και μικροπυρήνες, μεγάλα τμήματα των οποίων εκτελούνται στον χώρο του χρήστη (ως υποκείμενες βιβλιοθήκες συστήματος) για λόγους αποφυγής σφαλμάτων και ευκολότερης συντήρησης. Μεταξύ αυτών των δύο ακραίων λύσεων υπάρχουν πολλές παραλλαγές στην λειτουργία των πυρήνων. Λειτουργικό σύστημα Πυρήνας Linux Linux and GNU, ανάλυση του Ρίτσαρντ Στόλλμαν σχετικά με τη διαφορά ΛΣ και πυρήνα (Αγγλικά)