Τμήμα Πληροφορικής - Εαρινό Εξάμηνο 2005
Η/Υ 445: Λειτουργικά Συστήματα
Υποχρεωτικό
μάθημα 4ου
εξαμήνου
Η εργασία στο ΜΙΝΙΧ (project) είναι διαθέσιμη. Ημερομηνίες παράδοσης για τα δύο μέρη που απαρτίζουν την εργασία είναι οι ακόλουθες:
Μέρος Α: Δευτέρα, 23/5/05, ώρα 23:59
Μέρος Β: Παρασκευή, 10/6/05, ώρα 23:59
Η εξέταση της 1ης άσκησης θα πραγματοποιηθεί την Πέμπτη, 26/5/2005, ώρα 14:00-15:00 στο αμφιθέατρο του Τμήματος.
Γενικά
| Ανακοινώσεις
| Ημερολόγιο
| Υλικό
Μαθήματος
|
Διδάσκουσα:
Παναγιώτα
Φατούρου
Γραφείο:
26 (Α´ ορόφου)
Ώρες Γραφείου:
Δευτέρα, 17:00 – 19:00 & Τετάρτη, 17:00-19:00
Ηλεκτρονική
Διεύθυνση:
Τηλέφωνο:
(26510) 98808
Βοηθοί Μαθήματος:
Α. Φωτίου - Φ. Παπαδόπουλος - Σ. Μαργαρίτη
Γραφεία Βοηθών:
Ώρες Γραφείου Βοηθών: Τρίτη,
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".
Άλλη Βιβλιογραφία
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: Μέρος Β |
Παράδειγμα Παραγωγού-Καταναλωτή με σημαφόρους και κοινή μνήμη
Πληροφορίες σχετικά με διεργασίες, κοινή μνήμη και σημαφόρους στο UNIX (κείμενο γραμμένο από τον συνάδελφο Βασίλη Δημακόπουλο).
Γενικές Πληροφορίες για το μάθημα
(syllabus.doc)
Οδηγίες
Εγκατάστασης | 1η
Εμπειρία με το MINIX | Multi-user MINIX
| Γράφοντας
Προγράμματα για το MINIX |
Τροποποιώντας το ίδιο το MINIX
Προσθέτoντας
Κλήσεις Συστήματος στο MINIX |
Έλεγχος Αλλαγών
στον κώδικα του MINIX |
Βιβλιογραφία
rm myminix/src/tools/.minix
cp /opt/MINIX/src/tools/.minix myminix/src/toolsΜετά από όλα αυτά, θα χρησιμοποιηθούν περίπου 6,4 MBytes στον λογαριασμό σας για το MINIX.
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 (από τον προσωπικό σας κατάλογο).
- Προσθέστε στο αρχείο /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.
Τα προγράμματα που θα φτιάξετε για το MINIX θα
τα αναπτύξετε εκτός MINIX (έστω π.χ., ότι έχετε
φτιάξει ένα απλό πρόγραμμα, hello.c, σε C στο
λογαριασμό σας στο SOLARIS). Συγκεκριμένα:
sunread [όλο to pathname του αρχείου στο solaris] > [minixfilename] (sunread <solaris-path>/hello > hello)
Τροποποιώντας το ίδιο το MINIX
Από τη στιγμή που όλα τα αρχεία στον κατάλογο myminix είναι soft links σε αρχεία του συστήματος, δεν μπορείτε προφανώς να τα τροποποιήσετε. Θα πρέπει να αντικαταστήσετε τα links των αρχείων που θα τροποποιήσετε με κανονικά αντίγραφα από τα αρχεία στο /opt/MINIX. Πρέπει επομένως να αντικαταστήσετε όλα τα links του directory ~/myminix/src/fs με τα πραγματικά αρχεία.
Θα πρέπει επίσης να αντικαταστήστε τα soft links myminix/src/mm/mm.map, myminix/src/fs/fs.map, myminix/src/inet/inet.map και myminix/src/tools/image με αντίγραφα από τα πραγματικά αρχεία (ή να σβήσετε αυτά τα αρχεία: εκτελώντας make image στη συνέχεια όλα τα αρχεία αυτά θα ξαναδημιουργηθούν).
Κάθε φορά που κάνετε αλλαγές σε κάποιο αρχείο, θα πρέπει να πηγαίνετε στον κατάλογο myminix/src/tools και να εκτελείτε την εντολή "make image".
Για να δείτε αν όλα πήγαν καλά, τρέξτε και πάλι το minix.
Δοκιμάστε να τοποθετήσετε μια printf στη συνάρτηση main() του αρχείου main.c στον κατάλογο fs και ακολουθήστε την παραπάνω διαδικασία για να δείτε αν όλα δουλεύουν σωστά.
Προσθέτοντας Κλήσεις Συστήματος στο MINIX
Υπάρχουν δύο ειδών εργασίες που πρέπει να γίνουν για την προσθήκη μιας κλήσεις συστήματος στο MINIX:
Εργασίες σε επίπεδο χρήστη: προσθήκη μερικών γραμμών κώδικα για αποστολή ενός μηνύματος στον πυρήνα που τον ενημερώνει για το ποια κλήση συστήματος πρέπει να κληθεί και για τις παραμέτρους της.
Εργασίες σε επίπεδο πυρήνα: αποτελούνται από την πραγματική υλοποίηση της κλήσης συστήματος καθώς και από την προσθήκη της κλήσης συστήματος στον πίνακα κλήσεων συστήματος που διατηρεί ο πυρήνας.
Εργασίες σε επίπεδο πυρήνα:
Για τον πυρήνα, κάθε κλήση συστήματος αντιστοιχεί σε έναν αριθμό που χρησιμοποιείται για δεικτοδότηση στον πίνακα κλήσεων συστήματος. Προσθέστε στο αρχείο include/minix/callnr.h τον αριθμό για τη νέα κλήση συστήματος. Π.χ., #define FOO 77 . Επίσης, τροποποιήστε τον αριθμό NCALLS που περιέχεται στην κορυφή του αρχείου, ώστε να περιέχει τον σωστό αριθμό από κλήσεις συστήματος στο σύστημα.
Ο κώδικας για
την κλήση συστήματος μπορεί να τοποθετηθεί είτε σε ένα νέο αρχείο ή σε ένα
από τα υπάρχοντα αρχεία. Για να αποφύγετε επιπλέον πολυπλοκότητα, επιλέξτε
να τον τοποθετήσετε σε ένα από τα υπάρχοντα αρχεία στον κατάλογο src/fs
του MINIX. Π.χ., σε ένα από
αυτά τα αρχεία θα πρέπει να προσθέσετε κώδικα του στυλ:
PUBLIC int do_foo(void) {
printf("System call FOO invoked\n");
}
Προσθέστε το prototype της κλήσης συστήματος στο αρχείο src/fs/proto.h, π.χ., _PROTOTYPE( int do_foo, (void));
Προσθέστε ένα
δείκτη στη συνάρτηση της νέας κλήσης συστήματος στο αρχείο src/fs/table.c
(με τρόπο αντίστοιχο αυτού των υπολοίπων κλήσεων συστήματος που υπάρχουν
εκεί). Κάντε τη προσθήκη στο τέλος του πίνακα call_vec.
Τροποποιήστε και το αρχείο src/mm/table.c,
προσθέτοντας εκεί μια no_sys εγγραφή στο τέλος του
πίνακα (για να είναι συμβατό το μέγεθος των δύο πινάκων).
Εργασίες σε επίπεδο χρήστη:
Προσθήκη της
νέας κλήσης συστήματος στη βιβλιοθήκη (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).
Προσθέστε το prototype για τη κλήση συστήματος στο αρχείο include/unistd.h.
Δημιουργήστε
ένα αρχείο συστήματος (σε assembly) κάτω από τον
κατάλογο src/lib/sunsyscall. Το αρχείο αυτό θα πρέπει
να έχει την επέκταση .s (η οποία υποδηλώνει πως αυτό
είναι assembly αρχείο). Το
αρχείο θα πρέπει να περιέχει τα εξής:
.global foo
foo:
ba _foo
nop
Η τροποποιημένη βιβλιοθήκη θα πρέπει τώρα να μεταγλωτιστεί. Προκειμένου να γίνει αυτό θα πρέπει να τροποποιηθούν ελαφρώς τα makefiles που υπάρχουν κάτω από τους καταλόγους lib/posix και /lib/sunsyscall. Παρατηρήστε τις πληροφορίες που περιέχουν αυτά τα makefiles για τις υπόλοιπες κλήσεις συστήματος και κάνετε αντίστοιχες προσθήκες για τις νέες κλήσεις συστήματος. Αφού γίνουν όλα αυτά, κρατήστε ένα αντίγραφο της libc.a (για την περίπτωση που κάτι δεν πάει καλά κατά τη μεταγλώτιση) και στη συνέχεια εκτελέστε την εντολή make κάτω από τον κατάλογο /src/lib.
Στο σημείο αυτό η νέα κλήση συστήματος (στο παράδειγμα μας πιο πάνω, η foo) έχει ήδη τοποθετηθεί στη βιβλιοθήκη. Μπορείτε να την χρησιμοποιείτe στα προγράμματά σας κάνοντας include το αρχείο unistd.h (#include <unistd.h>).
Έλεγχος αλλαγών στο κώδικα του MINIX
Ξεκινήστε το MINIX με την εντολή "minix -d" για να ενεργοποιήσετε το μηχανισμό αποσφαλμάτωσης.
Μπορείτε να χρησιμοποιείτε την εντολή printf για να ελέγχετε τη ροή του προγράμματος σας (τα μηνύματα που τυπώνετε τα βλέπετε κανονικά στην οθόνη).
Στον κατάλογο myminix/src/test εκτελέστε την εντολή "make all". Στη συνέχεια, log in στο MINIX σαν root και πηγαίνετε στον κατάλογο /usr/test. Τροποποιήστε το αρχείο testload του καταλόγου: στην γραμμή sunosdir δηλώστε το πλήρες όνομα διαδρομής του test καταλόγου στο λογαριασμό σας στο SOLARIS. Στη συνέχεια, εκτελέστε την εντολή ./testload και αμέσως μετά την εντολή ./run για να τρέξετε τα tests και να ελέγξετε το σύστημα.. Μερικά tests μπορεί να αποτυγχάνουν όταν τα τρέχετε σαν root γιατί πρέπει να τρέξουν από το λογαριασμό bin. Αφού βγείτε από τον λογαριασμό root και μπείτε στον bin ξαναεκτελέστε την εντολή ./run για να τρέξετε και τα υπόλοιπα προγράμματα.
A. Tanenbaum & A. Woodhull, "Operating Systems: Design and Implementation", Prentice-Hall, New Jersey, 1997.
Paper για SOLARIS MINIX (Smx--the Solaris Port of MINIX, SunOS Minix: A tool for use in Operating System Laboratories).
Aρχεία στο /opt/MINIX/doc.
Πληροφορίες σχετικά με την προσθήκη κλήσεων συστήματος στο MINIX
Παρουσίαση σχετικά με το ΜΙΝΙΧ και τις κλήσεις συστήματος σε αυτό
Τελευταία
τροποποίηση:15/2/05
Κατασκευή και συντήρηση
σελίδων: Παναγιώτα
Φατούρου