ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Διάλεξη 1 ΕΙΣΑΓΩΓΗ Οι διαφάνειες έχουν καθαρά επικουρικό χαρακτήρα στην παρουσίαση των διαλέξεων του μαθήματος. Δεν αντικαθιστούν σε καμία περίπτωση την παρακάτω βιβλιογραφία που αποτελεί και το βασικό εγχειρίδιο αναφοράς. Βιβλιογραφία: Σύγχρονα Λειτουργικά Συστήματα, A.S. Tanenbaum, 3 η έκδ., Κλειδάριθμος, 2009. Λειτουργικά Συστήματα, W. Stallings, 8 η έκδ., Τζιόλα, 2015.
Στόχοι Η διάλεξη αυτή έχει ως στόχο να εισάγει τον σπουδαστή στις βασικές έννοιες των λειτουργικών συστημάτων, και ειδικότερα να γνωρίσει: τα βασικά χαρακτηριστικά και τη δομή των λειτουργικών συστημάτων τις εφαρμογές των λειτουργικών συστημάτων στα διάφορα υπολογιστικά συστήματα 2
Ενότητες Υπολογιστικό Σύστημα (ΥΣ) Λειτουργικό Σύστημα (ΛΣ) Κατηγορίες Λειτουργικών Συστημάτων Κύριες Υπηρεσίες Λειτουργικών Συστημάτων Κλήσεις Συστήματος Δομές Λειτουργικών Συστημάτων Σχεδίαση και Υλοποίηση Λ.Σ. 3
Υπολογιστικό Σύστημα Υλικό (hardware) Λογισμικό (software) Προγράμματα συστήματος (system programs) Προγράμματα εφαρμογών (application programs) 4
Υλικό (hardware) Στοιχεία Υπολογιστικών Συστημάτων Παρέχει βασικούς υπολογιστικούς πόρους (επεξεργαστή, μνήμη, συσκευές εισόδου/εξόδου) Λειτουργικό σύστημα (operating system) Διαχειρίζεται τη λειτουργία όλων των πόρων (υλικού & λογισμικού) του υπολογιστικού συστήματος Προγράμματα Καθορίζουν τους τρόπους με τους οποίους χρησιμοποιούνται οι πόροι για την επίλυση των υπολογιστικών προβλημάτων των χρηστών Χρήστες 5
Λειτουργικό Σύστημα ΛΣ: Σύνολο προγραμμάτων που λειτουργεί ως ενδιάμεσος μεταξύ του χρήστη και των πόρων του υπολογιστικού συστήματος Στόχοι : Εκτέλεση προγραμμάτων χρηστών Ευκολία χρήσης του υπολογιστικού συστήματος Διαχείριση των πόρων με αποτελεσματικό & αποδοτικό τρόπο Προστασία των προγραμμάτων και δεδομένων 6
Ορισμός Λειτουργικού Συστήματος Το ΛΣ ως εκτεταμένη μηχανή (extended/virtual machine) Απόκρυψη από το χρήστη της δομής και πολυπλοκότητας του υλικού. Π.χ.: η παρουσίαση μιας απλής και εύχρηστης απεικόνισης από ονόματα και λειτουργίες χειρισμού αρχείων και καταλόγων η παρουσίαση της μνήμης στα προγράμματα των χρηστών Το ΛΣ ως διαχειριστής της ανάθεσης πόρων (resource allocation) Διαχείριση της κατανομής των πόρων τους συστήματος στις απαιτήσεις των προγραμμάτων. Π.χ.: η διαχείριση του επεξεργαστή σε πολυδιεργασιακά και ιδιαίτερα σε πολυπύρηνα συστήματα η διαχείριση και προστασία της μνήμης, ιδιαίτερα σε συστήματα που εξυπηρετούν ταυτόχρονα πολλούς χρήστες η χρήση περιφερειακών πόρων όπως του εκτυπωτή, όπου θα πρέπει να εξυπηρετεί όλες τις διεργασίες που απαιτούν ταυτόχρονα τον εκτυπωτή 7
Ορισμός ΛΣ από σχεδιαστική άποψη Top down view Προσεγγίζοντας το ΛΣ από τη κορυφή (χρήστης) προς τη βάση (υλικό), ο ρόλος του είναι να παρέχει στα προγράμματα εύκολη και αποδοτική επικοινωνία με τους πόρους του ΥΣ. Bottom up view Προσεγγίζοντας το ΛΣ από τη βάση προς την κορυφή, μέριμνα του ΛΣ είναι να παρέχει μια συστηματοποιημένη και ελεγχόμενη κατανομή των επεξεργαστών, των μνημών, και των άλλων συσκευών εισόδου/εξόδου, ανάμεσα στα διάφορα προγράμματα που ανταγωνίζονται μεταξύ τους για να τα χρησιμοποιήσουν. 8
Έννοιες Σειριακή εκτέλεση και ετεροχρονισμός Το σύστημα επιλέγει μια από τις αποθηκευμένες εργασίες, την μεταφέρει από την δευτερεύουσα στην πρωτεύουσα μνήμη και αρχίζει την εκτέλεση της. Μόλις τελειώνει η εκτέλεση της τρέχουσας εργασίας, το ΛΣ φορτώνει την επόμενη εργασία. Κάθε χρονική στιγμή, υπάρχει μόνο μια εργασία που είναι φορτωμένη και εκτελείται από το σύστημα. Πολυπρογραμματισμός Διαμερισμός της μνήμης σε τμήματα, ώστε κάθε διαφορετική εργασία να καταλαμβάνει διαφορετικό τμήμα. Το ΛΣ μπορεί να φορτώσει περισσότερες από μια εργασίες ταυτόχρονα στην κυρίως μνήμη του ΥΣ. Κάθε χρονική στιγμή, υπάρχουν πολλές διεργασίες που είναι φορτωμένες και εκτελούνται από το σύστημα. Χαρακτηριστικά: Διαχείριση πόρων (μνήμης, ΚΜΕ, εργασιών, κ.α.) 9
Κατηγορίες Λειτουργικών Συστημάτων μεγάλων υπολογιστών διακομιστών πολυεπεξεργαστών προσωπικών υπολογιστών φορητών συσκευών ενσωματωμένων υπολογιστών κόμβων αισθητήρων πραγματικού χρόνου έξυπνων καρτών 10
Κύριες υπηρεσίες ΛΣ Διαχείριση διεργασιών (Process Management) Διαχείριση κύριας μνήμης (Main Memory Management) Διαχείριση αρχείων (File Management) Διαχείριση συστήματος Εισόδου/Εξόδου (I/O Management) Διαχείριση χώρου μόνιμης αποθήκευσης (Storage Management) Σύστημα προστασίας (Protection System Management) 11
Διαχείριση διεργασιών Μια διεργασία (process) είναι ένα πρόγραμμα που εκτελείται. Μια διεργασία για να εκτελεστεί χρειάζεται συγκεκριμένους πόρους, που περιλαμβάνουν χρόνο στην ΚΜΕ, χώρο στη μνήμη, αρχεία, μονάδες I/O, κ.α.. Το ΛΣ έχει τις ακόλουθες αρμοδιότητες όσον αφορά στη διαχείριση διεργασιών: Δημιουργία και τερματισμός διεργασιών Διακοπή και επανεκκίνηση διεργασιών Μηχανισμοί συγχρονισμού & επικοινωνίας διεργασιών 12
Διαχείριση κύριας μνήμης Η μνήμη γίνεται αντιληπτή ως ένας συνεχόμενος χώρος από λέξεις (αριθμός από bytes) καθένα με τη δική του διεύθυνση. Αποτελεί αποθήκη γρήγορα προσπελάσιμων δεδομένων που μοιράζονται μεταξύ της ΚΜΕ και των συσκευών Ι/Ο. Η κύρια μνήμη είναι μονάδα προσωρινής αποθήκευσης Το ΛΣ είναι επιφορτισμένο με τις ακόλουθες δραστηριότητες όσον αφορά στη διαχείριση μνήμης: Προσδιορισμός των τμημάτων μνήμης που χρησιμοποιούνται Διαμοιρασμός των τμημάτων μνήμης στις διεργασίες Φόρτωση διεργασιών όταν ελευθερώνεται μνήμη Ανάθεση και αφαίρεση χώρου στη μνήμη 13
Διαχείριση αρχείων και καταλόγων Ένα αρχείο είναι μια συλλογή συσχετισμένων πληροφοριών, όπως ορίζονται από το δημιουργό τους. Το ΛΣ είναι επιφορτισμένο με τις ακόλουθες δραστηριότητες όσον αφορά τη διαχείριση αρχείων: Δημιουργία και διαγραφή αρχείων Δημιουργία και διαγραφή καταλόγων (ή φακέλων) Υποστήριξη λειτουργιών χειρισμού καταλόγων και αρχείων Αντιστοίχηση αρχείων στη δευτερεύουσα μνήμη Αντίγραφα ασφαλείας αρχείων σε μόνιμα αποθηκευτικά μέσα 14
Διαχείριση χώρου μόνιμης αποθήκευσης Λόγω του ότι η κύρια μνήμη είναι προσωρινή και μικρή για να στεγάσει μόνιμα όλα τα προγράμματα και τα δεδομένα, το ΥΣ πρέπει να έχει δευτερεύουσα μνήμη για την «υποστήριξη» της κύριας. Τα ΛΣ χρησιμοποιούν το σκληρό δίσκο ως το βασικό μέσο αποθήκευσης, τόσο για προγράμματα όσο και για δεδομένα. Το ΛΣ είναι επιφορτισμένο με τις ακόλουθες δραστηριότητες όσον αφορά τη διαχείριση του δίσκου: Διαχείριση ελεύθερου χώρου Ανάθεση χώρου αποθήκευσης Χρονοπρογραμματισμός δίσκου (disk scheduling) 15
Διαχείριση Εισόδου / Εξόδου (Ι/Ο) Το σύστημα εισόδου / εξόδου αποτελείται από: Ένα σύστημα προσωρινής / ενδιάμεσης αποθήκευσης (buffercaching system) Μια διασύνδεση γενικής χρήσης για τον αντίστοιχο οδηγό συσκευής (a general device-driver interface) Οδηγούς για τις διάφορες συσκευές 16
Σύστημα προστασίας Ο όρος προστασία (protection) αναφέρεται σε ένα μηχανισμό για τον έλεγχο πρόσβασης διεργασιών ή χρηστών τόσο σε πόρους συστήματος ή χρηστών. Ο μηχανισμός προστασίας πρέπει: να μπορεί να διακρίνει μεταξύ της εξουσιοδοτημένης και μη πρόσβασης να προσδιορίζει τους ελέγχους που πρέπει να επιβληθούν να παρέχει τρόπο επιβολής τους 17
Κλήσεις συστήματος (System Calls) Μια κλήση συστήματος είναι ο τρόπος με τον οποίο ένα πρόγραμμα που εκτελείται σε κατάσταση χρήστη (user mode) ζητά από ένα προστατευμένο πρόγραμμα που βρίσκεται σε κατάσταση πυρήνα (kernel mode) να το εξυπηρετήσει. Τα προγράμματα που εκτελούνται σε κατάσταση πυρήνα εξυπηρετούν τα προγράμματα/διεργασίες που εκτελούνται σε κατάσταση χρήστη, κάνοντας τους απαραίτητους ελέγχους ασφαλείας. Οι κλήσεις συστήματος παρέχουν τη διασύνδεση (interface) μεταξύ ενός προγράμματος που εκτελείται και του ΛΣ. Γενικώς, διαθέσιμα ως ρουτίνες σε γλώσσα assembly. Οι γλώσσες που έχουν οριστεί να αντικαταστήσουν την assembly στον προγραμματισμό συστήματος (system programming) επιτρέπουν την απευθείας επίκληση κλήσεων συστήματος (π.χ., C, C++) μέσω αντίστοιχων βιβλιοθηκών. 18
Βήματα δημιουργίας κλήσης συστήματος Παράδειγμα: της κλήσης συστήματος read (fd, buffer, nbytes) 19
Η κλήση συστήματος στο Linux kernel 20
Διάφοροι τύποι κλήσεων συστήματος Διαχείριση διεργασιών (Process management) Διαχείριση μνήμης (Memory management) Διαχείριση καταλόγων και συστήματος αρχείων (File management) Διαχείριση συσκευών (Device management) Διατήρηση πληροφοριών (Information maintenance) Επικοινωνίες (Communications) 21
Παραδείγματα κλήσεων συστήματος 22
23
Πρόσβαση στις υπηρεσίες του συστήματος Τα ΛΣ διαχειρίζονται τους πόρους του ΥΣ και παρέχουν αφαιρέσεις στα προγράμματα του χρήστη. Η διασύνδεση μεταξύ των προγραμμάτων του χρήστη και του ΛΣ αφορά κυρίως το χειρισμό αυτών των αφαιρέσεων μέσα από κλήσεις συστήματος. Πολλά σύγχρονα λειτουργικά συστήματα διαθέτουν κλήσεις συστήματος που επιτελούν αυτές τις ίδιες λειτουργίες. Π.χ. στα UNIX, System V, BSD, Linux, κ.α. το πρότυπο POSIX (διεθνές πρότυπο 9945-1) καθορίζει ένα αριθμό από διαδικασίες που όλα τα συμβατά συστήματα πρέπει να παρέχουν. Στα Windows το Win32/Win64 API (Application Program Interface) αποτελεί το σύνολο από διαδικασίες μέσα από τις οποίες δίνεται πρόσβαση σε υπηρεσίες του λειτουργικού συστήματος. 24
Παραδείγματα κλήσεων συστήματος 25
Windows και UNIX Processes & Threads Χαρακτηριστικό Windows UNIX Πρωταρχικός μηχανισμός Threads Processes Ναι Ναι Threads Performance Ναι Καλύτερη στη δημιουργία νημάτων. Process hierarchy Όχι Ναι Processes Ναι, αλλά διαφορετικές υλοποιήσεις. Καλύτερη στη δημιουργία διεργασιών. Security inherited Ναι Ναι (εκτός setuid) 26
64-bit Windows 64-bit Windows υποστηρίζουν περισσότερη μνήμη μέχρι 16TBs RAM (32-bit υποστηρίζουν μέχρι 4GBs), και συνεπώς: Περισσότερες εφαρμογές εκτελούνται ταυτόχρονα και παραμένουν εξολοκλήρου στην κύρια μνήμη του συστήματος. Εφαρμογές που παραμένουν (resident) στην κύρια μνήμη έχουν καλύτερη απόδοση. Εφαρμογές με απαιτήσεις σε δεδομένα (data-intensive), όπως π.χ. βάσεις δεδομένων και γραφικά, επωφελούνται καθώς μπορούν να αποθηκεύσουν και να διαχειριστούν μεγαλύτερο πλήθος δεδομένων πιο εύκολα και πιο αξιόπιστα. Εφαρμογές υψηλών επιδόσεων (high-performance computing applications) επωφελούνται καθώς απαιτούν περισσότερη μνήμη για υψηλής ακρίβειας υπολογισμούς. 27
Δομές Λειτουργικών Συστημάτων Μονολιθικά συστήματα Πολυεπίπεδα συστήματα Συστήματα με ελάχιστο πυρήνα (Μικροπυρήνες) Συστήματα πελάτη-εξυπηρετητή (client-server) Ιδεατές/εικονικές μηχανές 28
Μονολιθική προσέγγιση To ΛΣ αποτελείται από ουσιαστικά ένα μεγάλο κομμάτι κώδικα και πρόσβαση στις λειτουργίες του ΛΣ δίνεται μέσω από μια μοναδική και αρκετά εκτεταμένη διεπαφή προγραμματισμού. Ακόμα και αν υπάρχουν ξεχωριστά τμήματα κώδικα (που μεταφράζονται ξεχωριστά) υπάρχει αρκετά μεγάλη εξάρτηση ανάμεσα τους (σε επίπεδο δομών δεδομένων ή/και αλγορίθμων). Για να αλλάξει μια λειτουργία του ΛΣ πρέπει συνήθως να γίνουν αλλαγές σε πολλά διαφορετικά τμήματα του κώδικα. Κυρίως πρόγραμμα που καλεί την αιτούμενη διαδικασία εξυπηρέτησης. Ένα σύνολο διαδικασιών εξυπηρέτησης που υλοποιούν τις κλήσεις συστήματος. Ένα σύνολο διαδικασιών υπηρεσίας που βοηθούν τις διαδικασίες εξυπηρέτησης. 29
Δομή του ΛΣ Unix 30
Πολυεπίπεδη προσέγγιση (Layered Approach) Τo ΛΣ χωρίζεται σε έναν αριθμό από επίπεδα-στρώματα (layers ή levels), κάθε ένα από τα οποία χτίζεται πάνω από υπάρχοντα επίπεδα. Το κάτω επίπεδο (π.χ. επίπεδο 0), είναι το υλικό. Tο υψηλότερο (π.χ. N) είναι η διεπαφή επικοινωνίας με τον χρήστη (user interface). Δομή του ΛΣ OS/2 31
Δομή του ΛΣ. Android OS (layered) 32
Προσέγγιση Μικροπυρήνα (Microkernel Architecture) Μετακινεί περισσότερες λειτουργίες στο χώρο του χρήστη (user space). Πλεονεκτήματα: ευκολότερη και πιο ευέλικτη επεκτασιμότητα του ΛΣ ευκολότερη η μεταφορά του ΛΣ σε νέες αρχιτεκτονικές μεγαλύτερη αξιοπιστία και ασφάλεια Δομή του ΛΣ MINIX 33
Προσέγγιση πελάτη-εξυπηρετητή (Client-Server) Το ΛΣ αποτελείται από μια ομάδα εξυπηρετητών (servers). Κάθε εξυπηρετητής του ΛΣ ανοίγει ένα κανάλι / δίαυλο επικοινωνίας και περιμένει να λάβει αιτήσεις από πελάτες (προγράμματα). Ένας εξυπηρετητής είναι είτε σειριακός (iterative) όπου επεξεργάζεται μια αίτηση κάθε φορά (οι αιτήσεις των πελατών τοποθετούνται σε ουρές αναμονής), είτε παράλληλος (concurrent) όπου επεξεργάζεται πολλές αιτήσεις ταυτόχρονα. Τα προγράμματα πελάτες (clients) επικοινωνούν με το ΛΣ στέλνοντας αιτήσεις στις διευθύνσεις των αντίστοιχων εξυπηρετητών και λαμβάνοντας τα αποτελέσματα. Δομή του ΛΣ NT 34
Ιδεατές/εικονικές μηχανές (Virtual Machines) Μια ιδεατή μηχανή (virtual machine) παρουσιάζει το υλικό και τον πυρήνα του ΛΣ ως να ήταν όλα υλικό. Μια ιδεατή μηχανή παρέχει μια προσαρμογή (interface) πανομοιότυπη με το υφιστάμενο υλικό. Το ΛΣ παρέχει την ψευδαίσθηση των πολλαπλών διεργασιών, όπου η κάθε μια εκτελείται στο δικό της επεξεργαστή με τη δικιά της (ιδεατή) μνήμη. Οι πόροι του ΥΣ διαμοιράζονται προκειμένου να δημιουργήσουν τις ιδεατές μηχανές. Ο χρονοπρογραμματισμός της ΚΜΕ, μπορεί να δώσει την εντύπωση ότι οι χρήστες έχουν δικό τους επεξεργαστή Ένα κανονικό τερματικό χρήστη σε ένα σύστημα καταμερισμού χρόνου λειτουργεί ως η κονσόλα του χειριστή της ιδεατής μηχανής 35
Παράδειγμα: VMware 36
Στόχοι του Λ.Σ.: Ανάπτυξη ΛΣ για το Χρήστη: πρέπει να είναι εύκολο στη χρήση, στη μάθηση, αξιόπιστο, ασφαλές και γρήγορο. για το Σύστημα: πρέπει να είναι εύκολο στην υλοποίηση, τη συντήρηση, ευέλικτο, αξιόπιστο, και αποδοτικό. Παραδοσιακά τα ΛΣ αναπτύσσονταν σε γλώσσες assembly, πλέον όμως αναπτύσσονται σε γλώσσες υψηλότερου επιπέδου (C/C++), καθώς ο κώδικας που γράφεται σε μια γλώσσα υψηλότερου επιπέδου: μπορεί να γραφτεί γρηγορότερα είναι εύκολος στην κατανόηση είναι πιο εύκολος στην αποσφαλμάτωση (debugging) ευκολότερα μεταφέρεται σε άλλες αρχιτεκτονικές 37