Τμήμα Πληροφορικής - Εαρινό Εξάμηνο 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.
Ο
προγραμματισμός,
όπως και η
έκθεση, είναι
μια ιδιαίτερη
ατομική
εργασία. Κάθε
φοιτητής
πρέπει ατομικά
να κατανοήσει
το πρόβλημα και
να
σκιαγραφήσει
μια πιθανή λύση
του (αν και
μπορεί να
ρωτάει το βοηθό
του μαθήματος
τις απορίες του
ή για προβλήματα
στη μετάφραση
του κώδικά του).
Είναι επίσης
σημαντικό να
μπορεί
οποιοσδήποτε
να διαβάσει τον
κώδικά του. Η
βαθμολογία στα
προγράμματα θα
αντικατοπτρίζει
την πληρότητα
και την
ορθότητα, αλλά
και τα
συνοδεύοντα
σχόλια. Μετά
από κάθε
προγραμματιστική
άσκηση ο
φοιτητής θα
πρέπει να κάνει
παρουσίαση (εξήγηση)
του κώδικά του,
σε κάποια
προκαθορισμένη
ημερομηνία. Οι
αντιγραφές
απαγορεύονται
αυστηρά και θα
τιμωρούνται με
μείωση ή
μηδένιση
βαθμού. Είναι
καλύτερα να
παραδοθεί μια
ημιτελή άσκηση
παρά μια
παραλλαγμένη
αντιγραφή.
Οι
φοιτητές
μπορούν να
χρησιμοποιήσουν
οποιονδήποτε
υπολογιστή για
τις
προγραμματιστικές
ασκήσεις τους. Για τη βαθμολόγηση της
άσκησής τους όμως, το πρόγραμμα θα
εκτελείται στα μηχανήματα κάποιου
εργαστηρίου του Τμήματος. Στα μηχανήματα
αυτά θα είναι εγκατεστημένο και το
απαραίτητο λογισμικό για τις ασκήσεις. Όσοι
από τους φοιτητές επιθυμούν να εργαστούν σε
άλλα μηχανήματα θα πρέπει να σιγουρευτούν
ότι ο κώδικας τους τρέχει σωστά και στα
παραπάνω μηχανήματα.
Οι
φοιτητές είναι
υπεύθυνοι για
την κακή χρήση
του
λογαριασμού
τους. Το 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".
Άλλη Βιβλιογραφία
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 εργασία στο MINIX είναι διαθέσιμη (δείτε Διαφάνειες Διαλέξεων & Άλλο Υλικό) (προθεσμία παράδοσης: 8/6/04).
H προγραμματιστική άσκηση είναι διαθέσιμη (δείτε Διαφάνειες Διαλέξεων & Άλλο Υλικό) (προθεσμία παράδοσης: 2/4/04).
Το πρώτο μάθημα θα γίνει την Τετάρτη 25/2/04 στην αίθουσα Ι2.
Οι φοιτητές υποχρεούνται να
εγγραφούν στη λίστα το αργότερο μέχρι τις
12/3/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)
Προγραμματιστική Άσκηση (os-homework.doc)
Γενικές Πληροφορίες για το μάθημα
(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
Παρουσίαση σχετικά με το ΜΙΝΙΧ και τις κλήσεις συστήματος σε αυτό
Τελευταία
τροποποίηση:29/3/04
Κατασκευή και συντήρηση
σελίδων: Παναγιώτα
Φατούρου