Τμήμα Πληροφορικής - Εαρινό Εξάμηνο 2005

Η/Υ 445: Λειτουργικά Συστήματα

Υποχρεωτικό μάθημα 4ου εξαμήνου  


Η εργασία στο ΜΙΝΙΧ (project) είναι διαθέσιμη. Ημερομηνίες παράδοσης για τα δύο μέρη που απαρτίζουν την εργασία είναι οι ακόλουθες:


Η εξέταση της 1ης άσκησης θα πραγματοποιηθεί την Πέμπτη, 26/5/2005, ώρα 14:00-15:00 στο αμφιθέατρο του Τμήματος.


Γενικά | Ανακοινώσεις | Ημερολόγιο | Υλικό Μαθήματος  | Πρόγραμμα - Ώρες Γραφείου Βοηθών | MINIX


Γενικές Πληροφορίες

Διδάσκουσα:                                             Παναγιώτα Φατούρου
Γραφείο:                                                    26 (Α´ ορόφου)
Ώρες Γραφείου:                                        Δευτέρα, 17:00 – 1
9:00 &  Τετάρτη, 17:00-19:00
Ηλεκτρονική Διεύθυνση:                         
Τηλέφωνο:                                                (26510) 98808

Βοηθοί Μαθήματος:                                 Α. Φωτίου - Φ. Παπαδόπουλος - Σ. Μαργαρίτη 
Γραφεία Βοηθών:                                     Α. Φωτίου: A10 - Φ. Παπαδόπουλος: A6 - Σ. Μαργαρίτη: Εργαστήριο Μεταπτυχιακών
Ώρες Γραφείου Βοηθών:                         Τρίτη, 14:00-16:00 και Πέμπτη, 16:00-18:00
Ηλεκτρονική Διεύθυνση Βοηθών:           fotiouATcs.uoi.gr, fillipATcs.uoi.gr, smargariATcs.uoi.gr   
Τηλέφωνο:                                               98865, 98827

Ηλεκτρονική Διεύθυνση Μαθήματος:    

Πρόγραμμα - Ώρες Γραφείου Βοηθών
  Τρίτη Ώρα: 14-16 Γραφείο Πέμπτη Ώρα:16-18 Γραφείο
Μάρτιος 15/3/2005     17/3/2005 Μαργαρίτη Εργαστήριο Μεταπτυχιακών
22/3/2005 Φωτίου Α10 24/3/2005 Παπαδόπουλος Α6
29/3/2005 Παπαδόπουλος Α6 31/3/2005 Μαργαρίτη Εργαστήριο Μεταπτυχιακών
Απρίλιος 5/4/2005 Φωτίου Α10 7/4/2005 Μαργαρίτη Εργαστήριο Μεταπτυχιακών
12/4/2005 Παπαδόπουλος Α6 14/4/2005 Μαργαρίτη Εργαστήριο Μεταπτυχιακών
19/4/2005 Φωτίου Α10 21/4/2005 Παπαδόπουλος Α6
Μάιος 10/5/2005 Φωτίου Α10 12/5/2005 Μαργαρίτη Εργαστήριο Μεταπτυχιακών
17/5/2005 Φωτίου Α10 19/5/2005 Παπαδόπουλος Α6
24/5/2005 Παπαδόπουλος Α6 26/5/2005 Μαργαρίτη Εργαστήριο Μεταπτυχιακών
31/5/2005 Φωτίου Α10      

 

Ώρες και Αίθουσες Διδασκαλίας

Δευτέρα, 13:00-17:00, στην αίθουσα Ι-2.
Τετάρτη, 13:00-17:00, στην αίθουσα Ι-2.  
 

Ώρες και Αίθουσα Φροντιστηρίου

Τρίτη, 18:00-20:00 (θα πραγματοποιείται περιστασιακά).

 

Σύνοψη Μαθήματος

Το μάθημα θα εστιάσει στη μελέτη βασικών αρχών, εννοιών και αλγορίθμων λειτουργικών συστημάτων. Τι είναι ένα λειτουργικό σύστημα, Βασικές έννοιες, Υπηρεσίες, και Δομή Λειτουργικών Συστημάτων, Διεργασίες (Διαδιεργασιακή Επικοινωνία, Χρονοπρογραμματισμός), Διαχείριση Μνήμης, Συστήματα Αρχείων, Είσοδος/Έξοδος, Αδιέξοδα, Προστασία, καθώς και περιπτώσεις μελέτης συγκεκριμένων λειτουργικών συστημάτων, όπως π.χ., το Unix. Τέλος, θα μελετηθούν θέματα σχεδίασης και υλοποίησης λειτουργικών συστημάτων.

 

Βιβλία

q       A. S. Tanenbaum, “Σύγχρονα Λειτουργικά Συστήματα”, Prentice-Hall International, Κλειδάριθμος, Αθήνα.

q       A. Tanenbaum and A. Woodhull, «Operating Systems: Design and Implementation», Prentice Hall, 2hn Edition, 1996.

q       A. Silberschatz and A. Galvin, «Operating System Concepts», Addison-Wesley Publishing Company, 5th Edition1998.

q       M. Bauch, «The Design of the UNIX Operating System», Prentice/Hall International, Inc., New Jersey, 1986.

Το βιβλίο που θα μοιραστεί στους φοιτητές είναι το 1ο από τα παραπάνω και το μάθημα θα βασιστεί κυρίως σε αυτό το βιβλίο.

