Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr
Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή περιορισμένοι υπολογιστικοί / αποθηκευτικοί πόροι δεν τίθεται θέμα υποστήριξης πολλών χρηστών Γενικής χρήστης για πολλές εφαρμογές (που δεν είναι ακόμα γνωστές) υπάρχουν πολλές (ανεξάρτητες) εφαρμογές που μπορεί να εκτελούνται ταυτόχρονα μεταξύ τους μπορεί να δίνεται πρόσβαση σε πολλούς χρήστης που (γενικά) δεν εμπιστεύονται ο ένας τον άλλο Προγραμματισμός II 2 lalis@inf.uth.gr
application application application σύστημα γενικής χρήσης σύστημα ειδικού σκοπού OS HW abstraction & communication hardware application basic HW management hardware Προγραμματισμός II 3 lalis@inf.uth.gr
Ενδεικτική στοίβα λογισμικού ενός Η/Υ higher-level API εφαρμογή (application) system-level API βιβλιοθήκες & περιβάλλοντα εκτέλεσης λειτουργικό (OS) user system hardware specs υλικό (HW) Προγραμματισμός II 4 lalis@inf.uth.gr
Ο ρόλος του λειτουργικού συστήματος Διαχείριση πόρων και συσκευών του συστήματος Κατανομή πόρων σε εφαρμογές/χρήστες Ελεγχόμενη πρόσβαση στους πόρους του συστήματος Αφαίρεση (abstraction) του υλικού απόκρυψη «εσωτερικών» λεπτομερειών υλοποίησης ανεξαρτησία από το υλικό που χρησιμοποιείται Προγραμματισμός II 5 lalis@inf.uth.gr
Βασικοί μηχανισμοί ΛΣ Διαχείριση εκτέλεσης προγραμμάτων Διαχείριση επικοινωνίας προγραμμάτων Διαχείριση δεδομένων προγραμμάτων Παροχή ασφάλειας / προστασίας Προγραμματισμός II 6 lalis@inf.uth.gr
Ασφάλεια / προστασία Το λειτουργικό σύστημα δεν μπορεί να υποθέσει ότι ο κώδικας χρήστη θα σεβαστεί κάποιες κοινές αρχές πρόσβασης / χρήσης πόρων Το λειτουργικό εφαρμόζει συγκεκριμένους κανόνες μέσα από κατάλληλους μηχανισμούς ελέγχου Δύο διαστάσεις ασφάλειας: Αυτοπροστασία: προστασία του λειτουργικού συστήματος από τον κώδικα του χρήστη Προστασία χρηστών: προστασία των προγραμμάτων και δεδομένων του χρήστη Α από τον κώδικα του χρήστη Β Προγραμματισμός II 7 lalis@inf.uth.gr
Διαχωρισμός σύστημα - χρήστης Τα λειτουργικά συστήματα βασίζονται σε έναν διαχωρισμό μεταξύ του κώδικα που ανήκει στο σύστημα και του κώδικα που ανήκει στον χρήστη Κώδικας συστήματος παρέχει βασικές λειτουργίες πάνω στις οποίες βασίζεται η ανάπτυξη του κώδικα χρήστη (εφαρμογών) θεωρείται αξιόπιστος/έμπιστος καθώς έχει γραφτεί έτσι ώστε να εξυπηρετεί τους σκοπούς του συστήματος Κώδικας χρήστη μπορεί να γραφτεί από οποιονδήποτε μπορεί να έχει λάθη (bugs) μπορεί να είναι «κακόβουλος» (malicious) Προγραμματισμός II 8 lalis@inf.uth.gr
userα program userβ program πόροι συστήματος system Προγραμματισμός II 9 lalis@inf.uth.gr
Διασύνδεση λειτουργικού συστήματος Ο κώδικας χρήστη δεν έχει απ ευθείας πρόσβαση σε κρίσιμους πόρους και συσκευές του συστήματος Το λειτουργικό παρέχει συγκεκριμένες λειτουργίες επικοινωνίας του κώδικα χρήστη με το λειτουργικό επικοινωνίας μεταξύ διαφορετικών προγραμμάτων χρήστη Η πρόσβαση σε αυτές τις λειτουργίες γίνεται μέσω ειδικών κλήσεων συστήματος (system calls) Το σύνολο των κλήσεων συστήματος ονομάζεται και διασύνδεση συστήματος (system interface) Προγραμματισμός II 10 lalis@inf.uth.gr
κώδικας χρήστη system calls user system λειτουργικό (OS) Προγραμματισμός II 11 lalis@inf.uth.gr
Κλήσεις συστήματος Οι κλήσεις συστήματος υλοποιούνται μέσω ειδικής εντολής του επεξεργαστή (supervisor call svc) Όταν ένα πρόγραμμα καλέσει μια κλήση συστήματος αλλαγή του επεξεργαστή από user σε system mode άλμα στον κώδικα του λειτουργικού Όταν τερματιστεί η κλήση συστήματος επιστροφή στον κώδικα του χρήστη επαναφορά του επεξεργαστή σε user mode Η πρόσβαση στις λειτουργίες και την μνήμη του λειτουργικού επιτρέπεται μόνο σε system mode προστασία από προγραμματιστικά λάθη και «κακόβουλο» κώδικα Προγραμματισμός II 12 lalis@inf.uth.gr
περιορισμένη πρόσβαση σε πόρους του συστήματος πλήρης πρόσβαση σε πόρους του συστήματος περιορισμένη πρόσβαση σε πόρους του συστήματος user code svc system code χρόνος Προγραμματισμός II 13 lalis@inf.uth.gr
user ζητά λειτουργία svc έλεγχος της τιμής που επιστρέφεται!!! έχει την άδεια; ΟΧΙ επιστροφή κωδικού αποτυχίας ΝΑΙ ΟΧΙ εκτέλεσε την λειτουργία πέτυχε η εκτέλεση; ΝΑΙ επιστροφή κωδικού επιτυχίας Προγραμματισμός II 14 lalis@inf.uth.gr
Αποτυχία κλήσης συστήματος Η τιμή που επιστρέφει μια κλήση συστήματος πρέπει οπωσδήποτε(!) να ελέγχεται Σηματοδοτεί είτε την επιτυχία (ενίοτε μαζί με επιπλέον πληροφορία) είτε την αποτυχία Ο λόγος αποτυχίας αποθηκεύεται, ως κωδικός, στην καθολική μεταβλητή συστήματος errno οι κωδικοί λαθών ορίζονται στο αρχείο errno.h η συνάρτηση strerror επιστρέφει το (αλφαριθμητικό) μήνυμα που αντιστοιχεί στην τρέχουσα τιμή της errno η συνάρτηση perror εκτυπώνει αυτό το μήνυμα η τιμή της errno ανανεώνεται μόνο σε περίπτωση αποτυχίας μια κλήσης συστήματος γιατί; Προγραμματισμός II 15 lalis@inf.uth.gr 15
Απόκρυψη κλήσεων συστήματος Οι συμβάσεις κλήσης είναι περίπλοκες γίνονται σε χαμηλό επίπεδο αποθήκευση παραμέτρων και επιστροφή αποτελεσμάτων εύκολα γίνονται προγραμματιστικά λάθη Οι κλήσεις συστήματος συνήθως «περιτυλίγονται» ώστε να έχουν την μορφή οικείων συναρτήσεων, π.χ., με βάση την σύνταξη/συμβάσεις της C Τα περιτυλίγματα ορίζονται σε ειδικές βιβλιοθήκες system-level libraries Προγραμματισμός II 16 lalis@inf.uth.gr
applications user system API user-level libraries system-level libraries / system calls system system code Προγραμματισμός II 17 lalis@inf.uth.gr
application stdio printf( ) printf( ) syslib write( ) system χρόνος Προγραμματισμός II 18 lalis@inf.uth.gr
Το λειτουργικό σύστημα ως μαύρο κουτί Προσφέρει προγραμματιστική διασύνδεση/διεπαφή με βάση την οποία μπορεί να προγραμματιστούν πολλές διαφορετικές εφαρμογές χοντροκομμένη αναλογία: μια βιβλιοθήκη ειδικού τύπου Ο προγραμματιστής δεν χρειάζεται να γνωρίζει τις εσωτερικές λεπτομέρειες υλοποίησης του λειτουργικού συστήματος Πρέπει όμως να γνωρίζει ποιες λειτουργίες προσφέρονται από το λειτουργικό και πώς να τις χρησιμοποιεί σωστά Προγραμματισμός II 19 lalis@inf.uth.gr
χρήση system call user-level software black box System-level programming interface διάβασμα εσωτερική υλοποίηση λειτουργικού συστήματος εγχειρίδιο (manual) Προγραμματισμός II 20 lalis@inf.uth.gr
Παραγωγή και εκτέλεση κώδικα Ο κώδικας ψηλού επιπέδου μεταφράζεται σε γλώσσα μηχανής (εντολές του επεξεργαστή) εργαλείο/μηχανισμός: compiler Γίνεται σύνδεση με άλλα τμήματα κώδικα που πιθανώς χρησιμοποιούνται (π.χ., βιβλιοθήκες) έτσι ώστε να παραχθεί το τελικό εκτελέσιμο αρχείο, σύμφωνα με τις συμβάσεις του συστήματος εργαλείο/μηχανισμός: linker Το εκτελέσιμο φορτώνεται για εκτέλεση εργαλείο/μηχανισμός: loader Προγραμματισμός II 21 lalis@inf.uth.gr
source code Compiler object code Linker more object code executable Loader language-neutral Runtime Προγραμματισμός II 22 lalis@inf.uth.gr
Το πρόβλημα της φορητότητας (portability) Συχνά είναι επιθυμητό ο κώδικας που γράφουμε να μπορεί να εκτελεστεί (σωστά), χωρίς καμία αλλαγή, σε διαφορετικούς υπολογιστές διαφορετικοί επεξεργαστές, διαφορετικά λειτουργικά Η «φορητότητα» του κώδικα είναι συνήθως καθοριστικής σημασίας για την διάδοση του Όσο πιο κοντά στο λειτουργικό σύστημα βρίσκεται ο κώδικας τόσο λιγότερο μεταφέρσιμος είναι μπορεί όμως να εκμεταλλευτεί (ειδικές) λειτουργίες Υπάρχουν προδιαγραφές λειτουργιών χαμηλού επιπέδου αλλά ανεξάρτητες λειτουργικού συστήματος POSIX (Portable Operating System Interface for Unix) Προγραμματισμός II 23 lalis@inf.uth.gr
φορητότητα πάνω από διαφορετικό υλικό applications/libraries operating system hardware Α re-compile modify re-compile applications/libraries operating system hardware Β φορητότητα πάνω από διαφορετικό λειτουργικό applications/libraries operating system Α hardware modify re-compile applications/libraries operating system Β hardware Προγραμματισμός II 24 lalis@inf.uth.gr