Cyberpython Online

Πυρήνας : Μία σύντομη περιγραφή

Posted in Computer Science, Linux, Operating Systems by cyberpython on Σεπτεμβρίου 19, 2008

Ως χρήστες διανομών GNU/Linux ακούμε συχνά τον όρο “πυρήνας” (kernel). Τί ακριβώς όμως είναι ο πυρήνας;

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

  • Διαχείριση Διεργασιών
    Π.χ. ποιά διεργασία θα χρησιμοποιήσει τον επεξεργαστή και για πόσο, ποιά διεργασία θα εκτελεστεί αμέσως μετά, η επικοινωνία μεταξύ των διεργασιών (IPC – InterProcess Communication) κλπ.
  • Διαχείριση Μνήμης
    Ο πυρήνας είναι το μόνο λογισμικό που έχει απευθείας εικόνα της μνήμης και είναι υπεύθυνος για την ορθή και αποδοτική της κατανομή στις διάφορες διεργασίες.
  • Διαχείριση Συσκευών
    Ο πυρήνας είναι υπεύθυνος για την κατανομή των περιφερειακών συσκευών (π.χ. εκτυπωτές, οθόνες κλπ.) στις διεργασίες που θέλουν να τις χρησιμοποιήσουν.

Πέρα από τις παραπάνω λειτουργίες ο πυρήνας ενσωματώνει και πολλές άλλες δευτερεύουσες όπως π.χ. υποστήριξη για δικτύωση (networking).

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

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

  • Μονολιθικός πυρήνας
    Σε αυτή την προσέγγιση όλες οι λειτουργίες του πυρήνα καθώς και οι υπηρεσίες που παρέχει αποτελούν μία οντότητα που “κατοικεί” στο “χώρο του πυρήνα”(kernel-space: μία δεσμευμένη περιοχή της μνήμης αποκλειστικά για τον πυρήνα – σε αντίθεση με το user-space που είναι η περιοχή της μνήμης που μπορούν να χρησιμοποιήσουν οι κανονικές διεργασίες) . Οι διεργασίες επικοινωνούν άμεσα με τον πυρήνα Η συγκεκριμένη σχεδίαση κάνει τους μονολιθικούς πυρήνες πολύ ευκολότερους στη δημιουργία, την αποσφαλμάτωση και τη συντήρησή τους. Παράλληλα όμως, ένα πρόβλημα σε ένα τμήμα του πυρήνα μπορεί να “γονατίσει” ολόκληρο το σύστημα. Παράδειγμα τέτοιου πυρήνα είναι το Linux.
  • Microkernel
    Σε αυτή την περίπτωση ο πυρήνας ενσωματώνει μόνο τις βασικές λειτουργίες (χρονοπρογραμματισμός διεργασιών, διαχείριση μνήμης, διαδιεργασιακή επικοινωνία), ενώ όλες οι υπόλοιπες λειτουργίες του εκτελούνται από ξεχωριστές διεργασίες – τους αποκαλούμενους servers του πηρύνα – που “τρέχουν” στο user-space. Αυτή η τελευταία ιδιότητα των servers τους επιτρέπει να γραφτούν σε γλώσσες υψηλού επιπέδου και έτσι να απλοποιήσουν κατά πολύ τη δουλειά των προγραμματιστών. Όμως, η αυξημένη πολυπλοκότητα αυτής της αρχιτεκτονικής οδηγεί σε πολύ μεγαλύτερη δυσκολία της συνολικής υλοποίησης αλλά και της εκσφαλμάτωσης καθώς και μεγάλη απώλεια στην απόδοση σε σχέση με τους μονολιθικού πυρήνες. Παράδειγμα τέτοιου πυρήνα είναι ο Mach microkernel.
  • Υβριδικοί (Hybrid) πυρήνες
    Οι πυρήνες αυτοί αποτελούν ένα κράμα ανάμεσα στους μονολιθικούς πυρήνες και τους microkernels. Στην ουσία οι περισσότεροι (αν όχι όλοι) από τους servers των microkernels μεταφέρονται στο kernel-space με αποτέλεσμα τη βελτίωση στην απόδοση αλλά και απώλεια των πλεονεκτημάτων που δίνει στους servers η εκτέλεσή τους στο user-space. Ο τελικός πυρήνας στην ουσία έχει μικρή διαφορά από ένα μονολιθικό πυρήνα. Παραδείγματα τέτοιων πυρήνων είναι ο πυρήνας του BeOS (και τώρα του Haiku), ο XNU, ο ΝΤ-kernel των Windows και πολλοί άλλοι.

3 σχόλια

Subscribe to comments with RSS.

  1. linuxologos said, on Σεπτεμβρίου 20, 2008 at 1:42 μμ

    Σύντομος και περιεκτικός για όσους δεν ξέρουν, αλλά και δεν θέλουν να μάθουν περισσότερα. Ωραίος!

  2. zen3 said, on Σεπτεμβρίου 20, 2008 at 9:55 μμ

    Καλό άρθρο. Ευχαριστούμε!

  3. sandra said, on Σεπτεμβρίου 21, 2008 at 5:36 μμ

    Πρέπει να το δώσεις σε κάποιον καθηγητή για να το βάλει στις διαφάνειες των Λειτουργικών Συστημάτων ;) :)


Υποβολή απάντησης