Πρόγραμμα

1η εβδομάδα

Εισαγωγή, Τι είναι ένα λειτουργικό σύστημα, Ιστορία, Βασικές Έννοιες, Υπηρεσίες.

2η εβδομάδα

Διαδιεργασιακή Επικοινωνία

3η εβδομάδα

Διαδιεργασιακή Επικοινωνία

4η εβδομάδα

Χρονοπρογραμματισμός Διεργασιών

5η εβδομάδα

Διαχείριση Μνήμης

6η εβδομάδα

Διαχείριση Μνήμης στο MINIX

7η εβδομάδα

Διαχείριση Μνήμης

8η εβδομάδα

Διαχείριση Μνήμης

9η εβδομάδα

Συστήματα Αρχείων

10η εβδομάδα

Το σύστημα αρχείων του MINIX

11η εβδομάδα

Είσοδος/ΈξοδοςΑδιέξοδα

12η εβδομάδα

Αδιέξοδα - Προστασία

13η εβδομάδα

Προστασία – Το ΛΣ UNIX

 

Εργασίες και Βαθμολόγηση

Κατά τη διάρκεια του εξαμήνου θα δοθεί 1 άσκηση (της οποίας το βάρος θα είναι κύρια προγραμματιστικό) και 1 εργασία (project) στο MINIX. Ο προγραμματισμός θα γίνει σε γλώσσα C, ενώ θα χρησιμοποιηθούν διάφορες κλήσεις συστήματος του Unix. Κάθε εργασία θα πρέπει να επιστρέφεται πριν από την αναγραφόμενη ημερομηνία και ώρα προκειμένου να βαθμολογείται με άριστα το 10. Ωστόσο, παράδοση ασκήσεων μπορεί να γίνει καθυστερημένα βάσει του εξής αλγόριθμου:

§         Αν η παράδοση της άσκησης γίνει μέχρι και τρία 24ωρα μετά την προθεσμία, η άσκηση βαθμολογείται με μείωση βαθμού κατά 1.0/10.0 μονάδα για κάθε μέρα καθυστέρησης. 

§         Αν η παράδοση της άσκησης γίνει αφού έχουν περάσει τρία 24ωρα μετά τη λήξη της προθεσμίας (αλλά πριν την εξέταση της άσκησης), η άσκηση βαθμολογείται με άριστα το 5.0/10.0.

Πολύ καλές ασκήσεις ή project μπορεί να βαθμολογηθούν με βαθμό μεγαλύτερο
του 10. Για κάθε μια από τις ασκήσεις θα υπάρχει γραπτή εξέταση.

Μπορείτε να χρησιμοποιήσετε οποιονδήποτε υπολογιστή για τις προγραμματιστικές ασκήσεις σας. Για τη βαθμόλογηση της άσκησής σας όμως, το πρόγραμμα θα εκτελείται στα μηχανήματα κάποιου εργαστηρίου του Τμήματος. Στα μηχανήματα αυτά θα είναι εγκατεστημένο και το απαραίτητο λογισμικό για να κάνετε τις ασκήσεις σας. Όσοι από εσάς επιθυμούν να εργαστούν σε άλλα μηχανήματα θα πρέπει να σιγουρευτούν ότι ο κώδικας τους τρέχει σωστά και στα παραπάνω μηχανήματα.

Η τελική εξέταση θα γίνει με ανοιχτά βιβλία. Άλλου είδους χαρτιά και σημειώσεις απαγορεύονται. Στην τελική εξέταση θα πρέπει όλοι οι εξεταζόμενοι φοιτητές να έχουν μαζί τους το πάσσο τους.

Ο τελικός βαθμός θα εξαρτηθεί τόσο από τη βαθμολογία των ασκήσεων, όσο και από την επίδοση των φοιτητών στην τελική εξέταση, ως εξής:

Σειρές Ασκήσεων: 30%

Τελική Εξέταση: 70%

Μόνο οι φοιτητές που έχουν συγκεντρώσει συνολική βαθμολογία 5 (ασκήσεις + τελικό) θα περάσουν το μάθημα. Ωστόσο, ένας φοιτητής που θα γράψει λιγότερο από 4.0 στο τελικό διαγώνισμα δεν θα περάσει το μάθημα ανεξάρτητα από το πόσο καλές είναι οι ασκήσεις/εργασίες που έχει παραδώσει. Ομοίως, ένας φοιτητής που έχει βαθμό μικρότερο του 3.5 στις ασκήσεις ή στο project δεν θα περάσει το μάθημα ανεξάρτητα από το πόσο καλό θα είναι το γραπτό του στην τελική εξέταση.

Ο ίδιος αλγόριθμος για την διεξαγωγή της βαθμολογίας ισχύει και στην εξέταση του Σεπτεμβρίου.

 

Παρακολούθηση

Η παρακολούθηση στις διαλέξεις αναμένεται, αλλά δεν είναι υποχρεωτική. Ωστόσο, οι φοιτητές θα πρέπει να γνωρίζουν οτιδήποτε παρουσιάζεται ή αναφέρεται στην τάξη στην τελική εξέταση. Μέρος της ύλης δεν περιέχεται σε βιβλία ή παρουσιάζεται με άλλη σειρά, για αυτό η παρακολούθηση συνίσταται ισχυρά.

   

E-mailing Λίστα & Λογαριασμός Μαθήματος

