Το λειτουργικό σύστημα Προγραμματισμός 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
Ενδεικτική στοίβα λογισμικού ενός Η/Υ user-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
Διαχωρισμός σύστημα - χρήστης Η ασφάλεια στα λειτουργικά συστήματα βασίζεται στον διαχωρισμό μεταξύ του κώδικα που ανήκει στο σύστημα και του κώδικα που ανήκει στον χρήστη Κώδικας συστήματος υλοποιεί τις βασικές λειτουργίες του συστήματος γράφεται από εξειδικευμένους προγραμματιστές θεωρείται αξιόπιστος Κώδικας χρήστη υλοποιεί λειτουργικότητα της εφαρμογής μπορεί να γραφτεί από οποιονδήποτε μπορεί να έχει λάθη (bugs) μπορεί να είναι «κακόβουλος» (malicious) Προγραμματισμός II 7 lalis@inf.uth.gr
userα program userβ program πόροι συστήματος system Προγραμματισμός II 8 lalis@inf.uth.gr
Διεπαφή λειτουργικού συστήματος Ο κώδικας χρήστη δεν έχει απ ευθείας πρόσβαση σε κρίσιμους πόρους και συσκευές του συστήματος Το λειτουργικό παρέχει συγκεκριμένες λειτουργίες επικοινωνίας του κώδικα χρήστη με το λειτουργικό επικοινωνίας μεταξύ διαφορετικών προγραμμάτων χρήστη Η πρόσβαση σε αυτές τις λειτουργίες γίνεται μέσω ειδικών κλήσεων συστήματος (system calls) Το σύνολο των κλήσεων συστήματος ονομάζεται και διασύνδεση συστήματος (system interface) Προγραμματισμός II 9 lalis@inf.uth.gr
κώδικας χρήστη system calls user system λειτουργικό (OS) Προγραμματισμός II 10 lalis@inf.uth.gr
Κλήσεις συστήματος Οι κλήσεις συστήματος υλοποιούνται μέσω ειδικής εντολής του επεξεργαστή (supervisor call svc) Όταν ένα πρόγραμμα καλέσει μια κλήση συστήματος αλλαγή του επεξεργαστή από user σε system mode άλμα στον κώδικα του λειτουργικού Όταν τερματιστεί η κλήση συστήματος επιστροφή στον κώδικα του χρήστη επαναφορά του επεξεργαστή σε user mode Η πρόσβαση στις λειτουργίες και την μνήμη του λειτουργικού επιτρέπεται μόνο σε system mode προστασία από προγραμματιστικά λάθη και «κακόβουλο» κώδικα Προγραμματισμός II 11 lalis@inf.uth.gr
περιορισμένη πρόσβαση σε πόρους του συστήματος πλήρης πρόσβαση σε πόρους του συστήματος περιορισμένη πρόσβαση σε πόρους του συστήματος user code svc system code χρόνος Προγραμματισμός II 12 lalis@inf.uth.gr
user ζητά λειτουργία svc έλεγχος της τιμής που επιστρέφεται! έχει άδεια; ΟΧΙ επιστροφή κωδικού αποτυχίας ΝΑΙ ΟΧΙ εκτέλεση της λειτουργίας επιτυχής εκτέλεση; ΝΑΙ επιστροφή κωδικού επιτυχίας Προγραμματισμός II 13 lalis@inf.uth.gr
RTFM Προγραμματισμός 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 write( ) printf( ) stdio printf syslib write write 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
source code Compiler object code Linker more object code executable Loader language-neutral Runtime Προγραμματισμός II 21 lalis@inf.uth.gr
Το πρόβλημα της φορητότητας (portability) Συχνά είναι επιθυμητό ο κώδικας που γράφουμε να μπορεί να εκτελεστεί (σωστά), χωρίς καμία αλλαγή, σε διαφορετικούς υπολογιστές διαφορετικοί επεξεργαστές, διαφορετικά λειτουργικά Η «φορητότητα» του κώδικα είναι συνήθως καθοριστικής σημασίας για την διάδοση του Όσο πιο κοντά στο λειτουργικό σύστημα βρίσκεται ο κώδικας τόσο λιγότερο μεταφέρσιμος είναι μπορεί όμως να εκμεταλλευτεί ειδικές λειτουργίες Υπάρχουν προδιαγραφές λειτουργιών επιπέδου συστήματος, ανεξάρτητες λειτουργικού συστήματος POSIX (Portable Operating System Interface for Unix) Προγραμματισμός II 22 lalis@inf.uth.gr
φορητότητα πάνω από διαφορετικό υλικό applications/libraries operating system hardware Α modify re-compile applications/libraries operating system hardware Β φορητότητα πάνω από διαφορετικό λειτουργικό applications/libraries operating system Α hardware modify re-compile applications/libraries operating system Β hardware Προγραμματισμός II 23 lalis@inf.uth.gr