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

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

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

 


Γενικά | Ανακοινώσεις | Ημερολόγιο | Διαφάνειες Διαλέξεων & Άλλο Υλικό | MINIX


ANAKOINΩΣΗ

Η εξέταση της πρώτης άσκησης θα γίνει τις ακόλουθες μέρες: Παρασκευή 14/5, Δευτέρα 17/5, Τετάρτη 19/5 και Τετάρτη 2/6, Πέμπτη 3/6, Παρασκευή 4/6 στο γραφείο μου. Η εξέταση της άσκησης είναι υποχρεωτική και θα πρέπει όλοι όσοι έχετε παραδώσει την άσκηση να έρθετε στην προφορική της εξέταση. Όσοι φοιτητές δεν μπορέσουν να έρθουν θα πρέπει να με ενημερώσουν πριν την εξέταση, διαφορετικά η άσκηση τους θα μηδενιστεί. Οι φοιτητές που έχουν παραδώσει την άσκηση και θέλουν να εξεταστούν θα πρέπει να δηλώσουν την ώρα της προτίμησής τους σε έναν από τους πίνακες που έχουν αναρτηθεί έξω από το γραφείο μου πριν την έναρξη της εξέτασης την Παρασκευή 14/5 .

Οι φοιτητές με Α.Μ. 597, 593, 568, 401, 355, 271, 386 θα πρέπει να περάσουν από το γραφείο μου πριν την εξέταση.

Οι φοιτητές με Α.Μ 530 και 592, 345 και 366 θα πρέπει να είναι προσεκτικοί στο μέλλον σε θέματα συνεργασίας.


 

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

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

Βοηθοί Μαθήματος:                                Πέτρος Καρβέλης & Ανδρέας Φωτίου 
Γραφεία Βοηθών:                                     Α10 & Εργ. κ. Φωτιάδη στην Ιατρική
Ώρες Γραφείου Βοηθών:                          Πέμπτη 13:00-15:00 & Παρασεκυή 15:00-17:00 στο γραφείο Α25
Ηλεκτρονική Διεύθυνση Βοηθού:            pkarvelATcs.uoi.gr, fotiouATcs.uoi.gr
Τηλέφωνο:                                                Πέτρος: 7701, Ανδρέας: 7827

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


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

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

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

Δευτέρα, 10:00-12:00, στην αίθουσα Ι-2

 

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

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

 

Βιβλία

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

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

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

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

Το βιβλίο που θα μοιραστεί στους φοιτητές είναι το 1ο από τα παραπάνω και το μάθημα θα βασιστεί κυρίως σε αυτό το βιβλίο. Οι διαφάνειες του μαθήματος μαζί με τις σημειώσεις που μπορείτε να κρατάτε κατά την παράδοση και οποιοδήποτε άλλο υλικό σας δοθεί στην τάξη θα σας βοηθήσουν να διεκπεραιώσετε επιτυχώς το μάθημα.

Πρόγραμμα

1η εβδομάδα

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

2η εβδομάδα

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

3η εβδομάδα

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

4η εβδομάδα

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

5η εβδομάδα

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

6η εβδομάδα

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

7η εβδομάδα

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

8η εβδομάδα

Συστήματα Αρχείων, Είσοδος/Έξοδος 

9η εβδομάδα

Είσοδος/Έξοδος

10η εβδομάδα

Αδιέξοδα

11η εβδομάδα

Προστασία

12η εβδομάδα

Το λειτουργικό Σύστημα Unix
13η Εβδομάδα Το λειτουργικό Σύστημα Unix

 

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

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

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

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

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

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

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

Οι φοιτητές είναι υπεύθυνοι για την κακή χρήση του λογαριασμού τους. Το password τους θα πρέπει να παραμείνει μυστικό και ο λογαριασμός τους να χρησιμοποιείται μόνο από αυτούς. Θα πρέπει τέλος να φροντίζουν η προστασία του καταλόγου στον οποίο βρίσκονται τα προγράμματά τους να μην επιτρέπει ανάγνωση (ή ακόμη χειρότερα εγγραφή) από άλλους (η εντολή chmod είναι πολύ χρήσιμη).

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

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

Σειρές Ασκήσεων: 35%
Τελική Εξέταση: 65%

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

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

 

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

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

   

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

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

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

Όποιος φοιτητής δεν εγγραφεί στη λίστα, θα διαγραφεί από το μάθημα. Το e-mail address της λίστας είναι

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

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

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

Παρατήρηση

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

   

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

 

Βιβλία σε C

 


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

  H εργασία στο MINIX είναι διαθέσιμη (δείτε Διαφάνειες Διαλέξεων & Άλλο Υλικό) (προθεσμία παράδοσης: 8/6/04).


Ημερολόγιο

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

 

 

 

24/2

 

 

25/2

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

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

26/2 

 


 

27/2 

 


 

1/3

Εισαγωγή.  

Μελέτη διαφανειών. Μελέτη Ενοτήτων 1.4, 1.5, 1.6, 1.7, Τanenbaum. Μελέτη Κεφαλαίου 1 & 2, Silberschatz & Galvin (φωτοτυπίες των κεφαλαίων αυτών έχουν δοθεί για φωτοτύπηση).

2/3

 

 

 


 

3/3

 Διεργασίες - Διαδιεργασιακή Επικοινωνία. Μελέτη Διαφανειών. Μελέτη Ενότητας 2.1, Tanenbaum. 

4/3

 

 

 


5/3

 

 

 


 

8/3

----------
Εκλογές


 

9/3

 

 

 

10/3

Διαδιεργασιακή Επικοινωνία. Μελέτη διαφανειών. Μελέτη Ενοτήτων 2.3.1-2.3.6, Tanenbaum.

 

11/3

 

 

 

 

12/3

 

 

 

 

15/3

Διαδιεργασιακή Επικοινωνία. Μελέτη διαφανειών. Μελέτη Ενοτήτων 2.3.1-2.3.6, Tanenbaum.

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

 

 

 

 


16/3

 

 

 

 

 

 

 

 

 

 

17/3

Διαδιεργασιακή Επικοινωνία. Μελέτη διαφανειών. Μελέτη Ενότητας 2.4 και Ενότητας 2.5.1, Tanenbaum.

Μελέτη Κεφαλαίου "CPU Scheduling", Silberschatz & Galvin (φωτοτυπίες των κεφαλαίων αυτών έχουν δοθεί για φωτοτύπηση).

Η ύλη που χρειάζεστε για την άσκησή σας για την άσκηση έχει καλυφθεί.

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

18/3 

 

 

 

 

 

 

 


 

19/3

Φροντιστηριακή Απασχόληση

 

 

 

 

 

 

 


22/3

CPU Scheduling. Mελέτη Κεφαλαίου "CPU Scheduling", Silberschatz & Galvin (φωτοτυπίες των κεφαλαίων αυτών έχουν δοθεί για φωτοτύπηση) και Ενότητας 2.5, Tanenbaum.

Συζήτηση για την άσκηση.

 

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

 

23/3

 

 

 

 

 

 

 

 

 

24/3

Διαδιεργασιακή Επικοινωνία. Μελέτη Ενοτήτων 2.3.7 και Μετρητών Συμβάντων (παλιά έκδοση Tanenbaum, Ενότητα 2.2.6). Ο Bakery αλγόριθμος για επίτευξη αμοιβαίου αποκλεισμού μεταξύ n διεργασιών (μελέτη διαφανειών).

Συζήτηση για την άσκηση.

Tο βάρος πρέπει να δοθεί στην άσκησή σας. 

25/3

 

 

 

 

 


 

 

 

26/3

 

 

 

 

 


 

 

 

29/3

Διαδιεργασιακή Επικοινωνία. Μελέτη Ενοτήτων 2.3.8 και Ισοδυναμία Αρχών (παλιά έκδοση Tanenbaum, Ενότητα 2.2.9).

Συζήτηση για την άσκηση.

 

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

30/3
 

 

 

 

 

 

 

31/3

Αρχεία και Κατάλογοι. Μελέτη Ενοτήτων 6.1 και 6.2, Tanenbaum

 

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

   

 

1/4

 

 

 

 

 

 

2/4

Τέλος Προθεσμίας Παράδοσης της Άσκησης

 

 

 

   

 

5/4

 Αρχή Διακοπών Πάσχα

6/4

xxxx

7/4

 xxxx

8/4

xxxx

9/4

 xxxx

12/4 

xxxx

13/4

 xxxx

14/4

 xxxx

15/4

 xxxx

16/4

 xxxx

19/4

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

20/4

 

 

21/4

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

22/4 

 

 

23/4

 

 

26/4

Υλοποίηση Συστήματος Αρχείων. Μελέτη Ενοτήτων 6.3.6, 6.3.7 & 6.3.8, Tanenbaum

27/4

 

28/4

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

29/4

 

30/4

 

3/5 

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

 

 

 

4/5

 

 

 

 

5/5 

Το Σύστημα Αρχείων του MINIX. Μελέτη Ενοτήτων 5.6 & 5.7, Tanenbaum & Woodhull, Operating Systems: Design & Implementation.

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

6/5 

 

 

 

 

7/5

Αναπλήρωση Μαθήματος Δευτέρας

Διαχείριση Μνήμης. Μελέτη Ενότητας 4.2, Tanenbaum (ώρα 17:00-19:00)

 

10/5

Αντί για Λειτουργικά Συστήματα θα γίνει Θεωρία Υπολογισμού

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

11/5

 

 

 

12/5

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

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

13/5

 

 

 

14/5

Αντί για θεωρία Υπολογισμού θα γίνουν Λειτουργικά Συστήματα (ώρα 12:00-14:00)

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

 

17/5

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

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

18/5

 

19/5

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

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

20/5

 

21/5

 

24/5

Δρομολόγηση Βραχίονα Δίσκου. Μελέτη Κεφαλαίου, Silberschatz & Galvin που έχει δοθεί για φωτοτύπηση. Μελέτη Ενότητας 5.4, Tanenbaum.

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

25/5
 

 

 

 

 

26/5

Αδιέξοδα, Μελέτη Ενοτήτων 3.1, 3.2, 3.3 & 3.4, Tanenbaum

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

 

27/5
 

 

 

 

 

28/5
 

 

 

 

 

31/5

Αδιέξοδα, Μελέτη Ενοτήτων 3.5, 3.6 & 3.7, Tanenbaum

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

1/6

 

 

 

2/6

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

 

 

3/6
 

 

 

 

4/6
 

 

 

 

7/6

 

8/6

Τέλος Προθεσμίας Παράδοσης του Project

9/6

 

10/6

 

11/6

 

14/6

 

15/6

 

16/6

 

17/6

 

18/6

 

 


Διαφάνειες Διαλέξεων & Άλλο Υλικό

  Εργασία στο MINIX (os-project.doc)


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, θα πρέπει να κάνετε τα ακόλουθα:

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

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

  1. Για να τερματίσετε το minix, πρέπει να κάνετε login ως root και να εκτελέσετε την εντολή shutdown now.

Μultiuser ΜΙΝΙΧ 

 


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


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

Πιθανό πρόβλημα:

Τροποποιώντας το ίδιο το 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 για να τρέξετε και τα υπόλοιπα προγράμματα.


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

 


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