Για το  μάθημα θα υπάρχει e-mailing λίστα η οποία θα χρησιμοποιείται για την αποστολή e-mail σε όλους τους φοιτητές που έχουν δηλώσει το μάθημα. Οι φοιτητές υποχρεούνται να εγγραφούν στη λίστα το αργότερο μέχρι τις 1/3/05. Για να εγγραφείτε στη λίστα αρκεί να στείλετε ένα ηλεκτρονικό μήνυμα (e-mail) στη διεύθυνση 

με κενό θέμα και σώμα:

Όποιος φοιτητής δεν εγγραφεί στη λίστα, δεν θα λαμβάνει τα e-mails που αποστέλονται και δεν θα γνωρίζει σημαντικά θέματα που αφορούν το μάθημα. Το e-mail address της λίστας είναι

Όλα τα e-mails προς αυτή τη διεύθυνση θα λαμβάνονται από όλους τους φοιτητές που έχουν εγγραφεί στη λίστα.

Για το μάθημα υπάρχει επίσης λογαριασμός με e-mail address:

Το e-mail του λογαριασμού αυτού ελέγχεται συχνά από τους βοηθούς του μαθήματος. Μπορείτε να στέλνετε e-mails με απορίες τόσο στον λογαριασμό όσο και στη λίστα. Τα e-mails σας θα πρέπει να απευθύνονται προς τη λίστα μόνο αν πιστεύετε πως αυτά που γράφετε ή ρωτάτε είναι χρήσιμα και ενδιαφέροντα σε όλους τους συμφοιτητές σας.

Παρατήρηση

Συνίσταται ισχυρά οι φοιτητές να έχουν διεκπεραιώσει με επιτυχία τα μαθήματα της «Εισαγωγής στον Προγραμματισμό», της «Εισαγωγής στους Η/Υ» και του "Προγραμματισμού σε C".  Επίσης, θα βοηθούσε πολύ να έχουν διεκπεραιωθεί επιτυχώς τα μαθήματα "Δομές Δεδομένων" και "Αρχιτεκτονική Υπολογιστών". Απαιτείται πολύ καλή γνώση της γλώσσας Προγραμματισμού  C.

   

Άλλη Βιβλιογραφία

  • P. Andleigh, "Unix System Architecture", Prentice Hall, New York, 1990.

  • B. Kernighan and R. Pike, "Το Περιβάλλον Προγραμματισμού UNIX", Κλειδάριθμος, 1989.

  • W. Stalling, "Operating Systems, Internals and Design Principles", Prentice Hall, Inc., New York, 1998.

  • R. Switzer, "Operating Systems, A Practical Approach", Prentice Hall, Inc., England, 1993.

 

Βιβλία σε C

  • Ομάδα Waite, C: Βήμα-Προς-Βήμα, Εκδότης Γκιούρδας, Αθήνα 1991.

  • B. Kernighan & D. Ritchie, Η Γλώσσα Προγραμματισμού C, Εκδόσεις Κλειδάριθμος, Αθήνα 1990.

 


Ανακοινώσεις

    H εξέταση της 1ης άσκησης θα πραγματοποιηθεί την Πέμπτη, 26/5/2005, ώρα 14:00-15:00, στο αμφιθέατρο του Τμήματος.

 H προθεσμία για την παράδοση του 1ου μέρους του MINIX μετατίθεται για τις 28 Μαΐου. Το 1ο μέρος του MINIX θα μετρήσει κατά 80%, ενώ το 2ο κατά 20%. Δεν θα δοθεί παράταση για το 2ο μέρος. Στην γραπτή εξέταση θα ζητηθούν κυρίως θέματα που άπτονται του 1ου μέρους.

  • H εργασία στο ΜΙΝΙΧ είναι διαθέσιμη. Οι ημερομήνιες παράδοσης για τα δύο μέρη του project είναι:

    • Μέρος Α: Δευτέρα, 23/5/05, ώρα 23:59

    • Μέρος Β: Παρασκευή, 10/6/05, ώρα 23:59

  • Το πρόγραμμα με τις ώρες γραφείου βοηθών έχει αναρτηθεί (δείτε σύνδεσμο Πρόγραμμα - Ώρες Γραφείου Βοηθών).

  • Η πρώτη άσκηση είναι διαθέσιμη. Οι ημερομηνίες παράδοσης για τα διάφορα μέρη της άσκησης είναι οι ακόλουθες:

    • Βήματα 1-2: Παρασκευή, 11/3/05, ώρα 23:59

    • Βήματα 3-5: Παρασκευή, 18/3/05, ώρα 23:59

    • Βήματα 6-7: Παρασκευή, 25/3/05, ώρα 23:59

    • Βήματα 8-9: Παρασκευή, 1/4/05, ώρα 23:59

Η άσκηση, καθώς και παραδείγματα που θα σας βοηθήσουν στην υλοποίησή της, είναι διαθέσιμα κάτω από τον σύνδεσμο "Υλικό Μαθήματος".

  • Το μάθημα της Δευτέρας, 28/2 που δεν έγινε λόγω απουσίας της διδάσκουσας, θα πραγματοποιηθεί την Τρίτη 8/3, ώρα 6-8.

  • Το πρώτο μάθημα θα γίνει την Τετάρτη 15/2/05 στην αίθουσα Ι2.

  • Οι φοιτητές θα πρέπει να εγγραφούν στη λίστα το αργότερο μέχρι τις 1/3/05.


