ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ
ΘΕΩΡΙΑ
1: Εισαγωγή στα Λειτουργικά Συστήματα
- Εισαγωγή στους υπολογιστές:
- Στην επικρατούσα υλοποίησή του, ο υπολογιστής είναι ένα κατάλληλα σχεδιασμένο σύνολο από μηχανικά και – κυρίως – ηλεκτρονικά εξαρτήματα και κυκλώματα, τα οποία συνεργάζονται προκειμένου να εκτελούν προγράμματα, κωδικοποιημένα κατάλληλα ως αριθμοί στο δυαδικό σύστημα.
- Τα προγράμματα είναι αλληλουχίες εντολών οι οποίες υλοποιούν αλγορίθμους, δέχονται δεδομένα εισόδου και παράγουν δεδομένα εξόδου (επίσης κωδικοποιημένα στο δυαδικό σύστημα). Οι εντολές αυτές επιλέγονται από ένα σύνολο το οποίο ο επεξεργαστής (CPU, ή Κεντρική Μονάδα Επεξεργασίας), το κεντρικό ηλεκτρονικό εξάρτημα του υπολογιστή, είναι σχεδιασμένος ώστε να «αντιλαμβάνεται». Στην πραγματικότητα τα κυκλώματα στο εσωτερικό του επεξεργαστή είναι απλώς «καλωδιωμένα» κατάλληλα ώστε, όταν συναντούν μία ακολουθία δυαδικών ψηφίων τα οποία αντιστοιχούν σε μία εντολή, να συμπεριφέρονται με έναν προσχεδιασμένο τρόπο που αποδίδει το επιθυμητό αποτέλεσμα. Το τελευταίο συνήθως αφορά την υλοποίηση κάποιου στοιχειώδους υπολογισμού (π.χ. αριθμητική πρόσθεση), μέσω κατάλληλων τροποποιήσεων σε κάποια δεδομένα, ή την εγγραφή / ανάγνωση στη μνήμη RAM.
- Τα προγράμματα είναι γραμμένα από προγραμματιστές ως κατάλληλες αλληλουχίες εντολών οι οποίες, ως σύνολο, επιτυγχάνουν έναν σκοπό: συνήθως τον μετασχηματισμό δεδομένων εισόδου σε δεδομένα εξόδου, ύστερα από τον υπολογισμό που επιτελεί ένας αλγόριθμος. Το σύνολο των προγραμμάτων ενός υπολογιστή καλείται λογισμικό (software), κατ’ αντιδιαστολή προς το σύνολο των εξαρτημάτων του το οποίο λέγεται υλικό (hardware).
- Εξίσου σημαντικό εξάρτημα με τη CPU είναι και η μνήμη RAM, στην οποία αποθηκεύονται οι εντολές και τα δεδομένα ενός προγράμματος όταν αυτό εκτελείται από τον επεξεργαστή. Η CPU και η μνήμη συνδέονται με έναν ηλεκτρικό αγωγό, τον δίαυλο, μέσω του οποίου μεταφέρονται διαρκώς από τη μνήμη προς τον επεξεργαστή η επόμενη προς εκτέλεση εντολή και δεδομένα εισόδου, όπως επίσης και δεδομένα εξόδου από τη CPU προς τη μνήμη. Η RAM είναι σχεδιασμένη ως μία γιγάντια αλληλουχία αριθμημένων «κελιών» τα οποία αποθηκεύουν μία οκτάδα δυαδικών ψηφίων το καθένα. Αυτά τα κελιά ονομάζονται bytes και κάθε byte μπορεί να διαβαστεί ή να εγγραφεί από τον επεξεργαστή ξεχωριστά, με βάση την αρίθμησή του («διεύθυνση μνήμης»). Το σύνολο των δυνατών διευθύνσεων μνήμης ονομάζεται «χώρος διευθύνσεων».
- Τα περιεχόμενα της μνήμης RAM διαγράφονται κάθε φορά που διακόπτεται η παροχή ηλεκτρικού ρεύματος προς αυτήν. Γι’ αυτόν τον λόγο τα προγράμματα και τα μόνιμα δεδομένα των υπολογιστών συνήθως είναι αποθηκευμένα σε συσκευές δευτερεύουσας αποθήκευσης: μαγνητικές (π.χ. σκληροί δίσκοι, δισκέτες), οπτικές (π.χ. CD-ROM, DVD-ROM, Blu-Ray) ή μνήμες FLASH (φλασάκια USB). Οι εν λόγω συσκευές δεν απαιτούν διαρκή παροχή ηλεκτρισμού και έχουν πολύ μεγαλύτερη χωρητικότητα, με πολύ μικρότερο κόστος και ταχύτητα προσπέλασης σε σχέση με την κύρια μνήμη RAM. Ενδεικτικά, σήμερα (2010) υπάρχουν σκληροί δίσκοι των 1000 Gigabyte σε υπολογιστές με κύρια μνήμη των 4 GB. Προκειμένου να εκτελεστεί ένα πρόγραμμα, οι εντολές που το συναποτελούν και τα δεδομένα εισόδου μεταφέρονται αναγκαστικά από μία συσκευή δευτερεύουσας αποθήκευσης στη μνήμη RAM.
- Τα σταθερά, αποθηκευμένα σε δευτερεύουσα μνήμη δεδομένα (π.χ. στον σκληρό δίσκο, σε φλασάκι USB κλπ) είναι ομαδοποιημένα σε αρχεία. Ένα αρχείο είναι μία αλληλουχία από byte, διαθέσιμη για ανάγνωση από προγράμματα που το ζητούν, και ο τύπος του καθορίζει κανόνες για το πώς πρέπει να είναι οργανωμένα τα δεδομένα του και πώς πρέπει να ερμηνευθούν από ένα πρόγραμμα. Επομένως τα δεδομένα ορισμένων τύπων αρχείων («αρχεία κειμένου») κωδικοποιούν «αλφαριθμητικούς» χαρακτήρες σύμφωνα με κάποια σύμβαση (π.χ. ο κώδικας ASCII, με τον οποίον αλφαβητικοί χαρακτήρες, αριθμητικά ψηφία και ειδικοί χαρακτήρες αντιστοιχίζονται μονοσήμαντα σε κάποιον αριθμό). Υπάρχουν ωστόσο και τύποι αρχείων πολυμέσων (π.χ. βίντεο, ήχος κλπ), ειδικοί τύποι αρχείων αναγνώσιμων μόνο από το πρόγραμμα που τα δημιούργησε, αλλά και «δυαδικά αρχεία», τα οποία εκφράζονται απλώς ως μία ακατέργαστη ροή από byte.
- Επειδή ένα πρόγραμμα σε γλώσσα μηχανής (σε μορφή εκτελέσιμη από τον επεξεργαστή) δεν είναι παρά μία μεγάλη και εξαιρετικά δυσανάγνωστη ακολουθία δυαδικών ψηφίων, η συγγραφή των προγραμμάτων γίνεται σε γλώσσες προγραμματισμού υψηλού επιπέδου, οι οποίες έχουν αυστηρή και τυποποιημένη δομή και σύνταξη, αλλά είναι κατανοητές και σχετικά ευανάγνωστες από έναν αναλόγως καταρτισμένο άνθρωπο. Ο κώδικας υψηλού επιπέδου συγγράφεται από τους προγραμματιστές σε απλά αρχεία κειμένου, τα οποία πρέπει στη συνέχεια να υποστούν μεταγλώττιση σε δυαδικά αρχεία γλώσσας μηχανής προκειμένου να μπορούν να «φορτωθούν» στη μνήμη και να «τρέξουν» στον επεξεργαστή.
- Λογισμικό συστήματος:
- Λογισμικό συστήματος (system software) ονομάζεται το σύνολο των προγραμμάτων υπολογιστή τα οποία δεν προορίζονται για τους χρήστες, αλλά αντιθέτως υποβοηθούν τη λειτουργία των εφαρμογών των χρηστών (π.χ. μεταγλωττιστές, βιβλιοθήκες, συμβολομεταφραστές, λειτουργικά συστήματα κλπ).
- Λογισμικό χρήστη (user software) ονομάζεται κατ’ αντιδιαστολή το σύνολο των προγραμμάτων υπολογιστή τα οποία χειρίζονται άμεσα οι χρήστες προκειμένου να εκτελέσουν τις εργασίες τους (π.χ. εφαρμογές γραφείου, εφαρμογές πολυμέσων, παιχνίδια, επιστημονικοί προσομοιωτές, βοηθητικά εργαλεία κλπ).
- Ένα αρχείο κειμένου με πηγαίο κώδικα, γραμμένο σε κάποια γλώσσα προγραμματισμού υψηλού επιπέδου (π.χ. C, Pascal, Basic, C++, Java, C#, Lisp, Prolog κλπ), μεταγλωττίζεται σε ένα αντίστοιχο αρχείο συμβολικού κώδικα (assembly) από τον κατάλληλο μεταγλωττιστή (compiler). Το προκύπτον αρχείο στη συνέχεια μετασχηματίζεται σε αντικειμενικό αρχείο γλώσσας μηχανής από έναν συμβολομεταφραστή (assembler), μία διαδικασία που μετατρέπει τον κώδικα σε αρχείο άμεσα εκτελέσιμο από τον επεξεργαστή.
- Η συμβολική γλώσσα και η γλώσσα μηχανής είναι ίδιου επιπέδου και υπάρχει αμφιμονοσήμαντη αντιστοιχία μεταξύ τους, αλλά η συμβολική αποτελείται από χαρακτήρες του λατινικού αλφαβήτου και δεκαεξαδικά ψηφία, ώστε να είναι κάπως κατανοητή από τον άνθρωπο, ενώ η γλώσσα μηχανής συντίθεται αποκλειστικά από bit. Επομένως ένα εκτελέσιμο αρχείο με γλώσσα μηχανής (ο κώδικας ενός προγράμματος, σε μορφή άμεσα εκτελέσιμη από τον επεξεργαστή) δεν είναι παρά μία μεγάλη ακολουθία δυαδικών ψηφίων. Μία εντολή γλώσσας προγραμματισμού υψηλού επιπέδου συνήθως αντιστοιχεί σε αρκετές εντολές συμβολικής γλώσσας («χαμηλού επιπέδου»).
- Είναι προφανές ότι οι δυνατές εντολές συμβολικής γλώσσας, οι οποίες αντιστοιχίζονται αμφιμονοσήμαντα σε δυαδικές εντολές γλώσσας μηχανής από τον συμβολομεταφραστή, ουσιαστικά είναι το σύνολο των στοιχειωδών εντολών χαμηλού επιπέδου που «αντιλαμβάνεται» ο επεξεργαστής, αυτές που καθοδηγούν τα κυκλώματά του κατά τον χρόνο εκτέλεσης ενός προγράμματος.
- Υπάρχουν επεξεργαστές με διαφορετικό πλήθος, σύνταξη και μορφή τέτοιων εντολών χαμηλού επιπέδου – σε αυτές τις περιπτώσεις μιλάμε για επεξεργαστές «διαφορετικής αρχιτεκτονικής». Στα συνηθισμένα επιτραπέζια και φορητά PC επικρατεί εδώ και δεκαετίες η αρχιτεκτονική επεξεργαστών «x86» σε διάφορες παραλλαγές (π.χ. IA-32 και x86-64), όπως διαμορφώθηκε με τον καιρό από τις εταιρείες Intel και AMD.
- Βιβλιοθήκες (libraries) και μεταγλώττιση (compilation):
- Βιβλιοθήκη καλείται μια συλλογή από έτοιμα, μεταγλωττισμένα υποπρογράμματα που χρησιμοποιείται για την ανάπτυξη λογισμικού. Οι βιβλιοθήκες περιέχουν έτοιμο κώδικα και δεδομένα, παρέχοντας με αυτόν τον τρόπο υπηρεσίες σε προγράμματα. Αυτό επιτρέπει τον διαμοιρασμό και την επαναχρησιμοποίηση κώδικα και δεδομένων με αρθρωτό τρόπο. Η έννοια της βιβλιοθήκης είναι αναπόσπαστο τμήμα του παραδείγματος του δομημένου προγραμματισμού και αναπτύχθηκε παράλληλα με αυτόν. Τα σύγχρονα λειτουργικά συστήματα παρέχουν βιβλιοθήκες που υλοποιούν την πλειονότητα των υπηρεσιών του συστήματος. Έτσι, ο περισσότερος κώδικας που χρησιμοποιούν οι σύγχρονες εφαρμογές προσφέρεται από αυτές τις βιβλιοθήκες και δεν χρειάζεται να γραφεί από την αρχή για κάθε νέο πρόγραμμα.
- Οι προγραμματιστές εφαρμογών χρήστη μπορούν να προσπελάσουν – όταν χρειάζεται – μία υπηρεσία που παρέχεται από κάποια βιβλιοθήκη, καλώντας μέσα από τον κώδικα που γράφουν μία αντίστοιχη διαδικασία με το κατάλληλο κάθε φορά όρισμα. Το μόνο που πρέπει να γνωρίζουν είναι το πώς συντάσσονται οι κλήσεις προς αυτές τις διαδικασίες και όχι το πώς έχουν υλοποιηθεί οι τελευταίες στον έτοιμο κώδικα της βιβλιοθήκης.
- Κατά τη μεταγλώττιση σε κάθε αρχείο κειμένου με πηγαίο κώδικα, είτε αυτό είναι αυτοτελές (κώδικας αυτοτελούς προγράμματος) είτε όχι (π.χ. αρχείο με κώδικα βιβλιοθήκης), αντιστοιχίζεται ένα αντικειμενικό αρχείο με κώδικα σε δυαδική γλώσσα μηχανής. Ένα αντικειμενικό αρχείο περιέχει εκτελέσιμο κώδικα, δηλώσεις δεδομένων, έναν πίνακα συμβόλων, όπου ορίζονται τα αναγνωριστικά (ονόματα μεταβλητών, σταθερών ή διαδικασιών) που εξάγονται από το αρχείο – δηλώνονται δηλαδή σε αυτό – ή εισάγονται στο αρχείο – χρησιμοποιούνται δηλαδή χωρίς να δηλώνονται –, και λοιπές πληροφορίες για τον συνδέτη (linker).
- Ο τελευταίος συνήθως καλείται αυτομάτως αμέσως μετά τον συμβολομεταφραστή, δέχεται ως είσοδο ένα ή περισσότερα αντικειμενικά αρχεία, τα συνενώνει κατάλληλα και παράγει ένα μοναδικό, τελικό εκτελέσιμο αρχείο. Αυτή η συνένωση που επιτελεί ο συνδέτης δεν αφορά μόνο πολλαπλά αντικειμενικά αρχεία (που προκύπτουν προφανώς από αντίστοιχα πολλαπλά πηγαία αρχεία) της ίδιας εφαρμογής, αλλά επεκτείνεται και στο να «επιλύει αναφορές εισαγόμενων συμβόλων»: σαρώνει δηλαδή τον πίνακα συμβόλων κάθε αντικειμενικού αρχείου εισόδου, ανακαλύπτει ποια αναγνωριστικά παρέχονται από κάποια βιβλιοθήκη, αναζητά τον αντικειμενικό κώδικα της βιβλιοθήκης και εισάγει στο τελικό εκτελέσιμο της εφαρμογής τα κατάλληλα τμήματά του.
- Στις περισσότερες περιπτώσεις ο μεταγλωττιστής, ο συμβολομεταφραστής και ο συνδέτης περιέχονται στο ίδιο πακέτο λογισμικού συστήματος. Μόλις ο προγραμματιστής δώσει εντολή για μεταγλώττιση ενός ή περισσότερων αρχείων πηγαίου κώδικα, η μετάφραση και η σύνδεση συνήθως ενεργοποιούνται αυτομάτως μετά την ολοκλήρωση της μεταγλώττισης.
- Λειτουργικό Σύστημα (Operating System)
- Λειτουργικό σύστημα (ΛΣ) καλείται το βασικό τμήμα του λογισμικού συστήματος σε έναν υπολογιστή. Αποτελεί τον κύριο μεσολαβητή μεταξύ υλικού και λογισμικού και εκτελείται διαρκώς στο υπόβαθρο όσο λειτουργεί ο υπολογιστής.
- Διαχειρίζεται αυτοματοποιημένα τους πόρους του υπολογιστή (π.χ. χρόνος στον επεξεργαστή, χώρος στη μνήμη ή στον δίσκο, πρόσβαση σε περιφερειακά όπως ο εκτυπωτής κλπ) και τους κατανέμει με ελεγχόμενο τρόπο στις εφαρμογές, ώστε οι τελευταίες να μη χρειάζεται να απασχολούνται με τέτοιες λεπτομέρειες. Δίδουν απλώς τις κατάλληλες εντολές, μέσω του προγραμματιστικού τους κώδικα, και περιμένουν από το λειτουργικό σύστημα να ικανοποιήσει τις απαιτήσεις τους.
- Το λειτουργικό σύστημα είναι υπεύθυνο για τον διαμοιρασμό του χρόνου του επεξεργαστή σε πολλαπλά, ταυτοχρόνως εκτελούμενα προγράμματα, ή για την κατάλληλη δέσμευση μνήμης ώστε αυτά να μπορούν να τρέξουν. Τα προγράμματα κατά τη συγγραφή του κώδικά τους αλλά και κατά την εκτέλεσή τους, δεν «γνωρίζουν» πώς δεσμεύεται η μνήμη που τους αναλογεί ή ότι τρέχουν και άλλες εφαρμογές παράλληλα.
- Παρέχει στις εφαρμογές χρήστη την ψευδαίσθηση μίας ιδεατής μηχανής: οι προγραμματιστές γράφουν τον κώδικα των εφαρμογών θεωρώντας πως το υλικό της εκάστοτε μηχανής η οποία θα τις εκτελέσει, υπακούει σε κάποιες πολύ απλές και κοινές συμβάσεις / εντολές. Έτσι οι εφαρμογές έχουν εύκολη πρόσβαση στους πόρους και στις συσκευές του συστήματος, χωρίς να χρειάζεται να γνωρίζουν τις ακριβείς λεπτομέρειες της δομής του υποκείμενου υλικού, οι οποίες αλλάζουν από υπολογιστή σε υπολογιστή.
- Το λειτουργικό σύστημα είναι υπεύθυνο για τη «μετάφραση» των προσπαθειών των εκτελούμενων εφαρμογών για πρόσβαση στο υλικό, σε πραγματικές εντολές μηχανής άμεσα αντιληπτές από την εκάστοτε συσκευή. Αυτό επιτυγχάνεται με τους μηχανισμούς των κλήσεων συστήματος και των οδηγών συσκευών. Έτσι μία εφαρμογή χρήστη είναι γραμμένη και μεταγλωττισμένη ώστε να προσπελαύνει με κάποιον κοινό, απλό και πρότυπο τρόπο αρχεία από τον σκληρό δίσκο. Στην πραγματικότητα όμως, επειδή οι διάφοροι τύποι σκληρών δίσκων διαφέρουν μεταξύ τους, το λειτουργικό σύστημα είναι που εξειδικεύει – κατά τον χρόνο εκτέλεσης της εφαρμογής – τέτοιες εντολές σε πραγματικές οδηγίες προς το υλικό, οι οποίες μπορεί να διαφέρουν από τον έναν τύπο σκληρού δίσκο στον άλλον.
- Κατά την εκκίνηση ενός PC το λειτουργικό σύστημα είναι το πρώτο λογισμικό που φορτώνεται στη μνήμη μετά την εκτέλεση του BIOS και, από εκεί κι έπειτα, παραμένει μονίμως στη μνήμη μέχρι να σβήσει ο υπολογιστής. Το BIOS είναι ένα πολύ βασικό και στοιχειώδες τμήμα λογισμικού, ευρισκόμενο σε μία μικρή μόνιμη μνήμη ROM, το οποίο απαιτείται απλώς για να εκκινήσει το σύστημα.
- Μηχανισμοί λειτουργικού συστήματος:
oΟι βασικοί μηχανισμοί ενός λειτουργικού συστήματος αφορούν τη διαχείριση της εκτέλεσης των προγραμμάτων χρήστη (διεργασίες, χρονοπρογραμματισμός), της επικοινωνίας μεταξύ τους (εικονική μνήμη, διαδιεργασιακή επικοινωνία) και των δεδομένων που χρησιμοποιούν (σύστημα αρχείων). Επίσης το λειτουργικό σύστημα διαχειρίζεται τις συσκευές εισόδου / εξόδου (πληκτρολόγιο, οθόνη, ποντίκι, κάρτα γραφικών, κάρτα ήχου, κάρτα δικτύου κλπ) με τη βοήθεια των οδηγών συσκευών που προαναφέρθηκαν.
- Κλήσεις συστήματος (system calls):
oΈνα λειτουργικό σύστημα παρέχει υπηρεσίες σε εφαρμογές χρήστη με προτυποποιημένο τρόπο. Αυτές οι υπηρεσίες αφορούν πρόσβαση στο υλικό και στους πόρους του υπολογιστή, ή αιτήματα προς τους ίδιους τους μηχανισμούς που προσφέρει το λειτουργικό σύστημα (π.χ. τον μηχανισμό διαδιεργασιακής επικοινωνίας).
oΓια να προσπελάσουν τέτοιες υπηρεσίες οι εφαρμογές χρήστη πρέπει ο κώδικάς τους να περιέχει σε κατάλληλα σημεία κλήσεις προς διαδικασίες βιβλιοθήκες τις οποίες παρέχει το λειτουργικό σύστημα. Οι διαδικασίες αυτές λέγονται κλήσεις συστήματος. Όταν ένα πρόγραμμα διενεργεί μία κλήση συστήματος η εκτέλεσή του παγώνει και ο έλεγχος του επεξεργαστή μεταβιβάζεται στο λειτουργικό σύστημα.
oΤο τελευταίο είναι υπεύθυνο για την εκτέλεση της κλήσης συστήματος που ζητήθηκε και την ικανοποίηση του αντίστοιχου αιτήματος της εφαρμογής. Μετά το πέρας της διαδικασίας, επιτυχές ή μη, ο έλεγχος του επεξεργαστή επιστρέφεται στο πρόγραμμα χρήστη και η εκτέλεσή του συνεχίζεται από την εντολή που ακολουθεί την κλήση συστήματος.
oΚατ’ αυτόν τον τρόπο ευαίσθητες λειτουργίες όπως η πρόσβαση στο υλικό (π.χ. το άνοιγμα ενός αρχείου από τον δίσκο) και στους μηχανισμούς του ίδιου του λειτουργικού συστήματος, μεσολαβούνται πάντα από το τελευταίο, το οποίο συλλαμβάνει τις αντίστοιχες κλήσεις και διενεργεί ελέγχους για την εγκυρότητα ή μη του αιτήματος της εφαρμογής. Έτσι π.χ. σε ένα πολυχρηστικό σύστημα, το πρόγραμμα κάποιου χρήστη δεν μπορεί να γράψει ή να διαβάσει δεδομένα σε ιδιωτικό χώρο δίσκου που έχει ανατεθεί σε κάποιον άλλον χρήστη, αφού το λειτουργικό σύστημα θα απορρίψει την ανάλογη κλήση συστήματος.
oΟι διαδικασίες βιβλιοθήκης που αντιστοιχούν στις παρεχόμενες κλήσεις συστήματος, διαφέρουν από λειτουργικό σύστημα σε λειτουργικό σύστημα ως προς την ονοματολογία, τη λειτουργικότητα και τη σύνταξη. Γι’ αυτό τον λόγο ένα πρόγραμμα το οποίο χρησιμοποιεί κλήσεις συστήματος και έχει γραφεί, π.χ., σε γλώσσα προγραμματισμού C, δεν μπορεί να εκτελεστεί τόσο σε περιβάλλον Unix όσο και σε Windows χωρίς αλλαγές στον πηγαίο κώδικα και επαναμεταγλώττιση: οι συμβάσεις των κλήσεων συστήματος διαφέρουν σημαντικά μεταξύ διαφορετικών ΛΣ.
oΣχεδόν πάντα, μαζί με έναν μεταγλωττιστή για κάποια γλώσσα προγραμματισμού υψηλού επιπέδου παρέχεται και μία βιβλιοθήκη συστήματος με προτυποποιημένες διαδικασίες της γλώσσας. Οι βιβλιοθήκες αυτές εσωτερικά, στην υλοποίησή τους, διενεργούν κλήσεις συστήματος όταν απαιτείται, άρα ο εξωτερικός προγραμματιστής εφαρμογών χρήστη συνήθως δεν χρειάζεται ρητά να γνωρίζει τις τελευταίες, εκτός και αν ο κώδικάς του πράττει κάτι εξεζητημένο.
oΠ.χ. η πρότυπη γλώσσα προγραμματισμού C παρέχει την έτοιμη συνάρτηση βιβλιοθήκης fopen() για το άνοιγμα κάποιου αρχείου δίσκου από ένα πρόγραμμα. Η διαδικασία αυτή, στην υλοποίηση του μεταγλωττιστή και των συνοδευτικών βιβλιοθηκών για Windows, έχει γραφεί έτσι ώστε να καλεί εσωτερικά την αντίστοιχη κλήση συστήματος των Windows. Στην υλοποίηση για Unix καλεί εσωτερικά την αντίστοιχη κλήση συστήματος του Unix. Επομένως, το εξωτερικό πρόγραμμα χρήστη το οποίο καλεί στον κώδικά του την fopen() και όχι απευθείας την ανάλογη κλήση συστήματος, δεν χρειάζεται να ξαναγραφεί για να μεταφερθεί από το ένα λειτουργικό σύστημα στο άλλο, αλλά μόνο να επαναμεταγλωττιστεί σε διαφορετικό περιβάλλον.
- Πυρήνας, Χώρος Χρήστη και Κέλυφος:
oΤο τμήμα του λειτουργικού συστήματος το οποίο υλοποιεί τις κλήσεις συστήματος ονομάζεται πυρήνας (kernel). Ο πυρήνας είναι το θεμελιώδες υπόστρωμα ενός λειτουργικού συστήματος, το κύριο κομμάτι του, το οποίο έχει άμεση πρόσβαση στο υλικό και υλοποιεί τους μηχανισμούς των διεργασιών, του συστήματος αρχείων, της διαδιεργασιακής επικοινωνίας κλπ.
oΌταν ένας εκτελούμενος κώδικας δεν έχει καλέσει κάποια κλήση συστήματος (π.χ. αν διενεργεί απλώς αριθμητικούς υπολογισμούς, χωρίς να προσπελαύνει το υλικό του υπολογιστή) λέμε πως εκείνη τη στιγμή εκτελείται στον χώρο χρήστη. Μόλις προβεί σε μία κλήση συστήματος και αυτή συλληφθεί από το λειτουργικό σύστημα, ο έλεγχος του επεξεργαστή αφαιρείται από την εφαρμογή και μεταβιβάζεται στον πυρήνα.
oΟ πυρήνας είναι κώδικας χαμηλού επιπέδου, αποκλειστικά για την αρχιτεκτονική επεξεργαστή στην οποία στοχεύει το ΛΣ, γραμμένος συνήθως σε γλώσσα C ή και απευθείας σε συμβολική γλώσσα, ο οποίος αναλαμβάνει όλες τις βασικές εργασίες. Ο κώδικας των εφαρμογών (κώδικας χρήστη) δεν έχει άμεση πρόσβαση στον πυρήνα αλλά ο τελευταίος παρέχει τις κλήσεις συστήματος ως μία προγραμματιστική διασύνδεση, με την οποία τα προγράμματα μπορούν να καλούν με ελεγχόμενο τρόπο διαδικασίες του πυρήνα που παρέχουν υπηρεσίες στον καλούντα. Έτσι ο πυρήνας παρουσιάζει μία εικονική, αφαιρετική εκδοχή του υλικού για χρήση από το λογισμικό.
oΗ εξωτερική απεικόνιση (συνήθως στην οθόνη) του λειτουργικού συστήματος, ώστε ο χρήστης να μπορεί να αλληλεπιδράσει με αυτό και να διαχειριστεί τα προγράμματα και τις εργασίες του, δεν ταυτίζεται με το ίδιο το ΛΣ. Στην πραγματικότητα το κέλυφος (shell, εναλλακτικά στα ελληνικά είναι γνωστό και ως φλοιός), όπως λέγεται το εν λόγω τμήμα του ΛΣ το οποίο παρέχει μία οπτική και αλληλεπιδραστική διασύνδεση προς τους χρήστες, είναι απολύτως δευτερεύον σε σχέση με τον πυρήνα και τους μηχανισμούς του, παρόλο που πρόκειται για το μόνο συστατικό ενός λειτουργικού συστήματος το οποίο είναι άμεσα ορατό από έναν απλό χρήστη.
oΥπάρχουν δύο βασικοί τύποι κελύφους: οι γραμμές εντολών, όπου οι χρήστες απλώς πληκτρολογούν εντολές για να διαχειριστούν τα αρχεία και τα προγράμματά τους, και οι γραφικές διασυνδέσεις χρήστη (GUI), όπου οι χρήστες χειρίζονται ένα γραφικό περιβάλλον στηριζόμενο στο ποντίκι και σε οπτικές μεταφορές (εικονίδια, παράθυρα κλπ).
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
Αφήστε το σχόλιό σας για την τρέχουσα ανάρτηση: