Εισαγωγή στα Λειτουργικά συστήματα Ι Καθηγητής Κώστας Αναγνωστόπουλος
Τι είναι Λειτουργικό Σύστημα Ένα πρόγραμμα ή συλλογή προγραμμάτων που ελέγχει και διαχειρίζεται το υλικό μιας υπολογιστικής μηχανής Διευκολύνει την δημιουργία και εκτέλεση προγραμμάτων Τα παραπάνω πετυχαίνει ελέγχοντας τους πόρους CPU Κύρια μνήμη (RAM) Δευτερεύουσα μνήμη (Δίσκοι, Δισκέτες, CD-ROM κτλ) Άλλες περιφερειακές συσκευές (Δίκτυο, Εκτυπωτές κτλ)
Τι κάνει ένα Λειτουργικό Σύστημα Διαχείριση πόρων Συσκευές I/O (disk, keyboard, mouse, terminal) Μνήμη Διαχείριση διεργασιών Δημιουργία και τερματισμό διεργασίας Διαδιεργασιακή επικοινωνία Multi-tasking (δρομολόγηση διεργασιών)
Λειτουργικά Συστήματα Microsoft (MS-DOS, Windows 3.1, 95, 98, Windows 2000, Windows XP, Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 Windows Server 2000, Windows Server 2003, Windows Server 2008, Windows Server 2012 Linux, Ubuntu, Lubuntu, Kubuntu, CentOS, RedHat κτλ Mac OS 9, MacOS X,, ios
Γιατί χρησιμοποιείται η γραμμή εντολών Είναι πάντοτε διαθέσιμη Είναι πιο αποτελεσματική και ισχυρή Παρέχει καλύτερη κατανόηση για το τι συμβαίνει
Επίπεδα σε ένα Λειτουργικό Σύστημα
Σύστημα Αρχείων Το σύστημα αρχείων οργανώνεται σε μία ιεραρχία φακέλων αρχείων.
Τυπικό Σύστημα αρχείων σε Windows Υπάρχει η έννοια του My Computer που ομαδοποιεί από κάτω όλες τις συσκευές αποθήκευσης (δίσκους, CD-ROM κτλ) Κάθε συσκευή συμβολίζεται με ένα γράμμα του αγγλικού αλφαβήτου ακολουθούμενο με την : Τα γράμματα Α και Β χρησιμοποιούνται παραδοσιακά για τα 2 floppy drives Ο πρώτος δίσκος συμβολίζεται με το γράμμα C
Διαδρομές (paths) Μέσα σε ένα φάκελο / κατάλογο μπορούμε να έχουμε πολλά αρχεία και πολλούς καταλόγους Μέσα σε ένα κατάλογο δεν μπορούμε να έχουμε 2 αρχεία ακριβώς με το ίδιο όνομα. Ούτε αρχείο και κατάλογο με το ίδιο όνομα
Διαδρομές (paths) Αναφερόμαστε σε ένα αρχείο χρησιμοποιώντας την διαδρομή προς αυτό /tmp/test1.txt /home/staff/ektaktoi/asidirop/test1.txt
Διαδρομές (paths) Μέσα σε μία διαδρομή τα μονοπάτια ή οι κόμβοι που ακολουθούμε διαχωρίζονται με τον χαρακτήρα / SLASH Υπάρχει και ο χαρακτήρας \ BACK-SLASH που χρησιμοποιείται στις διαδρομές σε DOS και Windows λειτουργικά συστήματα. Πλέον τα Windows αντιλαμβάνονται ως διαχωριστή και το χαρακτήρα /. Μία διαδρομή που ξεκινά με τον χαρακτήρα /, τότε ξεκινάει από την ρίζα του δέντρου (root directory) Μία διαδρομή που ξεκινά από τη ρίζα του δέντρου ονομάζεται απόλυτη διαδρομή (absolute path)
Φλοιός ή Κέλυφος (Shell) Είναι το πρόγραμμα που διερμηνεύει τις εντολές που εισάγονται από το πληκτρολόγιο. Οι εντολές είναι δυνατόν να τοποθετηθούν σε ένα αρχείο που ονομάζεται shell script. Κάθε φορά που εισάγεται από το πληκτρολόγιο μια γραμμή το Λ.Σ χρησιμοποιεί ένα τμήμα του για να αναλύσει το περιεχόμενο της γραμμής.
Χαρακτηριστικά φλοιών Διερμηνεία και επεξεργασία της γραμμής εντολών Εκτέλεση εντολών (προγραμμάτων ή εσωτερικών εντολών του φλοιού) Διαχείριση αρχείων, ανακατεύθυνση εισόδου/εξόδου Υποστήριξη μεταβλητών Καθορισμό ψευδωνύμων (aliases) Έλεγχος του περιβάλλοντος και δημιουργία περιβάλλοντος προσαρμοσμένου στις απαιτήσεις του χρήστη Δημιουργία σεναρίων φλοιού (shell scripts)
Πυρήνας (Kernel) Είναι το βασικό τμήμα ενός λειτουργικού συστήματος το οποίο αλληλεπιδρά στενά με το υλικό του υπολογιστή. Ο πυρήνας είναι υπεύθυνος για την αυτόματη διαχείριση των πόρων του συστήματος την κατανομή τους στις εκτελούμενες εφαρμογές την απρόσκοπτη εκτέλεση των εφαρμογών και την επικοινωνία μεταξύ υλικού και λογισμικού.
Διεργασίες Μία διεργασία είναι ένα στιγμιότυπο ενός προγράμματος που βρίσκεται σε εκτέλεση. Κάθε διεργασία έχει το δικό της χώρο μνήμης (memory space) Μερικές φορές χρησιμοποιείται ο όρος Task ο Task Manager των Windows μας δείχνει τις ενεργές διεργασίες Λέμε multi-tasking Λειτουργικό σύστημα Ο όρος Task φαίνεται να τείνει να εγκαταλειφθεί πλέον και χρησιμοποιείται ο όρος process.
Διεργασίες Εναλλακτικοί ορισμοί της διεργασίας Ένα εκτελέσιμο πρόγραμμα που περιλαμβάνει και τις τρέχουσες τιμές του μετρητή προγράμματος, των καταχωρητών και των μεταβλητών του. Κάθε διεργασία έχει τη δική της ιδεατή CPU. Μία δραστηριότητα κάποιου είδους που περιλαμβάνει Ένα πρόγραμμα Είσοδο Έξοδο Βρίσκεται σε μια κατάσταση Η διεργασία είναι μία αφαιρετική άποψη ακολουθίας εντολών που εκτελούνται από τον επεξεργαστή. Ο επεξεργαστής είναι πιθανόν να χρειαστεί να εξυπηρετήσει συσκευές (Hardware Devices) εκτελώντας τους αντίστοιχους οδηγούς συσκευών (device drivers) ενδιαμέσως των εντολών μίας διεργασίας.
Διεργασίες Μία διεργασία μπορεί να συνεπάγεται την εκτέλεση περισσότερων του ενός προγραμμάτων. Αντίστροφα ένα πρόγραμμα μπορεί να αποτελέσει τμήμα περισσότερων διεργασιών Π.Χ μία ρουτίνα που χρησιμοποιείται για να τοποθετήσει ένα στοιχείο σε μία λίστα δεδομένων μπορεί να χρησιμοποιείται από κάθε διεργασία που συμπεριλαμβάνει στις δραστηριότητές της χειρισμούς στοίβας ή ουρών Οι διεργασίες μπορούν να προχωρήσουν μόνον όταν υπάρχει το μέσον που θα εκτελέσει τα σχετικά προγράμματα. Αυτό το μέσο είναι ο επεξεργαστής (processor)
Διεργασίες Ανάλογα με τη φύση των εντολών ο επεξεργαστής μπορεί να υλοποιηθεί αποκλειστικά με το υλικό ή με συνδυασμό υλικού και λογισμικού Π.Χ μία CPU είναι ένας επεξεργαστής για την εκτέλεση εντολών γλώσσας μηχανής ενώ μια CPU μαζί με έναν διερμηνευτή μιας γλώσσας προγραμματισμού συνθέτουν ένα επεξεργαστή που εκτελεί εντολές της συγκεκριμένης γλώσσας προγραμματισμού Το πρόγραμμα ή τα προγράμματα που σχετίζονται με μία διεργασία δεν είναι απαραίτητο να υλοποιούνται υποχρεωτικά με τη μορφή λογισμικού. Π.Χ η δραστηριότητα ενός διαύλου που πραγματοποιεί μεταφορά δεδομένων θα μπορούσε να θεωρηθεί ως διεργασία στην οποία το σχετικό πρόγραμμα βρίσκεται μέσα στο υλικό του διαύλου. Από την πλευρά αυτή κάθε ελεγκτής μιας περιφερειακής συσκευής είναι ένας επεξεργαστής που μπορεί να εκτελεί μία μόνο διεργασία
Διεργασίες Η διαχείριση των διεργασιών αποτελεί το θεμελιώδες αντικείμενο οποιουδήποτε λειτουργικού συστήματος. Το λειτουργικό σύστημα διατηρεί μια δομή δεδομένων για κάθε διεργασία που περιγράφει, Την κατάστασή της Την κατοχή πόρων του συστήματος Και δίνει τη δυνατότητα στο λειτουργικό σύστημα να σκεί επιρροή στον έλεγχο της διεργασίας
Διεργασίες Ένας επεξεργαστής εκτελεί εντολές μηχανής που βρίσκονται στην κύρια μνήμη σε μορφή προγράμματος. Για να εκτελεσθεί ένα πρόγραμμα δημιουργείται μια διεργασία για το συγκεκριμένο πρόγραμμα. Κατά τη διάρκεια του χρόνου οι εντολές προγράμματος που εκτελούνται δημιουργούν μια λίστα που ονομάζεται αποτύπωση της διεργασίας. Ένας επεξεργαστής μπορεί να απασχοληθεί σε διαφορετικές διεργασίας μέσω ενός αλγόριθμου χρονοδρομολόγησης που καθορίζει πότε και ποια διεργασία θα έχει κάθε φορά το δικαίωμα αποκλειστικής χρήσης του. Το ζητούμενο είναι να εξισορροπηθούν οι ανταγωνιστικές απαιτήσεις για την αποδοτικότητα όλου του συστήματος και για τις σχέσεις δικαιοσύνης μεταξύ των διεργασιών.
Διεργασίες Οι περισσότερες απαιτήσεις που πρέπει να αντιμετωπίσει το λειτουργικό σύστημα εκφράζονται με αναφορά στις διεργασίες Το Λ.Σ πρέπει να παρεμβάλει την εκτέλεση πολλαπλών διεργασιών Το Λ.Σ πρέπει να αναθέτει πόρους στις διεργασίες με συγκεκριμένη πολιτική και να αποφεύγει ταυτόχρονα το αδιέξοδο. Το Λ.Σ χρειάζεται να υποστηρίζει την επικοινωνία των διεργασιών από τους χρήστες.
Καταστάσεις Διεργασίας Εκτελούμενη (running): η διεργασία χρησιμοποιεί την CPU εκείνη τη στιγμή. Έτοιμη (ready): η διεργασία έχει διακοπεί προσωρινά για να εκτελεστεί κάποια άλλη Υπό Αναστολή (blocked): η διεργασία δεν μπορεί να εκτελεστεί μέχρι να συμβεί κατάλληλο εξωτερικό συμβάν
Δημιουργία διεργασιών Όταν πρόκειται να προστεθεί μία καινούρια διεργασία σε αυτές που ήδη υπάρχουν το Λ.Σ δημιουργεί τις δομές δεδομένων που χρησιμοποιούνται για τη διαχείρισή της και εκχωρεί στην νέα διεργασία χώρο στην κύρια μνήμη Αιτίες για τη δημιουργία διεργασίας Απόκριση στην υποβολή μίας εργασίας Ένας νέος χρήστης προσπαθεί να συνδεθεί Απαίτηση για παροχή κάποιας υπηρεσίας από μία εφαρμογή Παραγωγή από υπάρχουσα διεργασία
Δημιουργία διεργασιών CREATE (ProcessID, attributes) Το Λ.Σ απαντά στην κλήση CREATE δημιουργώντας μία νέα διεργασία με τα συγκεκριμένα χαρακτηριστικά Μία διεργασία δεν μπορεί να δημιουργηθεί από μόνη της επειδή θα πρέπει η εκτέλεσή της να τεθεί σε λειτουργία από το Λ.Σ Έτσι θα πρέπει να δημιουργηθεί από μια άλλη διεργασία
Δημιουργία διεργασιών Μερικές από τις παραμέτρους που ορίζονται κατά τη δημιουργία της διεργασίας είναι Επίπεδο (συστήματος ή χρήστη) Προτεραιότητα Μέγεθος και απαιτήσεις μνήμης Μέγιστη περιοχή δεδομένων Πληροφορίες προστασίας μνήμης και δικαιώματα πρόσβασης Άλλα δεδομένα εξαρτώμενα από το σύστημα
Δημιουργία διεργασιών Μια διεργασία μπορεί να δημιουργηθεί κατά την πραγματοποίηση ενός από τα παρακάτω Εκκίνηση συστήματος Εκτέλεση της κλήσης συστήματος δημιουργίας διεργασίας από μια άλλη διεργασία Αίτημα χρήστη για δημιουργία νέας διεργασίας Εκκίνηση ομαδικής επεξεργασίας
Κατάργηση διεργασιών Μία διεργασία συνήθως καταργείται κατά την πραγματοποίηση ενός από τα παρακάτω συμβάντα Κανονική έξοδο Έξοδος ή λάθος Τερματισμός λόγω καταστροφικού λάθους Σκότωμα από άλλη διεργασία
Ελαφρές διεργασίας Νήματα (Threats) Τα προγράμματα μπορούν να διαιρεθούν σε τμήματα τα οποία εκτελούνται παράλληλα. Όταν όμως τα τμήματα αυτά πρέπει να μοιράζονται διάφορα στοιχεία του προγράμματος δημιουργείται ένα εναλλακτικό είδος διεργασιών, οι ελαφρές διεργασίας ή νήματα (Threats) Τα νήματα έχουν πολλές ομοιότητες με τις διεργασίες και μια βασική διαφορά, ότι χρησιμοποιούν από κοινού ένα τμήμα της μνήμης στο οποίο έχουν πρόσβαση
Συνθήκες Ανταγωνισμού Στη περίπτωση όπου δύο ή περισσότερες διεργασίες επιχειρούν να χρησιμοποιήσουν ταυτόχρονα την ίδια περιοχή της μνήμης έχουμε μια συνθήκη ανταγωνισμού. Το κομμάτι κώδικα μιας διεργασίας στο οποίο γίνεται προσπέλαση σε περιοχή της μνήμης που χρησιμοποιείται και από άλλες διεργασίες ονομάζεται κρίσιμο τμήμα και δεν πρέπει να εκτελείται ταυτόχρονα με τα κρίσιμα τμήματα των άλλων διεργασιών
Συνθήκες Ανταγωνισμού Οι παρακάτω αρχές διαφυλάσσουν το σύστημα από εμφάνιση συνθηκών συναγωνισμού Δυο διεργασίες δεν πρέπει να βρίσκονται ποτέ ταυτόχρονα στο κρίσιμο τμήμα τους (αμοιβαίος αποκλεισμός) Διεργασία που δεν βρίσκεται στο κρίσιμο τμήμα της δεν πρέπει να εμποδίσει άλλες από το να εισέλθουν στο δικό τους κρίσιμο τμήμα Όταν πολλές διεργασίες επιχειρούν να εισέλθουν στο κρίσιμο τμήμα τους δεν πρέπει να περιμένουν επ άπειρον Δεν επιτρέπεται ο κώδικας μιας διεργασίας να βασίζεται σε υποθέσεις για την ταχύτητα εκτέλεσης ή για το πλήθος των διαθέσιμων επεξεργαστών.
Αμοιβαίος Αποκλεισμός Για την αποφυγή των παρενεργειών λόγω ανταγωνισμού είναι ζωτικής σημασίας η πρόβλεψή και η αποτροπή χρήσης διαμοιραζόμενων πόρων από περισσότερες από μία διεργασίες την ίδια χρονική στιγμή. Αναφέρεται στη δυνατότητα πολλαπλών διεργασιών να μοιράζονται κώδικα, πόρους και δεδομένα έτσι ώστε σε μία χρονική στιγμή μόνο μία διεργασία να έχει πρόσβαση στο συγκεκριμένο αντικείμενο. Είναι απαραίτητος για τη σωστή χρήση των πόρων Είναι απαραίτητος για τη προστασία των κρίσιμων τμημάτων των διεργασιών. Αν δύο διεργασίες προσπαθούν να αποκτήσουν ένα κοινό πόρο, τότε η μία θα πρέπει να αναμένει.
Σηματοφορείς Δύο ή περισσότερες διεργασίες μπορούν να συνεργαστούν με τη χρήση απλών σημάτων. Κάθε διεργασία επιβάλλεται να σταματήσει σε μία συγκεκριμένη θέση, μέχρι να παραλάβει ένα συγκεκριμένο σήμα. Για τη δημιουργία σημάτων χρησιμοποιούνται ειδικές μεταβλητές οι λεγόμενοι σηματοφορείς
Σηματοφορείς Ένας σηματοφόρος είναι μια μεταβλητή συγχρονισμού που λαμβάνει ακέραιες θετικές τιμές ή μηδέν και μπορεί να χρησιμοποιηθεί με μια μη αρνητική τιμή. Οι σηματοφόροι επιλύουν πολλά ενδιαφέροντα προβλήματα και όχι μόνο τον αμοιβαίο αποκλεισμό
Διαγράμματα καταστάσεων Κατά την εκτέλεση των προγραμμάτων των χρηστών οι διεργασίες δημιουργούνται και εισέρχονται στη λίστα των έτοιμων διεργασιών. Με την πάροδο του χρόνου μια διεργασία προωθείται προς την κεφαλή της λίστας και μόλις ο επεξεργαστής γίνει διαθέσιμος η διεργασία ανατίθεται στον επεξεργαστή και η κατάστασή της αλλάζει σε εκτελούμενη. Η διαδικασία της ανάθεσης της πρώτης διεργασίας από τη λίστα των έτοιμων διεργασιών στον επεξεργαστή ονομάζεται διεκπεραίωση και υλοποιείται από μία οντότητα τον διεκπεραιωτή Για να αποφευχθεί η μονοπώληση της χρήσης του επεξεργαστή το Λ.Σ χρησιμοποιεί ένα εξωτερικό χρονιστή που παράγει μία διακοπή μετά από την πάροδο ενός προκαθορισμένου χρονικού ορίου που ονομάζεται καταιγισμός ή κβάντο χρόνου. Αν η διεργασία δεν εκχωρήσει από μόνη της στον επεξεργαστή πριν παρέλθει το κβάντο χρόνου, το Λ.Σ μέσω της διακοπής που παράγεται αναλαμβάνει τον έλεγχο του επεξεργαστή.
Διαγράμματα καταστάσεων Η κατάσταση της τρέχουσας διεργασίας αλλάζει σε έτοιμη και προωθείται προς εκτέλεση η αμέσως επόμενη διεργασία Αν μια εκτελούμενη διεργασία απαιτήσει μια λειτουργία I/O πριν λήξει το κβάντο χρόνου της παραιτείται από τη χρήση του επεξεργαστή. Η Διεργασία τελεί υπό αναστολή. Οι υπό αναστολή διεργασίες θεωρούνται κοιμώμενες (Sleep) επειδή δεν μπορούν να εκτελεστούν ακόμη και αν ο επεξεργαστής καταστεί διαθέσιμος. Όταν ολοκληρωθεί μια διαδικασία Ι/Ο η αντίστοιχη διεργασία αλλάζει την κατάστασή της (wakeup) από υπό αναστολή σε έτοιμη και εισέρχεται στη λίστα των έτοιμων διεργασιών.
Ουρές για τη διαχείριση διεργασιών
Πίνακας Διεργασιών Για να υλοποιηθεί οποιοδήποτε μοντέλο κατάστασης διεργασιών, το Λ.Σ οικοδομεί έναν πίνακα διεργασιών (process table) ο οποίος περιλαμβάνει μια καταχώρηση για κάθε διεργασία Στην καταχώρηση αυτή εγγράφονται πληροφορίες σχετικές με την κατάσταση της διεργασίας ώστε να συνεχίσει να εκτελείται μετά από κάποια διακοπή
Πίνακας Διεργασιών
Διαχείριση αδιεξόδων Ένα σύνολο δύο ή περισσοτέρων διεργασιών αναμένουν την ολοκλήρωση άλλων διεργασιών ώστε να συνεχίσουν τη εκτέλεσή τους αλλά καμιά από τις διεργασίες δεν μπορεί να προχωρήσει. Είναι απαραίτητη για την ολοκλήρωση εκτέλεσης των διεργασιών
Χρήση πόρων Οι πόροι (Resources) του συστήματος μπορεί να είναι διαμοιραζόμενοι δηλαδή μπορούν να χρησιμοποιούνται από πολλές διεργασίες που εξελίσσονται ταυτόχρονα ή μη διαμοιραζόμενοι όπου η χρήση τους περιορίζεται σε μία μόνο διεργασία κάθε φορά Ο μη διαμοιρασμός ενός πόρου οφείλεται στους παρακάτω λόγους Στη φύση του πόρου Η παράλληλη χρησιμοποίηση του πόρου από διαφορετικές διεργασίες προκαλεί την σύγκρουση δραστηριοτήτων διαφορετικών διεργασιών
Διαχείριση πόρων
Αλληλεπίδραση διεργασιών Σύστημα πολυπρογραμματισμού ένα σύστημα που μοιράζει το χώρο της μνήμης του και διανέμει το χρόνο της CPU σε περισσότερες από μία διεργασίες. Σε πολύ-προγραμματιστικό σύστημα ενός επεξεργαστή οι διεργασίες εναλλάσσονται ώστε να δίνουν την εικόνα της ταυτόχρονης εκτέλεσης ενώ σε συστήματα πολλών επεξεργαστών είναι δυνατή και η επικάλυψη των διεργασιών.
Δυσκολίες που προκύπτουν λόγω της αλληλεπίδρασης των διεργασιών Η διαμοίραση και η ανάθεση των πόρων Το Λ.Σ συνήθως δεν διαχειρίζεται την ανάθεση των πόρων με βέλτιστο τρόπο Εντοπισμός των προγραμματιστικών σφαλμάτων
Συνθήκες ανταγωνισμού Οι συνθήκες κατά τις οποίες δύο ή περισσότερες διεργασίες διαμοιράζονται την ίδια περιοχή μνήμης έχουμε συνθήκες ανταγωνισμού Το κομμάτι κώδικα μιας διεργασίας στο οποίο γίνεται προσπέλαση σε περιοχή της μνήμης που χρησιμοποιείται και από άλλες διεργασίες ονομάζεται κρίσιμο τμήμα και δεν πρέπει να εκτελείται ταυτόχρονα με τα κρίσιμα τμήματα των άλλων διεργασιών Ο έλεγχος του ανταγωνισμού αφορά αναπόφευκτα το Λ.Σ διότι αυτό κάνει ανάθεση πόρων άρα οποιαδήποτε λύση θα αφορά και υποστήριξη από το Λ.Σ.