Ημερολόγιο

Δευτέρα Τρίτη Τετάρτη Πέμπτη Παρασκευή
14/2

 


 

 

 

15/2

 



 

 

16/2

Συζήτηση επί του μαθήματος. Syllabus. 

Εισαγωγή. Μελέτη Ενοτήτων 1.1, 1.2, 1.3, Tanenbaum

Μελέτη σημειώσεων που έχουν δοθεί για φωτοτύπηση.

17/2 

 


 

 


 

18/2 

 


 

 


 

21/2

 

 

 

 

 

22/2

 

 

 

 

 

23/2

Διεργασίες - Η κλήση συστήματος fork.

Μελέτη σημειώσεων που έχουν δοθεί για φωτοτύπηση.

Μελέτη Ενοτήτων 1.1-1.6, Tanenbaum.

24/2

 

 

 

 

 

25/2

 

 

 

 

 

28/2

Απουσία Διδάσκουσας

 

 

 

 

 

 

1/3

 

 

 

 

 

 

 

2/3

Διακοπές - Υλοποίηση Διεργασιών - Διαδιεργασιακή Επικοινωνία

Μελέτη σημειώσεων που έχουν δοθεί για φωτοτύπηση.

Μελέτη Ενότητας 2.1, Tanenbaum.

1η άσκηση out

3/3

 

 

 

 

 

 

 

4/3

 

 

 

 

 

 

 

7/3

Το πρόβλημα του αμοιβαίου αποκλεισμού. Λύσεις μέσω Hardware. Λύσεις μέσω Software.

Μελέτη σημειώσεων που έχουν δοθεί για φωτοτύπηση.

Μελέτη Ενοτήτων 2.3.1-2.3.6, Tanenbaum

8/3

Αναπλήρωση μαθήματος που χάθηκε στις 28/2.

H Λύση του Peterson. Σημαφόροι. Λύση με χρήση Σημαφόρων.

Μελέτη σημειώσεων που έχουν δοθεί για φωτοτύπηση.
 

9/3

Πως υλοποιούνται σημαφόροι και διαμοιραζόμενες μεταβλητές στο UNIX. Συζήτηση μέρους της άσκησης.

Μελέτη υλικού που υπάρχει στην ιστοσελίδα του μαθήματος.

10/3 

 

 

 

 

 

 

11/3

 

 

 

 

 

 

14/3

Αργία Καθαράς Δευτέρας

 

 

 

 

 

 

 

 

 

 

15/3

 

 

 

 

 

 

 

 

 

 

 

16/3

Προβλήματα διαδιεργασιακής επικοινωνίας. Επίλυση προβλήματος παραγωγού-καταναλωτή στο UNIX χρησιμοποιώντας την γλώσσα C (καθώς και κλήσεις συστήματος σχετικές με σημαφόρους και με διαμοιραζόμενη μνήμη).

Μελέτη υλικού που υπάρχει στην ιστοσελίδα.

Μελέτη σημειώσεων που έχουν δοθεί για φωτοτύπηση.

Μελέτη Ενότητας 2.4.

17/3

 

 

 

 

 

 

 

 

 

 

 

18/3

 

 

 

 

 

 

 

 

 

 

 

21/3

Προβλήματα διαδιεργασιακής επικοινωνίας. Επίλυση προβλήματος παραγωγού-καταναλωτή στο UNIX χρησιμοποιώντας την γλώσσα C και pipes.

Μελέτη υλικού που υπάρχει στην ιστοσελίδα.

Μελέτη σημειώσεων που έχουν δοθεί για φωτοτύπηση.

Μελέτη Ενότητας 2.4.

 

22/3

 

 

 

 

 

 

 

 

 

 

23/3

Προβλήματα διαδιεργασιακής επικοινωνίας. Επίλυση προβλήματος παραγωγού-καταναλωτή στο UNIX χρησιμοποιώντας την γλώσσα C και pipes.

Μελέτη υλικού που υπάρχει στην ιστοσελίδα.

Μελέτη σημειώσεων που έχουν δοθεί για φωτοτύπηση.

Μελέτη Ενότητας 2.4.

 

24/3

 

 

 

 

 

 

 

 

 

 

25/3

 

 

 

 

 

 

 

 

 

 

28/3

Χρονοδρομολόγηση Διεργασιών.

Μελέτη υλικού που δόθηκε για φωτοτύπηση.

 

 

29/3

 

 

 

 

 

30/3

Απουσία Διδάσκουσας

 

 

 

 

31/3

 

 

 

 

 

1/4

1η άσκηση due

 

 

 

 

4/4

Χρονοδρομολόγηση Διεργασιών.

Μελέτη Ενότητας 2.5, Tanenbaum.

Μελέτη παραδείγματος που έχει αναρτηθεί κάτω από τον σύνδεσμο "Υλικό Μαθήματος"

5/4

Αναπλήρωση Μαθήματος που χάθηκε στις 30/3.

Συστήματα Αρχείων. Μελέτη Ενοτήτων 6.1 και 6.2, Tanenbaum

 

 

6/4

Υλοποίηση Συστήματος Αρχείων. Μελέτη Ενοτήτων 6.3.1-6.3.2, Tanenbaum.

 

 

 

7/4

 

 

 

 

 

8/4

 

Εγκατάσταση ΜΙΝΙΧ

 

 

 

