Εργαστήριο Λειτουργικών Συστημάτων Εισαγωγή
Εισαγωγικά Ο σκοπός του μαθήματος: Εξοικείωση με τη χρήση λειτουργικών συστημάτων τύπου UNIX Επαφή με τον προγραμματισμό των συστημάτων Εξοικείωση με τον πυρήνα του λειτουργικού συστήματος Μελέτη ορισμένων χαρακτηριστικών μηχανισμών Μελέτη του πηγαίου κώδικα του πυρήνα του λειτουργικού Παρέμβαση, μετατροπή, προσθήκη συγκεκριμένων λειτουργιών στο λειτουργικό σύστημα Το μάθημα θα βασιστεί στο λειτουργικό σύστημα ανοικτού κώδικα MINIX version 3.0 Το μάθημα θα διεξαχθεί σε δύο άξονες Παραδόσεις Διαλέξεις Ασκήσεις 2
Διαδικαστικά Παραδόσεις ιαλέξεις 3 ώρες την εβδομάδα Τρίτη 19:00-21:00, Β4 Πέμπτη 11:00-12:00, Β4 4 θεματικές ενότητες Αντίστοιχα με τα θέματα που καλύφθηκαν στο προηγούμενο εξάμηνο Ασκήσεις 4 ασκήσεις Βαθμολογία 100% από τις ασκήσεις 3
Ασκήσεις - Εξέταση Ασκήσεις Ομαδικές (1-3 άτομα) Συνολικά 4 μικρές ασκήσεις Κώδικας Εξέταση εν θα υπάρχει εξέταση Βαθμός 100% από ασκήσεις Καθυστέρηση στην παράδοση = 10% μείωση βαθμού (ανά μέρα καθυστέρησης) Αντιγραφή σε μία άσκηση = μηδενισμός στο μάθημα 4
Για απορίες Μέσω e-mail: spyros+os@ceid Μέσω forum του μαθήματος στο my.ceid.upatras.gr 5
Ύλη Μαθήματος Λειτουργικό Σύστημα MINIX 3 Περιβάλλον προγραμματισμού ιεργασίες ιαχείριση ιεργασιών Επικοινωνία ιεργασιών ιαχείριση Μνήμης Συστήματα Αρχείων ιαχείριση Αρχείων Μονάδες Εισόδου - Εξόδου Device Drivers 6
Βιβλιογραφιά Βιβλία B.Kernighan, R.Pike: Το περιβάλλον Προγραμματισμού UNIX A.Tanenbaum: Σύγχρονα Λειτουργικά Συστήματα" A.Tanenbaum, A.Woodhull: Operating Systems Design and Implementation, 3rd Edition" Πανεπιστημιακές Σημειώσεις Π.Τριανταφύλλου: «Εργαστήριο Λειτουργικών Συστημάτων» ιαδίκτυο Ιστοσελίδα Λειτουργικού Συστήματος MINIX 3 7
Ιστοσελι δα και Ανακοινω σεις Η ιστοσελίδα του μαθήματος σύντομα θα ανανεωθεί Θα περιέχει: ιαφάνειες των διαλέξεων Συμπληρωματικές σημειώσεις Το υλικό των ασκήσεων Υλικό από προηγούμενα έτη Όλες οι ανακοινώσεις θα γίνονται στο forum του μαθήματος στο my.ceid.upatras.gr 8
Σύνοψη 1ης ιάλεξης Θέματα Μαθήματος Γενικά ιαδικασία Υλικό Λειτουργικό Σύστημα MINIX 3 Εισαγωγή Εγκατάσταση Βασικές Εντολές Κονσόλας Σύνοψη Μαθήματος Σύνοψη Μαθήματος Βιβλιογραφία Επόμενη ιάλεξη 9
Γενικα Χαρακτηριστικα Στόχοι σχεδιασμού Αξιοπιστία Ευελιξία Ασφάλεια Λογισμικό Ανοιχτού Κώδικα Ο κώδικας για τις λειτουργίες του συστήματος και όλες τις εντολές και εργαλεία προσφέρεται ελεύθερα μαζί με την εγκατάσταση των εκτελέσιμων Απευθύνεται σε Ενσωματωμένα συστήματα Συστήματα υψηλής αξιοπιστίας Συστήματα μικρού κόστους (π.χ. OLPC) Συστήματα όπου η άδεια GPL είναι ιδιαίτερα περιοριστική Εκπαίδευση 10
Χαρακτηριστικά Συστήματος Minimal Unix = MINIX Ακολουθεί το μοντέλο μικρο-πυρήνα (microkernel) Ο πυρήνας αποτελείται από 4000 γραμμές κώδικα Συνολικά είναι ένα λειτουργικό μικρού μεγέθους περίπου 25000 γραμμές κώδικα Οι λειτουργίες του συστήματος είναι χωρισμένες σε modules τρέχουν σε user mode επικοινωνούν με τον πυρήνα μέσω μηνυμάτων αν πάει κάτι λάθος απλά γίνεται επανεκκίνηση του συγκεκριμένου module Είναι συμβατό με POSIX (Portable OS Interface) Υποστηρίζει όλες τις γνωστές γλώσσες προγραμματισμού Προσφέρει περιβάλλον εργασίας X Windows 11
Ιστορική Αναδρομή Η πρώτη έκδοση εμφανίστηκε το 1987 περίπου 12000 γραμμές κώδικα Το πρώτο λειτουργικό ελεύθερου κώδικα βασισμένο στο UNIX Version 7 Πολλά πανεπιστήμια δημιούργησαν Εργαστήρια Λειτουργικών Ενας από τους βασικούς στόχους ήταν ο εκπαιδευτικός χαρακτήρας Στόχευε σε συστήματα 8088 με 256k μνήμη, χωρίς σκληρό δίσκο απλά με δισκέτα Η δεύτερη έκδοση εμφανίστηκε το 1997 Έγινε συμβατό με POSIX (IEEE 1003.1, ISO 9945-1) Επέκταση προς συστήματα 32-bit Υποστήριξη σκληρού δίσκου και μεγαλύτερης μνήμης Υποστήριξη TCP/IP 12
Minix 3 Ανακοινώθηκε τον Οκτώβριο του 2005 ACM Symposium on Operating Systems Principles (SOSP 2005) Βασίζεται στην παρατήρηση ότι τα Λ.Σ. έχουν διογκωθεί, είναι αργά και αναξιόπιστα Συνήθως όλο το Λ.Σ. είναι γραμμένο σε C++ μεταγλωττισμένο σε ένα εκτελέσιμο που τρέχει μέσα στον πυρήνα Ένα bug σε μία από τις εκατομμύρια γραμμές είναι ικανό να οδηγήσει το σύστημα σε κατάρρευση Το να διορθώσεις όλα τα bugs είναι αδύνατο όσο χρόνο και αν διαθέσεις Έρευνα έδειξε ότι τα bugs που έχουν εντοπιστεί είναι 6... 16 ανά 1000 γραμμές κώδικα Έρευνα έδειξε ότι μετά από τις δέκα πρώτες εκδόσεις, το 6% των αρχείων του κώδικα εξακολουθούν να περιέχουν bugs 13
Minix 3 Συνήθως το 70% του κώδικα αφορά I/O devices και τους αντίστοιχους drivers υλοποιημένα από τρίτους Έρευνες σε σταθερές εκδόσεις Linux και OpenBSD εντόπισαν εκατοντάδες bugs στον πυρήνα και κυρίως στους οδηγούς Για αυτόν τον λόγο, στο Minix οι οδηγοί είναι έξω από τον πυρήνα Ένας ειδικός δαίμονας παρακολουθεί την κατάσταση των οδηγών και τους επανεκκινεί εάν διαπιστώσει ότι υπάρχει κάποιο πρόβλημα Υλοποιεί τεχνικές αυτό-ίασης (self-healing) ή αλλιώς τεχνικές αυτό-σταθεροποίησης (self-stabilizatio) -- για τις οποίες μίλησε για πρώτη φορά ο Dijkstra περίπου το 1960 14
Linus Benedict Torvalds Κατά την διάρκεια των σπουδών του εγκατέστησε το Minix 1.5 άρχισε τους πειραματισμούς μελετώντας τον κώδικα Παρατήρησε ότι κάποια βασικά χαρακτηριστικά απουσίαζαν Άρχισε να υλοποιεί τα προγράμματα... ιαπίστωσε ότι χρειαζόταν διαφορετικό οδηγό για το τερματικό του, οπότε άρχισε να τον υλοποιεί... Μετά αποφάσισε ότι χρειάζεται να σώσει τα μηνύματα της συζήτησης για το MINIX στο USENIX... Οπότε άρχισε να γράφει έναν οδηγό για τον σκληρό δίσκο Στην συνέχεια υλοποίησε ένα απλό σύστημα αρχείων Τον Αύγουστο του 1991 δημιούργησε την πρώτη έκδοση του πυρήνα του LINUX Το ανακοίνωσε στο USENIX και με την συνδρομή άλλων προγραμματιστών η πρώτη έκδοση του LINUX ανακοινώθηκε τον Μάρτιο του 1994 15
MINIX vs. LINUX Το Linux είναι ένα μονολιθικό σύστημα Καμία δομή όσον αφορά την οργάνωση των λειτουργιών Ο Tanenbaum ισχυρίστηκε ότι τα συστήματα μικροπυρήνα είναι ανώτερα από τα μονολιθικά... το Linux βασίζεται σε παρωχημένες τεχνολογίες το να προγραμματίζεις έναν μονολιθικό πυρήνα το 1991 είναι a giant step back into the 1970s Το MINIX σχεδιάστηκε κυρίως για εκπαιδευτικό χαρακτήρα Οφείλει να χρησιμοποιεί καλά σχολιασμένο κώδικα Υλοποιήσεις αναφοράς Προσφέρει τα θεμέλια τις αποδεκτές αρχές της ερευνητικής περιοχής Το LINUX δεν έχει τέτοιου είδους στόχους Πρέπει να είναι ένα πραγματικό λειτουργικό σύστημα Να βασίζεται σε συγκεκριμένες τεχνολογίες και αρχιτεκτονικές 16
Ελάχιστες Απαιτήσεις Αρχιτεκτονική IA-32 (386, 486, Pentium or compatible) 16MB μνήμη CDROM ή USB -- χρήση έκδοσης LiveCD Αν θέλετε να το εγκαταστήσετε στον σκληρό τότε απαιτεί 50MB RAM Για την χρήση του περιβάλλοντος X Windows -- χρειάζεται 256MB RAM Για την εγκατάσταση όλου του κώδικα (εφαρμογές κλπ) χρειάζεται 600MB στον δίσκο 17
Εγκατάσταση: Εύκολη Λύση Καμία αλλαγή στον σκληρό δίσκο Χρήση του LiveCD Κατέβασμα του image (.iso) από την ιστοσελίδα του συστήματος -- www.minix3.org ημιουργία ενός bootable CD-ROM Επανεκκίνηση του συστήματος με την χρήση του CD-ROM Χρήση USB Memory Stick Κατέβασμα του usb_image (.zip) από την ιστοσελίδα του συστήματος -- www.minix3.org Τοποθέτηση αρχείων στο USB Memory Stick Επανεκκίνηση του συστήματος με την χρήση του USB Memory Stick Sector by sector copy του.iso στο USB (π.χ., YUMI, XBOOT κτλ.) Επιλέγουμε ρυθμίσεις regular Κάντε login ως root (δεν χρειάζεται password) 18
Εγκατάσταση: Πολύ Εύκολη Λύση Με την προηγούμενη λύση δεν μπορούμε να κάνουμε αλλαγές στο σύστημα Καμία αλλαγή στον σκληρό δίσκο / λειτουργικό σύστημα Χρήση ενός Εξομοιωτή VirtualBox VMWare Player -- www.vmware.com QEMU -- www.qemu.org Bochs -- bochs.sourceforge.net Virtual PC Παράδειγμα: http://wiki.minix3.org/en/usersguide/runningminixonvmware 19
Πλήρης Εγκατάσταση Με την προηγούμενη λύση μπορεί το σύστημα να λειτουργεί αργά (εξαρτάται από το υλικό) Απαιτεί αλλαγές στον σκληρό δίσκο Εκτός αν μπορούμε να αφιερώσουμε έναν άλλο δίσκο μόνο για το MINIX Χρειαζόμαστε ένα partitioτο πολύ 1 GB Υπάρχουν προγράμματα που μπορούν να αλλάξουν το μέγεθος ενός partitio χωρίς να το σβήσουν ημιουργήστε αντίγραφα ασφαλείας (backup) Ξεκινήστε το σύστημα με το LiveCD (ή USB) Επιλέγουμε ρυθμίσεις regular Κάντε login ως root (δεν χρειάζεται password) Εκτελέστε την εντολή setup 20
Ξεκινώντας ένα Session Για να ξεκινήσουμε, αρχικά κάνουμε login Μόλις ξεκινήσει το σύστημα εμφανίζεται το μήνυμα login Σε άλλα συστήματα το περιβάλλον είναι ποιο φιλικό (π.χ. πλούσια γραφικά) Εισάγοντας σωστό login/password ξεκινάει ένα νέο session Μια νέα κονσόλα δημιουργείται Ενα πολύ βασικό περιβάλλον εκτέλεσης εντολών 21
Εκτέλεση Εντολών Το # είναι το prompt Στο prompt γράφουμε το όνομα της εντολής και πατάμε Return Πατώντας απλά Return εμφανίζεται μια νέα γραμμή 22
Χειρισμός λαθών Αν γράψουμε μια εντολή λάθος, εμφανίζεται ένα μήνυμα λάθους Το μήνυμα λάθους λέει ότι το αρχείο ή ο φάκελος δεν βρέθηκε Το σύστημα θεωρεί ότι και οι εντολές ειναι αρχεία... Με τα κουμπιά μπορούμε να ανατρέξουμε σε προηγούμενες εντολές Με τα κουμπιά μπορούμε να επεξεργαστούμε την τρέχουσα γραμμή 23
Τερματισμός εντολών Για να διακόψουμε την εκτέλεση μιας εντολής χρησιμοποιούμε το ctrl-c Για να παγώσουμε την έξοδο μιας εντολής χρησιμοποιούμε το ctrl-s Για να ξεπαγώσουμε την έξοδο χρησιμοποιούμε το ctrl-q Προσοχή με αυτόν τον τρόπο μόνο η έξοδος παγώνει, όχι η εκτέλεση Για να κλείσουμε την κονσόλα να ολοκληρώσουμε το session χρησιμοποιούμε το ctrl-d Πατάμε συνεχόμενες φορές το ctrl-q Τερματίζουν όλα τα προγράμματα που τρέχουν και στο τέλος εμφανίζεται πάλι η αρχική οθόνη login Αυτός είναι ο μοναδικός σωστός τρόπος για να κλείνουμε ένα session 24
Επικοινωνία με άλλους χειριστές Με την εντολή write μπορούμε να στείλουμε ένα μήνυμα σε μια άλλη κονσόλα Αποστολη μηνύματος # write akomninos hello there ˆD EOT Παραλαβη μηνύματος Message from root (ttyc1) Sat Apr 21 17:09:17 2007.. hello there EOT 25
Οδηγίες Προγραμματισμού UNIX Με την εντολή man μπορούμε να προσπελάσουμε τις σελίδες βοήθειας Υπάρχουν διάφορες κατηγορίες σελίδων Εντολές Χειριστών -- ls, cp, grep Κλήσεις Συστήματος -- fork, exit Ρουτίνες Βιβλιοθηκών Αρχεία Συσκευών Ε/Ε Τύποι/Κωδικοποιήσεις Αρχείων Παιχνίδια ιάφορα Εντολές ιαχειριστή Συστήματος Εγγραφα περισσότερες πληροφορίες για τις ορισμένες σελίδες που ανήκουν στις παραπάνω κατηγορίες Για να προσδιορίσουμε σε ποια κατηγορία αναφερόμαστε: man [category] [topic] 26
#man fork 27
Εγκατάσταση προγρ. στο MINIX Εντολή packman (<3.1.7) Απαιτεί το LiveCD ή να έχουμε πρόσβαση στο ιαδίκτυο Μπορεί να εγκαταστήσει και τον πηγαίο κώδικα Αντικαταστάθηκε από το pkgin / pkgsrc 28
Σύνοψη 1ης ιάλεξης Θέματα Μαθήματος Γενικά ιαδικασία Υλικό Λειτουργικό Σύστημα MINIX 3 Εισαγωγή Εγκατάσταση Βασικές Εντολές Κονσόλας Σύνοψη Μαθήματος Σύνοψη Μαθήματος Βιβλιογραφία Επόμενη ιάλεξη 29
Συ νοψη Μαθη ματος ιαδικασία Μαθήματος Συνοπτική παρουσίαση των Σητημάτων και προβλημάτων που θα μελετηθούν Σύντομη παρουσίαση του MINIX 3 Θέματα εγκατάστασης MINIX 3 Περιβάλλον MINIX Εισαγωγή στις γενικές έννοιες της κονσόλας 30
Βιβλιογραφιά Βιβλίο Σύγχρονα Λειτουργικά Συστήματα" (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: Εισαγωγή σε Λειτουργικά Συστήματα 31