ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός
́Εναρξη Μαθήματος • Ο σκοπός του μαθήματος: • Εξοικείωση με την χρήση λειτουργικών συστημάτων τύπου UNIX • Επαφή με τον προγραμματισμό των συστημάτων • Εξοικείωση του με τον πυρήνα του λειτουργικού συστήματος • Μελέτη ορισμένων χαρακτηριστικών μηχανισμών • Μελέτη του πηγαίου κώδικα του πυρήνα του λειτουργικού • Παρέμβαση, μετατροπή, προσθήκη συγκεκριμένων λειτουργιών στο λειτουργικό σύστημα • Το μάθημα θα βασιστεί στο λειτουργικό σύστημα ‘ανοικτού κώδικα’ MINIX version 3.0 • Το μάθημα θα διεξαχθεί σε δύο άξονες • Παραδώσεις – ∆ιαλέξεις • Ασκήσεις
Τυπικά Θέματα • Παραδώσεις • ∆ιαλέξεις 4 ώρες την εβδομάδα • Πέμπτη 18: :00, ΒΑ • Παρασκευή 18: :00, ΑΠ7 / B4 • 4 θεματικές ενότητες • Αντίστοιχα με τα θέματα που καλύφθηκαν στο προηγούμενο εξάμηνο • Ασκήσεις • 4 ασκήσεις (Ομαδικές) • Βαθμολογία • 100% Ασκήσεις
Ασκήσεις – Εξέταση • Ασκήσεις • Ομαδικές (1-3 άτομα) • Μικρές ασκήσεις • 2 ασκήσεις ανά θεματική ενότητα • ≃ 1-2 εβδομάδες ανά άσκηση • Κώδικας • Εξέταση • ∆εν θα υπάρχει εξέταση • Βαθμός 100% από ασκήσεις • Καθυστέρηση στην παράδοση = 10% μείωση βαθμού (ανά μέρα καθυστέρησης) • Αντιγραφή σε 1 άσκηση = μηδενισμός στο μάθημα
Απορίες – Συναντήσεις • Για οτιδήποτε χρειαστείτε – θα με βρείτε στο ΤΜΗΥΠ: • Προκατασκευασμένα • ́Αλλες μέρες/ώρες κατόπιν συνεννοήσεως • Μέσω • Μέσω forum του μαθήματος στο my.ceid.upatras.gr • Μεταπτυχιακοί φοιτητές • Προς το παρόν δεν υπάρχουν
́Υλη Μαθήματος • Λειτουργικό Σύστημα MINIX 3 • Περιβάλλον προγραμματισμού • ∆ιεργασίες • ∆ιαχείριση ∆ιεργασιών Επικοινωνία ∆ιεργασιών • ∆ιαχείριση Μνήμης • Συστήματα Αρχείων • ∆ιαχείριση Αρχείων • Μονάδες Εισόδου - Εξόδου • Device Drivers
Βιβλιογραφία • Βιβλία • B.Kernighan, R.Pike: ‘‘Το περιβάλλον Προγραμματισμού UNIX’’ • A.Tanenbaum: ‘‘Σύγχρονα Λειτουργικά Συστήματα" • A.Tanenbaum, A.Woodhull: ‘‘Operating Systems Design and Implementation, 3rd Edition" • Πανεπιστημιακές Σημειώσεις • Π.Τριανταφύλλου: ‘Εργαστήριο Λειτουργικών Συστημάτων • ∆ιαδίκτυο • Ιστοσελίδα Λειτουργικού Συστήματος MINIX 3
Ιστοσελίδα και Ανακοινώσεις • Η ιστοσελίδα του μαθήματος σύντομα θα ανανεωθεί • Περιέχει : • ∆ιαφάνειες των διαλέξεων • Συμπληρωματικές σημειώσεις • Το υλικό των ασκήσεων • Υλικό από προηγούμενα έτη • ́Ολες οι ανακοινώσεις θα γίνονται στο forum του μαθήματος στο my.ceid.upatras.gr
Σύνοψη 1ης ∆ιάλεξης • Θέματα Μαθήματος • Γενικά • ∆ιαδικασία • Υλικό • Λειτουργικό Σύστημα MINIX 3 • Εισαγωγή • Εγκατάσταση • Βασικές Εντολές Κονσόλας • Σύνοψη Μαθήματος • Βιβλιογραφία • Επόμενη ∆ιάλεξη
Γενικά Χαρακτηριστικά • Στόχοι σχεδιασμού • Αξιοπιστία • Ευελιξία • Ασφάλεια • Λογισμικό ‘Ανοιχτού Κώδικα’ • Ο κώδικας για τις λειτουργίες του συστήματος και όλες τις εντολές και εργαλεία προσφέρεται ελεύθερα μαζί με την εγκατάσταση των εκτελέσιμων • Απευθύνεται σε • Ενσωματωμένα συστήματα • Συστήματα υψηλής αξιοπιστίας • Συστήματα μικρού κόστους (π.χ. OLPC) • Συστήματα όπου η άδεια GPL είναι ιδιαίτερα περιοριστική • Εκπαίδευση
Χαρακτηριστικά Συστήματος • Minimal Unix = MINIX • Ακολουθεί το μοντέλο μικρο-πυρήνα • Ο πυρήνας αποτελείται από 4000 γραμμές κώδικα • Συνολικά είναι ένα λειτουργικό μικρού μεγέθους • περίπου γραμμές κώδικα • Οι λειτουργίες του συστήματος • είναι χωρισμένες σε modules • τρέχουν σε user mode • επικοινωνούν με τον πυρήνα μέσω μηνυμάτων • αν πάει κάτι λάθος απλά γίνεται επανεκκίνηση του συγκεκριμένου module • Είναι συμβατό με POSIX (Portable OS Interface) • Υποστηρίζει όλες τις γνωστές γλώσσες προγραμματισμού • Προσφέρει περιβάλλον εργασίας X Windows
Ιστορική Αναδρομή • Η πρώτη έκδοση εμφανίστηκε το 1987 – περίπου γραμμές κώδικα • Το πρώτο λειτουργικό ελεύθερου κώδικα βασισμένο στο UNIX Version 7 • Πολλά πανεπιστήμια δημιούργησαν ‘Εργαστήρια Λειτουργικών’ • Ενας από τους βασικούς στόχους ήταν ο εκπαιδευτικός χαρακτήρας • Στόχευε σε συστήματα 8088 με 256k μνήμη, χωρίς σκληρό δίσκο – απλά με δισκέτα • Η δεύτερη έκδοση εμφανίστηκε το 1997 • ́Εγινε συμβατό με POSIX (IEEE , ISO ) • Επέκταση προς συστήματα 32-bit • Υποστήριξη σκληρού δίσκου και μεγαλύτερης μνήμης Υποστήριξη TCP/IP
́Εκδοση 3 • Ανακοινώθηκε τον Οκτώβριο του 2005 • Βασίζεται στην παρατήρηση ότι τα Λ.Σ. έχουν διογκωθεί, είναι αργά και αναξιόπιστα • Συνήθως όλο το Λ.Σ. είναι γραμμένο σε C++ μεταγλωττισμένο σε ένα εκτελέσιμο που τρέχει μέσα στον πυρήνα • ́Ενα bug σε μία από τις εκατομμύρια γραμμές είναι ικανό να οδηγήσει το σύστημα σε κατάρρευση • Το να διορθώσεις όλα τα bugs είναι αδύνατο – όσο χρόνο και αν διαθέσεις • ́Ερευνα έδειξε ότι τα bugs που έχουν εντοπιστεί είναι ανά 1000 γραμμές κώδικα • ́Ερευνα έδειξε ότι μετά από τις δέκα πρώτες εκδόσεις, το 6% των αρχείων του κώδικα εξακολουθούν να περιέχουν bugs
́Εκδοση 3 – συνέχεια • Συνήθως το 70% του κώδικα αφορά τις συσκευές Ε/Ε και τους αντίστοιχους οδηγούς – υλοποιημένα από τρίτους • ́Ερευνες σε ‘σταθερές’ εκδόσεις Linux και OpenBSD εντόπισαν εκατοντάδες bugs στον πυρήνα και κυρίως στους οδηγούς συσκευών Ε/Ε • Για αυτόν τον λόγο οι οδηγοί μεταφέρθηκαν εκτός του πυρήνα • ́Ενας ειδικός δαίμονας παρακολουθεί την κατάσταση των οδηγών και τους επανεκκινεί εάν διαπιστώσει ότι υπάρχει κάποιο πρόβλημα • Υλοποιεί τεχνικές ‘αυτό-ίασης’ (self-healing) • ή αλλιώς τεχνικές ‘αυτό-σταθεροποίησης’ (self-stabilization) -- για τις οποίες μίλησε για πρώτη φορά ο Dijkstra περίπου το 1960 (περισσότερα στο μάθημα Κ.Σ.)
Linus Benedict Torvalds • Κατά την διάρκεια των σπουδών του εγκατέστησε το Minix 1.5 – άρχισε τους πειραματισμούς μελετώντας τον κώδικα • Παρατήρησε ότι κάποια βασικά χαρακτηριστικά απουσίαζαν • ́Αρχισε να υλοποιεί τα προγράμματα... • ∆ιαπίστωσε ότι χρειαζόταν διαφορετικό οδηγό για το τερματικό του, οπότε άρχισε να τον υλοποιεί... • Μετά αποφάσισε ότι χρειάζεται να σώσει τα μηνύματα της συζήτησης για το MINIX στο USENIX... • Οπότε άρχισε να γράφει έναν οδηγό για τον σκληρό δίσκο • Στην συνέχεια υλοποίησε ένα απλό σύστημα αρχείων • Τον Αύγουστο του 1991 δημιούργησε την πρώτη έκδοση του πυρήνα του LINUX • Το ανακοίνωσε στο USENIX και με την συνδρομή άλλων προγραμματιστών η πρώτη έκδοση του LINUX ανακοινώθηκε τον Μάρτιο του 1994
MINIX vs LINUX • Το Linux είναι ένα μονολιθικό σύστημα • Καμία δομή όσον αφορά την οργάνωση των λειτουργιών • Ο Tanenbaum ισχυρίστηκε ότι τα συστήματα μικροπυρήνα είναι ανώτερα από τα μονολιθικά •... το Linux βασίζεται σε παρωχημένες τεχνολογίες • ο να προγραμματίζεις ένα μονολιθικό πυρήνα το 1991 είναι ‘‘a giant step back into the 1970s’’ • Το MINIX σχεδιάστηκε κυρίως για εκπαιδευτικό χαρακτήρα • Οφείλει να χρησιμοποιεί καλά σχολιασμένο κώδικα • Υλοποιήσεις ‘αναφοράς’ • Προσφέρει τα ‘θεμέλια’ – τις αποδεκτές αρχές – της ερευνητικής περιοχής • Το LINUX δεν έχει τέτοιου είδους στόχους • Πρέπει να είναι ένα ‘πραγματικό’ λειτουργικό σύστημα • Να βασίζεται σε συγκεκριμένες τεχνολογίες και αρχιτεκτονικές
Ελάχιστες Απαιτήσεις • Αρχιτεκτονική IA-32 (386, 486, Pentium or compatible) • 16MB μνήμη • CDROM ή USB -- χρήση έκδοσης LiveCD • Αν θέλετε να το εγκαταστήσετε στον σκληρό τότε απαιτεί 50 MB • Για την χρήση του περιβάλλοντος X Windows -- χρειάζεται 256MB μνήμη • Για την εγκατάσταση όλου του κώδικα (εφαρμογές κλπ) χρειάζεται 600MB χώρο
Εγκατάσταση: Εύκολη Λύση • Καμία αλλαγή στον σκληρό δίσκο • Χρήση του LiveCD • Κατέβασμα του image (.iso) από την ιστοσελίδα του συστήματος -- • ∆ημιουργία ενός bootable CD-ROM • Επανεκκίνηση του συστήματος με την χρήση του CD-ROM • Χρήση USB Memory Stick • Κατέβασμα του usb_image (.zip) από την ιστοσελίδα του συστήματος • Τοποθέτηση αρχείων στο USB Memory Stick • Επανεκκίνηση του συστήματος με την χρήση του USB Memory Stick • Sector – by – sector copy του.iso στο USB (π.χ. YUMI, XBOOT κτλ κτλ). • Επιλέγουμε ρυθμίσεις ‘‘regular’’ • Κάντε login ως root (δεν χρειάζεται password)
Εγκατάσταση: Πολύ Εύκολη Λύση • Με την προηγούμενη λύση δεν μπορούμε να κάνουμε αλλαγές στο σύστημα • Καμία αλλαγή στον σκληρό δίσκο / λειτουργικό σύστημα • Χρήση ενός Εξομοιωτή • VirtualBox • VMWare Player -- • QEMU -- • Bochs -- bochs.sourceforge.net Virtual PC • Παράδειγμα: ware
Πλήρης Εγκατάσταση • Με την προηγούμενη λύση μπορεί το σύστημα να λειτουργεί ‘αργά’ (εξαρτάται από το υλικό) • Απαιτεί αλλαγές στον σκληρό δίσκο • Εκτός αν μπορούμε να αφιερώσουμε έναν άλλο δίσκο μόνο για το MINIX • Χρειαζόμαστε ένα partition το πολύ 1 GB • Υπάρχουν προγράμματα που μπορούν να αλλάξουν το μέγεθος ενός partition χωρίς να το σβήσουν • ∆ημιουργήστε αντίγραφα ασφαλείας (backup) • Ξεκινήστε το σύστημα με το LiveCD (ή USB) • Επιλέγουμε ρυθμίσεις ‘‘regular’’ • Κάντε login ως root (δεν χρειάζεται password) • Εκτελέστε την εντολή setup
Ξεκινώντας ένα Session • Για να ξεκινήσουμε, αρχικά κάνουμε login • Μόλις ξεκινήσει το σύστημα εμφανίζεται το μήνυμα login • Σε άλλα συστήματα το περιβάλλον είναι ποιο φιλικό (π.χ. πλούσια γραφικά) • Εισάγοντας σωστό login/password ξεκινάει ένα νέο session • Μια νέα ‘κονσόλα’ δημιουργείται • Ενα πολύ βασικό περιβάλλον εκτέλεσης εντολών
Εκτέλεση Εντολών • Το # είναι το prompt • Στο prompt γράφουμε το όνομα της εντολής και πατάμε Return • Πατώντας απλά Return εμφανίζεται μια νέα γραμμή
Χειρισμός λαθών • Αν γράψουμε μια εντολή λάθος, εμφανίζεται ένα μήνυμα λάθους • Το μήνυμα λάθους λέει ότι το αρχείο ή ο φάκελος δεν βρέθηκε Το σύστημα θεωρεί ότι και οι εντολές ειναι αρχεία... • Με τα κουμπιά ↑ ↓ μπορούμε να ανατρέξουμε σε προηγούμενες εντολές • Με τα κουμπιά ← → μπορούμε να επεξεργαστούμε την τρέχουσα γραμμή
Τερματισμός εντολών – ́Εξοδος από την κονσόλα • Για να διακόψουμε την εκτέλεση μιας εντολής χρησιμοποιούμε το ctrl-c • Για να ‘παγώσουμε’ την έξοδο μιας εντολής χρησιμοποιούμε το ctrl-s • Για να ‘ξεπαγώσουμε ́ την έξοδο χρησιμοποιούμε το ctrl-q • Προσοχή – με αυτόν τον τρόπο μόνο η έξοδος παγώνει, όχι η εκτέλεση • Για κλείσουμε την κονσόλα – να ολοκληρώσουμε το session χρησιμοποιούμε το ctrl-d • Πατάμε συνεχόμενες φορές το ctrl-q • Τερματίζουν όλα τα προγράμματα που τρέχουν και στο τέλος εμφανίζεται πάλι η αρχική οθόνη login • Αυτός είναι ο μοναδικός σωστός τρόπος για να κλείνουμε ένα session
Επικοινωνία με άλλους χειριστές • Με την εντολή write μπορούμε να στείλουμε ένα μήνυμα σε μια άλλη κονσόλα Αποστολή μηνύματος # write akomninos hello there ˆD EOT Παραλαβή μηνύματος Message from root (ttyc1) Sat Apr 21 17:09: hello there EOT
Οδηγίες Χρήσης / Προγραμματισμού UNIX • Με την εντολή man μπορούμε να προσπελάσουμε τις σελίδες βοήθειας • Υπάρχουν διάφορες κατηγορίες σελίδων • Εντολές Χειριστών -- ls, cp, grep • Κλήσεις Συστήματος -- fork, exit • Ρουτίνες Βιβλιοθηκών • Αρχεία Συσκευών Ε/Ε • Τύποι/Κωδικοποιήσεις Αρχείων • Παιχνίδια • ∆ιάφορα • Εντολές ∆ιαχειριστή Συστήματος • Εγγραφα – περισσότερες πληροφορίες για τις ορισμένες σελίδες που ανήκουν στις παραπάνω κατηγορίες • Για να προσδιορίσουμε σε ποια κατηγορία αναφερόμαστε: • man [category] [topic]
#man fork
Εγκατάσταση προγραμμάτων στο MINIX • Εντολή packman (<3.1.7) • Απαιτεί το LiveCD ή να έχουμε πρόσβαση στο ∆ιαδίκτυο • Μπορεί να εγκαταστήσει και τον πηγαίο κώδικα • Αντικαταστάθηκε από το pkgin / pkgsrc
Σύνοψη 1ης ∆ιάλεξης • Θέματα Μαθήματος • Γενικά • ∆ιαδικασία • Υλικό • Λειτουργικό Σύστημα MINIX 3 • Εισαγωγή • Εγκατάσταση • Βασικές Εντολές Κονσόλας • Σύνοψη Μαθήματος • Βιβλιογραφία • Επόμενη ∆ιάλεξη
Σύνοψη Μαθήματος • ∆ιαδικασία Μαθήματος • Συνοπτική παρουσίαση των Σητημάτων και προβλημάτων που θα μελετηθούν • Σύντομη παρουσίαση του MINIX 3 • Θέματα εγκατάστασης MINIX 3 • Περιβάλλον MINIX • Εισαγωγή στις γενικές έννοιες της κονσόλας
Βιβλιογραφία • Βιβλίο ‘Σύγχρονα Λειτουργικά Συστήματα" (A.Tanenbaum) • Κεφάλαιο 1: Εισαγωγή • Κεφάλαιο 10: Μελέτη Περίπτωσης 1 – Unix και Linux • Βιβλίο ‘Το περιβάλλον Προγραμματισμού UNIX’’ (B.Kernighan, R.Pike) • Κεφάλαιο 1: Εισαγωγή • Βιβλίο ‘‘Operating Systems: Design and Implementation" (A.Tanenbaum, A.Woodhull) • Κεφάλαιο 1: Introduction • Appendix A: Installing MINIX 3 • Πανεπιστημιακές Σημειώσεις (Π.Τριανταφύλλου) • Κεφάλαιο 1: Εισαγωγή σε Λειτουργικά Συστήματα
Επόμενη ∆ιάλεξη • Περιβάλλον προγραμματισμού UNIX Επανάληψη από μάθημα ‘Λειτουργικά Συστήματα Ι’ • Κεφάλαιο 1: Παραδοσιακά Λειτουργικά Συστήματα • Κεφάλαιο 2: ∆ιεργασίες • Αντίστοιχα κεφάλαια από ‘Σύγχρονα Λειτουργικά Συστήματα’ (A.Tanenbaum)