11/4

Εγκατάσταση ΜΙΝΙΧ.

 

 

 

 

12/4

Αναπλήρωση μαθήματος 11/4 που χάθηκε λόγω εγκατάστασης ΜΙΝΙΧ.

Υλοποίηση Συστήματος Αρχείων. Μελέτη Ενοτήτων 6.3.3-6.3.4.

 

13/4

Φοιτητικές Εκλογές

Project out

Εγκατάσταση ΜΙΝΙΧ.

 

 

14/4

 

 

 

 

 

15/4

 

 

 

 

 

18/4

Υλοποίηση Συστήματος Αρχείων. Μελέτη Ενοτήτων 6.3.5-6.3.8 και 6.4.5, Tanenbaum. Μελέτη υλικού για το σύστημα διαχείρισης αρχείων του MINIX που δόθηκε για φωτοτύπηση.

 

 

19/4

 

 

 

 

 


 

20/4

Το σύστημα διαχείρισης αρχείων του ΜΙΝΙΧ. Παραδείγματα με το ΜΙΝΙΧ.

Μελέτη υλικού για το σύστημα διαχείρισης αρχείων του MINIX που δόθηκε για φωτοτύπηση.

Το βάρος πρέπει να δοθεί στο project σας.

21/4 

 

 

 

 

 


 

22/4

 

 

 

 

 


 

25/4

xxxxx

 

26/4

xxxxx

 

27/4

xxxxx

Βάρος στο project.

28/4

xxxxx

 

29/4

xxxxx

 

2/5

xxxxx

 

3/5

xxxxx

 

4/5 

xxxxx

Βάρος στο project.

5/5 

xxxxx

 

6/5

xxxxx

 

9/5

Διαχείριση Μνήμης: Βασική Διαχείριση Μνήμης.  Μελέτη Ενότητας 4.1, Tanenbaum

Μεγάλο βάρος στο project.

10/5
 

 

 


 

11/5

Εορτασμός Πρωτομαγιάς

Μεγάλο βάρος στο project.
 

 

12/5
 

 

 


 

13/5
 

 

 


 

16/5

Διαχείριση Μνήμης: Εναλλαγή & Εικονική Μνήμη. Μελέτη Ενοτήτων 4.2 & 4.3, Tanenbaum

Μεγάλο βάρος στο project.

17/5

Διαχείριση Μνήμης: Αλγόριθμοι Αντικατάστασης Σελίδας. Μελέτη Ενότητας 4.4, Tanenbaum

Αναπλήρωση μαθήματος Πρωτομαγιάς

18/5

Διαχείριση Μνήμης. Μελέτη Ενοτήτων 4.5 & 4.6, Tanenbaum

Μεγάλο βάρος στο project.

 

19/5

 

 

 


 

20/5

 

 

 


 

23/5

Απουσία Διδάσκουσας

Project due: Μέρος Α (μετατίθεται για 28/5)
 

 

 

 

 

24/5
 

 

 

 

 

 

 

25/5

Διαχείριση Μνήμης. Μελέτη Ενοτήτων 4.7 & 4.8, Tanenbaum. Μελέτη υλικού που έχει δοθεί για φωτοτύπηση.
 

 

 

 

26/5

Εξέταση 1ης Άσκησης
 

 

 

 

 

 

27/5

Αναπλήρωση Μαθήματος 23/5

Αδιέξοδα. Μελέτη Κεφαλαίου 3, Tanenbaum.

Δρομολόγηση Δίσκων. Μελέτη υλικού που έχει δοθεί για φωτοτύπηση.
 

30/5 31/5 1/6 2/6 3/6
6/6

 

7/6

 

8/6

 

9/6

 

10/6

Project due: Μέρος Β

 


Υλικό Μαθήματος

Ερωτηματολόγιο


MINIX

Οδηγίες Εγκατάστασης | 1η Εμπειρία με το MINIX | Multi-user MINIX | Γράφοντας Προγράμματα για το MINIX | Τροποποιώντας το ίδιο το MINIX
Προσθέτ
oντας Κλήσεις Συστήματος στο MINIX | Έλεγχος Αλλαγών στον κώδικα του MINIX | Βιβλιογραφία


Οδηγίες εγκατάστασης

  1. Αποφασίστε το μέλος της ομάδας στου οποίου το λογαριασμό θα δουλέψετε το project.
  2. Δημιουργήστε ένα directory με το όνομα myminix στον λογαριασμό αυτό.
  3. Δημιουργήστε soft links στα αρχεία του καταλόγου /opt/MINIX. Αυτό γίνεται αυτόματα τρέχοντας το script setup_minix. Αντιγράψτε το script setup_minix στο βασικό σας κατάλογο, αλλάξτε τα permissions ώστε να είναι εκτελέσιμο (chmod 700 setup_minix) και εκτελέστε το. 
  4. Αντικαταστήστε τα soft links myminix/disks/root και myminix/src/tools/.minix με αντίγραφα από τα πραγματικά αρχεία /opt/MINIX/disks/root και /opt/MINIX/src/tools/.minix. Για παράδειγμα, για το αρχείο .minix πρέπει να εκτελέσετε τις ακόλουθες δύο γραμμές από το home directory σας:

rm myminix/src/tools/.minix
cp
/opt/MINIX/src/tools/.minix myminix/src/tools

 Μετά από όλα αυτά, θα χρησιμοποιηθούν περίπου 6,4 MBytes στον λογαριασμό σας για το MINIX.

  1. Θα χρειαστεί να θέσετε επίσης κάποιες μεταβλητές περιβάλλοντος. Οι εντολές για csh και tcsh έχουν ως εξής:
       setenv MX_LIB ~/myminix/src/lib
       setenv MX_INCL ~/myminix/include
       setenv PATH ~/myminix/bin:${PATH}

και πρέπει να τοποθετήσετε τις εντολές αυτές στο αρχείο .cshrc. Κάθε φορά που αλλάζετε το αρχείο .cshrc θα πρέπει να το εκτελείτε. Αυτό γίνεται με την ενοτλή:

source .cshrc

Οι εντολές για bash έχουν ως εξής 

       export MX_LIB=~/myminix/src/lib
       export MX_INCL=~/myminix/include
       export PATH=~/myminix/bin:${PATH}
και πρέπει να τοποθετήσετε τις εντολές αυτές στο αρχείο .profile. Κάθε φορά που αλλάζετε το αρχείο .profile θα πρέπει να το εκτελείτε. Αυτό γίνεται με την εντολή:

./.profile

Tα αρχεία .profile και .cshrc βρίσκονται στο home directory της περιοχής σας. Τις αλλαγές στα αρχεία αυτά θα πρέπει να τις κάνετε μόνο μία φορά ακόμη και αν εγκαταστήσετε το MINIX πολλές φορές κατά τη διάρκεια διεκπεραίωσης της εργασίας σας. Αν δεν υπάρχει αρχείο .cshrc στον λογαριασμό σας, διατίθεται ένα εδώ.

Ελέγξτε το path εκτελώντας την εντολή "which minix" για να βεβαιωθείτε ότι τρέχετε το σωστό minix (από τον προσωπικό σας κατάλογο). 


1η Εμπειρία με το MINIX

  1. Τρέξτε csh ή tcsh. Η εντολή είναι "csh -l" ή "tcsh -l".
  2. Mπείτε στο myminix/src/tools και τρέξτε την εντολή minix.  Το λειτουργικό σύστημα minix αρχίζει να τρέχει ως μία διεργασία χρήστη του Solaris.
  3. Μπείτε στο minix ως root (δεν έχει password αρχικά) και καθορίστε το password της αρεσκείας σας (το password καθορίζεται ή αλλάζει εκτελώντας την εντολή passwd). Κάνετε το ίδιο για τον λογαριασμό bin. 
  4. Δείτε τις διαθέσιμες εντολές του minix κάνοντας ls τo /bin και το /usr/bin. To minix έχει τους editors elvis (που είναι παρόμοιος με τον vi; ένας σύντομος οδηγός αναφοράς για τον vi παρέχεται εδώ) και uemacs (θα χρειαστείτε τις εντολές control-n, control-p, control-f, control-b για να κινηθείτε μέσα στο αρχείο (κάτω, πάνω, δεξιά, αριστερά, αντίστοιχα), και control-x, control-s για σώσιμο του αρχείου και control-x control-c για έξοδο.
  5. Για να δημιουργήσετε λογαριασμό για ένα νέο χρήστη με login name π.χ., david, θα πρέπει να κάνετε τα ακόλουθα:
  • Προσθέστε στο αρχείο /etc/passwd τη γραμμή 

david::20:3:David Smith:/usr/david:/usr/bin/ash

  • Δημιουργήστε τον πρωταρχικό κατάλογο του χρήστη και τοποθετήστε τα αρχεία .profile και .ashrc στον κατάλογο αυτό εκτελώντας τις εντολές:

mkdir /usr/david
cp /.profile /usr/david
cp /.ashrc /usr/david
chown -R david /usr/david
chgrp -R other /usr/david

  • Τέλος μπορείτε να καθορίσετε το passwd του χρήστη με την εντολή "passwd david".
  • Tώρα μπορείτε να κάνετε log out (από το λογαριασμό root) και να κάνετε login ως david.
  1. Για να τερματίσετε το minix, πρέπει να κάνετε login ως root και να εκτελέσετε την εντολή shutdown now.

Μultiuser ΜΙΝΙΧ 

  • Κάντε edit το αρχείο myminix/src/tools/.minix . Στην γραμμή που έχει τη λέξη host, βγάλτε το '#' και για hostname δώστε ένα δικό σας όνομα, καλό θα ήταν να δώσετε το όνομα του λογαριασμού σας, π.χ. host csst8888.
  • Τρέξτε πάλι το minix.
  • Από το solaris, ανoίξτε ένα νέο τερματικό και εκτελέστε mlogin csst8888 (ότι όνομα δώσατε σαν host)
  • Θα έχετε κάνει login στο minix που τρέχετε! Μπορείτε να εκτελέσετε τις εντολές ps, who κλπ. για να διαπιστώσετε ότι υπάρχουν δύο χρήστες στο minix.

 


Γράφοντας προγράμματα για το MINIX


Τα προγράμματα που θα φτιάξετε για το MINIX θα τα αναπτύξετε εκτός MINIX (έστω π.χ., ότι έχετε φτιάξει ένα απλό πρόγραμμα, hello.c, σε C στο λογαριασμό σας στο SOLARIS). Συγκεκριμένα: 

  • Θα τα μεταφράσετε με τον compiler mcc (όχι με το cc/gcc) (π.χ., mcc -o hello hello.c)
  • Το παραγόμενο εκτελέσιμο θα πρέπει να το μεταφέρετε "μέσα" στο MINIX. Για να το κάνετε αυτό, τρέχετε το MINIX και εκτελείτε την εντολή:
    sunread [όλο to pathname του αρχείου στο solaris] > [minixfilename] (sunread <solaris-path>/hello > hello)
  • Τέλος (μέσα στο MINIX) αλλάζετε τα permissions του προγράμματος που κάνατε sunread ούτως ώστε να γίνει εκτελέσιμο (chmod +x [minixfilename]). (chmod +x hello), και το τρέχετε εκτελώντας την εντολή ./hello.
Πιθανό πρόβλημα:
  • Υπάρχει κάποιο πρόγραμμα mcc της mathematica. Σιγουρευτείτε ότι όταν εκτελείτε mcc δεν τρέχει αυτό το πρόγραμμα! Εν ανάγκη, δώστε όλη τη διαδρομή του mcc (π.χ. ~/myminix/bin/mcc ή /opt/MINIX/bin/mcc)
  • Επειδή το mcc χρησιμοποιείται σε αρκετά Makefile του ΜΙΝΙΧ, θα πρέπει, όπου υπάρχει το mcc να τροποποιούνται και αντί για mcc να εκτελείται π.χ. το /opt/MINIX/bin/mcc.
  • Για αυτό το λόγο, ίσως σας εξυπηρετήσει καλύτερα εάν στην * αρχή * του PATH σας βάλετε τη διαδρομή /opt/MINIX/bin/mcc, ούτως ώστε να βρίσκει σίγουρα το σωστό mcc.

Τροποποιώντας το ίδιο το MINIX

  1. Από τη στιγμή που όλα τα αρχεία στον κατάλογο myminix είναι soft links σε αρχεία του συστήματος, δεν μπορείτε προφανώς να τα τροποποιήσετε. Θα πρέπει να αντικαταστήσετε τα links των αρχείων που θα τροποποιήσετε με κανονικά αντίγραφα από τα αρχεία στο /opt/MINIX. Πρέπει επομένως να αντικαταστήσετε όλα τα links του directory ~/myminix/src/fs με τα πραγματικά αρχεία.

  2. Θα πρέπει επίσης να αντικαταστήστε τα soft links myminix/src/mm/mm.map, myminix/src/fs/fs.map, myminix/src/inet/inet.map και myminix/src/tools/image με αντίγραφα από τα πραγματικά αρχεία (ή να σβήσετε αυτά τα αρχεία: εκτελώντας make image στη συνέχεια όλα τα αρχεία αυτά θα ξαναδημιουργηθούν).

  3. Κάθε φορά που κάνετε αλλαγές σε κάποιο αρχείο, θα πρέπει να πηγαίνετε στον κατάλογο myminix/src/tools και να εκτελείτε την εντολή "make image".

  4. Για να δείτε αν όλα πήγαν καλά, τρέξτε και πάλι το minix.

  5. Δοκιμάστε να τοποθετήσετε μια printf στη συνάρτηση main() του αρχείου main.c στον κατάλογο fs και ακολουθήστε την παραπάνω διαδικασία για να δείτε αν όλα δουλεύουν σωστά.


Προσθέτοντας Κλήσεις Συστήματος στο MINIX

Υπάρχουν δύο ειδών εργασίες που πρέπει να γίνουν για την προσθήκη μιας κλήσεις συστήματος στο MINIX:

  1. Εργασίες σε επίπεδο χρήστη: προσθήκη μερικών γραμμών κώδικα για αποστολή ενός μηνύματος στον πυρήνα που τον ενημερώνει για το ποια κλήση συστήματος πρέπει να κληθεί και για τις παραμέτρους της.

  2. Εργασίες σε επίπεδο πυρήνα: αποτελούνται από την πραγματική υλοποίηση της κλήσης συστήματος καθώς και από την προσθήκη της κλήσης συστήματος στον πίνακα κλήσεων συστήματος που διατηρεί ο πυρήνας.

Εργασίες σε επίπεδο πυρήνα:

  1. Για τον πυρήνα, κάθε κλήση συστήματος αντιστοιχεί σε έναν αριθμό που χρησιμοποιείται για δεικτοδότηση στον πίνακα κλήσεων συστήματος. Προσθέστε στο αρχείο include/minix/callnr.h τον αριθμό για τη νέα κλήση συστήματος. Π.χ., #define FOO 77 . Επίσης, τροποποιήστε τον αριθμό NCALLS που περιέχεται στην κορυφή του αρχείου, ώστε να περιέχει τον σωστό αριθμό από κλήσεις συστήματος στο σύστημα.

  2. Ο κώδικας για την κλήση συστήματος μπορεί να τοποθετηθεί είτε σε ένα νέο αρχείο ή σε ένα από τα υπάρχοντα αρχεία. Για να αποφύγετε επιπλέον πολυπλοκότητα, επιλέξτε  να τον τοποθετήσετε σε ένα από τα υπάρχοντα αρχεία στον κατάλογο src/fs  του MINIX. Π.χ., σε ένα από αυτά τα αρχεία θα πρέπει να προσθέσετε κώδικα του στυλ:
    PUBLIC int do_foo(void) {
        printf("System call FOO invoked\n");
    }

  3. Προσθέστε το prototype της κλήσης συστήματος στο αρχείο src/fs/proto.h, π.χ., _PROTOTYPE( int do_foo, (void));

  4. Προσθέστε ένα δείκτη στη συνάρτηση της νέας κλήσης συστήματος στο αρχείο src/fs/table.c (με τρόπο αντίστοιχο αυτού των υπολοίπων κλήσεων συστήματος που υπάρχουν εκεί). Κάντε τη προσθήκη στο τέλος του πίνακα call_vec.

    Τροποποιήστε και το αρχείο
    src/mm/table.c, προσθέτοντας εκεί μια no_sys εγγραφή στο τέλος του πίνακα (για να είναι συμβατό το μέγεθος των δύο πινάκων).

Εργασίες σε επίπεδο χρήστη:

  1. Προσθήκη της νέας κλήσης συστήματος στη βιβλιοθήκη (lib)
    Το αρχείο βιβλιοθήκης για την κλήση συστήματος θα πρέπει να δημιουργηθεί κάτω από τον κατάλογο src/lib/posix.
    Δημιουργήστε ένα νέο αρχείο εκεί που θα περιέχει τα εξής:
    Αρχείο _
    foo.c (ονομάστε το δικό σας αρχείο με αντίστοιχο τρόπο):
    #include <lib.h>
    #define foo _foo
    #include <unistd.h>

    PUBLIC int foo(void) {
        message m;
        return(_syscall(FS,FOO,&m));
    }

    Ο παραπάνω κώδικας απλά καλεί την _syscall(FS, FOO, &m); το 1ο όρισμα σημειοδοτεί ότι αυτή είναι μια κλήση συστήματος του συστήματος αρχείων, έτσι όταν ο πυρήνας λάβει αυτό το μήνυμα θα ξέρει πως πρέπει να το προωθήσει στο σύστημα αρχείων. Το 2ο όρισμα καθορίζει τον τύπο της κλήσης συστήματος, και το 3ο είναι το ίδιο το μήνυμα (για να δείτε τη δομή ενός μηνύματος δείτε το αρχείο include/minix/type.h).

  2. Προσθέστε το prototype για τη κλήση συστήματος στο αρχείο include/unistd.h.

  3. Δημιουργήστε ένα αρχείο συστήματος (σε assembly) κάτω από τον κατάλογο src/lib/sunsyscall. Το αρχείο αυτό θα πρέπει να έχει την επέκταση .s (η οποία υποδηλώνει πως αυτό είναι assembly αρχείο). Το αρχείο θα πρέπει να περιέχει τα εξής:
    .global foo
    foo:
    ba _foo
    nop

  4. Η τροποποιημένη βιβλιοθήκη θα πρέπει τώρα να μεταγλωτιστεί. Προκειμένου να γίνει αυτό θα πρέπει να τροποποιηθούν ελαφρώς τα makefiles που υπάρχουν κάτω από τους καταλόγους lib/posix και /lib/sunsyscall. Παρατηρήστε τις πληροφορίες που περιέχουν αυτά τα makefiles για τις υπόλοιπες κλήσεις συστήματος και κάνετε αντίστοιχες προσθήκες για τις νέες κλήσεις συστήματος. Αφού γίνουν όλα αυτά, κρατήστε ένα αντίγραφο της libc.a (για την περίπτωση που κάτι δεν πάει καλά κατά τη μεταγλώτιση) και στη συνέχεια εκτελέστε την εντολή make κάτω από τον κατάλογο /src/lib.

Στο σημείο αυτό η νέα κλήση συστήματος (στο παράδειγμα μας πιο πάνω, η foo) έχει ήδη τοποθετηθεί στη βιβλιοθήκη. Μπορείτε να την χρησιμοποιείτe στα προγράμματά σας κάνοντας include το αρχείο unistd.h (#include <unistd.h>).

 


Έλεγχος αλλαγών στο κώδικα του MINIX

  1. Ξεκινήστε το MINIX με την εντολή "minix -d" για να ενεργοποιήσετε το μηχανισμό αποσφαλμάτωσης.

  2. Μπορείτε να χρησιμοποιείτε την εντολή printf για να ελέγχετε τη ροή του προγράμματος σας (τα μηνύματα που τυπώνετε τα βλέπετε κανονικά στην οθόνη).

  3. Στον κατάλογο myminix/src/test εκτελέστε την εντολή "make all". Στη συνέχεια, log in στο MINIX σαν root και πηγαίνετε στον κατάλογο /usr/test. Τροποποιήστε το αρχείο testload του καταλόγου: στην γραμμή sunosdir δηλώστε το πλήρες όνομα διαδρομής του test καταλόγου στο λογαριασμό σας στο SOLARIS. Στη συνέχεια, εκτελέστε την εντολή ./testload και αμέσως μετά την εντολή ./run για να τρέξετε τα tests και να ελέγξετε το σύστημα.. Μερικά tests μπορεί να αποτυγχάνουν όταν τα τρέχετε σαν root γιατί πρέπει να τρέξουν από το λογαριασμό bin. Αφού βγείτε από τον λογαριασμό root και μπείτε στον bin ξαναεκτελέστε την εντολή ./run για να τρέξετε και τα υπόλοιπα προγράμματα.


Βιβλιογραφία

 


Τελευταία  τροποποίηση:15/2/05
Κατασκευή και συντήρηση σελίδων:  Παναγιώτα Φατούρου