Λειτουργικά Συστήματα

136
Λειτουργικά Συστήµατα Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθο- δολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική αρτιότητα και πληρότητα των συγγραµ- µάτων την αποκλειστική ευθύνη φέρουν οι συγγραφείς, κριτικοί αναγνώστες και ακαδηµαϊκοί υπεύθυνοι που ανέλαβαν το έργο αυτό. MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 1

description

Λειτουργικά Συστήματα

Transcript of Λειτουργικά Συστήματα

Page 1: Λειτουργικά Συστήματα

Λειτουργικά Συστήµατα

ΣηµείωσηΤο ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθο-δολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική αρτιότητα και πληρότητα των συγγραµ-µάτων την αποκλειστική ευθύνη φέρουν οι συγγραφείς, κριτικοί αναγνώστες και ακαδηµαϊκοί υπεύθυνοιπου ανέλαβαν το έργο αυτό.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 1

Page 2: Λειτουργικά Συστήματα

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 2

Page 3: Λειτουργικά Συστήματα

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟΣχολή Θετικών Επιστηµών και Τεχνολογίας

Πρόγραµµα Σπουδών

ΠΛHPOΦOPIKH

Θεµατική Ενότητα

ΠΡΑΚΤΙΚΗ ΕΞΑΣΚΗΣΗ ΣΕ ΘΕΜΑΤΑ ΛΟΓΙΣΜΙΚΟΥ

Τόµος Γ'

Λειτουργικά ΣυστήµαταΒΑΣΙΛΕΙΟΣ MΑΜΑΛΗΣ

∆ρ Mηχανικός H/Y & Πληροφορικής

ΠATPA 2003

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 3

Page 4: Λειτουργικά Συστήματα

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Σχολή Θετικών Επιστηµών και Τεχνολογίας

Πρόγραµµα Σπουδών

ΠΛHPOΦOPIKH

Θεµατική Ενότητα

ΠΡΑΚΤΙΚΗ ΕΞΑΣΚΗΣΗ ΣΕ ΘΕΜΑΤΑ ΛΟΓΙΣΜΙΚΟΥ

Τόµος Γ'

Λειτουργικά Συστήµατα

Συγγραφή

ΒΑΣΙΛΕΙΟΣ MΑΜΑΛΗΣ

∆ρ Mηχανικός H/Y & Πληροφορικής

Kριτική ανάγνωση

ΠΑΝΑΓΙΩΤΗΣ ΠΙΝΤΕΛΑΣ

Καθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Πατρών

Ακαδηµαϊκός Υπεύθυνος για την επιστηµονική επιµέλεια του τόµου

ΠΑΝΑΓΙΩΤΗΣ ΠΙΝΤΕΛΑΣ

Καθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Πατρών

Επιµέλεια στη µέθοδο της εκπαίδευσης από απόσταση

ΓEPAΣIMOΣ MΩPAΪTHΣ

Γλωσσική Επιµέλεια

XPIΣTINA KAPAΓEΩPTOΠOYΛOY

Τεχνική Επιµέλεια

EΣΠI EK∆OTIKH E.Π.E

Καλλιτεχνική Επιµέλεια – Σελιδοποίηση

TYPORAMA

Συντονισµός ανάπτυξης εκπαιδευτικού υλικού και γενική επιµέλεια των εκδόσεων

ΟΜΑ∆Α ΕΚΤΕΛΕΣΗΣ ΕΡΓΟΥ ΕΑΠ / 1997 – 2003

ISBN: 960–538–211–3

Kωδικός Έκδοσης: ΠΛH 40/3

Copyright 2003 για την Ελλάδα και όλο τον κόσµο

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Οδός Παπαφλέσσα & Υψηλάντη, 262 22 Πάτρα – Τηλ: 2610 314094, 314206 Φαξ: 2610 317244

Σύµφωνα µε το Ν. 2121/1993, απαγορεύεται η συνολική ή αποσπασµατική αναδηµοσίευση του βιβλίου αυτού

ή η αναπαραγωγή του µε οποιοδήποτε µέσο χωρίς την άδεια του εκδότη.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 4

Page 5: Λειτουργικά Συστήματα

¶ÂÚȯfiÌÂÓ·

¶ÚfiÏÔÁÔ˜ ............................................................................................................................................................................. 9

K ∂ º ∞ § ∞ π √ 1

EÈÛ·ÁˆÁ‹

Σκοπός, Έννοιες κλειδιά, Προσδοκώµενα αποτελέσµατα,

Eισαγωγικές παρατηρήσεις .................................................................................................................................... 11

K ∂ º ∞ § ∞ π √ 2

AÛ΋ÛÂȘ ÚÔÁÚ·ÌÌ·ÙÈÛÌÔ‡ ÛÙÔ Î¤Ï˘ÊÔ˜ ÙÔ˘ Linux

Σκοπός, Έννοιες κλειδιά, Προσδοκώµενα αποτελέσµατα,

Eισαγωγικές παρατηρήσεις .................................................................................................................................... 15

2.1 Eντολές και φίλτρα: Grep, Sed & Awk ..................................................................................... 17

2.2 Συγγραφή συνθετών Scripts ............................................................................................................... 25

Σύνοψη ................................................................................................................................................................................... 34

Bιβλιογραφία ..................................................................................................................................................................... 34

∫ ∂ º ∞ § ∞ π √ 3

AÛ΋ÛÂȘ ÚÔÛÔÌÔ›ˆÛ˘ ÏÂÈÙÔ˘ÚÁÈÒÓ ÙÔ˘ ˘Ú‹Ó·ÂÓfi˜ ÏÂÈÙÔ˘ÚÁÈÎÔ‡ Û˘ÛÙ‹Ì·ÙÔ˜

Σκοπός, Έννοιες κλειδιά, Προσδοκώµενα αποτελέσµατα,

Eισαγωγικές παρατηρήσεις .................................................................................................................................... 35

3.1 Xρονοδροµολόγηση K.M.E. ............................................................................................................... 38

3.1.1 Mέρος A: Θεωρητική εξοικείωση ................................................................................... 38

3.1.2 Mέρος B: Yλοποίηση ................................................................................................................. 40

3.2 Eίσοδος/έξοδος και συγχρονισµός ................................................................................................ 43

3.2.1 Mέρος A: Θεωρητική εξοικείωση ................................................................................... 43

3.2.2 Mέρος B: Yλοποίηση ................................................................................................................. 45

3.3 ∆ιαχείριση µνήµης – σελιδοποίηση ............................................................................................. 49

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 5

Page 6: Λειτουργικά Συστήματα

6 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

3.3.1 Mέρος A: Θεωρητική εξοικείωση ................................................................................... 49

3.3.2 Mέρος B: Yλοποίηση ................................................................................................................. 52

3.4 ∆ιαχείριση µνήµης – αντικατάσταση σελίδων ................................................................... 54

3.4.1 Mέρος A: Θεωρητική εξοικείωση ................................................................................... 54

3.4.2 Mέρος B: Yλοποίηση ................................................................................................................. 57

Σύνοψη ................................................................................................................................................................................... 60

Bιβλιογραφία ..................................................................................................................................................................... 60

K ∂ º ∞ § ∞ π √ 4

OÏÔÎÏ‹ÚˆÛË Ù˘ ·Ó¿Ù˘Í˘ ÂÓfi˜ ÛÙÔȯÂÈÒ‰Ô˘˜ ÏÂÈÙÔ˘ÚÁÈÎÔ‡Û˘ÛÙ‹Ì·ÙÔ˜ Ù‡Ô˘ Unix

Σκοπός, Έννοιες κλειδιά, Προσδοκώµενα αποτελέσµατα,

Eισαγωγικές παρατηρήσεις .................................................................................................................................... 61

4.1 Eνοποίηση των επιµέρους συναρτήσεων προσοµοίωσης ......................................... 63

4.1.1 Eνοποίηση προγραµµάτων διαχείρισης µνήµης .................................................. 63

4.1.2 Eνοποίηση χρονοδροµολογητή και προσοµειωµένης µνήµης ................ 64

4.2 Προσοµοίωση υποθετικής µηχανής ............................................................................................. 67

4.2.1 Yλοποίηση βασικών χαρακτηριστικών υποθετικής µηχανής .................. 67

4.2.2 Συµβολική γλώσσα και συµβολοµεταφραστής .................................................... 70

4.2.3 Mοντέλο λειτουργίας – διασύνδεσης ............................................................................ 75

4.3 Έλεγχος ορθότητας – ∆οκιµές .......................................................................................................... 79

Σύνοψη ................................................................................................................................................................................... 82

Bιβλιογραφία ..................................................................................................................................................................... 82

K ∂ º ∞ § ∞ π √ 5

AÛ΋ÛÂȘ ηٷÓfiËÛ˘ Ù˘ ˘ÏÔÔ›ËÛ˘ ÂÓfi˜ Ú·ÁÌ·ÙÈÎÔ‡ §.™.(TÔ §.™. Linux)

Σκοπός, Έννοιες κλειδιά, Προσδοκώµενα αποτελέσµατα,

Eισαγωγικές παρατηρήσεις .................................................................................................................................... 83

5.1 Xρονοδροµολόγηση K.M.E. ............................................................................................................... 85

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 6

Page 7: Λειτουργικά Συστήματα

5.1.1 O αλγόριθµος χρονοδροµολόγησης διαδικασιών .............................................. 85

5.1.2 O µηχανισµός αφύπνισης διαδικασιών ....................................................................... 90

5.2 ∆ιαχείριση µνήµης – Σφάλµατα σελίδων ................................................................................ 94

5.2.1 H βασική συνάρτηση εξυπηρέτησης «Page faults» ......................................... 94

5.2.2 Boηθητικές συναρτήσεις εξυπηρέτησης «Page faults» ................................ 97

5.2.3 O µηχανισµός τοποθέτησης σελίδων στη µνήµη ............................................ 102

Σύνοψη ................................................................................................................................................................................ 108

Bιβλιογραφία .................................................................................................................................................................. 108

Eπίλογος ............................................................................................................................................................................ 109

Απαντήσεις ασκήσεων αυτοαξιολόγησης ............................................................................................ 111

Γενική Bιβλιογραφία .............................................................................................................................................. 125

Γλωσσάριο ...................................................................................................................................................................... 129

7¶ E P I E X O M E N A

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 7

Page 8: Λειτουργικά Συστήματα

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 8

Page 9: Λειτουργικά Συστήματα

¶ÚfiÏÔÁÔ˜

Ο όρος «λειτουργικό σύστηµα» χρησιµοποιείται στο χώρο της πληροφορικής µε

στόχο να καλύψει κάθε πτυχή της διαδικασίας «επικοινωνίας» ενός απλού χρήστη

µε έναν ηλεκτρονικό υπολογιστή. Η διαδικασία αυτή περιλαµβάνει από απλούς

µηχανισµούς για την εισαγωγή στοιχείων µέσω ενός πληκτρολογίου και την εµφά-

νιση αποτελεσµάτων σε µία οθόνη έως τους πιο πολύπλοκους µηχανισµούς διαχεί-

ρισης εσωτερικών πόρων του υπολογιστή (µνήµη, κεντρική µονάδα επεξεργασίας

κ.λπ.), µε στόχο την υψηλότερη δυνατή ανταπόκριση του συστήµατος στις απαιτή-

σεις των πολλαπλών χρηστών του. Την πιστή και αποδοτική υλοποίηση των παρα-

πάνω µηχανισµών και διαδικασιών επικοινωνίας αναλαµβάνει συνήθως ένα µικρό,

συµπαγές κοµµάτι κώδικα του λειτουργικού συστήµατος, ο «πυρήνας» (kernel) του,

το οποίο εκτελείται και αυτό στην ίδια υπολογιστική µηχανή παράλληλα µε τις διερ-

γασίες των εκάστοτε χρηστών.

Θεωρητικά, ο τρόπος λειτουργίας του πυρήνα ενός λειτουργικού συστήµατος είναι

αρκούντως συστηµατικός και δοµηµένος, ενώ στηρίζεται ουσιαστικά στην πιστή

υλοποίηση υπαρχόντων, καλά σχεδιασµένων και µελετηµένων αλγόριθµων, τους

οποίους έχετε ήδη διδαχθεί, στο µεγαλύτερο ποσοστό τους, στο µάθηµα «Λειτουρ-

γικά Συστήµατα Ι». Στην πράξη ωστόσο και κατά τα διάφορα στάδια ανάπτυξης και

λειτουργίας ενός λειτουργικού συστήµατος η πραγµατικότητα είναι συνήθως τελεί-

ως διαφορετική για διάφορους σηµαντικούς λόγους και αιτίες, όπως (α) οι πολλα-

πλοί περιορισµοί στα όρια υλοποίησης των αλγόριθµων της θεωρίας, οι οποίοι εισά-

γονται από τα ιδιαίτερα χαρακτηριστικά των πραγµατικών υπολογιστικών µηχανών,

(β) οι πολλαπλές ειδικές περιπτώσεις, οι οποίες πρέπει να προβλέπονται λόγω πιθα-

νών σφαλµάτων και αναξιοπιστίας του υλικού της εκάστοτε υπολογιστικής µηχα-

νής, (γ) οι αυξηµένες ανάγκες αξιοπιστίας, συγχρονισµού και υψηλής αλληλεπι-

δραστικότητας µε το χρήστη, οι οποίες πρέπει να ικανοποιούνται σε κάθε περίπω-

ση, (δ) η πολυπλοκότητα στην υλοποίηση που εισάγεται λόγω της απαιτούµενης ταυ-

τόχρονης εκτέλεσης πυρήνα και διεργασιών χρηστών στην ίδια µηχανή κ.ά.

Την πρακτική αυτή διάσταση των βασικών µηχανισµών λειτουργίας του πυρήνα ενός

λειτουργικού συστήµατος έχει ως στόχο να καλύψει το περιεχόµενο του βιβλίου

αυτού µέσα από κατάλληλα διαµορφωµένο υλικό Παραδειγµάτων, Ασκήσεων Αυτο-

αξιολόγησης και ∆ραστηριοτήτων. Η προσπάθεια προσοµοιωµένης υλοποίησης ενός

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 9

Page 10: Λειτουργικά Συστήματα

1 0 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

ελάχιστων απαιτήσεων πυρήνα λειτουργικού συστήµατος, το οποίο θα υποστηρίζει

µία επίσης προσοµοιωµένη υποθετική υπολογιστική µηχανή, καθώς και η πρακτική

σας επαφή και εξάσκηση τόσο µε τον κώδικα υλοποίησης πραγµατικών λειτουργι-

κών συστηµάτων, όσο και µε το χαµηλού επιπέδου περιβάλλον προγραµµατισµού

και διαχείρισης πόρων (προγραµµατισµός στο κέλυφος) που παρέχουν αυτά, θα απο-

τελέσουν τα βασικά αντικείµενα ενασχόλησής σας στα πλαίσια του εργαστηριακού

αυτού µαθήµατος.

Ως πρότυπο για την πρακτική εκµάθηση των παραπάνω µηχανισµών και ως πραγ-

µατικό περιβάλλον υλοποίησης των απαιτούµενων Ασκήσεων και ∆ραστηριοτήτων,

επιλέχθηκε το λειτουργικό σύστηµα UNIX (και πιο συγκεκριµένα η έκδοση αυτού

για συστήµατα προσωπικών υπολογιστών – LINUX), λόγω κυρίως της δεδοµένης

πληρότητας και αξιοπιστίας του σε βασικά ζητήµατα υποστήριξης πολυχρηστικών

και πολυδιεργασιακών περιβαλλόντων καθώς και της σχετικής απλότητας στην οποία

στηρίζεται η φιλοσοφία του.

Το βιβλίο αυτό είναι γραµµένο µε στόχο τη διευκόλυνση της εκµάθησης από από-

σταση, περιέχοντας αρκετά Παραδείγµατα και Ασκήσεις µεταβλητού, αυξανόµενου

βαθµού δυσκολίας. Στο σύνολό της, η εκµάθηση των θιγόµενων αντικειµένων και η

επίλυση των σχετικών Ασκήσεων ελπίζουµε να αποτελέσει µία εποικοδοµητική,

δηµιουργική και συνάµα ευχάριστη διαδικασία. Σε πολλά σηµεία ωστόσο, αναπό-

φευκτα καθώς πρόκειται για εργαστηριακό µάθηµα πρακτικής εξάσκησης, θα απαι-

τηθεί από µέρους σας η περαιτέρω εµβάθυνση στη σκέψη σας, η περιστασιακή υπο-

βοήθησή σας από την κατάλληλη βιβλιογραφία και η γενικότερη ανάπτυξη πρωτο-

βουλίας στις µεθόδους και στις τεχνικές που θα ακολουθήσετε, προκειµένου να επι-

τευχθεί το επιθυµητό αποτέλεσµα.

Βασίλης Γ. Μάµαλης

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 10

Page 11: Λειτουργικά Συστήματα

EÈÛ·ÁˆÁ‹

™ÎÔfi˜

Σκοπός του βιβλίου αυτού είναι η πληρέστερη δυνατή πρακτική εκµάθηση των βασι-

κότερων αρχών και λειτουργιών ενός µοντέρνου λειτουργικού συστήµατος µε ειδι-

κότερη εφαρµογή σε λειτουργικά συστήµατα τύπου UNIX και εργαλείο εκµάθησης

την πλέον δηµοφιλή τέτοιου είδους έκδοση για προσωπικούς υπολογιστές, το λει-

τουργικό σύστηµα LINUX.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει και φέρει εις πέρας ικανοποιητικό µέρος ή και το σύνολο των

Εργαστηριακών Ασκήσεων αυτού του βιβλίου, µε τη βοήθεια τόσο του διδάσκοντα όσο

και της επισυναπτόµενης βιβλιογραφίας, θα έχετε αποκοµίσει τα ακόλουθα οφέλη:

• θα µπορείτε να χρησιµοποιείτε πλήρως τη γραµµή εντολών και τη γλώσσα συγ-

γραφής scripts του LINUX, για να γράφετε και να εκτελείτε απλές εντολές και σύν-

θετα scripts στο κέλυφός του, και να διαχειρίζεστε µε αυτά αρχεία κειµένου και

εγγραφών, πόρους του συστήµατος κ.ά.

• θα µπορείτε να προσοµοιώνετε σε γλώσσα C τις βασικές λειτουργίες του πυρήνα

ενός στοιχειώδους λειτουργικού συστήµατος UNIX (χρονοδροµολόγηση διαδικα-

σιών, διαχείριση µνήµης κ.ά.).

• θα µπορείτε να προσοµοιώνετε σε γλώσσα C ένα στοιχειώδες υπολογιστικό σύστη-

µα µε µία υποθετική µηχανή, µία στοιχειώδη συµβολική γλώσσα (και γλώσσα µηχα-

νής) και ένα στοιχειώδες λειτουργικό σύστηµα.

• θα έχετε δοκιµάσει στην πράξη την απόδοση και θα έχετε κατανοήσει πληρέστερα

τη συµπεριφορά όλων των διαφορετικών αλγόριθµων χρονοδροµολόγησης διαδι-

κασιών και αντικατάστασης σελίδων, που διδαχθήκατε στη θεωρία του µαθήµατος.

• θα έχετε κατανοήσει τις προχωρηµένες δοµές και τεχνικές που χρησιµοποιούνται

για την ανάπτυξη (κώδικα) του πυρήνα ενός πραγµατικού λειτουργικού συστήµα-

τος (PCB structures, timers, δοµές, καταχωρητές ολίσθησης κ.ά.) και θα µπορεί-

τε να τις εφαρµόσετε.

1∫ ∂ º ∞ § ∞ π √

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 11

Page 12: Λειτουργικά Συστήματα

1 2 K E º A § A I O 1 : ∂ π ™ ∞ ° ø ° ∏

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Οι Εργαστηριακές Ασκήσεις Λειτουργικών Συστηµάτων (ΛΣ.) οι οποίες περιέχονται

στο βιβλίο αυτό έχουν ως βασικό τους αντικείµενο την πρακτική εξάσκηση και επαφή

µε λειτουργικά συστήµατα τύπου UNIX. To λειτουργικό αυτό σύστηµα έχει αποτελέ-

σει από τη γένεσή του έως και σήµερα το πιο δηµοφιλές λειτουργικό σύστηµα στο

χώρο των µεσαίας και µεγάλης κλίµακας υπολογιστικών συστηµάτων, ενώ επίσης

αποτελεί και το κατ’ εξοχήν χρησιµοποιούµενο εργαστηριακό εργαλείο για τον ακα-

δηµαϊκό τοµέα των ΛΣ (σε διάφορες µορφές του χρησιµοποιείται ως βάση εργαστη-

ριακής εκµάθησης ΛΣ σχεδόν σε όλα τα Πανεπιστήµια του κόσµου).

Στις µέρες µας δε, έχει συντελεστεί µία ραγδαία εξάπλωση λειτουργικών συστηµάτων

µορφής UNIX ακόµα και σε µικρής κλίµακας υπολογιστικά συστήµατα (PCs και LANs

προσωπικών υπολογιστών και τερµατικών σταθµών εργασίας), µε κύριο εκφραστή

τους το λειτουργικό σύστηµα LINUX. Σε αυτήν την (πιστότερη κατά πολλούς) µορφή

λειτουργικού συστήµατος τύπου UNIX, θα βασιστεί και η δική σας πρακτική εκµά-

θηση και επαφή µε το χώρο των λειτουργικών συστηµάτων στα πλαίσια της φοίτη-

σής σας στο Ελληνικό Ανοικτό Πανεπιστήµιο.

Πιο συγκεκριµένα, οι Εργαστηριακές Ασκήσεις οι οποίες παρουσιάζονται στα επό-

µενα κεφάλαια έχουν ως σκοπό να καλύψουν κατά τον πληρέστερο δυνατό βαθµό τα

δύο κυριότερα µέρη ενός λειτουργικού συστήµατος τύπου UNIX, το κέλυφός του

(shell) και τον πυρήνα (kernel) του.

Στο Kεφάλαιο 2 ξεκινά η πρακτική σας εξάσκηση µε το LINUX, µέσω µεταβλητού

βαθµού δυσκολίας Ασκήσεων προγραµµατισµού στο κέλυφος του λειτουργικού αυτού

συστήµατος. Οι βασικότερες εντολές και φίλτρα (grep, awk και sed) του κελύφους

ενός λειτουργικού συστήµατος τύπου UNIX, καθώς και µία σειρά από ευχάριστης και

παιδαγωγικής µορφής Ασκήσεις συγγραφής scripts σε αυτό επιλέχθηκαν µε σκοπό τη

δόµηση επαρκούς εµπειρίας χρήσης και διαχείρισης µεγάλης κλίµακας λειτουργικών

και υπολογιστικών συστηµάτων.

ŒÓÓÔȘ ÎÏÂȉȿ

• λειτουργικό σύστηµα τύπου UNIX

• λειτουργικό σύστηµα LINUX

• προγραµµατισµός στο κέλυφος

• γλώσσα συγγραφής scripts

• πυρήνας λειτουργικού συστήµατος

• προσοµοίωση λειτουργικού συστήµατος

• γλώσσα προγραµµατισµού C

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 12

Page 13: Λειτουργικά Συστήματα

Στο Kεφάλαιο 3, θα χρησιµοποιήσετε µία από τις πλέον δηµοφιλείς και οικείες σε

εσάς γλώσσες προγραµµατισµού (γλώσσα C), µε σκοπό την κατά το δυνατόν πιστό-

τερη εξοµοίωση (στα πλαίσια πάντοτε της διατήρησης του εργαστηριακού αυτού µαθή-

µατος στα επιτρεπόµενα επίπεδα δυσκολίας) µερικών από τους βασικότερους µηχα-

νισµούς ενός λειτουργικού συστήµατος τύπου UNIX (χρονοδροµολόγηση διαδικα-

σιών, διαχείριση µνήµης, διαχείριση εισόδου/εξόδου, συγχρονισµός διαδικασιών κ.ά.).

Στο Kεφάλαιο 4, θα κληθείτε, στηριζόµενοι στις επιµέρους συναρτήσεις εξοµοίωσης

λειτουργιών του πυρήνα που θα φτιάξετε στα πλαίσια του Kεφαλαίου 3, να ολοκλη-

ρώσετε την προσπάθειά σας αναπτύσσοντας ένα στοιχειώδες µεν από πλευράς δυνα-

τοτήτων, ολοκληρωµένο δε από πλευράς συνιστωσών λειτουργικό σύστηµα. Το λει-

τουργικό σύστηµα αυτό θα υποστηρίζει και θα διαχειρίζεται µία υποθετική µηχανή

στοιχειωδών δυνατοτήτων, την οποία επίσης θα προσοµοιώσετε, και θα µπορεί να

εκτελεί πραγµατικά πλέον προγράµµατα διεργασιών, τα οποία θα είναι γραµµένα σε

µία περιορισµένων δυνατοτήτων συµβολική γλώσσα.

Στο Kεφάλαιο 5 τέλος, θα έρθετε σε επαφή µε πραγµατικές υλοποιήσεις των παραπά-

νω βασικών µηχανισµών λειτουργικών συστηµάτων τύπου UNIX (και ειδικότερα του

LINUX), µε σκοπό να κατανοήσετε στην πραγµατική τους διάσταση τις βάσεις ανά-

πτυξης ενός πραγµατικού πυρήνα λειτουργικού συστήµατος και των υπηρεσιών που

αυτός προσφέρει. Οι Ασκήσεις σε αυτό το κεφάλαιο θα είναι κυρίως θεωρητικές (σχο-

λιασµός, συγκρίσεις, αυτοσχεδιασµός κ.ά.), η επαφή, όµως, µε τον πραγµατικό κώδι-

κα (σε γλώσσα C επίσης) ενός λειτουργικού συστήµατος θα αποτελέσει µε µεγάλη πιθα-

νότητα την πιο χρήσιµη πτυχή και εµπειρία του εργαστηριακού αυτού µαθήµατος.

Θα πρέπει να σηµειωθεί, επίσης, ότι η επισταµένη µελέτη της επισυναπτόµενης βιβλιο-

γραφίας αποτελεί βασική προϋπόθεση σωστής αντιµετώπισης όλων των παρατιθέ-

µενων Ασκήσεων, ενώ, επίσης θα σας βοηθήσει να καλύψετε πολλές ακόµα πτυχές

που αφορούν την πράξη στα λειτουργικά συστήµατα τύπου UNIX, πτυχές οι οποίες

δεν είναι δυνατόν να καλυφθούν στα πλαίσια ενός µόνο εργαστηριακού µαθήµατος,

όπως το παρόν.

1 3∂ π ™ ∞ ° ø ° π ∫ ∂ ™ ¶ ∞ ƒ∞∆ ∏ ƒ ∏ ™ ∂ π ™

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 13

Page 14: Λειτουργικά Συστήματα

1 4 K E º A § A I O 1 : ∂ π ™ ∞ ° ø ° ∏

Ως ελάχιστη προετοιµασία, πριν ασχοληθείτε λεπτοµερώς µε τις Ασκήσεις των

κεφαλαίων που ακολουθούν, προσπαθήστε να συγκεντρώσετε όσες περισσότερες

µπορείτε από τις βιβλιογραφικές αναφορές, οι οποίες συµπεριλαµβάνονται στο

τέλος του παρόντος βιβλίου, και αφιερώστε αρχικά τον απαραίτητο χρόνο για ένα

σύντοµο ξεφύλλισµά τους, κυρίως των κεφαλαίων και ενοτήτων αυτών που θα σας

χρειαστούν περισσότερο στη συνέχεια (το σύνολο της βιβλιογραφίας αυτής θα κλη-

θείτε να µελετήσετε αναλυτικά στα πλαίσια της ενασχόλησής σας µε τις Ασκήσεις

του κάθε κεφαλαίου χωριστά). Ιδιαίτερη έµφαση θα πρέπει να δοθεί συγκεκριµέ-

να στα παρακάτω κεφάλαια και ενότητες:

• Τα κεφάλαια του βιβλίου του µαθήµατος «Λειτουργικά Συστήµατα Ι» του

Ε.Α.Π. (το οποίο έχετε ήδη διδαχθεί – βιβλιογραφική αναφορά [6]), τα οποία

αναφέρονται στα ζητήµατα τεχνικών και αλγόριθµων Χρονοδροµολόγησης

Κ.Μ.Ε., ∆ιαχείρισης Μνήµης (σελιδοποίηση κ.ά.), Υποστήριξης Εικονικής Μνή-

µης (σφάλµατα αναφοράς σελίδων, αλγόριθµοι αντικατάστασης σελίδων κ.ά.),

∆ιαχείρισης Εισόδου–Εξόδου (προσπέλαση δίσκου κ.ά.) και Συγχρονισµού

(σηµαφόροι κ.ά.).

• Τα Kεφάλαια 3–5 της βιβλιογραφικής αναφοράς [1] και τα Kεφάλαια 2 και 3

της βιβλιογραφικής αναφοράς [3], σχετικά µε τον προγραµµατισµό στο κέλυ-

φος του UNIX (ή του LINUX).

• Τα Kεφάλαια 1–3 της βιβλιογραφικής αναφοράς [2] ως προκαταρκτικά και τα

Kεφάλαια 4–8 ως πιο προχωρηµένα, σχετικά µε τις γνώσεις προγραµµατισµού

στη γλώσσα C οι οποίες θα σας χρειαστούν.

• Τα Kεφάλαια 4–6, 7 και 9 της βιβλιογραφικής αναφοράς [5] και τα κεφάλαια

2,3 και 5 της βιβλιογραφικής αναφοράς [8], σχετικά µε τη θεωρία των µηχανι-

σµών χρονοδροµολόγησης διεργασιών, διαχείρισης µνήµης κ.λπ. των Unix–like

λειτουργικών συστηµάτων.

• Τα Kεφάλαια 2 και 4 της βιβλιογραφικής αναφοράς [4] και τα Kεφάλαια 3 και

4 της βιβλιογραφικής αναφοράς [7], σχετικά µε τις τεχνικές υλοποίησης των

βασικών λειτουργιών ενός λειτουργικού συστήµατος τύπου UNIX σε γλώσσα

C, τόσο σε επίπεδο πυρήνα, όσο και σε επίπεδο διασύνδεσης και επικοινωνίας

µε τους πόρους ενός πραγµατικού υπολογιστικού συστήµατος.

• Ανατρέξτε, επίσης, µέσω του Internet και ρίξτε µία σύντοµη µατιά στις επισυ-

ναπτόµενες URL διευθύνσεις σχετικά µε το σχεδιασµό και την υλοποίηση του

λειτουργικού συστήµατος Linux (βιβλιογραφική αναφορά [9]).

¢Ú·ÛÙËÚÈfiÙËÙ· 1.1

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 14

Page 15: Λειτουργικά Συστήματα

AÛ΋ÛÂȘ ¶ÚÔÁÚ·ÌÌ·ÙÈÛÌÔ‡ ÛÙÔ K¤Ï˘ÊÔ˜ ÙÔ˘ Linux

™ÎÔfi˜

Σκοπός του κεφαλαίου αυτού είναι η πρώτη επαφή και γνωριµία σας µε τις σηµαντι-

κότερες δυνατότητες εντολών και προγραµµατισµού τις οποίες προσφέρει το προ-

γραµµατιζόµενο κέλυφος ενός Unix–like λειτουργικού συστήµατος, µέσω προσεκτι-

κά σχεδιασµένης πρακτικής εξάσκησης στο κέλυφος του Linux (βασικές εντολές και

φίλτρα προγραµµατισµού σε αυτό).

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Προσπαθώντας να επιλύσετε και φέρνοντας τελικά σε πέρας ικανοποιητικό µέρος ή

και το σύνολο των Ασκήσεων προγραµµατισµού στο κέλυφος του Linux, οι οποίες

δίνονται σε αυτό το κεφάλαιο, θα έχετε πλέον τη δυνατότητα:

• να εκτελείτε εντολές διαχείρισης αρχείων στη γραµµή εντολών του Linux,

• να εκτελείτε εντολές παρακολούθησης διεργασιών στη γραµµή εντολών του Linux,

• να γράφετε και να εκτελείτε απλά και σύνθετα scripts χρησιµοποιώντας τη γλώσ-

σα συγγραφής scripts του Linux,

• να εφαρµόζετε τα φίλτρα grep και sed πάνω σε ένα αρχείο κειµένου για διόρθωση

και επεξεργασία,

• να εφαρµόζετε τα φίλτρα sed και awk πάνω σε σύνθετες ακολουθίες χαρακτήρων

και κανονικές εκφράσεις για επεξεργασία και µετατροπές,

• να εφαρµόζετε τα φίλτρα grep, sed και awk σε συνδυασµό µε άλλες εντολές του

κελύφους του Linux (π.χ. sort, date κ.ά.), για να δοµείτε και να διαχειρίζεστε κατα-

λόγους εγγραφών και αρχεία δεδοµένων,

• να γράφετε και να εκτελείτε σύνθετα scripts αναζήτησης των δικαιωµάτων πρό-

σβασης αρχείων.

ŒÓÓÔȘ ÎÏÂȉȿ

2∫ ∂ º ∞ § ∞ π √

• γραµµή εντολών

• διασωλήνωση εντολών (pipe)

• κέλυφος λειτουργικού συστήµατος

• αρχεία εισόδου/εξόδου

• αρχείο κειµένου

• αρχεία εγγραφών

• εντολές grep, egrep

• φίλτρα awk

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 15

Page 16: Λειτουργικά Συστήματα

1 6 K E º A § A I O 2 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ° ƒ∞ ª ª ∞∆ π ™ ª √ À ™ ∆ √ K ∂ § À º √ ™ ∆ √ À L I N U X

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Οι Ασκήσεις προγραµµατισµού στο κέλυφος του Linux που καλείστε να επιλύσετε στα

πλαίσια αυτού του κεφαλαίου αποτελούν την πρώτη και σηµαντικότερη επαφή σας µε

το λειτουργικό σύστηµα αυτό (και ταυτόχρονα µε τον ευρύτερο χώρο των λειτουργι-

κών συστηµάτων) τύπου UNIX αποσκοπώντας στην εκµάθηση των βασικών λει-

τουργιών χρήσης αυτού. Πρόκειται δε για µεταβλητού βαθµού δυσκολίας Ασκήσεις,

οι οποίες έχουν επιλεγεί µε τέτοιο τρόπο, ώστε να είναι δυνατή η βαθµιαία και ευχά-

ριστη κατά το δυνατόν επίλυσή τους µε απλή χρήση του προσωπικού σας υπολογιστή

και κατάλληλη µελέτη της απαραίτητης βιβλιογραφίας η οποία παρατίθεται στο τέλος

του κεφαλαίου.

Πιο συγκεκριµένα, στην πρώτη ενότητα (2.1) του κεφαλαίου αυτού θα έχετε την ευκαι-

ρία να εξασκηθείτε και να πειραµατιστείτε ταυτόχρονα µε τις βασικότερες εντολές και

φίλτρα (grep, awk και sed) του κελύφους του Linux, αποκτώντας κατ’ αυτόν τον

τρόπο µία σαφή και ολοκληρωµένη άποψη των µεγάλων δυνατοτήτων που δίνονται

σε ένα διαχειριστή (administrator) ενός λειτουργικού συστήµατος τύπου UNIX µέσω

ενός απλού συνόλου εντολών χαµηλού επιπέδου και χωρίς την ανάγκη κάποιας γλώσ-

σας προγραµµατισµού υψηλού επιπέδου.

Στη συνέχεια (ενότητα 2.2) ακολουθεί ένας αριθµός από ειδικά διαµορφωµένες σύν-

θετες ασκήσεις προγραµµατισµού στο κέλυφος του Linux (scripts), οι οποίες απαι-

τούν τη συνδυασµένη χρήση τόσο των απλών εντολών και φίλτρων της ενότητας 2.1

όσο και κάποιων επιπλέον προχωρηµένων ευκολιών που παρέχει το κέλυφος του

Linux (εντολές επανάληψης – βρόχοι κ.ά.), προσφέροντας έτσι τη δυνατότητα για τη

συγγραφή απλών αλλά ιδιαίτερα χρήσιµων εφαρµογών, όπως επεξεργασία και δια-

χείριση παραστάσεων, αρχείων κειµένου και εγγραφών κ.ά.

• φίλτρα sed

• σύνθετα scripts

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 16

Page 17: Λειτουργικά Συστήματα

2.1 EÓÙÔϤ˜ Î·È Ê›ÏÙÚ·: Grep, Sed & AWK

Τα φίλτρα «grep», «sed», και «awk», τα οποία αποτελούν και το βασικό αντικεί-

µενο των Ασκήσεων Αυτοαξιολόγησης και των ∆ραστηριοτήτων της ενότητας

αυτής, συνιστούν τα βασικά εργαλεία προγραµµατισµού στο κέλυφος οποιουδήπο-

τε Unix–like λειτουργικού συστήµατος. H εντολή «grep» αποτελεί ένα κλασικό

φίλτρο ιδιαίτερα χρήσιµο, για να φιλτράρουµε την έξοδο οποιουδήποτε προγράµ-

µατος στη µορφή που εµείς θέλουµε, το φίλτρο «sed» µπορεί να θεωρηθεί επιπλέ-

ον ως ένας ικανοποιητικός διορθωτής κειµένου, ενώ το «awk» που είναι και το πιο

ισχυρό αποτελεί ουσιαστικά µία µικρή γλώσσα προγραµµατισµού µε αρκετά χαρα-

κτηριστικά της γλώσσας C σε µικρογραφία. Μία αρκετά περιγραφική και αναλυτι-

κή αναφορά στη σηµασία και χρήση των παραπάνω φίλτρων καθώς και άλλων εντο-

λών του κελύφους του Linux που θα χρησιµοποιήσετε στα πλαίσια των επόµενων

Ασκήσεων (ls, ps, sort κ.ά.) µπορείτε να βρείτε στα Kεφάλαια 1,4 και 5 της βιβλιο-

γραφικής αναφοράς [1] και στα Kεφάλαια 3 και 4 της βιβλιογραφικής αναφοράς [2]

του παρόντος κεφαλαίου.

Αρχικά, σας δίνονται παρακάτω µερικές ενδεικτικές, ως προς τη χρήση των φίλτρων

«grep», «sed» και «awk», Ασκήσεις Αυτοαξιολόγησης µε σκοπό να αποκτήσετε

µία πρώτη επαφή και εξοικείωση µε την πρακτική συµπεριφορά αυτών, ενώ στη

συνέχεια παρατίθενται µία σειρά από αυξανόµενης δυσκολίας αντίστοιχες Εργα-

στηριακές Ασκήσεις (µέσω αντίστοιχων ∆ραστηριοτήτων), τις οποίες καλείστε να

επιλύσετε χρησιµοποιώντας κατάλληλα τα παραπάνω φίλτρα.

1 72 . 1 E ¡ ∆ √ § ∂ ™ ∫ ∞ π º π § ∆ ƒ∞ : G R E P, S E D & AW K

Πριν ξεκινήσετε την ενασχόλησή σας µε τις Ασκήσεις Αυτοαξιολόγησης και τις

∆ραστηριότητες που ακολουθούν, µελετήστε λεπτοµερώς και συµβουλευτείτε ως

οδηγούς για την επίλυσή τους τα Παραδείγµατα των ενοτήτων 4.1, 4.3 και 4.4 της

βιβλιογραφικής αναφοράς [1] καθώς επίσης και τα Παραδείγµατα των ενοτήτων

3.2, 3.5 και 3.6 της βιβλιογραφικής αναφοράς [2] του παρόντος κεφαλαίου.

¢Ú·ÛÙËÚÈfiÙËÙ· 2.1

∆ηµιουργήστε ένα αρχείο κειµένου (χρησιµοποιώντας τον editor vi), το οποίο θα

περιέχει δεκαπέντε (15) γραµµές της παρακάτω µορφής:

• 5 γραµµές οι οποίες θα περιέχουν κάπου το χαρακτήρα «%» ανάµεσα σε δύο

double quotes: Π.χ.: printf(“The answer is %d.”,x)

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.1

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 17

Page 18: Λειτουργικά Συστήματα

1 8 K E º A § A I O 2 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ° ƒ∞ ª ª ∞∆ π ™ ª √ À ™ ∆ √ K ∂ § À º √ ™ ∆ √ À L I N U X

• 5 γραµµές οι οποίες θα περιέχουν κάπου το χαρακτήρα «%», όχι, όµως, ανάµε-

σα σε δύο double quotes: Π.χ.: We offer a 25% discount for all

of our products

• 5 γραµµές οι οποίες δε θα περιέχουν πουθενά το χαρακτήρα «%». Π.χ.: This line

contains only alphabetic characters.

Αναµείξτε µεταξύ τους στο αρχείο τις 15 γραµµές που τελικά θα φτιάξετε και ονο-

µάστε το αρχείο σας «percent.txt».

• Γράψτε µία εντολή ggrreepp η οποία θα τυπώνει όλες τις γραµµές του παραπάνω

αρχείου που περιέχουν το χαρακτήρα «%» ανάµεσα σε δύο double quotes.

• Γράψτε µία εντολή ggrreepp η οποία θα τυπώνει όλες τις γραµµές του παραπάνω

αρχείου που δεν περιέχουν το χαρακτήρα «%».

∆ηµιουργήστε ένα αρχείο κειµένου «customers.txt» (χρησιµοποιώντας τον

editor vi), το οποίο θα περιέχει τα ονoµατεπώνυµα, τις ηλικίες, τις διευθύνσεις και

τους αριθµούς τηλεφώνου των πελατών µίας εταιρείας, σε ξεχωριστές γραµµές και

στην παρακάτω µορφή (προσέξτε τη σύνταξη της κάθε γραµµής – π.χ. το πρόθε-

µα της κάθε γραµµής, πώς διαχωρίζονται τα πεδία της κάθε γραµής κ.ά.):

ñ Basileios Mamalis

Age 29

Address Eyripidou 2, Ano Xaraygi, 17236, Dafni, Athina

Phone 01–9738383

ñ Nikolaos Papadopoulos

Age 76

Address Filolaou 45, Pagkrati, 17564, Athina

Phone 01–6854321

(συµπληρώστε τα στοιχεία για 5–10 ακόµη πελάτες διάφορων ηλικιών µόνοι σας)

• Γράψτε µία εντολή sed η οποία θα τυπώνει στην οθόνη µόνο τις γραµµές εκεί-

νες του αρχείου που περιέχουν τις διευθύνσεις των πελατών (υποθέστε ότι θέλου-

µε να δούµε από ποια περιοχή είναι οι περισσότεροι πελάτες της εταιρείας).

∞ÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.2

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 18

Page 19: Λειτουργικά Συστήματα

1 92 . 1 E ¡ ∆ √ § ∂ ™ ∫ ∞ π º π § ∆ ƒ∞ : G R E P, S E D & AW K

• Γράψτε µία εντολή sed η οποία θα µετατρέπει το παραπάνω αρχείο έτσι, ώστε

να περιέχονται σε αυτό µόνο τα ονοµατεπώνυµα των πελατών της εταιρείας.

Θεωρήστε και εδώ την ύπαρξη του αρχείου της προηγούµενης άσκησης (αρχείο

«customers.txt» – Άσκηση Αυτοαξιολόγησης 2.2), όπως ήταν στην αρχική του

πλήρη µορφή, και επεµβαίνοντας σ’ αυτό αλλάξτε τα πεδία των ηλικιών µερικών

πελατών, έτσι ώστε οι περισσότεροι πελάτες να έχουν ηλικία µεγαλύτερη των 18 ετών.

• Γράψτε ένα awk script το οποίο θα µετρά τον αριθµό των ενήλικων πελατών

(ηλικία τουλάχιστον 18 ετών), για τους οποίους υπάρχουν στοιχεία στο αρχείο,

και θα τυπώνει τον τελικό αριθµό αυτών στην οθόνη.

• Για την ευκολότερη συγγραφή του παραπάνω script, δώστε ιδιαίτερη προσοχή

στο γεγονός ότι τα πεδία κάθε γραµµής διαχωρίζονται µεταξύ τους µε απλά κενά.

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.3

∆ηµιουργήστε ένα αρχείο κειµένου «basket.txt» (χρησιµοποιώντας τον editor

vi) το οποίο θα περιέχει 15 γραµµές της παρακάτω µορφής:

ñ 27–11–1965:Fasoulas, Panagiotis:97

ñ 03–05–1974:Alvertis, Fragiskos J.:27

ñ 12–01–1973:Sigalas, Giorgos K.:32

ñ 13–12–1962:Giannakis, Panagiotis:91

ñ 25–08–1973:Oikonomou, Nikolaos:74

• (συµπληρώστε τις υπόλοιπες 10 γραµµές µόνοι σας),

όπου κάθε γραµµή αντιστοιχεί σε έναν Έλληνα αθλητή της καλαθοσφαίρισης και

περιέχει (α) την ηµεροµηνία γέννησής του, (β) το όνοµά του και (γ) τον αριθµό

συµµετοχών του στην εθνική οµάδα καλαθοσφαίρισης (τα πεδία µεταξύ τους δια-

χωρίζονται µε το χαρακτήρα «:»). Συµπληρώστε τις γραµµές που υπολείπονται µε

ό,τι δεδοµένα θέλετε – πραγµατικά ή µή – αρκεί ο αριθµός συµµετοχών να κυµαί-

νεται ισοσκελισµένα µεταξύ 0 και 100.

• Γράψτε µία εντολή egrep η οποία θα τυπώνει µόνο τις γραµµές του παραπάνω

¢Ú·ÛÙËÚÈfiÙËÙ· 2.2

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 19

Page 20: Λειτουργικά Συστήματα

2 0 K E º A § A I O 2 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ° ƒ∞ ª ª ∞∆ π ™ ª √ À ™ ∆ √ K ∂ § À º √ ™ ∆ √ À L I N U X

αρχείου που αντιστοιχούν σε καλαθοσφαιριστές µε 70 και πάνω συµµετοχές

στην εθνική οµάδα.

• Γράψτε µία εντολή egrep η οποία θα τυπώνει µόνο τις γραµµές του παραπάνω

αρχείου που αντιστοιχούν σε καλαθοσφαιριστές µε 74 και πάνω συµµετοχές

στην εθνική οµάδα.

∆ηµιουργήστε ένα αρχείο «numbers.txt» (χρησιµοποιώντας τον editor vi), το

οποίο θα περιέχει ένα τυχαίο πλήθος πραγµατικών αριθµών (όλους σε µία µόνο

γραµµή µε κενά ανάµεσά τους), όπως για παράδειγµα:

ñ 3.01 65 76.0 6.9801 4.0000 5.000007 54.0000000 6.00 7.

8.004 15.0

Γράψτε µία εντολή sed η οποία θα αντικαθιστά όλους τους αριθµούς του παραπά-

νω αρχείου, της µορφής «X.0[0*](<όχι_ψηφίο>|<τέλος_γραµµής>)» (X: ακέ-

ραιος αριθµός), µε τον αντίστοιχο ακέραιο µόνο χωρίς την τελεία και τα µηδενικά.

Για παράδειγµα, η γραµµή ακεραίων του παραπάνω Παραδείγµατος θα πρέπει να

πάρει τη µορφή:

ñ 3.01 65 76 6.9801 4 5.000007 54 6 7. 8.004 15

• Εξηγήστε µε απλά λόγια τι σηµαίνει η παραπάνω κανονική παράσταση και τι

ακριβώς κάνει η εντολή sed που σας ζητείται, δίνοντας έµφαση σε ειδικές περι-

πτώσεις που φαινοµενικά θα έπρεπε να ικανοποιούνται, αλλά κάτι τέτοιο δε συµ-

βαίνει (π.χ. παρατηρήστε την περίπτωση του 7. στο παραπάνω Παράδειγµα).

• Επαναλάβετε την Άσκηση χρησιµοποιώντας δύο (2) εντολές sed, οι οποίες επι-

κοινωνούν µέσω ενός pipe.

• ∆οκιµάστε και δείξτε την ορθότητα της εντολής που θα φτιάξετε, τόσο για το

παραπάνω Παράδειγµα, όσο και για άλλα 2 δικά σας Παραδείγµατα, τα οποία

θα περιέχουν ειδικές (κατά την κρίση σας) περιπτώσεις.

¢Ú·ÛÙËÚÈfiÙËÙ· 2.3

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 20

Page 21: Λειτουργικά Συστήματα

2 12 . 1 E ¡ ∆ √ § ∂ ™ ∫ ∞ π º π § ∆ ƒ∞ : G R E P, S E D & AW K

∆ηµιουργήστε ένα αρχείο «sed_test.txt» (χρησιµοποιώντας τον editor vi), το

οποίο θα περιέχει αρκετές λέξεις/φράσεις σε «double quotes», όπως αυτό που ακο-

λουθεί:

ñ Here is a “testfile” for “trying out”

the sed “problem”

that was “given” to this “class” the other “day”

with the hope that they would overcome

the various “difficulties” including

“”

lines with no quote marks at all.

Γράψτε µία εντολή sed, η οποία θα διαγράφει όλους τους χαρακτήρες µέχρι το

πρώτο «double quote» (εξαιρουµένου αυτού) σε κάθε γραµµή του παραπάνω

αρχείου.

Π.χ. το αρχείο που δόθηκε ως Παράδειγµα παραπάνω θα πρέπει να πάρει την παρα-

κάτω µορφή:

ñ “testfile” for “trying out”

“problem”

“given” to this “class” the other “day”

(κενή γραµµή)

“difficulties” including

“”

(κενή γραµµή)

¢Ú·ÛÙËÚÈfiÙËÙ· 2.4

Θεωρήστε το αρχείο–αποτέλεσµα της προηγούµενης ∆ραστηριότητα 2.4 ως το

αρχείο εισόδου για την παρούσα Άσκηση.

Γράψτε µία εντολή sed, η οποία θα λαµβάνει ως είσοδο το παραπάνω αρχείο και

¢Ú·ÛÙËÚÈfiÙËÙ· 2.5

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 21

Page 22: Λειτουργικά Συστήματα

2 2 K E º A § A I O 2 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ° ƒ∞ ª ª ∞∆ π ™ ª √ À ™ ∆ √ K ∂ § À º √ ™ ∆ √ À L I N U X

θα διαγράφει τα πάντα εκτός από τις λέξεις/φράσεις που βρίσκονται ανάµεσα σε

«double quotes» και τις κενές γραµµές.

Π.χ. το αποτέλεσµα για το αρχείο εξόδου της προηγούµενης Άσκησης θα πρέπει

να έχει την παρακάτω µορφή:

ñ “testfile”“trying out”

“problem”

“given” “class” “day”

(κενή γραµµή)

“difficulties”

“”

(κενή γραµµή)

Τροποποιήστε τη εντολή sed που φτιάξατε κατά την προηγούµενη ∆ραστηριότη-

τα 2.5 έτσι, ώστε να διαγράφονται και οι κενές γραµµές. ∆ηλαδή, το αντίστοιχο

αποτέλεσµα για το αρχείο εξόδου της Άσκησης 5 θα πρέπει να έχει πλέον τη

µορφή:

ñ “testfile”“trying out”

“problem”

“given” “class” “day”

“difficulties”

“”

¢Ú·ÛÙËÚÈfiÙËÙ· 2.6

∆ηµιουργήστε ένα αρχείο κειµένου «life.txt» (χρησιµοποιώντας τον editor vi),

το οποίο θα περιέχει 15 γραµµές της παρακάτω µορφής:

ñ Byron:1788:1824

ñ Yansen:1832:1896

¢Ú·ÛÙËÚÈfiÙËÙ· 2.7

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 22

Page 23: Λειτουργικά Συστήματα

2 32 . 1 E ¡ ∆ √ § ∂ ™ ∫ ∞ π º π § ∆ ƒ∞ : G R E P, S E D & AW K

∆ηµιουργήστε ένα αρχείο κειµένου «address.txt» (χρησιµοποιώντας τον editor

vi), το οποίο θα περιέχει τα ονόµατα και τις διευθύνσεις 5 φίλων σας, δεσµεύοντας

3 γραµµές για καθέναν από αυτούς. Π.χ.:

• Papadopoulos Nikos

Eyripidou 2, Ano Xaraygi

17236, Dafni, Athina

ñ Papapetrou Giorgos

Filolaou 45, Pagkrati

17564, Athina

• (συµπληρώστε τα στοιχεία για 3 ακόµη φίλους σας µόνοι σας)

Γράψτε ένα awk script το οποίο θα µετατρέπει το παραπάνω αρχείο σε τέτοια

µορφή, ώστε τα στοιχεία (όνοµα, διεύθυνση) κάθε φίλου σας να περιέχονται σε 1

µόνο γραµµή αντί για 3 και να διαχωρίζονται µεταξύ τους µε το χαρακτήρα «:».

Για παράδειγµα, τα στοιχεία του πρώτου φίλου σας (όπως δίνονται παραπάνω) θα

πρέπει να συµπτυχθούν στη µορφή:

¢Ú·ÛÙËÚÈfiÙËÙ· 2.8

ñ Berthold:1912:1950

ñ Damiani:1767:1799

ñ Kraislov:1854:1912

• (συµπληρώστε τις υπόλοιπες 10 γραµµές µόνοι σας),

όπου κάθε γραµµή αντιστοιχεί σε έναν (τυχαίο) άνθρωπο που έχει αποβιώσει και

περιέχει (α) το όνοµά του, (β) τη χρονολογία γέννησής του και (γ) τη χρονολογία

θανάτου του (τα πεδία µεταξύ τους διαχωρίζονται µε το χαρακτήρα « :»). Συµπλη-

ρώστε τις γραµµές που υπολείπονται µε ό,τι δεδοµένα θέλετε, αρκεί το έτος θανά-

του να είναι µεγαλύτερο του έτους γεννήσεως και η διαφορά να κυµαίνεται ισο-

σκελισµένα µεταξύ 15 και 90.

Γράψτε µία εντολή awk η οποία θα τυπώνει µόνο τις γραµµές του παραπάνω αρχεί-

ου που αντιστοιχούν σε ανθρώπους που έζησαν λιγότερο από 40 χρόνια.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 23

Page 24: Λειτουργικά Συστήματα

2 4 K E º A § A I O 2 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ° ƒ∞ ª ª ∞∆ π ™ ª √ À ™ ∆ √ K ∂ § À º √ ™ ∆ √ À L I N U X

Papadopoulos Nikos:Eyripidou 2, Ano Xaraygi:17236, Dafni,

Athina

Επισηµαίνεται ότι το αρχείο εξόδου (το αποτέλεσµα της εκτέλεσης του awk script

που θα φτιάξετε) δε θα πρέπει να περιέχει κενές γραµµές.

∆ηµιουργήστε ένα αρχείο κειµένου «votes.txt» (χρησιµοποιώντας τον editor

vi), το οποίο θα περιέχει 10 γραµµές της παρακάτω µορφής:

ñ Avramopoulos:Athina:y:n:y:y:y:n:n:y:n:n:n:n:y

ñ Karavolas:Patra:y:n:n:y:y:n:y:y:n

ñ Kosmopoulos:Thessaloniki:n:y:n:n:y:y:y:y

ñ Sarantopoulos:Dafni:n:n:n:y:n

ñ (Û˘ÌÏËÚÒÛÙ ÙȘ ˘fiÏÔȘ ÁÚ·Ì̤˜ ÌfiÓÔÈ Û·˜),

όπου κάθε γραµµή αντιστοιχεί σε έναν υποψήφιο δήµαρχο και περιέχει (α) το

όνοµά του, (β) το δήµο στον οποίο είναι υποψήφιος και (γ) τις θετικές («y») και

αρνητικές («n») ψήφους τις οποίες έλαβε κατά τις εκλογές. Ο αριθµός και η σειρά

των ψήφων (των «y» και «n» σε κάθε γραµµή, δηλαδή) µπορεί να διαφέρει κατά

τυχαίο τρόπο, όπως φαίνεται και από τις γραµµές που δίνονται ως Παράδειγµα.

Συµπληρώστε τις γραµµές που υπολείπονται µε ό,τι δεδοµένα θέλετε, αρκεί όλα

τα πεδία να διαχωρίζονται µεταξύ τους µε το χαρακτήρα «:».

Γράψτε ένα awk script το οποίο θα τυπώνει για κάθε γραµµή του παραπάνω αρχεί-

ου µία αντίστοιχη γραµµή µε (α) το όνοµά του, (β) το δήµο του και (γ) τον αριθµό

των θετικών ψήφων («y») που έχει λάβει.

Για παράδειγµα, η έξοδος για την πρώτη γραµµή του παραπάνω αρχείου θα πρέ-

πει να έχει την παρακάτω µορφή:

ñ Avramopoulos:Athina:6

¢Ú·ÛÙËÚÈfiÙËÙ· 2.9

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 24

Page 25: Λειτουργικά Συστήματα

2.2 ™˘ÁÁÚ·Ê‹ Û‡ÓıÂÙˆÓ Scripts

Στη συνέχεια και έχοντας πάντα ως βάση τα φίλτρα «grep», «sed» και «awk» µε

τη χρήση των οποίων εξοικειωθήκατε σε ικανοποιητικό βαθµό στα πλαίσια των

Ασκήσεων Αυτοαξιολόγησης της προηγούµενης ενότητας, καλείστε να επιλύσετε

µερικές υψηλότερου επιπέδου ασκήσεις προγραµµατισµού στο κέλυφος του Linux,

οι οποίες απαιτούν τη συνδυασµένη χρήση τόσο των παραπάνω φίλτρων και εντο-

λών, όσο και πιο προχωρηµένων δοµών προγραµµατισµού στο κέλυφος, όπως επα-

ναληπτικές δοµές (π.χ. «for»), εντολές αλλαγής ροής (π.χ. «if»), µεταβλητές και

πίνακες κ.ά. Η προσεκτική µελέτη των Kεφαλαίων 4 και 5 της βιβλιογραφικής ανα-

φοράς [1], καθώς επίσης και του Kεφαλαίου 4 της βιβλιογραφικής αναφοράς [2] του

παρόντος κεφαλαίου θα σας βοηθήσει να κατανοήσετε σε µεγάλο βαθµό τη χρήση

τέτοιου είδους προχωρηµένων δοµών και εντολών και τις δυνατότητες που προ-

σφέρουν για τη συγγραφή σύνθετων, υψηλού επιπέδου και γενικού σκοπού scripts

στο κέλυφος του Linux.

Σε πλήρη αντιστοιχία µε τη δοµή της προηγούµενης ενότητας, καλείστε αρχικά και

εδώ να αποκτήσετε µία πρώτη επαφή µε τον τρόπο συγγραφής σύνθετων scripts µέσω

των σχετικών Ασκήσεων Αυτοαξιολόγησης που σας δίνονται, µε σκοπό στη συνέ-

χεια να προχωρήσετε οµαλά στην επίλυση των Εργαστηριακών Ασκήσεων συγγρα-

φής σύνθετων scripts που ακολουθούν στα πλαίσια αντίστοιχων ∆ραστηριοτήτων.

2 52 . 2 ™ À ° ° ƒ∞ º ∏ ™ À ¡ £ ∂ ∆ ø ¡ S C R I P T S

Πριν ξεκινήσετε την ενασχόλησή σας µε τις Ασκήσεις Αυτοαξιολόγησης και τις

∆ραστηριότητες που ακολουθούν, µελετήστε λεπτοµερώς και συµβουλευτείτε ως

οδηγούς για την επίλυσή τους τα Παραδείγµατα των ενοτήτων 3.8 και 4.1 της

βιβλιογραφικής αναφοράς [1] καθώς επίσης και τα Παραδείγµατα των ενοτήτων

2.4 και 3.2 της βιβλιογραφικής αναφοράς [2] του παρόντος κεφαλαίου.

¢Ú·ÛÙËÚÈfiÙËÙ· 2.10

Θεωρήστε την ύπαρξη του αρχείου «customers.txt» της Άσκησης Αυτοαξιο-

λόγησης 2.2, όπως ήταν στην αρχική του πλήρη µορφή, και επεµβαίνοντας σ’ αυτό

προσθέστε, για τους σκοπούς της Άσκησης, γραµµές/στοιχεία για µερικούς ακόµα

(4–5) πελάτες.

Γράψτε ένα σύνθετο script το οποίο θα µετρά τον αριθµό των πελατών για τους

οποίους υπάρχουν στοιχεία στο αρχείο και θα τυπώνει στην οθόνη:

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.4

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 25

Page 26: Λειτουργικά Συστήματα

2 6 K E º A § A I O 2 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ° ƒ∞ ª ª ∞∆ π ™ ª √ À ™ ∆ √ K ∂ § À º √ ™ ∆ √ À L I N U X

• τα ονοµατεπώνυµα όλων των πελατών σε ξεχωριστές γραµµές

• το συνολικό αριθµό των εγγραφών πελατών στο αρχείο.

Η εκτύπωση του συνολικού αριθµού εγγραφών στο αρχείο θα πρέπει να συνοδεύ-

εται και από κατάλληλο διαγνωστικό µήνυµα (π.χ. «Number of customers

records = …»)

Θεωρήστε και εδώ την ύπαρξη του αρχείου «customers.txt» της Άσκησης

Αυτοαξιολόγησης 2.2, όπως ήταν στην αρχική του πλήρη µορφή, και επεµβαίνο-

ντας σ’ αυτό αλλάξτε τα πεδία των ηλικιών µερικών πελατών, έτσι ώστε οι περισ-

σότεροι πελάτες να έχουν ηλικία µεγαλύτερη των 50 ετών.

Γράψτε ένα σύνθετο script το οποίο θα βρίσκει όλους τους υπερήλικες πελάτες

της εταιρείας (ηλικία άνω των 50 ετών) και θα τυπώνει στην οθόνη τους τρεις (3)

µεγαλύτερους από αυτούς σε ηλικία στην παρακάτω µορφή:

• ταξινοµηµένους σε φθίνουσα σειρά (το µεγαλύτερο πρώτα)

• για κάθε έναν από αυτούς θα τυπώνεται µόνο το επώνυµό του και η ηλικία του.

Για την ευκολότερη συγγραφή του παραπάνω script δώστε ιδιαίτερη προσοχή και

αξιοποιήστε κατάλληλα τα παρακάτω στοιχεία/οδηγίες:

• τα πεδία κάθε γραµµής διαχωρίζονται µεταξύ τους µε απλά κενά,

• είναι αυστηρά καθορισµένη η σειρά εµφάνισης των γραµµών/στοιχείων κάθε

πελάτη στο αρχείο,

• έχετε τη δυνατότητα χρήσης ενός ή περισσότερων «pipes».

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘2.5

Φροντίστε αρχικά ώστε ο τρέχων κατάλογός σας να περιέχει αρκετά αρχεία (του-

λάχιστον 10–15), τα οποία θα έχουν διαφορετικά µεταξύ τους δικαιώµατα πρό-

σβασης για τους υπόλοιπους χρήστες (π.χ. read/write για όλους, µόνο read ή τίπο-

τε από τα δύο).

Γράψτε ένα ssccrriipptt ««wwoorrlldd»» το οποίο βρίσκει όλα τα αρχεία του τρέχοντος κατα-

λόγου για τα οποία υπάρχει δικαίωµα ανάγνωσης (read) από όλους τους χρήστες.

¢Ú·ÛÙËÚÈfiÙËÙ· 2.11

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 26

Page 27: Λειτουργικά Συστήματα

2 72 . 2 ™ À ° ° ƒ∞ º ∏ ™ À ¡ £ ∂ ∆ ø ¡ S C R I P T S

Η εντολή «ggrreepp pattern files», όπως γνωρίζετε, αναζητά το πρότυπο

«pattern» που εισάγει ο χρήστης µέσα στα προκαθοριζόµενα (επίσης από το

χρήστη) «files» και τυπώνει στην οθόνη τις γραµµές (µαζί µε το αρχείο στο

οποίο βρίσκεται η κάθε σχετική γραµµή) στις οποίες συναντάται αυτό το

«pattern».

Υλοποιήστε µε ένα shell script µία αντίστοιχη εντολή «ccoonntteexxtt pattern

files», η οποία θα λειτουργεί γενικά όπως η grep, επιπλέον, όµως, θα τυπώνει

όχι µόνο κάθε γραµµή (και το αντίστοιχο αρχείο) στην οποία βρέθηκε το συγκε-

κριµένο «pattern», αλλά, επίσης, και τις πέντε (5) προηγούµενες και τις πέντε

(5) επόµενες από αυτή γραµµή στο ίδιο αρχείο.

¢Ú·ÛÙËÚÈfiÙËÙ· 2.12

Τα αρχεία αυτά θα πρέπει στη συνεχεία να τυπώνονται στην οθόνη ως εξής:

Αν υπάρχουν τέτοιου είδους αρχεία, θα εµφανίζεται αρχικά η ακόλουθη γραµµή:

«The following files in the current directory are

world–readable:»

και στη συνέχεια θα εµφανίζονται τα ονόµατα (µόνο) των ευρεθέντων αρχείων, ένα

σε κάθε γραµµή. Π.χ.:

basket.txt

votes.txt

address.txt

κ.λπ.

Αν δεν υπάρχουν τέτοιου είδους αρχεία, θα εµφανίζονται οι ακόλουθες γραµµές:

«The following files in the current directory are

world–readable:»

«No files are world–readable»

∆οκιµάστε το script που θα φτιάξετε στον τρέχοντα κατάλογό σας, τόσο στη µορφή

που θα βρίσκεται αρχικά, όσο και κατόπιν διαµόρφωσής του (µε µία κατάλληλη

εντολή chmod), ώστε να µην υπάρχει κανένα «world–readable» αρχείο σε αυτόν.

Οποιαδήποτε λύση θα θεωρηθεί αποδεκτή. Ωστόσο θα αξιολογηθούν ευνοϊκότερα

λύσεις που θα αποτελούνται από τρεις ή/και λιγότερες γραµµές κώδικα.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 27

Page 28: Λειτουργικά Συστήματα

2 8 K E º A § A I O 2 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ° ƒ∞ ª ª ∞∆ π ™ ª √ À ™ ∆ √ K ∂ § À º √ ™ ∆ √ À L I N U X

Εάν δεν υπάρχουν 5 προηγούµενες ή 5 επόµενες γραµµές αλλά λιγότερες, τότε θα τυπώνονται όσες

υπάρχουν (αρχίζοντας από την πρώτη γραµµή του αρχείου στην πρώτη περίπτωση και τερµατίζοντας

στην τελευταία γραµµή του αρχείου στη δεύτερη).

Σε κάθε περίπτωση θα πρέπει, επίσης, να τυπώνεται πριν από τις αντίστοιχες γραµµές κάθε αρχείου

που βρέθηκαν σχετικές το όνοµα του αρχείου καθώς και το διάστηµα το οποίο καταλαµβάνουν µέσα

στο αρχείο (µε αριθµούς γραµµών).

Για παράδειγµα, η έξοδος της εκτέλεσης του script «ccoonntteexxtt while *.txt», η οποία ψάχνει τη

λέξη «while» µέσα σε όλα τα αρχεία κειµένου του τρέχοντος καταλόγου, µπορεί να έχει µεταξύ

άλλων µία από τις παρακάτω µορφές:

Εννοιολογικά, ο σκοπός ύπαρξης ενός script, όπως το παραπάνω, είναι να τυπώνονται σε κάθε περί-

πτωση όχι µόνο οι γραµµές εύρεσης ενός προτύπου (pattern) αλλά και τα «συµφραζόµενα» αυτών για

καλύτερη και πληρέστερη πληροφόρηση του χρήστη.

Για να δοκιµάσετε σωστά το script που θα φτιάξετε, δηµιουργήστε κατάλληλα αρχεία ελέγχου τα

οποία θα καλύπτουν όλες τις περιπτώσεις (π.χ. φτιάξτε τουλάχιστον 5 µικρά αρχεία κειµένου – «.txt»

αρχεία κειµένου µε τον editor vi και τυχαία δεδοµένα ανάλογα του παραπάνω Παραδείγµατος – εκ

των οποίων σε ένα θα υπάρχουν και 5 επόµενες και 5 προηγούµενες γραµµές, στο δεύτερο θα συνα-

ντάται το πρότυπο στην πρώτη γραµµή, στο τρίτο θα συναντάται στην τελευταία γραµµή, στο τέταρ-

το δε θα υπάρχουν 5 γραµµές ούτε πριν ούτε µετά και στο πέµπτο θα συναντάται το πρότυπο σε 2 δια-

φορετικές γραµµές µε 5 επόµενες και 5 προηγούµενες γραµµές και στις δύο περιπτώσεις).

— notes1.txt lines 1 to 5 —

...............................(first line)

..............................(line 2)

..............................(line 3)

while finish!=FALSE do

..............................(last line)

— notes2.txt lines 1 to 8 —

...............................(first line)

..............................(line 2)

while (x+y)<=(k+1) do

..............................(line 4)

..............................(line 5)

..............................(line 6)

..............................(line 7)

..............................(line 8)

— notes3.txt lines 22 to 32 —

..............................(line 22)

..............................(line 23)

..............................(line 24)

..............................(line 25)

..............................(line 26)

while counter> = (x+1) do

..............................(line 28)

..............................(line 29)

..............................(line 30)

..............................(line 31)

..............................(line 32)

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 28

Page 29: Λειτουργικά Συστήματα

2 92 . 2 ™ À ° ° ƒ∞ º ∏ ™ À ¡ £ ∂ ∆ ø ¡ S C R I P T S

Τροποποιήστε το sshheellll ssccrriipptt που υλοποιήσατε στα πλαίσια της προηγούµενης ∆ραστηριότητας,

έτσι ώστε να δέχεται µία παράµετρο «–w», η οποία θα καθορίζει τον αριθµό των επιπλέον γραµµών

που θα τυπώνονται πριν και µετά τη γραµµή που περιέχει το ζητούµενο πρότυπο. Για την περίπτωση

που ο χρήστης κατά την κλήση του script δε χρησιµοποιεί την παράµετρο «–w», η εξ ορισµού τιµή

των γραµµών που θα τυπώνονται επιπλέον πρέπει να είναι πέντε (5). Για παράδειγµα, αν η εντολή του

Παραδείγµατος της προηγούµενης Άσκησης ήταν «ccoonntteexxtt while *.txt –w 2» αντί για

«ccoonntteexxtt while *.txt», τότε οι αντίστοιχες έξοδοι θα είχαν πλέον την παρακάτω µορφή:

∆οκιµάστε την ορθότητα του script που θα φτιάξετε, κατά τρόπο ανάλογο µε αυτόν που ζητείται και για

την προηγούµενη ∆ραστηριότητα (µέσω µικρών αρχείων κειµένου για διάφορες ειδικές περιπτώσεις)

— notes1.txt lines 2 to 5 —

. . . . . . . . . . . . . . . (line 2)

. . . . . . . . . . . . . . . (line 3)

while finish!=FALSE do

. . . . . . . . . . . . . . . . . (last line)

— notes2.txt lines 1 to 5 —

. . . . . . . . . . . . . . . . . . . . . . (first line)

. . . . . . . . . . . . . . . . . . . . . (line 2)

while (x+y)<=(k+1) do

. . . . . . . . . . . . . . . . . . . . . (line 4)

. . . . . . . . . . . . . . . . . . . . . (line 5)

— notes3.txt lines 25 to 29 —

. . . . . . . . . . . . . . . . . . . . (line 25)

. . . . . . . . . . . . . . . . . . . . (line 26)

while counter>=(x+1) do

. . . . . . . . . . . . . . . . . . . . (line 28)

. . . . . . . . . . . . . . . . . . . . (line 29)

¢Ú·ÛÙËÚÈfiÙËÙ· 2.13

Υποθέστε ότι διατηρείτε µέσα στο λογαριασµό σας ένα αρχείο «phonebook.txt» µε

τα τηλέφωνα όλων των γνωστών και φίλων σας στην παρακάτω µορφή:

ñ Aleksandra:976–5612

ñ Andrianna:345–8756

ñ Basilis:876–9876

ñ Nikos:975–7232

• (συµπληρώστε µόνοι σας µέχρι τουλάχιστον 10 γραµµές)

Κάθε γραµµή του αρχείου αντιστοιχεί σε ένα γνωστό σας και περιέχει το µικρό του

όνοµα και το τηλέφωνό του, διαχωρισµένα µε το χαρακτήρα « :».

Για τη διευκόλυνσή σας στην περίπτωση που θέλετε να προσθέσετε το όνοµα και

το τηλέφωνο κάποιου νέου φίλου σας, αποφασίζετε να φτιάξετε µία εντολή

«aaddddpphhoonnee name number» η οποία:

¢Ú·ÛÙËÚÈfiÙËÙ· 2.14

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 29

Page 30: Λειτουργικά Συστήματα

3 0 K E º A § A I O 2 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ° ƒ∞ ª ª ∞∆ π ™ ª √ À ™ ∆ √ K ∂ § À º √ ™ ∆ √ À L I N U X

• ∆ε θα κάνει τίποτα, εάν το «name» περιέχεται ήδη στο αρχείο,

• θα εισάγει κανονικά τα δεδοµένα του νέου φίλου σας σε άλλη περίπτωση.

Για να µπορείτε, όµως, να αναζητείτε, (κάθε φορά που χρειάζεται) πιο εύκολα και

γρήγορα το τηλέφωνο ενός γνωστού σας µέσα σε αυτό το αρχείο, πρέπει να φρο-

ντίζετε να είναι πάντοτε ταξινοµηµένο κατά αλφαβητική σειρά.

Υλοποιήστε την παραπάνω εντολή και δοκιµάστε τη στο παραπάνω Παράδειγµα.

∆ηµιουργήστε µόνοι σας ένα αρχείο τουλάχιστον 10 γραµµών και αλφαβητικά

ταξινοµηµένο και δοκιµάστε να εισάγετε 3 νέους φίλους σας – έναν που το όνοµά

του θα πρέπει αλφαβητικά να µπει στην αρχή, έναν που το όνοµά του θα πρέπει να

µπει στο τέλος και έναν που το όνοµά του θα πρέπει να µπει κάπου ενδιάµεσα.

Για τη διατήρηση της αλφαβητικής ταξινόµησης του αρχείου, µπορείτε να χρησι-

µοποιήσετε την εντολή ssoorrtt ––oo.

Υλοποιήστε µία συνάρτηση sseettaallll, η οποία µπορεί να δέχεται ως όρισµα έναν

οποιονδήποτε αριθµό από ζεύγη παραµέτρων και συµπεριφέρεται ως εξής:

Για κάθε ζεύγος παραµέτρων της, καταχωρεί (αντιστοιχεί) στην πρώτη παράµετρο

ως τιµή της τη δεύτερη παράµετρο. Για παράδειγµα, η εκτέλεση της εντολής

ñ $setall x 1 y sec z left

θα πρέπει να έχει ως αποτέλεσµα

ñ $echo $x $y $z

ñ 1 sec left

∆οκιµάστε τη συνάρτηση που θα φτιάξετε µε διάφορα Παραδείγµατα δικά σας,

µεταβλητού πλήθους παραµέτρων.

Τι συµβαίνει στην περίπτωση που στα ζεύγη παραµέτρων µία αριστερή παράµετρος

εµφανίζεται σε δύο ζεύγη; Είναι εύκολο να διαµορφώσετε τη συνάρτησή σας έτσι, ώστε

να µην µπορεί µία αριστερή παράµετρος να λάβει δεύτερη τιµή στο ίδιο τρέξιµο;

¢Ú·ÛÙËÚÈfiÙËÙ· 2.15

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 30

Page 31: Λειτουργικά Συστήματα

3 12 . 2 ™ À ° ° ƒ∞ º ∏ ™ À ¡ £ ∂ ∆ ø ¡ S C R I P T S

Θεωρήστε ένα αρχείο συστήµατος «users.txt» το οποίο σε κάθε γραµµή του περιέ-

χει το «login name» ενός (κάποιου) χρήστη του συστήµατος µαζί µε κάποιες

επιπλέον εµπιστευτικές πληροφορίες γι’ αυτόν το χρήστη. Το «login name»

(µαζί µε αντίστοιχες, διαφορετικές µεταξύ τους πληροφορίες) ενός συγκεκριµένου

χρήστη είναι δυνατόν να περιέχεται σε παραπάνω από µία γραµµές του αρχείου.

Για παράδειγµα, θα µπορούσατε να δηµιουργήσετε τρεις (3) διαφορετικούς λογα-

ριασµούς στο σύστηµά σας µε «login names: nikos, giorgos, basilis»

και ένα αντίστοιχο αρχείο «users.txt» το οποίο θα έχει την παρακάτω µορφή

(θεωρήστε ότι τα εµπιστευτικά στοιχεία κάθε χρήστη µπορεί να είναι η ηλικία του,

το τηλέφωνό του, το επάγγελµά του κ.ά. και διαχωρίζονται από το «login name»

µε το χαρακτήρα «:»):

ñ nikos:25

ñ basilis:21 973–8383 Maizonos_54

ñ giorgos:32

ñ nikos:765–0987

ñ giorgos:FaidÔnos_26 564–7121

ñ nikos:Panepistimiou_32

Γράψτε ένα πρόγραµµα sseettuuiidd, το οποίο ανάλογα µε το ποιος από τους παραπά-

νω χρήστες το τρέχει, θα τυπώνει στην οθόνη µόνο εκείνες τις γραµµές που αντι-

στοιχούν στο «login name» του, διατηρώντας έτσι την εµπιστευτικότητα των

υπόλοιπων.

Αναφορικά µε το παραπάνω Παράδειγµα, αν υποθέσουµε ότι εκτελεί το πρόγραµ-

µα sseettuuiidd ο «giorgos», θα πρέπει να λάβει ως έξοδο στην οθόνη του τα παρα-

κάτω στοιχεία:

ñ giorgos:32

ñ giorgos:FaidÔnos_26 564–7121

∆οκιµάστε την ορθότητα του προγράµµατός σας εκτελώντας το και από τους τρεις

διαφορετικούς λογαριασµούς που θα φτιάξετε για το σύστηµά σας.

¢Ú·ÛÙËÚÈfiÙËÙ· 2.16

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 31

Page 32: Λειτουργικά Συστήματα

3 2 K E º A § A I O 2 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ° ƒ∞ ª ª ∞∆ π ™ ª √ À ™ ∆ √ K ∂ § À º √ ™ ∆ √ À L I N U X

Πολλές φορές σε ένα διαχειριστή συστήµατος (system administrator) είναι ιδιαί-

τερα χρήσιµο παρακολουθώντας το διαθέσιµο χώρο ενός συστήµατος να µπορεί

να βρίσκει εύκολα τα µεγαλύτερα σε µέγεθος αρχεία σε διάφορες περιοχές (λογα-

ριασµούς) του συστήµατος αυτού. Θεωρήστε ότι είστε ο διαχειριστής του συστή-

µατός σας και φτιάξτε ένα script προγραµµατάκι το οποίο:

Θα δέχεται ως όρισµα το όνοµα ενός καταλόγου (directory) και θα βρίσκει το µεγα-

λύτερο σε µέγεθος αρχείο σε ολόκληρο το δένδρο αρχείων και καταλόγων

(directory subtree) του συγκεκριµένου καταλόγου/ορίσµατος. Ως έξοδο το πρό-

γραµµα θα πρέπει να τυπώνει µόνο το όνοµα του αρχείου και το µέγεθός του. Π.χ.

ñ final_project.ps 1253652

Σας ζητείται επίσης:

(α) να χρησιµοποιήσετε την οικογένεια συναρτήσεων «opendir»,

(β) τα εκάστοτε µηνύµατα λάθους να διοχετεύονται στο πρότυπο αρχείο λαθών.

∆οκιµάστε το πρόγραµµα που θα φτιάξετε σε διάφορους καταλόγους του συστή-

µατός σας καθώς και στον τρέχοντα δικό σας κατάλογο, αφού πρώτα φροντίσετε

να δηµιουργήσετε σ’ αυτόν βάθος (directory subtree) τουλάχιστον δύο επιπέδων.

¢Ú·ÛÙËÚÈfiÙËÙ· 2.17

Υλοποιήστε µία απλή συνάρτηση wweeeekkddaayy, η οποία θα συµπεριφέρεται ως εξής:

Εάν σήµερα είναι µία καθηµερινή ηµέρα (εκτός σαββατοκύριακου), τότε θα τυπώ-

νει τη λέξη «weekday» και θα επιστρέφει 0 (κατάσταση εξόδου επιτυχίας).

Εάν όχι, τότε δε θα κάνει τίποτε άλλο παρά µόνο θα επιστρέφει µία µη µηδενική

κατάσταση εξόδου.

Αφού υλοποιήσετε και δοκιµάσετε τη συνάρτηση που φτιάξατε (αλλάζοντας κατάλ-

ληλα µερικές φορές την ηµεροµηνία του συστήµατος – ddaattee), προσπαθήστε να

προσαρµόσετε το πρόγραµµά σας, ώστε να ικανοποιούνται οι παρακάτω περιορι-

σµοί (εάν δεν ικανοποιούνται ήδη):

• Να χρησιµοποιείται η ευκολία ««&&&&»».

• Να µη γίνεται ορισµός και χρήση µεταβλητών.

¢Ú·ÛÙËÚÈfiÙËÙ· 2.18

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 32

Page 33: Λειτουργικά Συστήματα

3 32 . 2 ™ À ° ° ƒ∞ º ∏ ™ À ¡ £ ∂ ∆ ø ¡ S C R I P T S

Υλοποιήστε µία εντολή «sshhoowwsshhooww delay files», η οποία θα συµπεριφέρε-

ται ως εξής:

Θα τυπώνει στην οθόνη τα αρχεία «files», το ένα µετά το άλλο, ταξινοµηµένα

ως προς το µέγεθός τους κατά αύξουσα σειρά.

Για κάθε αρχείο, επίσης, θα πρέπει:

• Να τυπώνεται γραµµή προς γραµµή, µε καθυστέρηση εµφάνισης κάθε γραµµής

τόσο χρόνο, όσος δίνεται από την παράµετρο «delay» σε δευτερόλεπτα.

• Κάθε φορά που αρχίζει να τυπώνεται ένα νέο αρχείο, να προηγείται µία εισα-

γωγική γραµµή που να δηλώνει αυτό το γεγονός καθώς και το όνοµα του νέου

αρχείου.

Για παράδειγµα, το αποτέλεσµα εκτέλεσης της παραπάνω εντολής, µε τιµή για την

παράµετρο «delay» ίση µε 5 δευτερόλεπτα, θα πρέπει να έχει τη µορφή:

ñ ——— Next file: test1.txt ———–

• < αναµονή 5 δευτερολέπτων>

ñ This is the first test file given in class

• < αναµονή 5 δευτερολέπτων>

ñ for practice on delay functions

• < αναµονή 5 δευτερολέπτων>

ñ ——— Next file: test2.txt ———–

• < αναµονή 5 δευτερολέπτων>

ñ This is just another test file

• < αναµονή 5 δευτερολέπτων>

ñ ………………………………

¢Ú·ÛÙËÚÈfiÙËÙ· 2.19

• Να χρησιµοποιείται η εντολή ddaattee µία µόνο φορά.

• Να χρησιµοποιείται η εντολή ggrreepp.

• Να είναι µίας γραµµής.

• Να µην τυπώνεται τίποτε άλλο εκτός από το «weekday».

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 33

Page 34: Λειτουργικά Συστήματα

3 4 K E º A § A I O 2 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ° ƒ∞ ª ª ∞∆ π ™ ª √ À ™ ∆ √ K ∂ § À º √ ™ ∆ √ À L I N U X

™‡ÓÔ„Ë

Στα πλαίσια του κεφαλαίου αυτού επιχειρήθηκε µία κατά το δυνατόν πλήρης γνωρι-

µία σας µε το κέλυφος ενός Unix–like λειτουργικού συστήµατος (και ειδικότερα του

Λ.Σ. LINUX µέσω του προσωπικού σας υπολογιστή) και ειδικότερα µε τις αυξηµένες

δυνατότητες προγραµµατισµού τις οποίες προσφέρει αυτό, µε στόχο τόσο την αποτε-

λεσµατική διαχείριση ενός υπολογιστικού συστήµατος, όσο και την ανάπτυξη απλών

ή/και σύνθετων εφαρµογών µικρής κλίµακας.

Ανακεφαλαιώνοντας, διδαχθήκατε µέσω αντίστοιχων παιδαγωγικά σχεδιασµένων

Ασκήσεων Αυτοαξιολόγησης τη χρήση και λειτουργία (α) απλών εντολών του κελύ-

φους του LINUX (ls, ps κ.ά.), (β) των πλέον γνωστών και ευρέως χρησιµοποιούµε-

νων φίλτρων αυτού (grep, sed, awk κ.ά.), (γ) διάφορων προχωρηµένων εντολών και

ευκολιών (sort, date, && κ.ά.) οι οποίες παρέχονται συµπληρωµατικά καθώς και (δ)

των πλέον σηµαντικών για ανάπτυξη σύνθετων εφαρµογών (shell scripts για επε-

ξεργασία αρχείων κειµένων και εγγραφών κ.ά.) εντολών επανάληψης και ελέγχου

(for, while, if, case κ.ά.) που προσφέρει το κέλυφος του LINUX.

Μέσω της επισυναπτόµενης βιβλιογραφίας σας δίνεται η δυνατότητα να εξασκηθεί-

τε και να πειραµατιστείτε ακόµα περισσότερο µε τις εντολές και τα φίλτρα που παρέ-

χονται από το προγραµµατιζόµενο κέλυφος του LINUX και να αναπτύξετε επιπλέον

πολλών ειδών µικρής κλίµακας εφαρµογές του δικού σας ενδιαφέροντος.

BÈ‚ÏÈÔÁÚ·Ê›·

[1]B.W. Kernighan and R. Pike, «Το περιβάλλον Προγραµµατισµού UNIX», Κλει-

δάριθµος, Aθήνα, 1989 [ελληνική µετάφραση του πρωτότυπου «Unix

Programming Environment», Prentice–Hall, Englewood Cliffs, New Jersey,

1984].

[2]R. Petersen and R. Peterson, «Linux Programmer’s Reference», 2nd edition,

Osborne McGraw–Hill Inc., New York, 1998.

[3]S. J. Leffler and M. K. McKusick, «The Design and Implementation of the 4.3

Bsd Unix Operating System», 2nd edition, Addisson–Wesley, Reading

Massachusetts, 1990.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 34

Page 35: Λειτουργικά Συστήματα

AÛ΋ÛÂȘ ¶ÚÔÛÔÌÔ›ˆÛ˘ §ÂÈÙÔ˘ÚÁÈÒÓ ÙÔ˘ ¶˘Ú‹Ó· ÂÓfi˜ §ÂÈÙÔ˘ÚÁÈÎÔ‡ ™˘ÛÙ‹Ì·ÙÔ˜ T‡Ô˘ UNIX

™ÎÔfi˜

Σκοπός του κεφαλαίου αυτού είναι η πρακτική εκµάθηση του τρόπου υλοποίησης του

πυρήνα ενός λειτουργικού συστήµατος τύπου UNIX, µέσω προσοµοίωσης των βασι-

κών λειτουργιών και συναρτήσεων αυτού µε αντίστοιχες προσεγγιστικές συναρτήσεις

σε γλώσσα προγραµµατισµού C. Βασικό στόχο, επίσης, των Ασκήσεων του παρόντος

κεφαλαίου αποτελεί η παραµετρική υλοποίηση διάφορων αλγόριθµων για την ολο-

κλήρωση αντίστοιχων λειτουργιών του πυρήνα (χρονοδροµολόγηση, σελιδοποίηση

κ.ά.) µε σκοπό την καλύτερη δυνατή κατανόηση της αντίστοιχης θεωρίας.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε υλοποιήσει σε ικανοποιητικό βαθµό τα προγράµµατα προσοµοίωσης

ενός λειτουργικού συστήµατος τύπου UNIX σε γλώσσα C, τα οποία σας ζητούνται σε

αυτό το κεφάλαιο, θα µπορείτε:

• να υλοποιείτε σε γλώσσα C τους µηχανισµούς υποστήριξης «ready–queue» κεντρι-

κής µονάδας επεξεργασίας και κεντρικής µνήµης, οι οποίοι αποτελούν τη βάση για

το κτίσιµο του πυρήνα ενός λειτουργικού συστήµατος τύπου UNIX,

• να προσοµοιώνετε σε γλώσσα C και να παρακολουθείτε τη λειτουργία και την αποτε-

λεσµατικότητά τους, τους αλγόριθµους χρονοδροµολόγησης διαδικασιών µε βάση προ-

τεραιότητες, First Come First Serve, Shortest Time Remaining First και Round Robin,

• να προσοµοιώνετε σε γλώσσα C λειτουργίες διαχείρισης και προσπέλασης (π.χ.

διάβασµα, εγγραφή) του δίσκου ενός συστήµατος,

• να υλοποιείτε σηµαφόρους και να τις χρησιµοποιείτε µέσω των εντολών «signal»

και «wait» για την προσπέλαση κοινών µεταβλητών,

• να υλοποιείτε µηχανισµούς σελιδοποίησης µνήµης για ένα πολυδιεργασιακό λει-

τουργικό σύστηµα,

• να υλοποιείτε τις κατάλληλες δοµές και τους κατάλληλους αλγόριθµους για υπο-

στήριξη εικονικής µνήµης και αποτελεσµατική εξυπηρέτηση σφαλµάτων αναφο-

ρών σελίδων,

• να προσοµοιώνετε σε γλώσσα C και να παρακολουθείτε τη λειτουργία και την απο-

τελεσµατικότητά τους, τους αλγόριθµους αντικατάστασης σελίδων FIFO, LRU,

LFU και MFU.

3∫ ∂ º ∞ § ∞ π √

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 35

Page 36: Λειτουργικά Συστήματα

3 6 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Οι Ασκήσεις προγραµµατισµού οι οποίες δίνονται στα πλαίσια αυτού του κεφαλαίου

αποτελούν το πιο σηµαντικό µέρος του συνόλου των Ασκήσεων του βιβλίου από διδα-

κτική άποψη, καθώς θα σας φέρουν σε άµεση επαφή µε τον τρόπο και τις τεχνικές

υλοποίησης της «καρδιάς» ενός λειτουργικού συστήµατος τύπου UNIX, και πιο συγκε-

κριµένα του πυρήνα του (των βασικών/πρωτογενών, δηλαδή, λειτουργιών του). Για

την επίλυσή τους ωστόσο απαιτείται η καλή γνώση της γλώσσας προγραµµατισµού

C, η οποία αποτελεί τη βάση υλοποίησης ενός λειτουργικού συστήµατος τύπου UNIX

(σχετικές αναφορές, µέσα από τις οποίες µπορείτε να κάνετε µία σύντοµη αναδροµή

στη συγγραφή προγραµµάτων σε γλώσσα C, παρατίθενται στο τέλος του παρόντος

κεφαλαίου).

Σκοπός των Ασκήσεων αυτών δεν είναι η ακριβής και λεπτοµερής υλοποίηση ενός

ρεαλιστικού πυρήνα λειτουργικού συστήµατος τύπου UNIX, αλλά η εκµάθηση των

βασικών δοµών, ουρών και παραµέτρων οι οποίες χρησιµοποιούνται κατά την ανά-

πτυξη ενός τέτοιου πραγµατικού πυρήνα.

Πιο συγκεκριµένα µέσα από τις Ασκήσεις που δίνονται στις επόµενες ενότητες

(3.1–3.4), θα κληθείτε να προσοµοιώσετε (µέσω της συγγραφής αντίστοιχων συναρ-

τήσεων και modules σε γλώσσα C) τις βασικές λειτουργίες (α) χρονοδροµολόγησης

διαδικασιών, (β) µηχανισµών σελιδοποίησης και διαχείρισης εικονικής µνήµης, (γ)

• προσοµοίωση λειτουργικού συστή-

µατος

• γλώσσα προγραµµατισµού C

• χρονοδροµολόγηση διαδικασιών

• χρονοδροµολο΄γηση µε βάση προτε-

ραιότητες

• χρονοδροµολόγηση First Come

First Serve

• χρονοδροµολόγηση Round Robin

• χρονοδροµολόγηση Shortest Time

Remaining First

• διαχείριση δίσκου

• σηµαφόρος διαχείριση µνήµης

• σελιδοποίηση

• εικονική µνήµη

• σφάλµα αναφοράς σελίδας

• αντικατάσταση σελίδων

• αλγόριθµος αντικατάστασης FIFO

• αλγόριθµος αντικατάστασης LRU

• αλγόριθµος αντικατάστασης LFU

• αλγόριθµος αντικατάστασης MFU

ŒÓÓÔȘ ÎÏÂȉȿ

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 36

Page 37: Λειτουργικά Συστήματα

µηχανισµού αντικατάστασης σελίδων σε περίπτωση σφάλµατος αναφοράς σελίδας

στη µνήµη και (δ) συγχρονισµού και διαχείρισης εισόδου/εξόδου διαδικασιών στο

δίσκο του συστήµατος. Ειδικότερα για τις περιπτώσεις χρονοδροµολόγησης διαδι-

κασιών και µηχανισµών αντικατάστασης σελίδων, θα κληθείτε να υλοποιήσετε περισ-

σότερες από µία σχετικές τεχνικές της βιβλιογραφίας, µε σκοπό να µελετήσετε συγκρι-

τικά τη συµπεριφορά της καθεµιάς από αυτές και να διαπιστώσετε στην πράξη τα

τυχόν µειονεκτήµατα και πλεονεκτήµατα που εµφανίζουν.

3 7∂ π ™ ∞ ° ø ° π ∫ ∂ ™ ¶ ∞ ƒ∞∆ ∏ ƒ ∏ ™ ∂ π ™

Παράλληλα µε την ενασχόλησή σας µε τις Ασκήσεις Αυτοαξιολόγησης και τις ∆ρα-

στηριότητες αυτού του κεφαλαίου και σε κάθε σας βήµα, έχετε εύκολα προσβάσι-

µα και συµβουλευτείτε τα για κάθε σχετική απορία σας:

• Τη βιβλιογραφική αναφορά [1] (και ειδικότερα τα Kεφάλαια 4–8) του παρόντος

κεφαλαίου για οποιαδήποτε δυσκολία συναντήσετε σχετικά µε στοιχεία, δοµές

κ.λπ. της γλώσσας C, στην οποία καλείστε να προσοµοιώσετε τους ζητούµενους

µηχανισµούς λειτουργίας ενός λειτουργικού συστήµατος τύπου UNIX.

• Τη βιβλιογραφική αναφορά [4] (και ειδικότερα τα Kεφάλαια 3 και 4) του παρό-

ντος κεφαλαίου ως συµβουλευτικό οδηγό για οποιαδήποτε δυσκολία συναντή-

σετε κατά την υλοποίηση των ζητούµενων βασικών λειτουργιών του πυρήνα

ενός λειτουργικού συστήµατος τύπου UNIX.

¢Ú·ÛÙËÚÈfiÙËÙ· 3.1

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 37

Page 38: Λειτουργικά Συστήματα

3 8 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

3.1 XÚÔÓÔ‰ÚÔÌÔÏfiÁËÛË K.M.E.

Η χρονοδροµολόγηση διαδικασιών στην Κεντρική Μονάδα Επεξεργασίας ενός

συστήµατος (η βασικότερη λειτουργία ενός πολυδιεργασιακού λειτουργικού συστή-

µατος – όπως είναι όλα τα λειτουργικά συστήµατα τύπου UNIX), θα αποτελέσει το

πρώτο αντικείµενο προσoµοίωσης σε γλώσσα C στα πλαίσια αυτού του κεφαλαίου.

Μελετήστε αναλυτικά τη σχετική θεωρία, η οποία αφορά τους διάφορους υπάρ-

χοντες αλγόριθµους χρονοδροµολόγησης διαδικασιών από (α) το Kεφάλαιο 4 της

βιβλιογραφικής αναφοράς [2] και (β) το Kεφάλαιο 2 (ενότητα 2.4 κυρίως) της

βιβλιογραφικής αναφοράς [5] του παρόντος κεφαλαίου, καθώς επίσης και από το

αντίστοιχο κεφάλαιο του βιβλίου «Λειτουργικά Συστήµατα Ι» του Ε.Α.Π. το οποίο

έχετε πρόσφατα διδαχθεί.

¢Ú·ÛÙËÚÈfiÙËÙ· 3.2

3.1.1 M¤ÚÔ˜ A: £ÂˆÚËÙÈ΋ EÍÔÈΛˆÛË

Σκοπός του πρώτου µέρους της ενότητας αυτής είναι να υπολογίσετε και να συγκρί-

νετε την πρακτική συµπεριφορά τεσσάρων από τους πιο δηµοφιλείς αλγόριθµους χρο-

νοδροµολόγησης διαδικασιών (Fist Come Fist Serve, Preemptive Priority, Shortest

Remaining Time First και Round Robin), µε βάση το ακόλουθο σύνολο διαδικασιών:

∆ιαδικασία Χρόνος Άφιξης Χρόνος Ολοκλήρωσης Προτεραιότητα

P1 0 5 3

P2 1 6 5

P3 3 2 2

P4 9 4 1

P5 12 3 4

Για κάθε διαδικασία σας δίνεται (α) η µονάδα χρόνου άφιξής της, (β) ο χρόνος απα-

σχόλησης της Κεντρικής Μονάδας Επεξεργασίας (σε µονάδες χρόνου) τον οποίο

χρειάζεται η διαδικασία, για να ολοκληρωθεί και (γ) η προτεραιότητά της (όσο µεγα-

λύτερος είναι ο αντίστοιχος αριθµός για κάθε διαδικασία, τόσο µεγαλύτερη είναι η

προτεραιότητά της).

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 38

Page 39: Λειτουργικά Συστήματα

3 93 . 1 X ƒ √ ¡ √ ¢ ƒ √ ª √ § √ ° ∏ ™ ∏ K . M . E .

Με βάση το παραπάνω σύνολο διαδικασιών και για καθέναν από τους τέσσερις

προαναφερθέντες αλγόριθµους χρονοδροµολόγησης, συµπληρώστε τους παρακά-

τω πίνακες αποτελεσµάτων:

• Έναν πίνακα µορφής «Gantt chart» ο οποίος αποτελείται ουσιαστικά από δύο

γραµµές, στην πρώτη από τις οποίες θα τυπώνονται οι διαδοχικές µονάδες χρό-

νου, ενώ στη δεύτερη θα τυπώνεται ο κωδικός αριθµός της διαδικασίας που χρη-

σιµοποιεί την Κ.Μ.Ε. σε κάθε µονάδα χρόνου.

• Έναν πίνακα µετρήσεων, ο οποίος παρέχει (α) το χρόνο αναµονής, (β) το χρόνο

διεκπεραίωσης, (γ) το χρόνο απόκρισης και (δ) τον αριθµό εναλλαγών για κάθε

διαδικασία, αφού ολοκληρωθεί η εκτέλεση όλων των διαδικασιών.

(α) Priority based Preemptive (PP) χρονοδροµολόγηση

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 3.1

Gantt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

P5P4P3P2P1

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

19 20

chart

Gantt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

P5P4P3P2P1

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

19 20

chart

(β) Fist Come Fist Serve (FCFS) χρονοδροµολόγηση

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 39

Page 40: Λειτουργικά Συστήματα

4 0 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

Gantt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

P5P4P3P2P1

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

19 20

chart

(γ) Shortest Remaining Time First (SRTF) χρονοδροµολόγηση

Gantt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

P5P4P3P2P1

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

19 20

chart

(δ) Round Robin (RR) χρονοδροµολόγηση

3.1.2 M¤ÚÔ˜ B: YÏÔÔ›ËÛË

Αφού εξοικειωθήκατε σε κάποιο βαθµό µε την πρακτική συµπεριφορά των τριών

αλγόριθµων χρονοδροµολόγησης διαδικασιών του προηγούµενου µέρους (Fist Come

Fist Serve, Preemptive Priority, Shortest Remaining Time First και Round Robin),

καλείστε τώρα (στα πλαίσια του δεύτερου µέρους της ενότητας) να τους υλοποιή-

σετε σε γλώσσα προγραµµατισµού C, µε σκοπό να προσεγγίσετε τον τρόπο υλοποί-

ησής τους σε ένα πραγµατικό λειτουργικό σύστηµα.

Συγκεκριµένα, θα πρέπει να υλοποιήσετε τους παραπάνω αλγόριθµους σε ένα πρό-

γραµµα γλώσσας C, το οποίο θα κάνει τα εξής:

¢Ú·ÛÙËÚÈfiÙËÙ· 3.3

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 40

Page 41: Λειτουργικά Συστήματα

4 13 . 1 X ƒ √ ¡ √ ¢ ƒ √ ª √ § √ ° ∏ ™ ∏ K . M . E .

• θα λαµβάνει ως είσοδο (α) τη µονάδα χρόνου άφιξης, (β) το χρόνο απασχόλη-

σης της Κ.Μ.Ε. (σε µονάδες χρόνου) και (γ) την προτεραιότητα για έναν οποι-

οδήποτε αριθµό διαδικασιών (δηλαδή, τα δεδοµένα εισόδου στη µορφή που δίνο-

νται και για το πρώτο µέρος της Άσκησης).

• θα παράγει ως βασική έξοδο την αρχική µορφή εξόδου που παρατίθεται και στο

πρώτο µέρος της Άσκησης (Gantt chart), αλλά συνολικά για όλους τους χρησι-

µοποιούµενους αλγόριθµους, όπως, για παράδειγµα, φαίνεται παρακάτω (η σειρά

των διαδικασιών που παρουσιάζεται είναι τυχαία):

Time : 0 1 2 3 4 5 6 7 8 9 10 ..........................

PP : P0 P1 P1 P1 P2 P2 P3 P3 P4 P4 P5 ..........................

FCFS : .................................................................................................................................................................................

STRF : .................................................................................................................................................................................

RR : .................................................................................................................................................................................

• θα παράγει, επίσης, ως συµπληρωµατική έξοδο για κάθε αλγόριθµο και για κάθε

διαδικασία τις µετρήσεις (α) χρόνου αναµονής, (β) χρόνου απόκρισης, (γ) χρό-

νου διεκπεραίωσης και (δ) αριθµού εναλλαγών, σε όποια µορφή αναπαράστα-

σης θέλετε.

Ο αλγόριθµος Shortest Remaining Time First, βέβαια, δεν αποτελεί έναν «πραγ-

µατικό» αλγόριθµο χρονοδροµολόγησης διαδικασιών, καθώς σε πραγµατικές µηχα-

νές και λειτουργικά συστήµατα δεν είναι δυνατόν να γνωρίζουµε εκ των προτέρων

πόσο χρόνο χρειάζεται µία διαδικασία, για να ολοκληρωθεί. Ωστόσο, σας ζητείται

να τον υλοποιήσετε χάριν της εξαιρετικής του απόδοσης καθώς και για λόγους

σύγκρισης µε τους υπόλοιπους αλγόριθµους χρονοδροµολόγησης.

Απαιτήσεις για τη µορφή του κώδικα

Γενικά και κατά κύριο λόγο απαιτείται η υλοποίηση που θα κάνετε να οµοιάζει όσο

το δυνατόν περισσότερο µε την εξοµοίωση των αντίστοιχων λειτουργιών ενός

πραγµατικού λειτουργικού συστήµατος. Βασικό σκοπό της Άσκησης δεν αποτελεί

η κατασκευή ενός προγράµµατος, το οποίο θα έχει τη δυνατότητα απλώς να εξά-

γει αποτελέσµατα, όπως ο χρόνος απόκρισης και ο χρόνος διεκπεραίωσης για ένα

σύνολο διαδικασιών, και έναν αλγόριθµο χρονοδροµολόγησης, αλλά η σωστή και

κατά το δυνατόν πιστότερη υλοποίηση των αντίστοιχων στοιχειωδών λειτουργιών

χρονοδροµολόγησης, όπως αυτές υλοποιούνται σε ένα πραγµατικό λειτουργικό

σύστηµα. Για παράδειγµα, θα πρέπει να ακολουθήσετε τις παρακάτω οδηγίες:

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 41

Page 42: Λειτουργικά Συστήματα

4 2 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

• Οι αλγόριθµοι χρονοδροµολόγησης θα πρέπει να υλοποιηθούν µε ή σε ξεχωρι-

στά τµήµατα του προγράµµατος (C modules µε τις αντίστοιχες – έστω και λίγες

– συναρτήσεις τους).

• Για κάθε αλγόριθµο χρονοδροµολόγησης θα πρέπει να επιλέξετε και να δηλώ-

σετε σε ξεχωριστά «header files» τις δοµές και τις συναρτήσεις, οι οποίες θα

υποστηρίξουν τη λειτουργία του (ουρές, στοίβες κ.λπ.).

• Υλοποιήστε εµφανώς και ξεχωριστά µία ουρά «ready queue», στην οποία θα

εισέρχονται (ανάλογα µε τον εκάστοτε αλγόριθµο) οι διαδικασίες, πριν δροµο-

λογηθούν στην Κ.Μ.Ε.

• Υλοποιήστε µία εικονική K.M.E. και µία εικονική διαδικασία χρήσης αυτής από

µία διαδικασία (π.χ. µία συνάρτηση, η οποία απλώς θα «επιστρέφει» κάποια

κατάλληλη τιµή).

• Αναπαραστήστε κάθε διαδικασία κατά τρόπο όµοιο µε ένα πραγµατικό λει-

τουργικό σύστηµα (µία δοµή µε διάφορα πεδία, PCB κ.ά.)

• Παρότι προϋπάρχει η γνώση για τον αριθµό και το χρόνο άφιξης των διαδικα-

σιών στο σύστηµα, προσπαθήστε να εξοµοιώσετε µε κάποιο τρόπο τη «δυναµι-

κή» είσοδό τους σε αυτό (π.χ. µε ένα µετρητή, ένα βρόχο, έναν πίνακα κατα-

στάσεων και εκτέλεσης λειτουργιών για κάθε χρονική στιγµή κ.ά.). Προσπαθή-

στε, δηλαδή, να εξοµοιώσετε ως αυτόνοµη κάθε χρονική στιγµή και να εκτελεί-

ται δυναµικά ό,τι απαιτείται κατά τη διάρκειά της.

• Υλοποιήστε µία συνάρτηση «δηµιουργίας διαδικασίας» στο σύστηµα (µε αρχι-

κοποίηση PCB κ.ά.) και µία ξεχωριστή συνάρτηση «τερµατισµού διαδικασίας».

• Ο κώδικάς σας, τέλος, θα πρέπει να είναι κατά το δυνατόν πιο συµπαγής και να

συνοδεύεται από επαρκή σχόλια και τεκµηρίωση.

Έλεγχος (testing)

Για να ελέγξετε την ορθότητα του προγράµµατος που θα φτιάξετε, αρχικά δοκι-

µάστε να τρέξετε το Παράδειγµα του πρώτου µέρους της Άσκησης αυτής και να

διασταυρώσετε τα αντίστοιχα αποτελέσµατα.

Στη συνέχεια θα πρέπει µε δική σας πρωτοβουλία να κατασκευάσετε κατάλληλα

Παραδείγµατα, τα οποία:

• Θα επιδεικνύουν τα πλεονεκτήµατα και τα µειονεκτήµατα του καθενός από τους

τέσσερις προαναφερθέντες αλγόριθµους χρονοδροµολόγησης ξεχωριστά. Συνο-

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 42

Page 43: Λειτουργικά Συστήματα

4 33 . 2 E π ™ √ ¢ √ ™ / ∂ • √ ¢ √ ™ ∫ ∞ π ™ À ° Ã ƒ √ ¡ π ™ ª √ ™

λικά θα πρέπει να φτιάξετε και να τρέξετε οκτώ (8) τέτοια Παραδείγµατα (δύο για

κάθε αλγόριθµο). Σχολιάστε τα αποτελέσµατα για κάθε αλγόριθµο ξεχωριστά.

• Θα επιδεικνύουν συγκριτικά τα πλεονεκτήµατα και τα µειονεκτήµατα για τους

τρεις από τους τέσσερις δοθέντες αλγόριθµους χρονοδροµολόγησης (όλους εκτός

από τον «Preemptive Priority» αλγόριθµο) και ειδικότερα σε ζεύγη ανά δύο

αλγόριθµους.

Σας ζητείται, επίσης, να κατασκευάσετε δύο–τρία παραδείγµατα, κατά τα οποία

µία διαδικασία µε χρήση ενός από τους δοθέντες αλγόριθµους χρονοδροµολόγη-

σης τον οποίο εσείς θα επιλέγετε κάθε φορά, θα αναγκάζεται να περιµένει πολύ

µεγάλο (σε σχέση µε το χρόνο που πραγµατικά χρειάζεται) χρονικό διάστηµα, για

να ολοκληρώσει την εκτέλεσή της (starvation).

3.2 E›ÛÔ‰Ô˜ / ŒÍÔ‰Ô˜ Î·È ™˘Á¯ÚÔÓÈÛÌfi˜

Σε συνέχεια της προηγούµενης Εργαστηριακής Άσκησης, καλείστε τώρα να λάβετε

υπόψη σας (καθώς και υπόψη του προσοµοιωµένου στοιχειώδους χρονοδροµολο-

γητή που έχετε ήδη υλοποιήσει), πέραν των απλής µορφής διαδικασιών οι οποίες

εµφανίζουν ανάγκες µόνο κεντρικής επεξεργασίας, και κάποιες άλλες πιθανές απαι-

τήσεις διαδικασιών από ένα λειτουργικό σύστηµα, όπως η προσπέλαση του δίσκου

του συστήµατος και η επικοινωνία µέσω σηµαφόρων.

Μελετήστε αναλυτικά τη σχετική θεωρία, η οποία αφορά τις διάφορες υπάρχουσες

τεχνικές διαχείρισης εισόδου/εξόδου και συγχρονισµού διαδικασιών από (α) τα

Kεφάλαια 7 και 9 της βιβλιογραφικής αναφοράς [2] (ενότητες 7.3 και 9.6 κυρίως)

και (β) το Kεφάλαιο 5 (ενότητα 5.3 κυρίως) της βιβλιογραφικής αναφοράς [5] του

παρόντος κεφαλαίου καθώς επίσης και από τα αντίστοιχα κεφάλαια του βιβλίου

«Λειτουργικά Συστήµατα Ι» του Ε.Α.Π. τα οποία έχετε πρόσφατα διδαχθεί.

¢Ú·ÛÙËÚÈfiÙËÙ· 3.4

3.2.1 M¤ÚÔ˜ A: £ÂˆÚËÙÈ΋ ÂÍÔÈΛˆÛË

Σκοπός του πρώτου µέρους της ενότητας είναι και εδώ η θεωρητική εξοικείωση

(υπενθύµιση) µε τα βασικά αντικείµενα της Άσκησης. Υποθέτουµε πάλι ότι έχουµε

ένα σύνολο πέντε (5) διαδικασιών, για καθεµιά από τις οποίες σας δίνεται µέσω του

επόµενου πίνακα (α) η µονάδα χρόνου άφιξής της και (β) ο χρόνος απασχόλησης της

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 43

Page 44: Λειτουργικά Συστήματα

4 4 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

Κεντρικής Μονάδας Επεξεργασίας (σε µονάδες χρόνου), τον οποίο χρειάζεται η δια-

δικασία, για να ολοκληρωθεί.

∆ιαδικασία Χρόνος Άφιξης Χρόνος Ολοκλήρωσης

P1 0 15

P2 10 28

P3 14 7

P4 25 32

P5 43 18

Με βάση το νέο αυτό σύνολο διαδικασιών, αρχικά σας ζητείται να συµπληρώσετε

αντίστοιχους πίνακες αποτελεσµάτων µε αυτούς της προηγούµενης Άσκησης για

κάθε έναν από τους παρακάτω αλγόριθµους χρονοδροµολόγησης:

• First Come First Serve

• Shortest Remaining Time First

και µε µοναδική διαφορά ότι ο πίνακας µορφής «Gantt chart» θα είναι αυτή τη

φορά εµφανώς πιο αραιός (καθώς πλέον στο παραπάνω Παράδειγµα απαιτούνται

100 µονάδες χρόνου για την ολοκλήρωση της εκτέλεσης όλων των διαδικασιών)

και θα έχει την παρακάτω µορφή:

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 3.2

Gantt 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90

P5P4P3P2P1

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

95 00

chart

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 44

Page 45: Λειτουργικά Συστήματα

4 53 . 2 E π ™ √ ¢ √ ™ / ∂ • √ ¢ √ ™ ∫ ∞ π ™ À ° Ã ƒ √ ¡ π ™ ª √ ™

Υποθέστε τώρα ότι η κατάσταση γίνεται πιο πολύπλοκη λόγω των παρακάτω απαι-

τήσεων κάποιων διαδικασιών:

• Η διαδικασία P1, αφού τρέξει για 12 χρονικές στιγµές, ζητά µία εξυπηρέτηση

από το δίσκο του συστήµατος (π.χ. διάβασµα) και απαιτούνται 6 χρονικές στιγ-

µές για την ολοκλήρωση αυτής της εξυπηρέτησης.

• Η διαδικασία P2, αφού τρέξει για 3 χρονικές στιγµές, πρέπει να περιµένει µέσω

της σηµαφόρου «mutex» για κάποιο χρονικό διάστηµα (π.χ. εκτελεί µία εντολή

«wait(mutex)», ενώ η σηµαφόρος έχει τιµή «0»).

• Η διαδικασία P4, αφού τρέξει για 12 χρονικές στιγµές, απελευθερώνει τη σηµα-

φόρο «mutex» (π.χ. εκτελεί µία εντολή «signal(mutex)»).

Πώς τροποποιούνται πλέον οι παραπάνω πίνακες αποτελεσµάτων για τους δύο προ-

αναφερθέντες αλγόριθµους χρονοδροµολόγησης; Αφού τους συµπληρώσετε εκ

νέου πλέον σύµφωνα µε τα νέα δεδοµένα, παραθέστε στον παρακάτω πίνακα και

τα περιεχόµενα της «Ready Queue» για τις χρονικές στιγµές 0, 12, 14, 18 και 25.

Ready Queue

FCFS SRTF

0 12 14 18 25 0 12 14 18 25

End

Start

3.2.2 ª¤ÚÔ˜ B: YÏÔÔ›ËÛË

Αφού εξασκηθήκατε σε κάποιο βαθµό µε το πώς επηρεάζουν έναν αλγόριθµο χρο-

νοδροµολόγησης διαδικασιών οι πιθανές χρήσεις δίσκου και σηµαφόρων, καλείστε

στα πλαίσια του δεύτερου µέρους της ενότητας να επεκτείνετε τον εξοµοιωτή χρο-

νοδροµολόγησης που έχετε υλοποιήσει κατά την προηγούµενη Άσκηση µε τα δύο

αυτά νέα χαρακτηριστικά.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 45

Page 46: Λειτουργικά Συστήματα

4 6 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

Πιο συγκεκριµένα, το πρόγραµµά σας πλέον θα πρέπει να έχει τη δυνατότητα να

λαµβάνει ως είσοδο όχι µόνο το χρόνο άφιξης, το χρόνο ολοκλήρωσης και την προ-

τεραιότητα κάθε διεργασίας, αλλά και την πιθανή ύπαρξη απαιτήσεων εξυπηρέ-

τησης δίσκου και σηµαφόρων στην παρακάτω µορφή:

• Για κάθε εξυπηρέτηση δίσκου θα µπορεί ο χρήστης να εισάγει διαλεκτικά και

για όσες διαδικασίες θέλει (ή και περισσότερες από µία φορά για την ίδια δια-

δικασία, αρκεί να µην υπάρχει σύγκρουση σε καµία περίπτωση) µία τριάδα στοι-

χείων αποτελούµενη από (α) τον κωδικό της διαδικασίας, (β) τη χρονική στιγ-

µή απαίτησης εξυπηρέτησης από το δίσκο (θεωρώντας ως αρχή τη χρονική στιγ-

µή εισόδου της διαδικασίας στο σύστηµα) και (γ) το χρόνο (αριθµό χρονικών

στιγµών) που απαιτείται για την ολοκλήρωση της εξυπηρέτησης αυτής.

• Για πιθανή χρήση σηµαφόρου θα µπορεί ο χρήστης να εισάγει διαλεκτικά και για

όσες διαδικασίες θέλει (ή και περισσότερες από µία φορά για την ίδια διαδικα-

σία, αρκεί να µην υπάρχει σύγκρουση σε καµία περίπτωση) µία τετράδα στοι-

χείων αποτελούµενη από (α) τον κωδικό της διαδικασίας, (β) τη χρονική στιγµή

χρήσης της σηµαφόρου, (γ) τον κωδικό της σηµαφόρου που θα χρησιµοποιηθεί

και (δ) τη λειτουργία η οποία θα εκτελεστεί επί της σηµαφόρου (wait/signal).

Ως έξοδο το πρόγραµµά σας θα πρέπει να παρέχει, πέραν των ζητούµενων στην

προηγούµενη Εργαστηριακή Άσκηση (πίνακας µορφής Gantt chart, χρόνοι από-

κρισης, διεκπεραίωσης, αναµονής και αριθµό εναλλαγών), επιπλέον τα παρακάτω:

Kατάλληλα διαγνωστικά µηνύµατα κατά τη διάρκεια εκτέλεσης του προγράµµα-

τος, θα πρέπει να εξάγονται, κάθε φορά που µία διαδικασία ζητάει εξυπηρέτηση

από το δίσκο, επιστρέφει από εξυπηρέτηση του δίσκου, εκτελεί κάποια λειτουργία

σε µία σηµαφόρο ή τελειώνει η αναµονή της σε µία σηµαφόρο. Στην προτελευταία

περίπτωση θα πρέπει να γνωστοποιείται, επίσης, µέσω επόµενου διαγνωστικού και

ποιο ήταν το αποτέλεσµα της λειτουργίας επί της σηµαφόρου (π.χ. αναµονή).

• Έναν πίνακα, ο οποίος θα επιδεικνύει τη χρήση του δίσκου του συστήµατος από

τις εκάστοτε διαδικασίες που ζήτησαν εξυπηρέτηση (ποιες, για πόσο χρόνο

κ.λπ.).

• Έναν πίνακα, ο οποίος θα επιδεικνύει για κάθε διαδικασία, αν είναι CPU–bound

ή Ι/Ο–bound, καθώς και τα στατιστικά που τεκµηριώνουν το χαρακτηρισµό αυτό

(πόσο χρόνο απασχόλησε τη CPU και πόσο χρόνο απασχόλησε το δίσκο του

συστήµατος).

¢Ú·ÛÙËÚÈfiÙËÙ· 3.5

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 46

Page 47: Λειτουργικά Συστήματα

4 73 . 2 E π ™ √ ¢ √ ™ / ∂ • √ ¢ √ ™ ∫ ∞ π ™ À ° Ã ƒ √ ¡ π ™ ª √ ™

Απαιτήσεις για τη µορφή του κώδικα

Καθώς η Εργαστηριακή Άσκηση αυτή αποτελεί ουσιαστικά συνέχεια της προη-

γούµενης, είναι βέβαιο ότι θα έχουν ακολουθηθεί ήδη οι βασικές και ιδιαίτερα

σηµαντικές οδηγίες υλοποίησης της προηγούµενης Άσκησης. Συµπληρωµατικά σε

εκείνες τις οδηγίες, παρατίθενται παρακάτω ορισµένες επιπλέον απαιτήσεις, οι

οποίες αφορούν ειδικότερα τα ζητήµατα διαχείρισης και εξυπηρέτησης δίσκου και

σηµαφόρων από ένα λειτουργικό σύστηµα:

• Αναπτύξτε ξεχωριστό C module για το δίσκο του συστήµατος και τη διαχείρισή

του, µε όλες τις απαραίτητες συναρτήσεις (read, write κ.λπ.) και δοµές που χρει-

άζονται για την υποστήριξή του (ουρές αναµονής κ.λπ.).

• Η όλη εξοµοίωση του δίσκου και της διαχείρισής του θα είναι «εικονική» (µε

την έννοια ότι οι παραπάνω συναρτήσεις δε θα πραγµατοποιούν καµία λειτουρ-

γία στην πραγµατικότητα), ωστόσο σκοπός της Άσκησης είναι να αποτυπώσε-

τε (συµβουλευόµενοι και τη βιβλιογραφία) τη γενική δοµή διαχείρισης ενός

δίσκου και όχι τις λεπτοµέρειες υλοποίησής του.

• Όσον αφορά την υποστήριξη σηµαφόρων θα πρέπει να υλοποιήσετε (σε ξεχω-

ριστό C module) όλες τις απαραίτητες συναρτήσεις (wait, signal) σε πραγµατι-

κή µορφή.

• Θα πρέπει, επίσης, να ορίσετε (και να διατηρείτε τους απαραίτητους µηχανι-

σµούς αναγνώρισης) έναν προκαθορισµένο αριθµό «γνωστών» στο σύστηµα

σηµαφόρων, µέσω των οποίων (και µόνο µέσω αυτών) θα επικοινωνούν και θα

συνεννοούνται οι διάφορες διαδικασίες που εισέρχονται στο σύστηµα.

• Θα πρέπει να προβλέψετε την περίπτωση αναµονής περισσότερων από µία δια-

δικασιών σε µία σηµαφόρο (σχετικές ουρές αναµονής κ.λπ.).

• Αντίστοιχες δοµές (ουρές κ.ά.) και συναρτήσεις (block, wake–up) καλείστε να

υλοποιήσετε και για κάθε άλλη µορφή µπλοκαρίσµατος διαδικασιών, η οποία

προκύπτει απαραίτητα από τα ζητούµενα της Άσκησης (π.χ. κάθε διαδικασία

µεταβαίνει σε κατάσταση «blocked», κάθε φορά που ζητάει εξυπηρέτηση από

το δίσκο ή περιµένει τη «θέση» µίας σηµαφόρου).

Ιδιαίτερη σηµασία, τέλος, θα πρέπει να δώσετε στην ήδη υπάρχουσα (από την

προηγούµενη ∆ραστηριότητα – και να την τελειοποιήσετε στο βαθµό που µπορεί-

τε) εξοµοίωση «δυναµικής ροής και εκτέλεσης» όλων των βηµάτων και λειτουρ-

γιών σε κατάλληλα υποστηριζόµενες «αυτόνοµες χρονικές στιγµές» (µε χρήση

κατάλληλων πινάκων κατάστασης για κάθε διαδικασία ανά χρονική στιγµή).

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 47

Page 48: Λειτουργικά Συστήματα

4 8 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

Η σωστή και διακριτή αναγνώριση των χρονικών στιγµών κατά τις οποίες λαµβά-

νουν χώρα οι εξωτερικές επιδράσεις που προαναφέρθηκαν (εξυπηρέτηση δίσκου,

σηµαφόροι, «block» και «wake–up» διαδικασίες κ.ά.) είναι απαραίτητη για την

κατά το δυνατόν πιστότερη εξοµοίωση του λειτουργικού συστήµατος στη µορφή

που σας ζητείται.

Έλεγχος (testing)

Για να ελέγξετε την ορθότητα του προγράµµατος που θα φτιάξετε, αρχικά δοκι-

µάστε να τρέξετε το παράδειγµα του πρώτου µέρους της Άσκησης αυτής και να

διασταυρώσετε τα αντίστοιχα αποτελέσµατα.

Στη συνέχεια θα πρέπει µε δική σας πρωτοβουλία να κατασκευάσετε και να τρέξετε

διάφορα δικά σας παραδείγµατα, τα οποία θα υπακούουν στις παρακάτω απαιτήσεις:

• Παραδείγµατα στα οποία οι διαδικασίες που εισάγονται στο σύστηµα θα ξεχω-

ρίζουν εµφανώς µεταξύ τους όσον αφορά τον προσανατολισµό τους. Κάποιες

από αυτές, δηλαδή, θα πρέπει να είναι εµφανώς CPU–bound, ενώ οι υπόλοιπες

θα πρέπει να είναι I/O–bound (να ζητούν, δηλαδή, συχνά εξυπηρέτηση από το

δίσκο του συστήµατος). Σχολιάστε τα αποτελέσµατα που λαµβάνετε σε κάθε

περίπτωση για καθέναν από τους δύο χρησιµοποιούµενους αλγόριθµους χρονο-

δροµολόγησης. Ποιος(οι) από αυτούς ευνοούν τις CPU–bound διαδικασίες και

ποιος τις I/O–bound;

• Παραδείγµατα στα οποία για κάποια ή κάποιες διαδικασίες θα υπάρχει µεγάλος

χρόνος αναµονής για τη «θέση» µίας σηµαφόρου, καθώς και Παραδείγµατα

σηµαφόρων κατά τα οποία δε θα υπάρχει σωστή πρόβλεψη αποφυγής

«deadlock» (κάποια ή κάποιες διαδικασίες δε θα τερµατίζουν).

Προσπαθήστε, τέλος, να φτιάξετε και να ελέγξετε κάποια ενδεικτικά Παραδείγ-

µατα στα οποία δε θα παίζει ιδιαίτερο ρόλο ο αλγόριθµος χρονοδροµολόγησης που

ακολουθείται. Η συµπεριφορά, δηλαδή, του συστήµατος θα είναι περίπου η ίδια

και για τους δύο δοθέντες αλγόριθµους σε επίπεδο Κ.Μ.Ε. και θα εξαρτάται ουσια-

στικά η απόδοσή του από την επίδραση των υπόλοιπων εξωτερικών παραγόντων

(εξυπηρέτηση δίσκου και σηµαφόροι).

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 48

Page 49: Λειτουργικά Συστήματα

3.3 ¢È·¯Â›ÚÈÛË ÌÓ‹Ì˘ – ™ÂÏȉÔÔ›ËÛË

Ο κλασικότερος µηχανισµός αποδοτικής διαχείρισης της κύριας µνήµης ενός πολυ-

διεργασιακού λειτουργικού συστήµατος (σελιδοποίηση – paging) αποτελεί το επόµε-

νο αντικείµενο προσοµοίωσης σε γλώσσα C στα πλαίσια του παρόντος κεφαλαίου.

4 93 . 3 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – ™ ∂ § π ¢ √ ¶ √ π ∏ ™ ∏

Μελετήστε αναλυτικά τη σχετική θεωρία η οποία αφορά τους κλασικούς µηχανι-

σµούς σελιδοποίησης (paging) µνήµης ενός Unix–like λειτουργικού συστήµατος

από (α) το Kεφάλαιο 5 της βιβλιογραφικής αναφοράς [2] και (β) το Kεφάλαιο 3

(ενότητα 3.1 κυρίως) της βιβλιογραφικής αναφοράς [5] του παρόντος κεφαλαίου,

καθώς επίσης και από το αντίστοιχο κεφάλαιο του βιβλίου «Λειτουργικά Συστή-

µατα Ι» του Ε.Α.Π., το οποίο έχετε πρόσφατα διδαχθεί.

¢Ú·ÛÙËÚÈfiÙËÙ· 3.6

Θεωρήστε ότι σε ένα υπολογιστικό σύστηµα µε σελιδοποίηση µνήµης (paging)

ακολουθείται ο παρακάτω απλός τρόπος διαχείρισης εικονικής µνήµης:

Κάθε αναφορά µνήµης που παράγεται αρχικά από τον κώδικα µίας διαδικασίας

αντιστοιχεί σε µία εικονική διεύθυνση οκτώ δυαδικών ψηφίων (8 bits), η οποία

χωρίζεται σε δύο µέρη. Το πρώτο αποτελεί τον αριθµό «εικονικής σελίδας (VPN:

Virtual Page Number) και το δεύτερο το «offset» µέσα στη σελίδα, της παρακάτω

µορφής (PGSIZE είναι το µέγεθος µίας φυσικής σελίδας µνήµης):

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 3.3

3.3.1 M¤ÚÔ˜ A: £ÂˆÚËÙÈ΋ ÂÍÔÈΛˆÛË

Στα πλαίσια του πρώτου µέρους της ενότητας, θα σας δοθεί το θεωρητικό µοντέλο

ενός απλού σχήµατος σελιδοποίησης και διαχείρισης εικονικής µνήµης, στη χρήση

και λειτουργία του οποίου καλείστε αρχικά να εξοικειωθείτε µέσω της επόµενης

Άσκησης Αυτοαξιολόγησης, µε σκοπό στη συνέχεια να προχωρήσετε στην υλοποί-

ηση των αντίστοιχων συναρτήσεων.

VPN ― (8–x) bits Offset ― (x) bits x=log2 PGSIZE

Ο αριθµός λογικής σελίδας χρησιµοποιείται ως δείκτης εισόδου στον πίνακα σελί-

δων της διαδικασίας, ο οποίος αρχίζει στη φυσική διεύθυνση που περιέχεται σε

έναν ειδικό καταχωρητή του συστήµατος (PTR: Page Table Base Register). Το

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 49

Page 50: Λειτουργικά Συστήματα

5 0 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

µήκος του πίνακα σελίδων περιέχεται σε έναν άλλο ειδικό καταχωρητή του συστή-

µατος (PLR: Page Table Length Register). Εάν VPN <= PLR, τότε ο αριθµός ανα-

φοράς είναι αποδεκτός και συνεχίζεται η διαδικασία απεικόνισής του στη φυσική

µνήµη του συστήµατος.

Κάθε είσοδος του πίνακα σελίδων έχει την παρακάτω µορφή:

VALID_BIT CHANGED_

BIT

REF_BIT (not used) Αριθµός φυσι-

κής σελίδας

(10 bits)

Η είσοδος που αντιστοιχεί στην εικονική διεύθυνση που πρόκειται να µετατραπεί

σε φυσική βρίσκεται στη διεύθυνση PTR+VPN.

Εάν το bit εγκυρότητας (VALID_BIT) είναι 0, έχουµε κατάσταση PAGE_FAULT

και το VPN που προκάλεσε το σφάλµα τοποθετείται σε έναν άλλο ειδικό κατα-

χωρητή του συστήµατος (PFR: Page Fault Register).

Εάν το VALID_BIT είναι 1, ο αριθµός φυσικής σελίδας συνδυάζεται µε το

«offset» και δηµιουργούν την τελική (10+x) bits διεύθυνση

(Αριθµός Φυσικής Σελίδας) x PGSIZE + offset

Μετά την εκτέλεση, το REF_BIT της εισόδου τίθεται στο 1, ενώ, αν έγινε εγγρα-

φή στη συγκεκριµένη θέση µνήµης, το CHANGED_BIT τίθεται επίσης στο 1.

• Υποθέστε τώρα ότι (α) η παράµετρος x είναι ίση µε 3 (bits), (β) η εικονική διεύ-

θυνση αναφοράς στη µνήµη που παράγει κάποια χρονική στιγµή µία διαδικα-

σία του συστήµατος είναι «10101111», (γ) η τιµή του καταχωρητή PTR είναι

ίση µε «00000», (δ) η τιµή του καταχωρητή PLR είναι ίση µε «11111» (ε) πρό-

κειται να γίνει εγγραφή στη συγκεκριµένη θέση µνήµης και (ε) ο πίνακας σελί-

δων (page table) της διαδικασίας έχει τα παρακάτω περιεχόµενα:

00000 0 0 0 NU 1010000110

0 0 0 NU 0010000110

0 0 0 NU 0010001110

0 0 0 NU 1010111110

1 0 0 NU 0011100110

1 1 0 NU 0011000110

1 1 0 NU 0100000110

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 50

Page 51: Λειτουργικά Συστήματα

5 13 . 3 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – ™ ∂ § π ¢ √ ¶ √ π ∏ ™ ∏

1 1 0 NU 0000100111

1 0 0 NU 1010001111

1 0 0 NU 1010011110

1 1 1 NU 1011110111

1 1 1 NU 0010011111

1 1 1 NU 1111000000

1 1 1 NU 1110000100

0 1 1 NU 0000000110

0 1 1 NU 0000000010

0 1 0 NU 0000001111

0 1 0 NU 1111110110

1 1 0 NU 1011111110

1 1 0 NU 1010101010

1 1 0 NU 0101010101

1 0 0 NU 1110000111

1 0 0 NU 1111001111

1 0 0 NU 1100000011

1 0 0 NU 0011111100

1 1 1 NU 0001111000

1 1 1 NU 0001110000

1 1 1 NU 1111011111

1 1 0 NU 0000100000

1 1 0 NU 1111111100

1 0 0 NU 0000101010

11111 1 0 0 NU 1010101111

Με βάση τα παραπάνω δεδοµένα (α) βρείτε ποια γραµµή του πίνακα σελίδων πρέ-

πει να χρησιµοποιηθεί για τη δεικτοδότηση στη φυσική µνήµη, (β) υπολογίστε

βάσει αυτής την τελική διεύθυνση αναφοράς στη µνήµη και (γ) δώστε τη νέα

µορφή της παραπάνω γραµµής του πίνακα σελίδων, αν κάτι έχει διαφοροποιηθεί

σε αυτήν.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 51

Page 52: Λειτουργικά Συστήματα

5 2 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

3.3.2 M¤ÚÔ˜ B: YÏÔÔ›ËÛË

Στα πλαίσια του δεύτερου µέρους της ενότητας, αφού θα έχετε κατανοήσει σε ικα-

νοποιητικό βαθµό το παραπάνω σχήµα σελιδοποίησης και διαχείρισης εικονικής µνή-

µης, θα πρέπει να το υλοποιήσετε σε γλώσσα C.

Πιο συγκεκριµένα σας ζητείται να φτιάξετε ένα πρόγραµµα, το οποίο θα λαµβάνει

ως βασική είσοδο τα παρακάτω:

• Έναν αριθµό διαδικασιών, οι οποίες εισέρχονται στο σύστηµα µε τους κωδικούς

τους (π.χ. διαδικασίες P1… Pn).

• Το µήκος (αριθµός bits) των λογικών διευθύνσεων που υποστηρίζει το σύστη-

µα («8» στην περίπτωση του παραπάνω Παραδείγµατος), την τιµή της παραµέ-

τρου «x» (offset) και το µήκος των τελικών φυσικών διευθύνσεων του συστή-

µατος («10+x» στην περίπτωση του Παραδείγµατός µας).

• Την ακολουθία λογικών διευθύνσεων, την οποία παράγει η κάθε διαδικασία σε

κάθε χρονική στιγµή, καθώς και µία ένδειξη για τον τύπο της εκάστοτε τέτοιου

είδους αναφοράς στη µνήµη (εάν πρόκειται για «ανάγνωση» ή για «εγγραφή»).

• Τους πίνακες σελίδων (page tables) της κάθε διαδικασίας και τις τιµές των κατα-

χωρητών PTR και PLR για κάθε διαδικασία.

Ως έξοδο το πρόγραµµα που θα φτιάξετε θα πρέπει να παράγει τα εξής:

• Την τελική φυσική διεύθυνση για κάθε αναφορά (λογικής διεύθυνσης) στη

µνήµη της κάθε διαδικασίας. Θα πρέπει, δηλαδή, το πρόγραµµά σας να παράγει

αντίστοιχες εξόδους βήµα προς βήµα (για κάθε χρονική στιγµή) και να υπολο-

γίζει ορθά τις τελικές διευθύνσεις αναφοράς στη φυσική µνήµη του συστήµα-

τος για όλες τις διαδικασίες.

• Τον πίνακα σελίδων της κάθε διαδικασίας, όπως αυτός διαµορφώνεται (σύµ-

φωνα µε τις εκάστοτε αλλαγές στα REF_BIT και CHANGED_BIT κάθε φορά)

µετά από κάθε αναφορά στη µνήµη και για κάθε διαδικασία.

• Εάν κατά την επεξεργασία µίας λογικής διεύθυνσης διαπιστωθεί ότι το VALID_BIT

της αντίστοιχης γραµµής του πίνακα σελίδων είναι «0», τότε η αντίστοιχη συνάρ-

τηση του προγράµµατός σας θα πρέπει απλώς να επιστρέφει ένα σχετικό διαγνω-

στικό µήνυµα και να ενηµερώνει τον καταχωρητή PFR (page fault register) µε τη

λογική διεύθυνση που προκάλεσε το συγκεκριµένο σφάλµα αναφοράς.

¢Ú·ÛÙËÚÈfiÙËÙ· 3.7

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 52

Page 53: Λειτουργικά Συστήματα

5 33 . 3 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – ™ ∂ § π ¢ √ ¶ √ π ∏ ™ ∏

Απαιτήσεις για τη µορφή του κώδικα

Ο κώδικάς σας θα πρέπει και γι’ αυτή την Άσκηση να είναι προσανατολισµένος

στην «πραγµατική» και «ρεαλιστική» κατά το δυνατόν υλοποίηση των µηχανισµών

σελιδοποίησης και διαχείρισης εικονικής µνήµης, όπως αυτοί περιγράφονται στο

Μέρος Α της παρούσας ενότητας. Πιο συγκεκριµένα, προσπαθήστε να ακολουθή-

σετε κατά το δυνατόν πιστότερα τις παρακάτω γενικές οδηγίες και κατευθύνσεις:

• Προσπαθήστε να προσοµοιώσετε στην υλοποίησή σας ένα κατά το δυνατόν ολο-

κληρωµένο λειτουργικό σύστηµα µε όλα τα απαραίτητα µέρη του (λεπτοµερώς τα

ζητούµενα στα πλαίσια αυτής της Άσκησης – εικονικά τα υπόλοιπα), π.χ. υλοποι-

ήστε µία εικονική K.M.E. και µία εικονική διαδικασία χρήσης αυτής από µία δια-

δικασία (π.χ. µία συνάρτηση η οποία απλώς θα παράγει µία λογική διεύθυνση ανα-

φοράς στη µνήµη, θα τη διοχετεύει στο «module» υλοποίησης του µηχανισµού

σελιδοποίησης, και απλά µετά θα «επιστρέφει» µε κάποια κατάλληλη τιµή).

• Προσπαθήστε να εξοµοιώσετε, όπως και στην αντίστοιχη Άσκηση της ενότητας

2.1– Μέρος Β, τη «δυναµική» ροή όσον αφορά την απαίτηση σελίδων. ∆ηλαδή,

κάθε χρονική στιγµή να διαφαίνεται καθαρά (µέσα από ξεχωριστές συναρτή-

σεις) κάθε πιθανή αναφορά µίας διαδικασίας στη µνήµη.

• Για διευκόλυνσή σας µπορείτε να θεωρήσετε ότι κάθε χρονική στιγµή γίνεται

και µία αναφορά σελίδας, οπότε µπορείτε να καλείτε το αντίστοιχο module απει-

κόνισης της διεύθυνσης µέσα από µία συνάρτηση της µορφής αυτής που θα φτιά-

ξετε για την «εικονική» εξοµοίωση της Κ.Μ.Ε. στην αντίστοιχη Άσκηση της

ενότητας 2.1.

• Το σηµαντικότερο µέρος της υλοποίησής σας αφορά τις δοµές, τις οποίες θα χρησι-

µοποιήσετε για την υποστήριξη του µηχανισµού σελιδοποίησης και εικονικής µνή-

µης, καθώς και τους µηχανισµούς δεικτοδότησης και αναζήτησης µέσα σε αυτές.

• Στα παραπάνω πλαίσια θα πρέπει να χρησιµοποιήσετε ξεχωριστές δοµές (πίνα-

κες, λίστες, δέντρα κ.ά.) καθώς και ξεχωριστές παραµετροποιηµένες συναρτή-

σεις αναζήτησης, εύρεσης, ανάγνωσης, εγγραφής κ.ά. τόσο (α) για τη φυσική

µνήµη του συστήµατος, όσο και (β) για τους πίνακες σελίδων και τη σχετική

µετατροπή µίας λογικής διεύθυνσης σε τελική φυσική διεύθυνση.

Έλεγχος (testing)

Σ’ αυτήν την Άσκηση δε σας ζητείται ιδιαίτερος έλεγχος µε εκτενή Παραδείγµατα

και εισόδους. Κύριο σκοπό της Άσκησης αποτελεί η υλοποίηση του βασικού µηχα-

νισµού σελιδοποίησης και διαχείρισης εικονικής µνήµης που περιγράφτηκε στο

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 53

Page 54: Λειτουργικά Συστήματα

5 4 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

Μέρος Α της παρούσας ενότητας, µε απώτερο στόχο την κατά το δυνατόν πληρέ-

στερη και ορθότερη ολοκλήρωση, η οποία σας ζητείται στα πλαίσια της επόµενης

ενότητας (ενότητα 3.4 Μέρος Γ). Ως ελάχιστη απαιτούµενη επιβεβαίωση ωστόσο

της ορθότητας του προγράµµατός σας, σας ζητούνται τα εξής:

• Αρχικά να ελέγξετε το πρόγραµµα που θα φτιάξετε µε βάση το παράδειγµα του

πρώτου µέρους της Άσκησης (διασταύρωση αποτελεσµάτων).

• Στη συνέχεια να κατασκευάσετε και να δοκιµάσετε µερικά ακόµα δικά σας

Παραδείγµατα τα οποία θα καλύπτουν ενδεικτικά τις σηµαντικότερες από τις

δυνατές διαφορετικές ποιοτικά περιπτώσεις που µπορούν να συναντηθούν σε

µία ρεαλιστική εφαρµογή του προγράµµατός σας (π.χ. (α) χρήση µικρών και

µεγάλων τιµών για τα µήκη λογικών και φυσικών διευθύνσεων καθώς και για

την παράµετρο «x», (β) δοκιµή όλων των διαφορετικών πιθανών τιµών για τα

VALID, REF και CHANGED_BIT κ.ά.).

3.4 ¢È·¯Â›ÚÈÛË ÌÓ‹Ì˘ – AÓÙÈηٿÛÙ·ÛË ÛÂÏ›‰ˆÓ

Τέλος, ως ολοκλήρωση του φάσµατος βασικών λειτουργιών του πυρήνα ενός

Unix–like λειτουργικού συστήµατος, καλείστε να προσοµοιώσετε ένα στοιχειώδη

µηχανισµό εξυπηρέτησης σφαλµάτων αναφοράς σελίδων συνοδευόµενο από τους

σηµαντικότερους υπάρχοντες µηχανισµούς αντικατάστασης σελίδων.

Μελετήστε αναλυτικά τη σχετική θεωρία, η οποία αφορά τους διάφορους υπάρ-

χοντες αλγόριθµους αντικατάστασης σελίδων από (α) το Kεφάλαιο 6 της βιβλιο-

γραφικής αναφοράς [2] και (β) το Kεφάλαιο 3 (ενότητες 3.3 και 3.4 κυρίως) της

βιβλιογραφικής αναφοράς [5] του παρόντος κεφαλαίου καθώς επίσης και από το

αντίστοιχο κεφάλαιο του βιβλίου «Λειτουργικά Συστήµατα Ι» του Ε.Α.Π. το οποίο

έχετε πρόσφατα διδαχθεί.

¢Ú·ÛÙËÚÈfiÙËÙ· 3.8

3.4.1 M¤ÚÔ˜ A: £ÂˆÚËÙÈ΋ ÂÍÔÈΛˆÛË

Σκοπός του πρώτου µέρους της ενότητας είναι να υπολογίσετε και να συγκρίνετε

την πρακτική συµπεριφορά τεσσάρων από τους πιο δηµοφιλείς αλγόριθµους αντι-

κατάστασης σελίδων (Fist In First Out, Least Recently Used, Least Frequently Used

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 54

Page 55: Λειτουργικά Συστήματα

και Most Frequently Used), µε βάση την παρακάτω ακολουθία αναφορών σελίδων:

1,3,5,4,2,7,5,6,2,8,2,5,3,6,8,2,4,1,3,6

Θεωρήστε ότι η παραπάνω ακολουθία αναφορών σελίδων παράγεται από µία (1) δια-

δικασία η οποία χρειάζεται συνολικά 8 σελίδες µνήµης και τρέχει σε ένα σύστηµα

µε έξι (6) µόνο πλαίσια σελίδων (frames) και αλγόριθµο εκχώρησης σελίδων «µε

απαίτηση» (demand paging).

5 53 . 4 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – A ¡ ∆ π ∫ ∞∆∞ ™ ∆∞ ™ ∏ ™ ∂ § π ¢ ø ¡

Με βάση την παραπάνω ακολουθία αναφορών και για καθέναν από τους προανα-

φερθέντες αλγόριθµους αντικατάστασης σελίδων, σας ζητείται να υπολογίσετε:

• σε κάθε χρονική στιγµή (ή για κάθε αναφορά σελίδας) ποιες σελίδες της διαδι-

κασίας βρίσκονται στα πλαίσια σελίδων του συστήµατος (πραγµατοποιώντας

αντικατάσταση σελίδων, όποτε είναι απαραίτητο και σύµφωνα µε τον εκάστο-

τε αλγόριθµο), συµπληρώνοντας κατάλληλα τους παρακάτω πίνακες αποτελε-

σµάτων και

• το συνολικό αριθµό σφαλµάτων σελίδας (page faults), τα οποία παράγονται

συνολικά και καθ’ όλη τη διάρκεια εκτέλεσης της διαδικασίας.

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 3.4

1 3 5 4 2 7 5 6 2 8 2 5 3 6 8 2 4 1 3 6

Frame 1

Frame 2

Frame 3

Frame 4

Frame 5

Frame 6

(α) Fisrt In First Out (FIFO):

Number of

Page Faults

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 55

Page 56: Λειτουργικά Συστήματα

5 6 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

1 3 5 4 2 7 5 6 2 8 2 5 3 6 8 2 4 1 3 6

Frame 1

Frame 2

Frame 3

Frame 4

Frame 5

Frame 6

(β) Least Recenly Used (LRU):

Number of

Page Faults

1 3 5 4 2 7 5 6 2 8 2 5 3 6 8 2 4 1 3 6

Frame 1

Frame 2

Frame 3

Frame 4

Frame 5

Frame 6

(γ) Least Frequently Used (LFU):

Number of

Page Faults

1 3 5 4 2 7 5 6 2 8 2 5 3 6 8 2 4 1 3 6

Frame 1

Frame 2

Frame 3

Frame 4

Frame 5

Frame 6

(δ) Most Frequently Used (MFU):

Number of

Page Faults

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 56

Page 57: Λειτουργικά Συστήματα

3.4.2 M¤ÚÔ˜ B: YÏÔÔ›ËÛË

Στα πλαίσια του δεύτερου µέρους της ενότητας καλείστε να υλοποιήσετε σε γλώσ-

σα C τους τέσσερις προαναφερθέντες αλγόριθµους και να συγκρίνετε την απόδοσή

τους µε βάση διάφορες ειδικές περιπτώσεις.

5 73 . 4 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – A ¡ ∆ π ∫ ∞∆∞ ™ ∆∞ ™ ∏ ™ ∂ § π ¢ ø ¡

Πιο συγκεκριµένα σας ζητείται να φτιάξετε ένα πρόγραµµα, το οποίο θα λαµβάνει

ως είσοδο:

• Μία διαδικασία (τον κωδικό της), η οποία προορίζεται για εκτέλεση στην

Κεντρική Μονάδα Επεξεργασίας του συστήµατος.

• Τον αριθµό των σελίδων µνήµης τις οποίες χρειάζεται η διαδικασία αυτή, για να

ολοκληρώσει την εκτέλεσή της.

• Τον αριθµό των διαθέσιµων πλαισίων σελίδων της µνήµης του συστήµατος για

την εκτέλεση αυτής της διαδικασίας.

• Την ακολουθία (µεταβλητού µεγέθους) αναφορών στη µνήµη που πραγµατο-

ποιεί η διαδικασία αυτή κατά τη διάρκεια εκτέλεσής της.

• Για µεγαλύτερη ευκολία στην υλοποίησή σας, υποθέστε ότι η διαδικασία εισό-

δου πραγµατοποιεί µία αναφορά σελίδας κάθε χρονική στιγµή.

Στη συνέχεια το πρόγραµµά σας θα πρέπει να επεξεργάζεται τα παραπάνω δεδοµέ-

να ξεχωριστά, προσπαθώντας σε κάθε χρονική στιγµή να ικανοποιεί την αντίστοι-

χη απαίτηση σελίδας της διαδικασίας. Η απαιτούµενη σελίδα κάθε χρονική στιγµή

• είτε θα υπάρχει ήδη στη µνήµη

• είτε δε θα υπάρχει – page fault – αλλά θα υπάρχει ένα ελεύθερο πλαίσιο µνήµης

το οποίο και θα της εκχωρείται

• ή, τέλος, δε θα υπάρχει – page fault – αλλά δε θα υπάρχει ούτε διαθέσιµο ελεύ-

θερο πλαίσιο µνήµης να της εκχωρηθεί, οπότε θα απαιτείται αντικατάσταση

κάποιας από τις ήδη υπάρχουσες στη µνήµη σελίδες.

Σε κάθε τέτοια περίπτωση θα χρησιµοποιούνται οι αναφερόµενοι στο πρώτο µέρος

της Άσκησης αλγόριθµοι αντικατάστασης (FIFO, LRU, LFU, MFU), τους οποίους

θα πρέπει να έχετε κατάλληλα υλοποιήσει σε ξεχωριστά modules. Ακολούθως και

για καθέναν από τους παραπάνω αλγόριθµους το πρόγραµµά σας θα πρέπει να

παράγει ως έξοδο τα παρακάτω δεδοµένα:

¢Ú·ÛÙËÚÈfiÙËÙ· 3.9

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 57

Page 58: Λειτουργικά Συστήματα

5 8 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

• Τον Πίνακα αντιστοίχισης των πλαισίων σελίδων της µνήµης µε τις σελίδες που

χρησιµοποιεί η διαδικασία, όπως αυτός διαµορφώνεται µετά από κάθε αναφο-

ρά της διαδικασίας στη µνήµη και στη µορφή που δίνεται στο πρώτο µέρος της

Άσκησης αυτής.

• Το συνολικό αριθµό σφαλµάτων σελίδας (page–faults) που προκάλεσε η εκτέ-

λεση της διαδικασίας.

• Το ρυθµό σφαλµάτων σελίδας (page fault rate) για τη συγκεκριµένη διαδικασία,

όπως αυτός διαµορφώνεται µε την ολοκλήρωση της εκτέλεσής της.

• Το ρυθµό σφαλµάτων σελίδας καθόλη τη διάρκεια εκτέλεσης της διαδικασίας,

υπό µορφή διαγράµµατος. Σε αυτήν την περίπτωση θα πρέπει να εξάγεται, εκτός

από τα ξεχωριστά διαγράµµατα για κάθε αλγόριθµο αντικατάστασης, ένα επι-

πλέον συγκεντρωτικό διάγραµµα, το οποίο θα απεικονίζει τη συµπεριφορά και

των τεσσάρων αλγορίθµων συγκριτικά.

Απαιτήσεις για τη µορφή του κώδικα

Κατά την υλοποίηση της Άσκησης αυτής, καλείστε καταρχάς και εδώ να ακολου-

θήσετε τις σχετικές γενικές οδηγίες (παραµετροποίηση, αυτονοµία, συµπαγής κώδι-

κας, σχόλια κ.ά.), οι οποίες σας δόθηκαν στα πλαίσια των προηγούµενων Ασκήσε-

ων του κεφαλαίου (και ειδικότερα αυτών των υποενοτήτων 3.1 και 3.3). Συµπλη-

ρωµατικά σε αυτές τις γενικές οδηγίες, καλείστε, επίσης, να δώσετε ιδιαίτερη προ-

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

• Όλοι οι ζητούµενοι αλγόριθµοι αντικατάστασης σελίδων θα πρέπει να υλοποι-

ηθούν ως ξεχωριστά τµήµατα του προγράµµατος (C modules µε τις αντίστοιχες

– έστω και λίγες – συναρτήσεις τους).

• Οι συναρτήσεις υλοποίησης των ζητούµενων αλγορίθµων θα πρέπει να είναι

παραµετροποιηµένες κατά τον αρτιότερο (και πλέον αυτόνοµο) δυνατό τρόπο,

µε στόχο την περαιτέρω διευκόλυνσή σας κατά την υλοποίηση του Μέρους Γ

(υποενότητα 3.4.3) της παρούσας Άσκησης.

• Για κάθε αλγόριθµο αντικατάστασης σελίδων θα πρέπει να επιλέξετε και να

δηλώσετε σε ξεχωριστά «header files» τις δοµές και τις συναρτήσεις οι οποίες

θα υποστηρίξουν τη λειτουργία του (ουρές, πίνακες, µετρητές, στοίβες κ.λπ.).

• Υλοποιήστε (α) µία εικονική K.M.E., (β) µία εικονική κύρια µνήµη του συστή-

µατος και (γ) µία εικονική διαδικασία χρήσης και επικοινωνίας αυτών (ο σκο-

πός λειτουργίας και επικοινωνίας αυτών στα πλαίσια της παρούσας Άσκησης

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 58

Page 59: Λειτουργικά Συστήματα

5 93 . 4 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – A ¡ ∆ π ∫ ∞∆∞ ™ ∆∞ ™ ∏ ™ ∂ § π ¢ ø ¡

είναι απλώς να διοχετεύεται στο πρόγραµµα η επόµενη αναφορά σελίδας, να

διαπιστώνεται η ύπαρξή της στη µνήµη ή όχι και να καλείται ανάλογα ο αντί-

στοιχος αλγόριθµoς αντικατάστασης σελίδων σε περίπτωση page–fault).

Έλεγχος (testing)

Για να ελέγξετε την ορθότητα του προγράµµατος που θα φτιάξετε, αρχικά δοκι-

µάστε να τρέξετε το Παράδειγµα του πρώτου µέρους της Άσκησης αυτής και να

διασταυρώσετε τα αντίστοιχα αποτελέσµατα.

Στη συνέχεια θα πρέπει µε δική σας πρωτοβουλία να κατασκευάσετε κατάλληλα

Παραδείγµατα (ακολουθίες αναφορών σελίδων για συγκεκριµένα δεδοµένα παρα-

µέτρων εισόδου, αριθµός διαθέσιµων πλαισίων µνήµης, αριθµός πλαισίων που χρει-

άζεται η διαδικασία κ.ά.) τα οποία θα κάνουν τα εξής:

• Θα επιδεικνύουν τα πλεονεκτήµατα και τα µειονεκτήµατα του καθενός από τους

τέσσερις προαναφερθέντες αλγόριθµους χρονοδροµολόγησης ξεχωριστά. Συνο-

λικά θα πρέπει να φτιάξετε και να τρέξετε οκτώ (8) τέτοια Παραδείγµατα (δύο για

κάθε αλγόριθµο). Σχολιάστε τα αποτελέσµατα για κάθε αλγόριθµο ξεχωριστά.

• Θα επιδεικνύουν συγκριτικά τα πλεονεκτήµατα και τα µειονεκτήµατα για τους

τρεις από τους τέσσερις δοθέντες αλγόριθµους αντικατάστασης σελίδων (όλους

εκτός από τον «Most Frequently Used» αλγόριθµο) και ειδικότερα σε ζεύγη ανά

δύο αλγόριθµους.

Σας ζητείται, επίσης, να κατασκευάσετε δύο–τρία Παραδείγµατα, κατά τα οποία

µία διαδικασία µε χρήση ενός από τους δοθέντες αλγόριθµους αντικατάστασης

σελίδων τον οποίο εσείς θα επιλέγετε κάθε φορά θα εµφανίζει πολύ µεγάλο αριθ-

µό σφαλµάτων αναφοράς σελίδων (page–faults – σε σχέση µε το συνολικό αριθµό

αναφορών της στη µνήµη του συστήµατος), θα οδηγείται, δηλαδή, το σύστηµα σε

λυγισµό (thrashing)

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 59

Page 60: Λειτουργικά Συστήματα

6 0 K E º A § A I O 3 : A ™ ∫ ∏ ™ ∂ π ™ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™ § ∂ π ∆ √ À ƒ ° π ø ¡ ∆ √ À ¶ À ƒ ∏ ¡ ∞ ∂ ¡ √ ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ T À ¶ √ À U N I X

™‡ÓÔ„Ë

Κύριο αντικείµενο του κεφαλαίου αυτού αποτέλεσε η εκµάθηση και η περαιτέρω εξοι-

κείωσή σας µε τις βασικές τεχνικές υλοποίησης των κυριότερων λειτουργιών του

πυρήνα ενός Unix–like λειτουργικού συστήµατος. Σε γενικές γραµµές, διδαχθήκατε

(µέσω αντίστοιχων Ασκήσεων προσοµοίωσης µε απλά προγράµµατα και συναρτή-

σεις) τον τρόπο µε τον οποίο µπορούν να υλοποιηθούν στην πράξη και µε τη βοήθεια

µίας ισχυρής, χαµηλού επιπέδου (low–level) γλώσσας προγραµµατισµού, όπως η

γλώσσα C, µερικοί από τους σηµαντικότερους µηχανισµούς λειτουργίας ενός τέτοι-

ου είδους πυρήνα (kernel) λειτουργικού συστήµατος.

Ειδικότερα, κληθήκατε να προσοµοιώσετε (και να εξετάσετε πειραµατικά τα συγκρι-

τικά πλεονεκτήµατα και µειονεκτήµατα αυτών) (α) τους πλέον διαδεδοµένους αλγό-

ριθµους χρονοδροµολόγησης διαδικασιών (Round Robin, Shortest Remaining Time

First, First Come First Serve και Preemptive Priority), (β) µερικούς από τους πιο

γνωστούς και αποτελεσµατικούς αλγόριθµους αντικατάστασης σελίδων (First In First

Out, Least Frequently Used, Most Frequently Used και Least Recently Used), καθώς

και (γ) τους κλασικούς µηχανισµούς σελιδοποίησης, συγχρονισµού (µε χρήση σηµα-

φόρων) και εισόδου/εξόδου ενός Unix–like λειτουργικού συστήµατος.

BÈ‚ÏÈÔÁÚ·Ê›·

[1]B.W. Kernighan and D. Ritchie, «Η Γλώσσα Προγραµµατισµού C», Κλειδάριθ-

µος, Aθήνα, 1990 [ελληνική µετάφραση του πρωτότυπου «The C Programming

Language», Prentice–Hall Inc., Englewood Cliffs, New Jersey, 2nd edition, 1988].

[2] J. L. Peterson and A. Silberschatz, «Operating Systems Concepts»,

Addison–Wesley, World Student Series Edition, Reading Massachusetts, 1985.

[3]Π. Σπυράκης, «Λειτουργικά Συστήµατα Ι», Ελληνικό Ανοικτό Πανεπιστήµιο,

Θεµατική Ενότητα ΠΛH 11, Tόµος B'.

[4]S. J. Leffler and M. K. McKusick, «The Design and Implementation of the 4.3

Bsd Unix Operating System», 2nd edition, Addisson–Wesley Inc., Reading

Massachusetts, 1990.

[5]A. S. Tanenbaum, «Σύγχρονα Λειτουργικά Συστήµατα» (Τόµος Α’), εκδόσεις

Παπασωτηρίου, Aθήνα, 1993 [ελληνική µετάφραση του πρωτότυπου «Modern

Operating Systems», Prentice–Hall Inc., Englewood Cliffs, New Jersey, 1992].

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 60

Page 61: Λειτουργικά Συστήματα

OÏÔÎÏ‹ÚˆÛË Ù˘ ·Ó¿Ù˘Í˘ ÂÓfi˜ ÛÙÔȯÂÈÒ‰Ô˘˜ ÏÂÈÙÔ˘ÚÁÈÎÔ‡ Û˘ÛÙ‹Ì·ÙÔ˜ Ù‡Ô˘ UNIX

™ÎÔfi˜

Βασικός σκοπός του κεφαλαίου αυτού είναι η ολοκλήρωση των επιµέρους προγραµ-

µάτων και συναρτήσεων που αναπτύξατε στα πλαίσια του προηγούµενου κεφαλαίου

σε ένα στοιχειώδες (ολοκληρωµένο, όµως, πλέον) λειτουργικό σύστηµα. Το προσο-

µοιωµένο αυτό λειτουργικό σύστηµα θα συνοδεύεται, επίσης, από µία υποθετική µηχα-

νή και ένα στοιχειώδη συµβολοµεταφραστή για την απλή γλώσσα λετουργίας της

µηχανής αυτής, µε σκοπό να µπορείτε να δοκιµάσετε το στοιχειώδες λειτουργικό

σύστηµα που θα αναπτύξετε, προσοµοιώνοντας πραγµατικές συνθήκες φόρτου διερ-

γασιών και προγραµµάτων συµβολικής γλώσσας.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε υλοποιήσει σε ικανοποιητικό βαθµό τα προγράµµατα προσοµοίωσης

λειτουργικού συστήµατος και ολοκλήρωσης της λειτουργίας του σε πραγµατικές συν-

θήκες, τα οποία σας ζητούνται σε αυτό το κεφάλαιο, θα έχετε τη δυνατότητα:

• να υλοποιείτε (προσοµοιώνετε) ένα στοιχειώδη πυρήνα λειτουργικού συστήµατος

τύπου UNIX,

• να φτιάχνετε έναν απλό συµβολοµεταφραστή (assembler),

• να προσοµοιώνετε σε γλώσσα C µία υποθετική µηχανή στοιχειωδών απαιτήσεων,

• να συνδέετε τη λειτουργία µίας στοιχειώδους υποθετικής µηχανής µε τον πυρήνα

ενός στοιχειώδους λειτουργικού συστήµατος,

• να προσοµοιώνετε σε γλώσσα C ένα στοιχειώδες αλλά ολοκληρωµένο από πλευ-

ράς συνιστωσών υπολογιστικό σύστηµα,

• να γράφετε, να φορτώνετε και να εκτελείτε απλά προγράµµατα συµβολικής γλώσ-

σας σε ένα στοιχειώδες λειτουργικό σύστηµα.

ŒÓÓÔȘ ÎÏÂȉȿ

4∫ ∂ º ∞ § ∞ π √

• συµβολική γλώσσα

• συµβολοµεταφραστής

• γλώσσα µηχανής

• συσσωρευτής

• καταχωρητές ∆είκτη

• κεντρική µνήµη

• ready–queue

• µετρητής προγράµµατος

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 61

Page 62: Λειτουργικά Συστήματα

6 2 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Η Εργαστηριακή Άσκηση του κεφαλαίου αυτού αποτελεί άµεση συνέχεια των επιµέ-

ρους Εργαστηριακών Ασκήσεων/συναρτήσεων προσοµοίωσης του προηγούµενου

κεφαλαίου. Σκοπός είναι η ολοκλήρωση αυτών σε ένα ενιαίο πρόγραµµα, το οποίο

θα προσοµοιώνει κατά το δυνατό πιστότερο τρόπο την ολοκληρωµένη λειτουργία ενός

λειτουργικού συστήµατος τύπου UNIX. Η αυξηµένη παραµετροποίηση, την οποία

ακολουθήσατε στην ανάπτυξη των συναρτήσεων του προηγούµενου κεφαλαίου, ανα-

µένεται να σας βοηθήσει σηµαντικά, ώστε να ενοποιήσετε τις συναρτήσεις αυτές σε

ένα ενιαίο πρόγραµµα προσοµοίωσης του πυρήνα του λειτουργικού συστήµατος χωρίς

ιδιαίτερες δυσκολίες.

Στη συνέχεια και µε σκοπό να εφαρµόσετε και να ελέγξετε το λειτουργικό σύστηµα

που θα προσοµοιώσετε σε κατά το δυνατόν πραγµατικές συνθήκες, θα κληθείτε να

εξοµοιώσετε, επίσης, µία υποθετική µηχανή περιορισµένων δυνατοτήτων (θα υπο-

στηρίζει την εκτέλεση µικρού αριθµού εντολών, οι οποίες αρχικά θα είναι γραµµένες

σε µία απλή συµβολική γλώσσα και θα µεταφράζονται µε τη βοήθεια ενός απλού συµ-

βολοµεταφραστή). Έτσι, θα µπορείτε να εκτελείτε µε τη βοήθεια του λειτουργικού

συστήµατος πραγµατικές εντολές και προγράµµατα και να ελέγχετε πιστότερα και πιο

ολοκληρωµένα την απόδοσή του και τη λειτουργικότητά του.

Θα πρέπει να σηµειωθεί, επίσης, ότι το σύνολο της προσπάθειας προσοµοίωσης ενός

στοιχειώδους λειτουργικού συστήµατος και µίας υποθετικής µηχανής για τη λειτουρ-

γία του, η οποία ολοκληρώνεται σε αυτό το κεφάλαιο, στηρίζεται σε πολλές µη ρεαλι-

στικές παραδοχές, καθώς βασικό στόχο αποτελεί η πρακτική σας εξάσκηση και εξοι-

κείωση µε τη λογική και τις τεχνικές υλοποίησης των λειτουργικών συστηµάτων και

όχι η ανάπτυξη ενός πλήρους λειτουργικού συστήµατος, κάτι το οποίο υπερβαίνει κατά

πολύ τους σκοπούς και τα επιτρεπόµενα όρια δυσκολίας αυτού του εργαστηρίου.

• καθεστώς χρήστη/πυρήνα

• πολυδιεργασιακό σύστηµα

Παράλληλα µε την ενασχόλησή σας µε τις Ασκήσεις Αυτοαξιολόγησης αυτού του

κεφαλαίου και σε κάθε σας βήµα, έχετε εύκολα προσβάσιµα και συµβουλευτείτε

τα για κάθε σχετική απορία σας:

¢Ú·ÛÙËÚÈfiÙËÙ· 4.1

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 62

Page 63: Λειτουργικά Συστήματα

4.1 EÓÔÔ›ËÛË ÙˆÓ ÂÈ̤ÚÔ˘˜ Û˘Ó·ÚÙ‹ÛÂˆÓ ÚÔÛÔÌÔ›ˆÛ˘

Η προσπάθεια ολοκλήρωσης της προσοµοίωσης ενός στοιχειώδους λειτουργικού

συστήµατος τύπου UNIX θα ξεκινήσει αρχικά µε την ενοποίηση των συναρτήσεων

και των προγραµµάτων που αναπτύξατε στα πλαίσια του προηγούµενου κεφαλαίου

για την προσοµοίωση των βασικών λειτουργιών του πυρήνα ενός τέτοιου λειτουρ-

γικού συστήµατος (χρονοδροµολόγηση διαδικασιών, διαχείριση µνήµης και υπο-

στήριξη εικονικής µνήµης). Ως αποτέλεσµα, αφού περατώσετε τις Ασκήσεις Αυτο-

αξιολόγησης της ενότητας αυτής, θα έχετε πλέον στη διάθεσή σας το «σκελετό» ενός

προσοµοιωµένου στοιχειώδους λειτουργικού συστήµατος, πάνω στον οποίο θα προ-

σαρµόσετε στη συνέχεια τα ρεαλιστικά στοιχεία υπολογιστικής επεξεργασίας που

απαιτούνται για την ολοκλήρωσή του.

4.1.1 EÓÔÔ›ËÛË ÚÔÁÚ·ÌÌ¿ÙˆÓ ‰È·¯Â›ÚÈÛ˘ ÌÓ‹Ì˘

6 34 . 1 E ¡ √ ¶ √ π ∏ ™ ∏ ∆ ø ¡ ∂ ¶ π ª ∂ ƒ √ À ™ ™ À ¡ ∞ ƒ ∆ ∏ ™ ∂ ø ¡ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™

• Τη βιβλιογραφική αναφορά [1] (και ειδικότερα τα Kεφάλαια 4–8) του παρόντος

κεφαλαίου για οποιαδήποτε δυσκολία συναντήσετε σχετικά µε στοιχεία, δοµές

κ.λπ. της γλώσσας C, στην οποία καλείστε να ολοκληρώσετε την προσοµοίωση

του πυρήνα ενός λειτουργικού συστήµατος τύπου UNIX.

• Τη βιβλιογραφική αναφορά [4] (και ειδικότερα τα Kεφάλαια 3–4 και 6–7) του

παρόντος κεφαλαίου ως συµβουλευτικό οδηγό για οποιαδήποτε δυσκολία συνα-

ντήσετε κατά την υλοποίηση των ζητούµενων συνιστωσών ενός λειτουργικού

συστήµατος τύπου UNIX (πυρήνας, επικοινωνία µε πόρους της υποθετικής υπο-

λογιστικής µηχανής κ.ά.)

Αρχικά σας ζητείται να συνδέσετε κατάλληλα µεταξύ τους (α) το πρόγραµµα σελι-

δοποίησης και υποστήριξης εικονικής µνήµης, το οποίο έχετε ήδη αναπτύξει στα

πλαίσια της ενότητας 3.3, και (β) το πρόγραµµα εφαρµογής αλγόριθµων αντικα-

τάστασης σελίδων που αναπτύξατε στα πλαίσια της ενότητας 3.4.

Οδηγίες ενοποίησης

Όπως θα έχετε διαπιστώσει ήδη από την ενασχόλησή σας µε τα δύο αυτά προ-

γράµµατα, το ποσοστό επικάλυψης λειτουργιών (και το µοναδικό ουσιαστικό πρό-

βληµα το οποίο έχετε να αντιµετωπίσετε κατά τη σύνδεση) είναι πολύ µικρό (η

περίπτωση (α) κατά την οποία η αναφερόµενη σελίδα υπάρχει ήδη στη µνήµη).

¢Ú·ÛÙËÚÈfiÙËÙ· 4.2

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 63

Page 64: Λειτουργικά Συστήματα

6 4 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

Όλες οι υπόλοιπες λειτουργίες είναι ξεχωριστές µεταξύ τους, οπότε αρκεί:

• να συνδεθούν κατάλληλα οι συναρτήσεις του προγράµµατος της ενότητας 3.4 που

υλοποιούν την τοποθέτηση µίας νέας σελίδας στη µνήµη είτε σε ελεύθερη θέση

είτε µέσω ενός αλγόριθµου αντικατάστασης στις αντίστοιχες περιπτώσεις (β) και

(γ) του προγράµµατος προσοµοίωσης σελιδοποιηµένης µνήµης της ενότητας 3.3,

• να ενοποιηθούν/συγχωνευθούν κατάλληλα οι απαιτήσεις δεδοµένων εισόδου και

εξόδου των δύο προγραµµάτων, ώστε να παρέχεται πλέον ένα περιβάλλον

(interface) επικοινωνίας µε το χρήστη, το οποίο θα ικανοποιεί λειτουργικά όλες

τις επιµέρους περιπτώσεις.

Για τη σύνδεση των δύο παραπάνω προγραµµάτων δε θα σας δοθούν άλλες οδη-

γίες, καθώς αναµένεται να αποτελέσει µία εύκολη Άσκηση ολοκλήρωσης, υπό την

προϋπόθεση ότι έχετε ακολουθήσει τις οδηγίες που σας έχουν δοθεί για κάθε πρό-

γραµµα ξεχωριστά (παραµετροποίηση, προσοµοίωση δυναµικής ροής κ.ά.)

Έλεγχος (testing)

Τέλος, καλείστε να ελέγξετε την ορθή λειτουργία του ενοποιηµένου προγράµµατος

διαχείρισης σελιδοποιηµένης µνήµης και υποστήριξης εικονικής µνήµης που έχετε

στη διάθεσή σας, τρέχοντας σε αυτό όλα τα Παραδείγµατα τα οποία σας ζητήθηκε

να δοκιµάσετε και να ελέγξετε σε κάθε πρόγραµµα ξεχωριστά στα πλαίσια των ενο-

τήτων 3.3 και 3.4 (παράγραφοι «ελέγχου» – testing – των ενοτήτων αυτών).

Τα παραπάνω Παραδείγµατα θα πρέπει αρχικά να τα προσαρµόσετε στην ενοποι-

ηµένη µορφή των δεδοµένων εισόδου που διαθέτει πλέον το ολοκληρωµένο πρό-

γραµµα διαχείρισης µνήµης, ώστε να µπορούν να τρέξουν στο ίδιο περιβάλλον και

να είναι δυνατόν στο τέλος να διασταυρώσετε τα αποτελέσµατα µε αυτά των ∆ρα-

στηριοτήτων «ελέγχου» των παραγράφων 3.3.2 και 3.4.2.

4.1.2 EÓÔÔ›ËÛË ¯ÚÔÓÔ‰ÚÔÌÔÏÔÁËÙ‹ Î·È ÚÔÛÔÌÂȈ̤Ó˘ ÌÓ‹Ì˘

Το δεύτερο βήµα το οποίο απαιτείται για την αρχική ολοκλήρωση ενός στοιχειώ-

δους λειτουργικού συστήµατος συνίσταται στην ενοποίηση (α) του προγράµµατος

διαχείρισης µνήµης που ολοκληρώσατε στα πλαίσια της προηγούµενης Άσκησης

(∆ραστηριότητα 4.2) και (β) του προγράµµατος προσοµοίωσης των λειτουργιών

χρονοδροµολόγησης διαδικασιών που αναπτύξατε στα πλαίσια της ενότητας 3.1.

¢Ú·ÛÙËÚÈfiÙËÙ· 4.3

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 64

Page 65: Λειτουργικά Συστήματα

6 54 . 1 E ¡ √ ¶ √ π ∏ ™ ∏ ∆ ø ¡ ∂ ¶ π ª ∂ ƒ √ À ™ ™ À ¡ ∞ ƒ ∆ ∏ ™ ∂ ø ¡ ¶ ƒ √ ™ √ ª √ π ø ™ ∏ ™

Οδηγίες ενοποίησης

Και σ’ αυτήν την περίπτωση είναι εύκολο να διαπιστώσετε ότι τα δύο προγράµ-

µατα προσοµοίωσης είναι ουσιαστικά «ξένα» µεταξύ τους, καθώς κατά την ανά-

πτυξη του προσοµοιωτή της διαδικασίας χρονοδροµολόγησης οι συναρτήσεις πρό-

σβασης και επικοινωνίας µε τη µνήµη του συστήµατος τις οποίες χρησιµοποιήσα-

τε ήταν «εικονικές». Συνεπώς για την ενοποίηση των δύο προγραµµάτων αρκεί:

• η σύνδεση των συναρτήσεων του ενιαίου προγράµµατος διαχείρισης µνήµης στο

σηµείο εκείνο που υλοποιείτε την «εικονική» διαδικασία προσπέλασης στη

µνήµη του συστήµατος, στο πρόγραµµα προσοµοίωσης των λειτουργιών χρο-

νοδροµολόγησης.

Επίσης, κατά την ενοποίηση των παραπάνω προγραµµάτων θα πρέπει να λάβετε

υπόψη σας και τις παρακάτω οδηγίες/κατευθύνσεις:

• Οι συναρτήσεις εξυπηρέτησης µνήµης θα πρέπει να καλούνται αυτόνοµα (όπως

ισχύει και για τη συνάρτηση εξυπηρέτησης από την Κ.Μ.Ε. για εκτέλεση εντο-

λών) µέσα από το προσοµοιωµένο λειτουργικό σύστηµα, καθώς η κύρια µνήµη

του συστήµατος θα αποτελέσει ουσιαστικά µέρος της υποθετικής υπολογιστι-

κής µηχανής που θα προσοµοιώσετε στη συνέχεια.

• H διαδικασία κατασκευής του Process Control Block (PCB) για κάθε εισερχό-

µενη διαδικασία θα πρέπει να προσαρµοστεί (να συγχωνευθούν ουσιαστικά οι

αντίστοιχες δοµές και διαδικασίες των δύο προγραµµάτων) έτσι, ώστε να περιέ-

χει πλέον τα ρεαλιστικά δεδοµένα τόσο από την πλευρά της χρονοδροµολόγη-

σης (π.χ. προτεραιότητα, αριθµός time–slice που έχει καταναλώσει, περιεχόµε-

να καταχωρητών κ.ά.), όσο και από την πλευρά της διαχείρισης µνήµης (π.χ.

πίνακας σελίδων, καταχωρητές PTR και PLR κ.ά.).

• Η διαδικασία εισαγωγής και περιοδικής αποµάκρυνσης και επαναφοράς κάθε

διεργασίας για εκτέλεση στην Κ.Μ.Ε. ανάλογα µε τον εκάστοτε αλγόριθµο χρο-

νοδροµολόγησης που ακολουθείται (π.χ. round robin) θα πρέπει πλέον να συµπε-

ριλαµβάνει και τις απαραίτητες λειτουργίες αποθήκευσης και επαναφοράς χαρα-

κτηριστικών που αφορούν τη χρήση σελίδων της κύριας µνήµης από τη διεργα-

σία (π.χ. περιεχόµενα µετρητή προγράµµατος, πίνακα σελίδων κ.ά.).

• Κατά την περίπτωση εµφάνισης σφάλµατος αναφοράς σελίδας (page–fault) θα

πρέπει να εναρµονιστούν οι χρονικοί µηχανισµοί των δύο προγραµµάτων, καθώς

η διαδικασία εξυπηρέτησης page–fault αποτελεί µέρος των λειτουργιών του λει-

τουργικού συστήµατος και όχι της Κ.Μ.Ε. ∆ε θα πρέπει να λαµβάνεται, δηλα-

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 65

Page 66: Λειτουργικά Συστήματα

6 6 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

δή, ο αντίστοιχος απαιτούµενος χρόνος εξυπηρέτησης ως χρόνος χρήσης της

Κ.Μ.Ε. για εκτέλεση εντολών.

• Απαιτείται, τέλος, να ενοποιηθούν/συγχωνευθούν κατάλληλα οι απαιτήσεις δεδο-

µένων εισόδου και εξόδου των δύο προγραµµάτων, ώστε να παρέχεται πλέον

ένα περιβάλλον (interface) επικοινωνίας µε το χρήστη το οποίο θα ικανοποιεί

λειτουργικά όλες τις επιµέρους περιπτώσεις.

Έλεγχος (testing)

Για τον έλεγχο της ορθότητας του ολοκληρωµένου πλέον (από άποψη βασικών λει-

τουργιών) στοιχειώδους λειτουργικού συστήµατός σας, καλείστε να τρέξετε σε

αυτό όλα τα Παραδείγµατα τα οποία σας ζητήθηκε να δοκιµάσετε και να ελέγξετε

σε κάθε υποπρόγραµµα ξεχωριστά στα πλαίσια των ενοτήτων 3.1, 3.3 και 3.4 (βλ.

αντίστοιχες επιµέρους παραγράφους «ελέγχου» – testing – των ενοτήτων αυτών).

Ωστόσο, σε αυτήν την περίπτωση θα απαιτηθεί να προσαρµόσετε/αναδοµήσετε τα

παραπάνω Παραδείγµατα σε µεγάλο βαθµό, ώστε να είναι συµβατά µε την ενο-

ποιηµένη µορφή των δεδοµένων εισόδου που διαθέτει πλέον το ολοκληρωµένο

στοιχειώδες λειτουργικό σύστηµα που έχετε προσοµοιώσει. Πιο συγκεκριµένα, θα

πρέπει σε κάθε Παράδειγµα να συνδυάσετε/ταιριάξετε τον αριθµό των χρονικών

µονάδων που απαιτεί η εκτέλεση της κάθε διεργασίας µε την ακολουθία αναφο-

ρών στη µνήµη την οποία παράγει. Προκειµένου δε να µπορείτε να διασταυρώσε-

τε αξιόπιστα στο τέλος τα αποτελέσµατα που θα λάβετε µε αυτά των παραγράφων

«ελέγχου» (testing) των ενοτήτων 3.1, 3.3 και 3.4, αρκεί να κάνετε τις παρακάτω

αλλαγές/προσθήκες:

• Να προσαρµόσετε τα Παραδείγµατα που χρησιµοποιήσατε για τον έλεγχο ορθό-

τητας των λειτουργιών χρονοδροµολόγησης, δίνοντας για κάθε διεργασία ως

συµπληρωµατική είσοδο το µήκος ακολουθίας αναφορών στη µνήµη ίσο µε τον

αριθµό των χρονικών στιγµών που απαιτούνται για την εκτέλεσή της, και ακο-

λούθως να διασταυρώσετε τα αντίστοιχα αποτελέσµατα µόνο µε αυτά της παρα-

γράφου 3.1.2.

• Να προσαρµόσετε τα Παραδείγµατα που χρησιµοποιήσατε για τον έλεγχο ορθό-

τητας των λειτουργιών διαχείρισης µνήµης, δίνοντας για κάθε διεργασία ως

συµπληρωµατική είσοδο (α) τον αριθµό των χρονικών στιγµών που απαιτούνται

για την εκτέλεσή της ίσο µε το µήκος της ακολουθίας αναφορών στη µνήµη που

παράγει και (β) ίδια χρονική στιγµή εισόδου στο σύστηµα για όλες τις διεργα-

σίες, τη χρονική στιγµή «0». Ακολούθως, θα έχετε τη δυνατότητα να διασταυ-

ρώσετε τα αντίστοιχα αποτελέσµατα µε αυτά των παραγράφων 3.3.2 και 3.4.2.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 66

Page 67: Λειτουργικά Συστήματα

6 74 . 2 ¶ ƒ √ ™ √ ª √ π ø ™ ∏ À ¶ √ £ ∂ ∆ π ∫ ∏ ™ ª ∏ Ã ∞ ¡ ∏ ™

4.2 ¶ÚÔÛÔÌÔ›ˆÛË ˘ÔıÂÙÈ΋˜ Ì˯·Ó‹˜

Η βασική συνιστώσα η οποία απουσιάζει πλέον από το στοιχειώδες λειτουργικό

σύστηµα τύπου UNIX που έχετε προσοµοιώσει µέχρι τώρα είναι εµφανώς µία ρεα-

λιστική µονάδα επεξεργασίας και εκτέλεσης πραγµατικών εντολών, η οποία θα πρέ-

πει να εισαχθεί στο τµήµα του κώδικά σας το οποίο υλοποιεί µία εικονική Κεντρι-

κή Μονάδα Επεξεργασίας (Κ.Μ.Ε.). Η προσοµοίωση µίας τέτοιας στοιχειώδους υπο-

λογιστικής µηχανής και η ενοποίησή της στο στοιχειώδες λειτουργικό σας σύστηµα

αποτελεί το κύριο αντικείµενο της παρούσας ενότητας σε συνδυασµό µε την απα-

ραίτητη κατασκευή και ενός απλού συµβολοµεταφραστή, για να είναι δυνατή η εισα-

γωγή εκτελέσιµων προγραµµάτων και εντολών στο σύστηµά σας.

4.2.1 YÏÔÔ›ËÛË ‚·ÛÈÎÒÓ ¯·Ú·ÎÙËÚÈÛÙÈÎÒÓ ˘ÔıÂÙÈ΋˜ Ì˯·Ó‹˜

Αρχικά, λοιπόν, και στα πλαίσια της ∆ραστηριότητας αυτής, καλείστε να προσο-

µοιώσετε σε γλώσσα C τα βασικά στοιχεία (Κ.Μ.Ε., καταχωρητές κ.ά.) καθώς και

τη λειτουργία µίας στοιχειώδους υπολογιστικής µηχανής. Η µηχανή αυτή θα λει-

τουργεί σε συνεργασία µε το προσοµοιωµένο λειτουργικό σύστηµα (µέσω κλήσε-

ως των αντίστοιχων συναρτήσεων), µε το οποίο θα διασυνδεθεί κατά τον τρόπο

που περιγράφεται στις παραγράφους 4.2.2 και 4.2.3.

Η υποθετική υπολογιστική µηχανή την οποία θα προσοµοιώσετε θα περιλαµβάνει

τα παρακάτω βασικά χαρακτηριστικά:

• Ένα συσσωρευτή (accumulator) οκτώ (8) δυαδικών ψηφίων, ο οποίος θα έχει τη

δυνατότητα της δυαδικής πρόσθεσης ενός αριθµού στο περιεχόµενό του.

Συσσωρευτής (accumulator)

• ∆ύο καταχωρητές δείκτη (index registers) των οκτώ (8) δυαδικών ψηφίων ο

καθένας (καταχωρητής–x και καταχωρητής–y), για τους οποίους θα υπάρχει η

δυνατότητα µείωσης της τιµής τους κατά «1» και σύγκρισης αυτής µε το «0»

και οι οποίοι θα χρησιµοποιούνται κυρίως ως «δείκτες» για την εκτέλεση βρό-

χων (loops) και ως καταχωρητές προσωρινής αποθήκευσης.

• Έναν καταχωρητή/µετρητή προγράµµατος (program counter) των οκτώ (8) δυα-

δικών ψηφίων, o oποίος θα περιέχει κάθε φορά τη διεύθυνση της µνήµης που

περιέχει την επόµενη προς εκτέλεση εντολή της τρέχουσας διεργασίας.

A7 A0

¢Ú·ÛÙËÚÈfiÙËÙ· 4.4

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 67

Page 68: Λειτουργικά Συστήματα

6 8 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

Mετρητής Προγράµµατος

• Κεντρική µνήµη χωρητικότητας Μ (Μ=2m) θέσεων (bytes) των οκτώ (8) δυαδι-

κών ψηφίων η καθεµία (θα υλοποιηθεί µέσω ενός µονοδιάστατου πίνακα – array

– διάστασης M) και αριθµηµένων (διευθυνσιοδότηση) από «0» έως «Μ–1» σε

δυαδική µορφή. Η κεντρική µνήµη Μ θα είναι χωρισµένη σε P (P=2p) σελίδες

µνήµης των R (R=2r=2m–p) θέσεων η καθεµία.

• Τους απαραίτητους καταχωρητές διαχείρισης µνήµης και υποστήριξης εικονι-

κής µνήµης PTR (Page Table Base Register), PLR (Page Table Length Register)

και PFR (Page Fault Register), των οκτώ (8) δυαδικών ψηφίων ο καθένας.

• Κεντρική Μονάδα Επεξεργασίας, η οποία θα επιτελεί τις απαραίτητες διαδικα-

σίες για την εκτέλεση των εντολών του εκτελέσιµου προγράµµατος που αντι-

στοιχεί σε κάθε διεργασία:

• ∆ιάβασµα (fetch) από τη µνήµη της επόµενης εντολής της τρέχουσας διεργα-

σίας και αύξηση του µετρητή προγράµµατος κατά ένα.

• Αναγνώριση του είδους της εντολής και εκτέλεση της λειτουργίας που υπαγο-

ρεύεται από αυτή (τα ακριβή είδη εντολών που θα πρέπει να αναγνωρίζει και να

εκτελεί η Κ.Μ.Ε., καθώς και ο µηχανισµός αναγνώρισης αυτών, προσδιορίζο-

νται αναλυτικά στην επόµενη παράγραφο).

• Ανάγνωση και εγγραφή δεδοµένων (σε «λέξεις» των οκτώ (8) δυαδικών ψηφίων,

από/προς µία θέση µνήµης.

Οδηγίες υλοποίησης

Με σκοπό τη λειτουργικότερη δυνατή υλοποίηση και την ορθή διασύνδεση της

υποθετικής υπολογιστικής µηχανής που περιγράφτηκε παραπάνω µε το υπάρχον

προσοµοιωµένο λειτουργικό σύστηµα, θα πρέπει να ακολουθήσετε τις παρακάτω

οδηγίες/κατευθύνσεις:

• Όλη η απαραίτητη διασύνδεση του λειτουργικού συστήµατος τύπου UNIX µε

την υποθετική µηχανή (δηλαδή τον κώδικα, ο οποίος θα την προσοµοιώνει) θα

πραγµατοποιηθεί µέσα από το «CPU module», το οποίο στο µέχρι τώρα κώδι-

P1 P2 P3 PP

000…0(m) 111…1(m)

0 R–1 2R–1 3R–1 (P–1)R–1 M–1

P7 P0

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 68

Page 69: Λειτουργικά Συστήματα

6 94 . 2 ¶ ƒ √ ™ √ ª √ π ø ™ ∏ À ¶ √ £ ∂ ∆ π ∫ ∏ ™ ª ∏ Ã ∞ ¡ ∏ ™

κα προσοµοίωσης λειτουργικού συστήµατος που έχετε αναπτύξει (βλ. ενότητα

3.1) δεν πραγµατοποιούσε καµία ρεαλιστική λειτουργία.

• Για την ακριβή προσοµοίωση της συνδυασµένης λειτουργίας του λειτουργικού

συστήµατος και της υποθετικής µηχανής θα πρέπει να ακολουθήσετε πιστά το

«µοντέλο λειτουργίας», το οποίο παρατίθεται αναλυτικά στην παράγραφο 4.2.3

της παρούσας ενότητας.

• Θα πρέπει να προσαρµοστούν κατάλληλα οι διαδικασίες εισόδου, χρονοδροµο-

λόγησης και επεξεργασίας διεργασιών, οι οποίες πλέον δε θα έχουν την «αφη-

ρηµένη» µορφή της αρχικής προσοµοίωσής σας για τον πυρήνα του λειτουργι-

κού συστήµατος.

• Στο πραγµατικό µοντέλο συνδυασµένης λειτουργίας λειτουργικού συστήµατος

και υποθετικής µηχανής παύουν να ισχύουν ως παράµετροι εισόδου για κάθε

διεργασία (α) οι χρονικές στιγµές που απαιτούνται για την εκτέλεσή της και (β)

η ακολουθία αναφορών στη µνήµη την οποία παράγει η κάθε διεργασία. Και οι

δύο παραπάνω παράµετροι θα καθορίζονται πλέον σε ρεαλιστικές συνθήκες από

το πρόγραµµα εντολών που θα αντιστοιχεί σε κάθε διεργασία.

• Η υλοποίησή σας θα πρέπει να είναι κατά το δυνατόν παραµετροποιηµένη όσον

αφορά κυρίως (α) τα µεγέθη των συνιστωσών της κεντρικής µνήµης του συστή-

µατος και (β) την κλήση των συναρτήσεων που υλοποιούν τις διάφορες λει-

τουργίες της Κ.Μ.Ε. (εκτέλεση εντολών, προσπέλαση µνήµης κ.ά.).

• Όσον αφορά τις παραµέτρους µεγέθους και διαχωρισµού σε σελίδες της κύριας

µνήµης της υποθετικής µηχανής (M, P, R, m, p), θα πρέπει να υπάρχει η δυνατό-

τητα παραµετρικού ορισµού, ώστε να είναι δυνατόν να αλλάζουν εύκολα ανάλο-

γα µε τις ανάγκες των εκάστοτε συνόλων–προγραµµάτων που τρέχετε κάθε φορά

(ώστε να φαίνονται καθαρά τα φαινόµενα που θέλετε να παρατηρήσετε – π.χ. page

faults, αριθµός σελίδων της µνήµης που δίνονται σε κάθε διεργασία κ.ά.).

• Αρχικά (έχοντας ως κριτήριο το αναµενόµενα µικρό µέγεθος των προγραµµά-

των που θα τρέχετε) συνιστάται να ξεκινήσετε ορίζοντας το µέγεθος µνήµης σε

Μ=28=256 θέσεις και το µέγεθος σελίδας σε R=24=16 θέσεις, ενώ ανάλογα µε

τα Παραδείγµατα που θα τρέξετε για τον έλεγχο (testing – ενότητα 4.3) του ολο-

κληρωµένου προγράµµατός σας θα χρειαστεί προοδευτικά να φτάσετε σε µεγέ-

θη µέχρι Μ=210=1024 και R=26=64.

• Ο µηχανισµός µετάφρασης µίας διεύθυνσης µνήµης από «εικονική µνήµη» σε

«φυσική µνήµη» θα αποτελεί µέρος του πυρήνα του λειτουργικού συστήµατος.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 69

Page 70: Λειτουργικά Συστήματα

7 0 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

4.2.2 ™˘Ì‚ÔÏÈ΋ ÁÏÒÛÛ· Î·È Û˘Ì‚ÔÏÔÌÂÙ·ÊÚ·ÛÙ‹˜

• Ο βασικός ωστόσο µηχανισµός σελιδοποίησης, η κεντρική µνήµη καθ’ αυτή

καθώς και οι απαιτούµενοι καταχωρητές (PTR, PLR, PFR) θα αποτελούν µέρος

της υποθετικής υπολογιστικής µηχανής.

Έλεγχος (testing)

Σε αυτή την Άσκηση Αυτοαξιολόγησης δε σας ζητείται να ελέγξετε την ορθότητα

της υλοποίησής σας µε κάποια Παραδείγµατα, καθώς η όλη προσοµοίωση παρα-

µένει ακόµα ηµιτελής και για την ολοκλήρωσή της απαιτεί (α) τον προσδιορισµό

της χρησιµοποιούµενης συµβολικής γλώσσας και γλώσσας µηχανής και (β) την

υλοποίηση των αντίστοιχων λειτουργιών εκτέλεσης εντολών της Κ.Μ.Ε., θέµατα

τα οποία αναπτύσσονται στην επόµενη παράγραφο.

Στα πλαίσια της παρούσας παραγράφου, φροντίστε απλώς να υλοποιήσετε και να

διασυνδέσετε µε το υπάρχον λειτουργικό σύστηµα τα παραπάνω αναφερθέντα

βασικά χαρακτηριστικά προσοµοίωσης µίας στοιχειώδους υπολογιστικής µηχανής

µε τη µεγαλύτερη δυνατή παραµετροποίηση, ενώ η ορθότητα και αποτελεσµατι-

κότητα της υλοποίησής σας θα ελεγχθεί εκτενώς στα πλαίσια της επόµενης ενότη-

τας (ενότητα 4.3 – δηλαδή, αφού, ολοκληρωθεί και η προσοµοίωση της χρησιµο-

ποιούµενης γλώσσας µηχανής και του απαιτούµενου συµβολοµεταφραστή).

Ως δεύτερο (και τελικό) βήµα για την ολοκληρωµένη προσοµοίωση της λειτουρ-

γίας µίας υποθετικής υπολογιστικής µηχανής, καλείστε να υποστηρίξετε τη χρήση

µίας απλής «συµβολικής γλώσσας» (assembly), στην οποία θα έχει τη δυνατότητα

ο εκάστοτε χρήστης να «γράφει» ένα πρόγραµµα ή µία εφαρµογή την οποία επι-

θυµεί να εκτελέσει στην υποθετική µηχανή. Αντίστοιχα, θα πρέπει να υποστηρίζε-

ται και µία συγκεκριµένη απλή «γλώσσα µηχανής» (machine code) µέσω της οποί-

ας θα αναπαρίσταται το εκάστοτε πρόγραµµα σε µορφή κατάλληλη, για να ερµη-

νευτεί και να εκτελεστεί από την Κ.Μ.Ε. της υποθετικής µηχανής.

Η µορφή της συµβολικής γλώσσας και της γλώσσας µηχανής που θα πρέπει να υπο-

στηρίξετε περιγράφεται αναλυτικά στα πλαίσια της επόµενης παραγράφου, ενώ

αυτό που σας ζητείται να υλοποιήσετε στα πλαίσια αυτής της ∆ραστηριότητας είναι

ένας απλός «συµβολοµεταφραστής» (assembler), ένα πρόγραµµα, δηλαδή, γραµ-

µένο σε γλώσσα C, το οποίο θα µεταφράζει µία εφαρµογή ή διεργασία (σύνολο

¢Ú·ÛÙËÚÈfiÙËÙ· 4.5

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 70

Page 71: Λειτουργικά Συστήματα

7 14 . 2 ¶ ƒ √ ™ √ ª √ π ø ™ ∏ À ¶ √ £ ∂ ∆ π ∫ ∏ ™ ª ∏ Ã ∞ ¡ ∏ ™

εντολών) ενός χρήστη από την απλή συµβολική γλώσσα στην οποία έχει γραφτεί

στην απλή γλώσσα µηχανής του υπολογιστικού σας συστήµατος.

Οδηγίες υλοποίησης

Η συµβολική γλώσσα (assembly) την οποία θα προσοµοιώσετε και κατ’ επέκταση

και ο αντίστοιχος συµβολοµεταφραστής (assembler) που σας ζητείται να φτιάξετε

θα υποστηρίζει συνολικά οκτώ (8) διαφορετικές εντολές, τέσσερις (4) εντολές του

ενός εντέλου και τέσσερις (4) εντολές µηδενικού εντέλου, και πιο συγκεκριµένα

τις παρακάτω:

llooaadd <<nn>>:: φορτώνει στον accumulator τον αριθµό <n>

000 ―n―– : 000 10010

aadddd <<nn>>:: προσθέτει στον αριθµό που είναι φορτωµένος στον accumulator τον

αριθµό <n> (το αποτέλεσµα αποθηκεύεται στον accumulator, επίσης)

001 ―n― : 001 01010

zzeerrooxx <<nn>>:: µειώνει κατά ένα το περιεχόµενο του καταχωρητή <x> και, αν το

αποτέλεσµα είναι µεγαλύτερο από µηδέν, συνεχίζει µε την εντολή η

οποία βρίσκεται <n> θέσεις παραπάνω στο πρόγραµµα, αν είναι ίσο

µε το µηδέν, συνεχίζει µε την επόµενη εντολή

010 ―n― : 010 00110

zzeerrooyy <<nn>>:: µειώνει κατά ένα το περιεχόµενο του καταχωρητή <y> και, αν το

αποτέλεσµα είναι µεγαλύτερο από µηδέν, συνεχίζει µε την εντολή η

οποία βρίσκεται <n> θέσεις παραπάνω στο πρόγραµµα, αν είναι ίσο

µε το µηδέν, συνεχίζει µε την επόµενη εντολή

011 ―n― : 011 00110

ssttoorreexx:: αποθηκεύει το περιεχόµενο του accumulator στον καταχωρητή <x>

100 ―*― : 100 *****

ssttoorreeyy:: αποθηκεύει το περιεχόµενο του accumulator στον καταχωρητή <y>

101 ―*― : 101 *****

pprriinntt:: τυπώνει το περιεχόµενο του accumulator στην οθόνη

110 ―*― : 110 *****

eenndd:: υποδηλώνει το τέλος του προγράµµατος

111 ―*― : 111 *****

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 71

Page 72: Λειτουργικά Συστήματα

7 2 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

Η αναπαράσταση των παραπάνω εντολών σε γλώσσα µηχανής (κατά τον τρόπο

δηλαδή που θα τις κατανοεί η υποτιθέµενη χρησιµοποιούµενη µηχανή) θα είναι η

ένα προς ένα µετατροπή της κάθε εντολής σε µία δυαδική µορφή οκτώ (8) ψηφίων,

σύµφωνα µε τους παρακάτω κανόνες:

• Τα τρία (3) πρώτα δυαδικά ψηφία θα αναπαριστούν τον κωδικό της εντολής.

• Συνολικά θα υπάρχουν οκτώ (23) τέτοιοι κωδικοί (ένας για κάθε εντολή), εκ των

οποίων οι τέσσερις (4) µε το περισσότερο σηµαντικό ψηφίο ίσο µε «0» θα αντι-

στοιχούν στις εντολές ενός εντέλου, ενώ οι τέσσερις (4) µε το περισσότερο

σηµαντικό ψηφίο ίσο µε «1» θα αντιστοιχούν στις εντολές µηδενικού εντέλου.

• Τα επόµενα πέντε (5) δυαδικά ψηφία :

α) θα αναπαριστούν τα περιεχόµενα του εντέλου για τις τέσσερις εντολές ενός

εντέλου σε µορφή σταθερού δυαδικού αριθµού (συνολικά, δηλαδή, θα µπο-

ρούν να αναπαρασταθούν οι 32 (25=32) ακέραιοι αριθµοί από 0 έως 31 του

δεκαδικού συστήµατος).

β) δε θα χρησιµοποιούνται καθόλου για τις εντολές µηδενικού εντέλου.

Η ακριβής δυαδική µορφή σε γλώσσα µηχανής καθεµιάς από τις οκτώ (8) διαφο-

ρετικές εντολές παρατίθεται µαζί µε την αντίστοιχη εντολή στο παραπάνω πλαί-

σιο αναφοράς του συνόλου των εντολών της συµβολικής γλώσσας.

Ως παράδειγµα παρατίθεται παρακάτω ένα απλό πρόγραµµα γραµµένο στην παρα-

πάνω απλή συµβολική γλώσσα, το οποίο υλοποιεί τον πολλαπλασιασµό των δεκα-

δικών αριθµών 3*4 (παραπλεύρως δίνεται και ο αντίστοιχος κώδικας σε γλώσσα

µηχανής – όπως, δηλαδή, θα πρέπει να µετατραπεί το πρόγραµµα σε δυαδική

µορφή µέσω του συµβολοµεταφραστή σας, ώστε να είναι δυνατή η εκτέλεσή του

από την Κ.Μ.Ε. της υποθετικής υπολογιστικής µηχανής).

¶·Ú¿‰ÂÈÁÌ· 4.1

Πρόγραµµα υπολογισµού του γινοµένου των αριθµών (3* 4) σε συµβολική γλώσσα:

load 4: 000 00100

storex: 100 00000

load 0: 000 00000

add 3: 001 00011

zerox 1: 010 00001

end: 111 00000

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 72

Page 73: Λειτουργικά Συστήματα

7 34 . 2 ¶ ƒ √ ™ √ ª √ π ø ™ ∏ À ¶ √ £ ∂ ∆ π ∫ ∏ ™ ª ∏ Ã ∞ ¡ ∏ ™

Με βάση πλέον την παραπάνω αναλυτική περιγραφή της συµβολικής γλώσσας που

θα πρέπει να χρησιµοποιήσετε, σας ζητείται να υλοποιήσετε σε γλώσσα C έναν

απλό συµβολοµεταφραστή ο οποίος:

• θα λαµβάνει ως είσοδο ένα πρόγραµµα γραµµένο στην παραπάνω συµβολική

γλώσσα (µία ακολουθία εντολών αποθηκευµένη σε ένα αρχείο – µία εντολή σε

κάθε γραµµή του αρχείου – µε µήκος ονόµατος δύο γραµµάτων και επέκταση

«ass», π.χ. «xx.ass»),

• θα παράγει ως έξοδο το αντίστοιχο πρόγραµµα στην προκαθορισµένη (όπως περι-

γράφτηκε παραπάνω) γλώσσα µηχανής (ένα αντίστοιχο αρχείο του ίδιου ονόµατος

χωρίς επέκταση – π.χ. «xx» – το οποίο θα περιέχει την ορθή ακολουθία εντολών

δυαδικής µορφής σε γλώσσα µηχανής, µία εντολή σε κάθε γραµµή του αρχείου).

Κατ’ αυτόν τον τρόπο, το έργο της Κ.Μ.Ε. κατά τη φάση εκτέλεσης µίας εντολής

εκτελέσιµου προγράµµατος µίας διεργασίας (σε γλώσσα µηχανής), το οποίο έχετε

αφήσει «κενό» κατά την προσοµοίωση της υποθετικής µηχανής στα πλαίσια της

προηγούµενης παραγράφου (4.2.1), διαµορφώνεται ως εξής:

Έλεγχος του πρώτου (του περισσότερο σηµαντικού) ψηφίου της 8–bits εντολής:

• Αν είναι ίσο µε «0», (α) έλεγχος των δύο επόµενων δυαδικών ψηφίων και προσ-

διορισµός για ποια εντολή ενός εντέλου πρόκειται, (β) δέσµευση/ εξαγωγή των

επόµενων πέντε δυαδικών ψηφίων τα οποία αποτελούν το έντελο της εντολής

και (γ) εκτέλεση της λειτουργίας που υπαγορεύεται από τη συγκεκριµένη εντο-

λή (π.χ. πρόσθεση του αριθµού 01011 στο περιεχόµενο του accumulator, αν πρό-

κειται για την εντολή «00101011»).

• Αν είναι ίσο µε «1», (α) έλεγχος των δύο επόµενων δυαδικών ψηφίων και προσ-

διορισµός για ποια εντολή µηδενικού εντέλου πρόκειται, (β) παράβλεψη των

επόµενων πέντε δυαδικών ψηφίων και (γ) εκτέλεση της λειτουργίας που υπα-

γορεύεται από τη συγκεκριµένη εντολή (π.χ. αποθήκευση του περιεχόµενου του

accumulator στον καταχωρητή «x», αν πρόκειται για την εντολή «10000000»).

Θα πρέπει να σηµειωθεί, επίσης, εδώ ότι για τις εντολές «print» και «end» η λει-

τουργία την οποία θα πρέπει να επιτελέσει η Κ.Μ.Ε. (όπως αναφέρεται αναλυτι-

κότερα στην επόµενη παράγραφο – παρ. 4.2.3 / µοντέλο λειτουργίας) δεν είναι

καθαρά υπολογιστικής µορφής. Απλώς θα πρέπει να µεταφέρει τον έλεγχο (µέσω

της κλήσης της κατάλληλης συνάρτησης) στον κώδικα υλοποίησης του λειτουργι-

κού συστήµατος, µέσα από το οποίο θα εκτελεστούν οι συγκεκριµένες λειτουργίες

που υπαγορεύονται από τις εντολές αυτές.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 73

Page 74: Λειτουργικά Συστήματα

7 4 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

Έλεγχος (testing)

Ως πρώτο βήµα πειραµατισµού και µε σκοπό να κατανοήσετε καλύτερα την απλή

συµβολική γλώσσα που σας δόθηκε παραπάνω προσπαθήστε να υλοποιήσετε σε

αυτήν τα παρακάτω απλά προγράµµατα υπολογισµών.

Υλοποιήστε σε συµβολική γλώσσα (παραθέτοντας παράλληλα και τον αντίστοιχο

κώδικα σε γλώσσα µηχανής) ένα πρόγραµµα που θα υπολογίζει το n! για n=5.

Μέχρι ποια τιµή του «n» είναι δυνατόν να υπολογιστεί το n! στην υποθετική µηχα-

νή που έχετε προσοµοιώσει;

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.2

Έχοντας ως οδηγό το παραπάνω Παράδειγµα, προσπαθήστε να γράψετε µόνοι σας

στη δοθείσα συµβολική γλώσσα ένα απλό πρόγραµµα το οποίο:

θα υπολογίζει την τιµή της παράστασης 62+5

θα τυπώνει το αποτέλεσµα στην οθόνη.

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.1

Υλοποιήστε σε συµβολική γλώσσα (παραθέτοντας παράλληλα και τον αντίστοιχο

κώδικα σε γλώσσα µηχανής) ένα πρόγραµµα που θα υλοποιεί τον πολλαπλασια-

σµό των αριθµών 62*3 και θα τυπώνει το αποτέλεσµα στην οθόνη (υπενθυµίζεται

ότι το περιεχόµενο ενός εντέλου δεν µπορεί να υπερβαίνει το 31).

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.3

Για λόγους ευκολίας και απλότητας δε σας ζητείται να υλοποιήσετε συµβολική

γλώσσα (και αντίστοιχο συµβολοµεταφραστή), η οποία θα υποστηρίζει διάφορες

κλασικές και πιο πολύπλοκες τεχνικές που συναντώνται στα πραγµατικά λειτουρ-

γικά συστήµατα (όπως π.χ. υποστήριξη µεταβλητών, πολλαπλών µεθόδων διευ-

θυνσιοδότησης κ.ά.), καθώς ο κύριος σκοπός του παρόντος εργαστηρίου είναι η

πρακτική εκµάθηση της βασικής διαδικασίας εκτέλεσης εντολών σε ένα Unix–like

λειτουργικό σύστηµα και όχι η πολυπλοκότητα αυτής.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 74

Page 75: Λειτουργικά Συστήματα

7 54 . 2 ¶ ƒ √ ™ √ ª √ π ø ™ ∏ À ¶ √ £ ∂ ∆ π ∫ ∏ ™ ª ∏ Ã ∞ ¡ ∏ ™

Στη συνέχεια, αφού ολοκληρώσετε την υλοποίηση του συµβολοµεταφραστή της ως

άνω αναφερόµενης απλής συµβολικής γλώσσας και µε σκοπό τόσο (α) να ελέγξετε

την ορθότητα αυτού, όσο και (β) να εξασκηθείτε ακόµα περισσότερο στη χρήση της

συµβολικής γλώσσας που σας δόθηκε, σας ζητείται αρχικά να αναπτύξετε σε αυτήν

τα παρακάτω λίγο µεγαλύτερης δυσκολίας δοκιµαστικά προγράµµατα:

• Ένα πρόγραµµα που θα υπολογίζει την παράσταση n!+x2 για n=4 και x=6.

• Ένα πρόγραµµα που θα υπολογίζει το άθροισµα τετραγώνων 52+102.

• Ένα πρόγραµµα που θα υπολογίζει την τιµή της παράστασης 53+62+8.

• Ένα πρόγραµµα που θα υπολογίζει την τιµή της παράστασης 64+ 9.

• ∆ύο (2) επιπλέον προγράµµατα δικής σας επιλογής, τα οποία θα χρησιµοποιούν

και τους δύο καταχωρητές δείκτη (x και y) εκτελώντας διπλούς βρόγχους (nested

loops – δύο επαναλήψεις ταυτόχρονα η µία µέσα στην άλλη).

Τα παραπάνω προγράµµατα συµβολικής γλώσσας στη συνέχεια καλείστε να τα

δώσετε ως είσοδο στο συµβολοµεταφραστή που αναπτύξατε και να ελέγξετε την

ορθότητα των αποτελεσµάτων που θα λάβετε (δηλαδή, την ορθότητα, του εξαχθέ-

ντος από το συµβολοµεταφραστή προγράµµατος σε γλώσσα µηχανής).

¢Ú·ÛÙËÚÈfiÙËÙ· 4.6

Τέλος, µε σκοπό την πιστότερη δυνατή προσοµοίωση της λειτουργίας ενός ολο-

κληρωµένου υπολογιστικού συστήµατος, η οποία σας ζητείται στην ενότητα αυτή,

παρατίθεται στην επόµενη παράγραφο το µοντέλο συνεργαζόµενης λειτουργίας

υποθετικής υπολογιστικής µηχανής και προσοµοιωµένου λειτουργικού συστήµα-

τος, το οποίο θα πρέπει να ακολουθήσετε. Στις γενικές κατευθύνσεις αυτού του

µοντέλου θα πρέπει να προσαρµόσετε την αρχιτεκτονική και τη δοµή του κώδικα

που θα αναπτύξετε (συναρτήσεις, δοµές δεδοµένων κ.ά.) τόσο για την υποθετική

µηχανή, όσο και για τον πυρήνα του λειτουργικού συστήµατος.

Ιδιαίτερη έµφαση δίνεται (και αντιστοίχως ιδιαίτερη προσοχή θα πρέπει να δοθεί

και από εσάς) στον τρόπο µε τον οποίο θα επικοινωνούν οι παραπάνω δύο βασι-

κές συνιστώσες του συστήµατός σας, καλώντας η µία την άλλη µέσω αντίστοιχων

¢Ú·ÛÙËÚÈfiÙËÙ· 4.7

4.2.3 MÔÓÙ¤ÏÔ ÏÂÈÙÔ˘ÚÁ›·˜ – ¢È·Û‡Ó‰ÂÛ˘

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 75

Page 76: Λειτουργικά Συστήματα

7 6 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

συναρτήσεων για συγκεκριµένους λόγους εξυπηρέτησης διαδικασιών. Η ξεχωριστή λειτουργία των

δύο αυτών συνιστωσών κατά την ενοποιηµένη λειτουργία ενός υπολογιστικού συστήµατος ορίζει τα

λεγόµενα «καθεστώτα χρήστη (όταν τον έλεγχο έχει η Κ.Μ.Ε. της υπολογιστικής µηχανής) και πυρή-

να» (όταν τον έλεγχο έχει το λειτουργικό σύστηµα), τον σαφή διαχωρισµό των οποίων θα πρέπει να

υιοθετήσετε όσο το δυνατόν πιστότερα κατά την υλοποίησή σας.

Μοντέλο λειτουργίας – Επικοινωνία λειτουργικού συστήµατος & µηχανής

Εισαγωγικά, επισηµαίνεται ότι µε τον όρο «διεργασία», υπονοείται πλέον ένα σύνολο εντολών (πρό-

γραµµα) το οποίο αρχικά αναπτύχθηκε στην απλή συµβολική γλώσσα που έχετε στη διάθεσή σας και

στη συνέχεια µεταφράστηκε σε γλώσσα µηχανής (εντολή προς εντολή) µέσω του αντίστοιχου συµ-

βολοµεταφραστή. Με βάση την παραπάνω προϋπόθεση ο κύκλος εκτέλεσης διεργασιών από το υπο-

θετικό υπολογιστικό σύστηµα (λειτουργικό σύστηµα + υποθετική µηχανή) που έχετε προσοµοιώσει

θα πρέπει να ακολουθεί τα παρακάτω βήµατα (βλέπε, επίσης, το συνοπτικό διάγραµµα του σχήµατος

που ακολουθεί).

• Όλες οι διεργασίες, οι οποίες επιθυµεί ο χρήστης να εκτελεστούν από το σύστηµα, θα εισάγονται

σ’ αυτό µέσω του interface, το οποίο παρέχεται από το πρόγραµµα που αναπτύξατε στα πλαίσια της

ενότητας 3.1 (το οποίο θα κληρονοµηθεί κατάλληλα διαµορφωµένο και στο ενιαίο πρόγραµµα προ-

σοµοίωσης του πυρήνα του λειτουργικού συστήµατος του παρόντος κεφαλαίου).

ΠYPHNAΣ ΛEITOYPΓIKOY ΣYΣTHMATOΣ

(χροδροµολόγηση, διαχείρησηµνήµης, επικοινωνία µε το

χρήστη κ.ά.)

∆IΣKOΣ

Πρόγραµµαγλώσσας µηχανής

Σύµβολο µεταφραστής

Πρόγραµµασυµβ. γλώσσας

Συσσωρευτής

Kαταχωρητής–X

Kαταχωρητής–Y

Yπολογιστικήµηχανή

Kύρια µνήµη

PTR

PLR

PFR

PC

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 76

Page 77: Λειτουργικά Συστήματα

7 74 . 2 ¶ ƒ √ ™ √ ª √ π ø ™ ∏ À ¶ √ £ ∂ ∆ π ∫ ∏ ™ ª ∏ Ã ∞ ¡ ∏ ™

• Για καθεµία από αυτές τις διεργασίες (µε όνοµα π.χ. «xx») θα υπάρχει ένα αντί-

στοιχο εκτελέσιµο αρχείο ίδιου ονόµατος («xx») αποθηκευµένο στο δίσκο του

συστήµατος.

• Έτσι, οι πρώτες βασικές εργασίες που θα εκτελεί το λειτουργικό σύστηµα για κάθε

διεργασία (αφού εισαχθούν όλες οι διεργασίες χρηστών) θα είναι οι ακόλουθες:

1. Άνοιγµα του αρχείου το οποίο περιέχει τον κώδικα (εκτελέσιµες εντολές) της

διεργασίας και προσαρµογή του στο µοντέλο εκχώρησης και διαχείρισης µνή-

µης (σελιδοποίηση και υποστήριξη εικονικής µνήµης) βάσει του οποίου έχει

κτισθεί το σύστηµά σας:

• Τµηµατοποίηση σε «σελίδες» και αποθήκευσή του (κατά σελίδες) στη δευτε-

ρεύουσα µνήµη (στην περίπτωσή µας θα είναι πάλι ο δίσκος του συστήµα-

τος). Θα πρέπει να σηµειωθεί εδώ ότι ο αλγόριθµος εκχώρησης σελίδων που

θα πρέπει να ακολουθηθεί είναι η «εκχώρηση κατά απαίτηση» (demand

paging – όπως προδιαγράφεται και στην ενότητα 3.4). Κατά την αρχική εισα-

γωγή, δηλαδή, κάθε διεργασίας στο σύστηµα και πριν αυτή αρχίσει να εκτε-

λείται, καµία σελίδα της διεργασίας δε φορτώνεται στη µνήµη.

• ∆ηµιουργία του πίνακα σελίδων («page table») της διεργασίας και τοπο-

θέτησή του στην κύρια µνήµη του συστήµατος.

• Αρχική ενηµέρωση των καταχωρητών PTR και PLR.

2. ∆ηµιουργία του Process Control Block (PCB) της διεργασίας το οποίο θα περιέ-

χει όλες τις απαραίτητες πληροφορίες για τη συγκεκριµένη διεργασία (κωδικός,

περιεχόµενα καταχωρητών, διεύθυνση αποθήκευσης των σελίδων της διεργα-

σίας στη δευτερεύουσα µνήµη, δείκτης στον πίνακα σελίδων κ.ά.), µε σκοπό να

καθίσταται δυνατή και αξιόπιστη η τοποθέτηση της διεργασίας στην Κεντρική

Μονάδα Επεξεργασίας (K.M.E.) κάθε φορά που θα απαιτείται από το συγκε-

κριµένο αλγόριθµο χρονοδροµολόγησης που θα ακολουθηθεί.

3. Εισαγωγή της διεργασίας στη «ready queue», µε σκοπό να ενσωµατωθεί (ως

έτοιµη προς εκτέλεση) στο µηχανισµό χρονοδροµολόγησης διαδικασιών του

συστήµατος.

4. Επιλογή µίας διαδικασίας για εκτέλεση, σύµφωνα µε τον ακολουθούµενο αλγό-

ριθµο χρονοδροµολόγησης (εισαγωγή ουσιαστικά της πρώτης διεργασίας της

«ready–queue» στην Κ.Μ.Ε. για εκτέλεση):

• Φόρτωµα της πρώτης σελίδας της διεργασίας στη µνήµη.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 77

Page 78: Λειτουργικά Συστήματα

7 8 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

• Εύρεση του PCB της διεργασίας και τοποθέτησή του ως το τρέχον PCB.

• Ενηµέρωση του µετρητή προγράµµατος µε τη διεύθυνση της πρώτης εντολής

της διεργασίας στην κύρια µνήµη.

• Ενεργοποίηση του αλγόριθµου χρονοδροµολόγησης (π.χ. ενός timer που µετρά

το time–slice, εάν ακολουθείται χρονοδροµολόγηση round robin)

• Μεταφορά του ελέγχου στην υποθετική υπολογιστική µηχανή (στην Κεντρι-

κή Μονάδα Επεξεργασίας αυτής), µέσω κλήσης της αντίστοιχης συνάρτησης.

5. Στη συνέχεια και για όσο διάστηµα εκτελείται η διεργασία στην Κ.Μ.Ε. (όσο

χρόνο της επιτρέπει ο ακολουθούµενος αλγόριθµος χρονοδροµολόγησης), θα

λαµβάνουν χώρα οι παρακάτω λειτουργίες:

• ∆ιάβασµα από την κύρια µνήµη (fetch – από τη διεύθυνση στην οποία δείχνει

ο µετρητής προγράµµατος) µίας–µίας των εντολών της διεργασίας.

• Αναγνώριση τους είδους τους και εκτέλεση των λειτουργιών που υπαγορεύ-

ονται από αυτές.

• Εάν προκληθεί σφάλµα αναφοράς σελίδας, µεταφορά του ελέγχου στο λει-

τουργικό σύστηµα (µέσω κλήσης της αντίστοιχης συνάρτησης) και επαναφο-

ρά του ελέγχου στην υποθετική µηχανή, αφού εξυπηρετηθεί το σφάλµα ανα-

φοράς σελίδας.

• Εάν πρόκειται για εκτέλεση εντολής «print», µεταφορά του ελέγχου στο

λειτουργικό σύστηµα για εκτέλεση της αντίστοιχης λειτουργίας και στη συνέ-

χεια επαναφορά του ελέγχου πάλι στην υποθετική µηχανή.

6. Όταν επιβάλλεται να εξέλθει της Κ.Μ.Ε. η συγκεκριµένη διεργασία, για να εκτε-

λεστεί κάποια άλλη (αν αυτό υπαγορεύεται από τον ακολουθούµενο αλγόριθµο χρο-

νοδροµολόγησης – π.χ. round robin), θα επιτελούνται οι παρακάτω λειτουργίες:

• Μεταφορά του ελέγχου στον πυρήνα του λειτουργικού συστήµατος.

• Καταγραφή και σώσιµο του περιβάλλοντος της διεργασίας (PCB, περιεχόµε-

να καταχωρητών, πίνακας σελίδων κ.ά.).

• Εξοδος της διεργασίας από την Κ.Μ.Ε., τοποθέτησή της στη «ready–queue»

και εισαγωγή της επόµενης στη σειρά διαδικασίας για εκτέλεση (ή συνέχιση

της εκτέλεσής της µε επαναφορά του περιβάλλοντός της).

• Όταν ξαναέρθει η σειρά της προηγούµενης διεργασίας να συνεχίσει την εκτέ-

λεσή της στην Κ.Μ.Ε. (π.χ. αλγόριθµος round robin), επαναφορά του περι-

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 78

Page 79: Λειτουργικά Συστήματα

7 94 . 3 ∂ § ∂ ° Ã √ ™ √ ƒ £ √ ∆ ∏ ∆∞ ™ – ¢ √ ∫ π ª ∂ ™

βάλλοντός της και εισαγωγή της στην Κ.Μ.Ε. για συνέχιση της εκτέλεσής της.

7. Εάν απαντάται η εντολή «end», θα εκτελείται µεταφορά του ελέγχου στο λει-

τουργικό σύστηµα και τερµατισµός της εκτέλεσης της τρέχουσας διεργασίας:

• Έξοδος της διεργασίας από την Κ.Μ.Ε.

• Απελευθέρωση του πίνακα σελίδων και των πλαισίων της µνήµης που κατα-

λαµβάνονται από σελίδες της διεργασίας.

• Καταστροφή του PCB της διεργασίας και «άδειασµα» των περιεχοµένων όλων

των καταχωρητών.

• Εισαγωγή στην Κ.Μ.Ε. της επόµενης διεργασίας για εκτέλεση (ή συνέχιση της

εκτέλεσής της µε επαναφορά του περιβάλλοντός της).

8. Επανάληψη των παραπάνω ενεργειών 4–7 µέχρι να περατωθεί η εκτέλεση όλων

των διεργασιών.

4.3 ŒÏÂÁ¯Ô˜ ÔÚıfiÙËÙ·˜ – ¢ÔÎÈ̤˜

Έχετε πλέον στη διάθεσή σας ένα ολοκληρωµένο (προσοµοιωµένο σε γλώσσα C)

υπολογιστικό σύστηµα στοιχειώδους λειτουργικότητας και προδιαγραφών, το οποίο

υποστηρίζεται από ένα επίσης στοιχειωδών δυνατοτήτων λειτουργικό σύστηµα. Στα

πλαίσια της ενότητας αυτής, µε την οποία κλείνει και η ενασχόλησή σας µε την πρα-

κτική εκµάθηση των βασικών τεχνικών σχεδιασµού και υλοποίησης ενός Unix–like

λειτουργικού συστήµατος, καλείστε να δοκιµάσετε και να επιδείξετε ταυτόχρονα τη

σωστή λειτουργία του συστήµατός σας, αξιοποιώντας τις βασικές δυνατότητες που

αυτό σας προσφέρει.

Με σκοπό, λοιπόν, να ελέγξετε την ορθότητα της υλοποίησής σας αλλά και τη λει-

τουργική διασύνδεση των τεχνικών χρονοδροµολόγησης και διαχείρισης µνήµης

µέσα σε αυτό (σε ρεαλιστικότερες, δηλαδή, πλέον συνθήκες), σας ζητείται να πραγ-

µατοποιήσετε τους παρακάτω ελέγχους/δοκιµές:

1. Να τρέξετε στο ολοκληρωµένο υπολογιστικό σύστηµα που έχετε προσοµοιώ-

σει τα παρακάτω προγράµµατα/εφαρµογές και να ελέγξετε την ορθότητα των

αποτελεσµάτων που θα εξάγει για κάθε ένα από αυτά το σύστηµά σας:

• Τα δοκιµαστικά προγράµµατα τα οποία έχετε υλοποιήσει ήδη σε συµβολική

γλώσσα στα πλαίσια της παραγράφου 4.2.3 (και έχετε παράγει ήδη γι’ αυτά τα

¢Ú·ÛÙËÚÈfiÙËÙ· 4.8

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 79

Page 80: Λειτουργικά Συστήματα

8 0 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

εκτελέσιµα προγράµµατα σε γλώσσα µηχανής µέσω του συµβολοµεταφραστή).

• Μερικά πιο σύνθετα προγράµµατα, παρόµοιας µε τα παραπάνω µορφής, τα

οποία θα προκύπτουν από κατάλληλους συνδυασµούς των πράξεων/λειτουρ-

γιών που υλοποιούνται από αυτά:

• Ένα πρόγραµµα που θα τυπώνει περιοδικά (κάθε δύναµη αµέσως µετά τον

υπολογισµό της) τις έξι (6) πρώτες δυνάµεις του αριθµού 2 (από 21 έως 26).

• Ένα πρόγραµµα που θα υπολογίζει και θα τυπώνει περιοδικά το άθροισµα

«n!+(n–1)!+…+1» για n=5.

• Ένα πρόγραµµα που θα υπολογίζει την παράσταση «5!+102+(4*5)+2».

• Και τρία (3) επιπλέον τέτοιας µορφής προγραµµατάκια δικής σας επινόησης.

2. Να σχεδιάσετε, αναπτύξετε και υλοποιήσετε σε συµβολική γλώσσα και ακο-

λούθως να τρέξετε στο προσοµοιωµένο υπολογιστικό σας σύστηµα κατάλληλα

σύνολα προγραµµάτων τα οποία, όταν τρέχουν ταυτόχρονα στο σύστηµά σας,

θα παράγουν µεγάλο αριθµό page–faults.

• Τα σύνολα των προγραµµάτων αυτών θα πρέπει να τα τρέξετε, ενεργοποιώ-

ντας ξεχωριστά και τους τέσσερις διαφορετικούς αλγόριθµους αντικατάστα-

σης σελίδων που έχετε υλοποιήσει για τον πυρήνα του λειτουργικού σας

συστήµατος (FIFO, LRU, LFU, MFU), και να συγκρίνετε την απόδοση του

κάθε αλγόριθµου µετρώντας κατάλληλα τον αριθµό των page–faults που παρά-

γονται καθ’όλη τη διάρκεια της ταυτόχρονης εκτέλεσης. Παρουσιάστε τα απο-

τελέσµατα που θα λάβετε (α) αριθµητικά (αριθµός παραγόµενων page–faults

για κάθε αλγόριθµο), (β) σε µορφή «ρυθµού σφαλµάτων αναφοράς σελίδας»

(page–fault–rate) και (γ) µέσω αντίστοιχων γραφικών παραστάσεων.

• Για παράδειγµα, θα µπορούσατε να υλοποιήσετε ένα σύνολο προγραµµάτων

καθένα από τα οποία θα καταλαµβάνει τριπλάσιο (για παράδειγµα) αριθµό

σελίδων από αυτές που του αναλογούν στην κύρια µνήµη του συστήµατος και

θα εκτελεί ουσιαστικά έναν ή παραπάνω βρόχους οι οποίοι θα µεταφέρουν

περιοδικά τον έλεγχο από σελίδα σε σελίδα (π.χ. ορίστε µέγεθος µνήµης

M=256 θέσεις και µέγεθος σελίδας 16 θέσεις και τρέξτε οκτώ (8) προγραµ-

µατάκια του παραπάνω είδους των 4 σελίδων το καθένα).

• Αναπτύξτε τουλάχιστον δύο σύνολα τέτοιου είδους προγραµµάτων, (α) ένα

εκ των οποίων θα καταδεικνύει τα πλεονεκτήµατα της LRU µεθόδου αντικα-

τάστασης σελίδων (θα παράγει, δηλαδή, µικρότερο αριθµό page–faults, όταν

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 80

Page 81: Λειτουργικά Συστήματα

8 14 . 3 ∂ § ∂ ° Ã √ ™ √ ƒ £ √ ∆ ∏ ∆∞ ™ – ¢ √ ∫ π ª ∂ ™

χρησιµοποιείται η LRU) και (β) ένα το οποίο θα καταδεικνύει τα πλεονεκτή-

µατα της FIFO.

3. Να σχεδιάσετε, αναπτύξετε και υλοποιήσετε σε συµβολική γλώσσα και ακο-

λούθως να τρέξετε στο προσοµοιωµένο υπολογιστικό σας σύστηµα δύο διαφο-

ρετικά σύνολα προγραµµάτων από τα οποία (α) το ένα θα καταδεικνύει τα πλε-

ονεκτήµατα της «First Come First Serve» µεθόδου χρονοδροµολόγησης διαδι-

κασιών και (β) το άλλο θα καταδεικνύει τα πλεονεκτήµατα της Round Robin

χρονοδροµολόγησης.

• Για να συγκρίνετε την απόδοση των δύο αυτών αλγόριθµων χρονοδροµολό-

γησης κατά την εκτέλεση των προγραµµάτων που θα αναπτύξετε, σας ζητεί-

ται να χρησιµοποιήσετε τα ίδια «µέτρα» που χρησιµοποιήσατε και στα πλαί-

σια επίλυσης των Ασκήσεων Αυτοαξιολόγησης της παραγράφου 3.1.2 (χρό-

νοι απόκρισης, αναµονής και διεκπεραίωσης και αριθµός εναλλαγών). Παρου-

σιάστε τα αποτελέσµατα τόσο (α) σε µορφή πινάκων, όσο και (β) σε µορφή

«Gantt–chart» και γραφικών παραστάσεων σύγκρισης των παραπάνω µέτρων

για κάθε αλγόριθµο.

• Με σκοπό να λάβετε επιτυχή κατά το δυνατόν αποτελέσµατα, συνιστάται η

επιλογή των προγραµµάτων που θα φτιάξετε για κάθε σύνολο να βασιστεί

κυρίως σε διαφοροποιήσεις που θα υπάρχουν µεταξύ τους (α) σχετικά µε το

χρόνο που απαιτείται για την εκτέλεσή τους και (β) σχετικά µε τη σειρά µε

την οποία εισέρχονται στο σύστηµά σας. Για παράδειγµα, κατασκευάστε και

τρέξτε ταυτόχρονα δύο προγράµµατα χαµηλού, δύο µεσαίου, και δύο υψηλού

χρόνου εκτέλεσης (π.χ. µε πολλαπλούς βρόγχους), πολλές φορές αλλάζοντας

κάθε φορά τη σειρά εισαγωγής τους στο σύστηµα.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 81

Page 82: Λειτουργικά Συστήματα

8 2 K E º A § A I O 4 : O § √ ∫ § ∏ ƒ ø ™ ∏ ∆ ∏ ™ ∞ ¡ ∞ ¶ ∆ À • ∏ ™ ∂ ¡ √ ™ ™ ∆ √ π Ã ∂ π ø ¢ √ À ™ § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™ ∆ À ¶ √ À U N I X

™‡ÓÔ„Ë

Στα πλαίσια του κεφαλαίου αυτού ολοκληρώσατε το κυριότερο µέρος της πρακτικής

σας εξάσκησης σχετικά µε τις µεθόδους και τις τεχνικές υλοποίησης των Unix–like

λειτουργικών συστηµάτων.

Προσοµοιώσατε σε γλώσσα C ένα στοιχειώδη (περιλαµβάνοντας ωστόσο όλες τις

απαιτούµενες βασικές λειτουργίες) πυρήνα λειτουργικού συστήµατος τύπου UNIX

καθώς και µία υποθετική υπολογιστική µηχανή µικρών δυνατοτήτων, συνδυάζοντας

και υλοποιώντας όλες τις απαραίτητες δοµές και συναρτήσεις (PCB structures, κατα-

χωρητές και πίνακες για τη διαχείριση σελιδοποιηµένης µνήµης, αποδοτικούς αλγό-

ριθµους χρονοδροµολόγησης διαδικασιών και αντικατάστασης σελίδων κ.ά.) που

απαιτούνται για την ορθή λειτουργία αυτών και την αποτελεσµατική διασύνδεσή τους.

∆ιδαχθήκατε, επίσης, πώς λειτουργεί στην πράξη ένα τέτοιο λειτουργικό σύστηµα και

πώς υποστηρίζει την επικοινωνία µίας (υποθετικής) υπολογιστικής µηχανής µε τον

έξω κόσµο, µέσω της ανάπτυξης µίας απλής συµβολικής γλώσσας για τη συγγραφή

απλών προγραµµάτων και ενός αντίστοιχου συµβολοµεταφραστή για τη µετάφραση

των προγραµµάτων αυτών στη γλώσσα που µπορεί να κατανοήσει και να εκτελέσει

η υποθετική µηχανή. Κατ’ αυτόν τον τρόπο σας δόθηκε η δυνατότητα να φορτώσετε

και να εκτελέσετε τις δικές σας εντολές και απλά προγράµµατα και να δοκιµάσετε την

ορθή λειτουργία και την απόδοση των τεχνικών και αλγόριθµων που υλοποιήσατε.

BÈ‚ÏÈÔÁÚ·Ê›·

[1]B.W. Kernighan and D. Ritchie, «Η Γλώσσα Προγραµµατισµού C», Κλειδάριθ-

µος, 1990 [ελληνική µετάφραση του πρωτότυπου «The C Programming

Language», 2nd edition, Prentice–Hall, Englewwod Cliffs, New Jersey, 1988].

[2] J. L. Peterson and A. Silberschatz, «Operating Systems Concepts»,

Addison–Wesley, World Student Series Edition, Addison–Wesley, Reading

Massachusetts, 1985.

[3]Π. Σπυράκης, «Λειτουργικά Συστήµατα Ι», Ελληνικό Ανοικτό Πανεπιστήµιο,

Θεµατική Ενότητα ΠΛH 11, Tόµος B'.

[4]S. J. Leffler and M. K. McKusick, «The Design and Implementation of the 4.3

Bsd Unix Operating System», 2nd edition, Addisson–Wesley, Reading

Massachusetts, 1990.

[5]A. S. Tanenbaum, «Σύγχρονα Λειτουργικά Συστήµατα» (Τόµος Α’), εκδόσεις

Παπασωτηρίου, 1993 [ελληνική µετάφραση του πρωτότυπου «Modern Operating

Systems», Prentice–Hall, Englewood Cliffs, New Jersey, 1992].

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 82

Page 83: Λειτουργικά Συστήματα

AÛ΋ÛÂȘ K·Ù·ÓfiËÛ˘ Ù˘ YÏÔÔ›ËÛ˘ ÂÓfi˜ ¶Ú·ÁÌ·ÙÈÎÔ‡§ÂÈÙÔ˘ÚÁÈÎÔ‡ ™˘ÛÙ‹Ì·ÙÔ˜ (TÔ §ÂÈÙÔ˘ÚÁÈÎfi ™‡ÛÙËÌ· Linux)

™ÎÔfi˜

Βασικό στόχο του κεφαλαίου αυτού αποτελεί η θεωρητική και πρακτική γνωριµία σας

µε τον κώδικα υλοποίησης ενός πραγµατικού λειτουργικού συστήµατος τύπου UNIX,

µέσω της ενδεικτικής παρουσίασης των βασικότερων συναρτήσεων (και προσεκτικά

σχεδιασµένων ερωτήσεων κατανόησης πάνω στον κώδικα υλοποίησης αυτών) του

πυρήνα του λειτουργικού συστήµατος Linux.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει και κατανοήσει σε ικανοποιητικό βαθµό (απαντώντας σηµα-

ντικό µέρος ή και το σύνολο των ερωτήσεων που τίθενται) τα ενδεικτικά µέρη του

κώδικα υλοποίησης του πυρήνα του λειτουργικού συστήµατος Linux, τα οποία παρα-

τίθενται σε αυτό το κεφάλαιο, θα µπορείτε:

• να κατανοείτε ικανοποιητικά τον κώδικα του πυρήνα ενός πραγµατικού Unix–like

λειτουργικού συστήµατος, τις πολύπλοκες δοµές και τεχνικές ανάπτυξης που χρη-

σιµοποιεί,

• να κατανοείτε τον τρόπο επικοινωνίας µηχανής και περιφερειακών συσκευών µέσω

ενός πραγµατικού λειτουργικού συστήµατος και να γράφετε από µόνοι σας αντί-

στοιχες συναρτήσεις,

• να χρησιµοποιείτε προχωρηµένες δοµές και τεχνικές στη γλώσσα C (timers, shift registers

κ.ά.) για την ανάπτυξη κώδικα πυρήνα για ένα πραγµατικό λειτουργικό σύστηµα,

• να υλοποιείτε µηχανισµούς χρονοδροµολόγησης διαδικασιών για ένα πραγµατικό

λειτουργικό σύστηµα (Linux),

• να υλοποιείτε µηχανισµούς αντικατάστασης σελίδων για ένα πραγµατικό λειτουρ-

γικό σύστηµα (Linux),

• να επεµβαίνετε στον κώδικα πυρήνα του Linux και να ενσωµατώνετε ένα δικό σας

αλγόριθµο χρονοδροµολόγησης διαδικασιών ή αντικατάστασης σελίδων.

ŒÓÓÔȘ ÎÏÂȉȿ

5∫ ∂ º ∞ § ∞ π √

• πυρήνας (kernel) του Linux

• χρονοδροµολόγηση διαδικασιών

• σελιδοποίηση και εικονική µνήµη

• το Process Control Block µίας δια-

δικασίας

• timers

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 83

Page 84: Λειτουργικά Συστήματα

8 4 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Σε αντίθεση µε τα προηγούµενα κεφάλαια, οι Ασκήσεις του κεφαλαίου αυτού δεν

απαιτούν κάποιου είδους ανάπτυξη κώδικα ή πρακτική εξάσκηση στον υπολογιστή

σας, αποτελούν ωστόσο την απαραίτητη (και ίσως ακόµα πιο σηµαντική) συνέχεια

των Ασκήσεων του κεφαλαίου 3, καθώς θα σας φέρουν σε επαφή µε πραγµατικές υλο-

ποιήσεις των βασικών µηχανισµών που προσοµοιώσατε στα πλαίσια εκείνου του

κεφαλαίου (και ειδικότερα µε υλοποιήσεις του λειτουργικού συστήµατος LINUX), µε

σκοπό να κατανοήσετε στην πραγµατική του διάσταση το πώς «κτίζεται» ο πυρήνας

ενός πραγµατικού λειτουργικού συστήµατος.

Πιο συγκεκριµένα, οι Ασκήσεις Aυτοαξιολόγησης και ∆ραστηριότητες αυτού του

κεφαλαίου θα είναι κυρίως θεωρητικές (Ασκήσεις κατανόησης, σχολιασµός, συγκρί-

σεις, κ.ά.) και θα έχουν ως κύριο αντικείµενο την υλοποίηση των λειτουργιών (α)

χρονοδροµολόγησης διαδικασιών, (β) εξυπηρέτησης σφαλµάτων σελίδας, (γ) αντι-

κατάστασης σελίδων και (δ) εναλλαγής διαδικασιών στον πυρήνα του λειτουργικού

συστήµατος Linux.

Ο κώδικας, τµήµατα του οποίου παρατίθενται στα πλαίσια των Ασκήσεων του κεφα-

λαίου αυτού, προέρχεται από µία παλαιότερη και σχετικά απλή έκδοση του Linux

(έκδοση 1.0.9) και επιλέχθηκε µε σκοπό την ευκολότερη κατανόηση και την αποφυ-

γή των δυσκολιών υψηλού επιπέδου προγραµµατισµού (σε γλώσσα C) που εµφανί-

ζουν οι νεότερες εκδόσεις.

Για την καλύτερη και ευκολότερη κατανόηση του κώδικα αυτού (και κατά συνέπεια

τη διευκόλυνσή σας όσον αφορά την απάντηση των αντίστοιχων ερωτήσεων), συνι-

στάται παράλληλα να µελετήσετε (αποσπασµατικά µόνο και όχι διεξοδικά) στο σύνο-

λό του τον κώδικα του πυρήνα της συγκεκριµένης έκδοσης του Linux, έναν κώδικα

τον οποίο µπορείτε, επίσης, να βρείτε στις WWW–διευθύνσεις οι οποίες δίνονται στο

τέλος του κεφαλαίου.

• oλίσθηση δυαδικών ψηφίων (shift)

• aναµονή διαδικασιών (blocked)

• aφύπνιση διαδικασιών (wake–up)

• µάσκα δυαδικών ψηφίων

• καταχωρητής πίνακα σελίδων (PTR)

• καταχωρητής σφάλµατος σελίδας

(PFR)

• βρώµικες (dirty) σελίδες

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 84

Page 85: Λειτουργικά Συστήματα

5.1 XÚÔÓÔ‰ÚÔÌÔÏfiÁËÛË K.M.E.

8 55 . 1 X ƒ √ ¡ √ ¢ ƒ √ ª √ § √ ° ∏ ™ ∏ K . M . E .

Παράλληλα µε την ενασχόλησή σας µε τις Ασκήσεις Αυτοαξιολόγησης και ∆ρα-

στηριότητες αυτού του κεφαλαίου και σε κάθε σας βήµα, έχετε εύκολα προσβάσι-

µα και συµβουλευτείτε τα για κάθε σχετική απορία σας:

• Τη βιβλιογραφική αναφορά [1] (και ειδικότερα τα Kεφάλαια 4–8) του παρόντος

κεφαλαίου για οποιαδήποτε δυσκολία συναντήσετε σχετικά µε στοιχεία, δοµές

κ.λπ. της γλώσσας C, στην οποία είναι γραµµένες οι συναρτήσεις του Linux που

σας δίνονται παρακάτω.

• Tις βιβλιογραφικές αναφορές που σας υποδείχθησαν στα πλαίσια των ∆ραστη-

ριοτήτων 3.2, 3.6 και 3.8.

• Τέλος, φροντίστε να έχετε εύκολα προσβάσιµες στον προσωπικό σας υπολογι-

στή τις σελίδες των URL διευθύνσεων της βιβλιογραφικής αναφοράς [5] του

παρόντος κεφαλαίου, ώστε να µπορείτε να τις συµβουλεύεστε όποτε χρειάζεστε

µία πιο ολοκληρωµένη άποψη του κώδικα του λειτουργικού συστήµατος Linux.

¢Ú·ÛÙËÚÈfiÙËÙ· 5.1

5.1.1 O ·ÏÁfiÚÈıÌÔ˜ ¯ÚÔÓÔ‰ÚÔÌÔÏfiÁËÛ˘ ‰È·‰ÈηÛÈÒÓ

Ο παρακάτω κώδικας αποτελεί τη βασική συνάρτηση χρονοδροµολόγησης διαδικα-

σιών («schedule()») της έκδοσης 1.0.9 του λειτουργικού συστήµατος Linux.

195 unsigned long itimer_ticks = 0;

196 unsigned long itimer_next = ~0;

197 static unsigned long lost_ticks = 0;

198

199 /*

200 * “schedule()” is the scheduler function. It’s a very

simple and nice

201 * scheduler: it’s not perfect, but certainly works for

most things.

202 * The one thing you might take a look at is the

signal–handler code here.

203 *

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 85

Page 86: Λειτουργικά Συστήματα

8 6 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

204 * NOTE!! Task 0 is the “idle” task, which gets called when

no other

205 * tasks can run. It can not be killed, and it cannot

sleep. The “state”

206 * information in task[0] is never used.

207 *

208 * The “confuse_gcc” goto is used only to get better

assembly code..

209 * Djikstra probably hates me.

210 */

211 asmlinkage void schedule(void)

212

213 int c;

214 struct task_struct * p;

215 struct task_struct * next;

216 unsigned long ticks;

217

218 /* check alarm, wake up any interruptible tasks that have

got a signal */

219

220 if (intr_count)

221 printk(“Aiee: scheduling in interrupt\n”);

222 intr_count = 0;

223

224 cli();

225 ticks = itimer_ticks;

226 itimer_ticks = 0;

227 itimer_next = ~0;

228 sti();

229 need_resched = 0;

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 86

Page 87: Λειτουργικά Συστήματα

230 p = &init_task;

231 for (;;)

232 if ((p = p–>next_task) == &init_task)

233 goto confuse_gcc1;

234 if (ticks && p–>it_real_value)

235 if (p–>it_real_value <= ticks)

236 send_sig(SIGALRM, p, 1);

237 if (!p–>it_real_incr)

238 p–>it_real_value = 0;

239 goto end_itimer;

240

241 do

242 p–>it_real_value += p–>it_real_incr;

243 while (p–>it_real_value <= ticks);

244

245 p–>it_real_value –= ticks;

246 if (p–>it_real_value < itimer_next)

247 itimer_next = p–>it_real_value;

248

249 end_itimer:

250 if (p–>state != TASK_INTERRUPTIBLE)

251 continue;

252 if (p–>signal & ~p–>blocked)

253 p–>state = TASK_RUNNING;

254 continue;

255

256 if (p–>timeout && p–>timeout <= jiffies)

257 p–>timeout = 0;

258 p–>state = TASK_RUNNING;

8 75 . 1 X ƒ √ ¡ √ ¢ ƒ √ ª √ § √ ° ∏ ™ ∏ K . M . E .

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 87

Page 88: Λειτουργικά Συστήματα

8 8 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

259

260

261 confuse_gcc1:

262

263 /* this is the scheduler proper: */

264 #if 0

265 /* give processes that go to sleep a bit higher priority..

*/

266 /* This depends on the values for TASK_XXX */

267 /* This gives smoother scheduling for some things, but */

268 /* can be very unfair under some circumstances, so.. */

269 if (TASK_UNINTERRUPTIBLE >= (unsigned) current–>state &&

270 current–>counter < current–>priority*2)

271 ++current–>counter;

272

273 #endif

274 c = –1;

275 next = p = &init_task;

276 for (;;)

277 if ((p = p–>next_task) == &init_task)

278 goto confuse_gcc2;

279 if (p–>state == TASK_RUNNING && p–>counter > c)

280 c = p–>counter, next = p;

281

282 confuse_gcc2:

283 if (!c)

284 for_each_task(p)

285 p–>counter = (p–>counter >> 1) + p–>priority;

286

287 if(current != next)

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 88

Page 89: Λειτουργικά Συστήματα

288 kstat.context_swtch++;

289 switch_to(next);

290 /* Now maybe reload the debug registers */

291 if(current–>debugreg[7])

292 loaddebug(0);

293 loaddebug(1);

294 loaddebug(2);

295 loaddebug(3);

296 loaddebug(6);

297 ;

298

Με σκοπό την ευκολότερη αντιµετώπιση της Άσκησης Αυτοαξιολόγησης και της

∆ραστηριότητας που ακολουθούν, µελετήστε λεπτοµερώς το Kεφάλαιο 2 της βιβλιο-

γραφικής αναφοράς [3] και το κεφάλαιο 3 της βιβλιογραφικής αναφοράς [4] του

παρόντος κεφαλαίου, όπου περιγράφονται και εξηγούνται σε ικανοποιητικό βαθµό

οι τεχνικές υλοποίησης του µηχανισµού χρονοδροµολόγησης διεργασιών του Linux

και του 4.3 BSD Unix αντίστοιχα.

8 95 . 1 X ƒ √ ¡ √ ¢ ƒ √ ª √ § √ ° ∏ ™ ∏ K . M . E .

Αφού µελετήσετε προσεκτικά τον κώδικα της παραπάνω συνάρτησης, προσπαθή-

στε να απαντήσετε µε απλά λόγια και την απαιτούµενη σαφήνεια στις παρακάτω

ερωτήσεις:

• Σε ποια περίπτωση µεταφέρεται ο έλεγχος από την εντολή ελέγχου της γραµµής

278 στην ετικέτα (label) «confuse_gcc2»; Ποια βασική λειτουργία επιτελείται

µέσω του κώδικα που σηµατοδοτείται από αυτήν την ετικέτα;

• Μπορείτε να ξαναγράψετε το σχετικό µέρος της συνάρτησης (από τη γραµµή

276 έως τη γραµµή 286) αποφεύγοντας τη µετάβαση στον κώδικα της ετικέτας

«confuse_gcc2» µε χρήση της εντολής «goto»;

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.1

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 89

Page 90: Λειτουργικά Συστήματα

9 0 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

Αφού φέρετε σε πέρας ικανοποιητικά την παραπάνω Άσκηση Αυτοαξιολόγησης

και µελετήσετε ξανά και µε µεγαλύτερη προσοχή τις λεπτοµέρειες τον κώδικα της

παραπάνω συνάρτησης, καλείστε να δώσετε αναλυτικές και αρκούντως σαφείς απα-

ντήσεις στα παρακάτω επιπλεόν ερωτήµατα:

• Σε ποιο σηµείο (δώστε αριθµούς γραµµών) γίνεται η βασική χρονοδροµολόγη-

ση διαδικασιών (διερεύνηση της «ready_queue», εκτέλεση σχετικού αλγόριθ-

µου, επιλογή της επόµενης για εισαγωγή στην Κ.Μ.Ε. διαδικασίας κ.ά.);

• Ποια µορφή χρονοδροµολόγησης διαδικασιών υλοποιείται (round robin,…);

Υλοποιείται απλώς ένας µόνο σχετικός αλγόριθµος ή συνδυασµός περισσότε-

ρων από µία γνωστών τεχνικών χρονοδροµολόγησης;

• Ο παραπάνω µηχανισµός χρονοδροµολόγησης περιλαµβάνει υποστήριξη και

διαχείριση προτεραιοτήτων. Σηµειώστε σε ποιες γραµµές του κώδικα φαίνεται

αυτό και πώς ακριβώς λειτουργεί ο σχετικός µηχανισµός.

• Ποιες ουρές χρησιµοποιούνται για την υποστήριξη του όλου µηχανισµού χρο-

νοδροµολόγησης και για ποιο λόγο η κάθε µία; ∆ώστε τουλάχιστον έναν αριθ-

µό γραµµής αναφοράς και χρήσης της κάθε (τέτοιου είδους) ουράς στην παρα-

πάνω συνάρτηση χρονοδροµολόγησης.

• Tι αντπροσωπεύουν οι καταστάσεις «TASK _RUNNING», «TASK_

INTERRUPTIBLE» για µία διαδικασία; Ποιο είναι γενικότερα το νόηµα της

µεταβλητής «p–>state» για µία διαδικασία στην παραπάνω συνάρτηση;

• Τι ακριβώς επιτελείται από τον κώδικα των γραµµών 234―240; Εξηγήστε περι-

ληπτικά και µε σαφήνεια το σκοπό αυτών των γραµµών καθώς επίσης και το

νόηµα της κάθε µεταβλητής η οποία χρησιµοποιείται.

• Τι ακριβώς επιτελείται από τον κώδικα των γραµµών 250–260; Εξηγήστε περι-

ληπτικά και µε σαφήνεια το σκοπό αυτών των γραµµών καθώς επίσης και το

νόηµα της κάθε µεταβλητής η οποία χρησιµοποιείται.

¢Ú·ÛÙËÚÈfiÙËÙ· 5.2

5.1.2 O Ì˯·ÓÈÛÌfi˜ ·Ê‡ÓÈÛ˘ ‰È·‰ÈηÛÈÒÓ

Στον παρακάτω κώδικα περιλαµβάνονται οι απαραίτητες (δύο) συναρτήσεις για την

αφύπνιση (wake–up) blocked διαδικασιών («wake_up()» και

«wake_up_interruprible()») της έκδοσης 1.0.9 του λειτουργικού συστήµατος Linux:

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 90

Page 91: Λειτουργικά Συστήματα

308 / * wake_up doesn’t wake up stopped processes – they have

to be awakened

309 * with signals or similar.

310 *

311 * Note that this doesn’t need cli–sti pairs: interrupts

may not change

312 * the wait–queue structures directly, but only call

wake_up() to wake

313 * a process. The process itself must remove the queue once

it has woken.

314 */

315 void wake_up(struct wait_queue **q)

316

317 struct wait_queue *tmp;

318 struct task_struct * p;

319

320 if (!q || !(tmp = *q))

321 return;

322 do

323 if ((p = tmp–>task) != NULL)

324 if ((p–>state == TASK_UNINTERRUPTIBLE) ||

325 (p–>state == TASK_INTERRUPTIBLE))

326 p–>state = TASK_RUNNING;

327 if (p–>counter > current–>counter)

328 need_resched = 1;

329

330

331 if (!tmp–>next)

332 printk(“wait_queue is bad (eip = %08lx)\n”,((unsigned

long *) q)[–1]);

9 15 . 1 X ƒ √ ¡ √ ¢ ƒ √ ª √ § √ ° ∏ ™ ∏ K . M . E .

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 91

Page 92: Λειτουργικά Συστήματα

9 2 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

333 printk(“ q = %p\n”,q);

334 printk(“ *q = %p\n”,*q);

335 printk(“ tmp = %p\n”,tmp);

336 break;

337

338 tmp = tmp–>next;

339 while (tmp != *q);

340

341

342 void wake_up_interruptible(struct wait_queue **q)

343

344 struct wait_queue *tmp;

345 struct task_struct * p;

346

347 if (!q || !(tmp = *q))

348 return;

349 do

350 if ((p = tmp–>task) != NULL)

351 if (p–>state == TASK_INTERRUPTIBLE)

352 p–>state = TASK_RUNNING;

353 if (p–>counter > current–>counter)

354 need_resched = 1;

355

356

357 if (!tmp–>next)

358 printk(“wait_queue is bad (eip = %08lx)\n”,((unsigned

long *) q)[–1]);

359 printk(“ q = %p\n”,q);

360 printk(“ *q = %p\n”,*q);

361 printk(“ tmp = %p\n”,tmp);

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 92

Page 93: Λειτουργικά Συστήματα

362 break;

363

364 tmp = tmp–>next;

365 while (tmp != *q);

366

Αρχικά και πριν την ενασχόλησή σας µε την Άσκηση Αυτοαξιολόγησης και τη ∆ρα-

στηριότητα που ακολουθούν, µελετήστε ξανά και προσεκτικά το Kεφάλαιο 2 της

βιβλιογραφικής αναφοράς [3] και το Kεφάλαιο 3 της βιβλιογραφικής αναφοράς [4]

του παρόντος κεφαλαίου, δίνοντας έµφαση, όµως, αυτή τη φορά στα σηµεία όπου

περιγράφονται και επεξηγούνται οι τεχνικές υλοποίησης του µηχανισµού αφύπνισης

«blocked» διεργασιών του Linux και του 4.3 BSD Unix αντίστοιχα.

9 35 . 1 X ƒ √ ¡ √ ¢ ƒ √ ª √ § √ ° ∏ ™ ∏ K . M . E .

Αφού µελετήσετε προσεκτικά τον κώδικα των παραπάνω συναρτήσεων, προσπα-

θήστε να απαντήσετε µε απλά λόγια και την απαιτούµενη σαφήνεια στις παρακά-

τω ερωτήσεις:

• Τι είδους δοµή χρησιµοποιείται για την αναπαράσταση της ουράς όπου κρα-

τούνται οι «κοιµώµενες» (blocked/sleep) διαδικασίες; Περιγράψτε µε σαφήνεια

τη δοµή αυτή καθώς και τη διαδικασία προσπέλασής της στα πλαίσια των παρα-

πάνω συναρτήσεων.

• Ποιες είναι οι περιπτώσεις (όπως υποδηλώνονται από την εντολή ελέγχου της

γραµµής 320) κατά τις οποίες ο έλεγχος επιστρέφει από τις παραπάνω συναρ-

τήσεις χωρίς να πραγµατοποιηθεί καµία λειτουργία;

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.2

Αφού φέρετε σε πέρας ικανοποιητικά την παραπάνω Άσκηση Αυτοαξιολόγησης

και µελετήσετε ξανά και µε µεγαλύτερη λεπτοµέρεια πλέον τον κώδικα των παρα-

πάνω συναρτήσεων, καλείστε να δώσετε αναλυτικές και αρκούντως σαφείς απα-

ντήσεις στα παρακάτω επιπλέον ερωτήµατα:

• Ποια είναι η βασική διαφορά των δύο παραπάνω συναρτήσεων «wake_up()» και

«wake_up_interruptible(); Εξυπηρετούν διαφορετικές περιπτώσεις η καθεµιά ή

είναι επικαλυπτόµενες; Ποιες περιπτώσεις καλύπτει η «wake_up_interruptible()»

¢Ú·ÛÙËÚÈfiÙËÙ· 5.3

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 93

Page 94: Λειτουργικά Συστήματα

9 4 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

τις οποίες δεν καλύπτει η «wake_up»;

• Σε ποιες γραµµές του κώδικα (σε καθεµιά από τις δύο παραπάνω συναρτήσεις)

πραγµατοποιείται η αφύπνιση µίας διαδικασίας (δηλαδή η επαναφορά της, δηλα-

δή, σε κατάσταση τρεξίµατος);

• Tι αντιπροσωπεύει η κατάσταση «TASK_UNINTERRUPTIBLE» (συνάρτηση

«wake_up()», γραµµή 324) για µία διαδικασία; Γιατί είναι απαραίτητος ο έλεγχός

της σε αυτήν τη συνάρτηση σε αντίθεση µε τη συνάρτηση χρονοδροµολόγησης;

• Τι ακριβώς επιτελείται από τον κώδικα των γραµµών 350–355 της συνάρτησης

«wake_up_interruptible()»; Γιατί δεν εξετάζεται εδώ η περίπτωση της κατά-

στασης «p–>state == TASK_UNINTERRUPTIBLE», όπως στη «wake_up()»;

• Περιγράψτε τι είδους δοµή φαντάζεστε ότι αντιπροσωπεύει η βασική δοµή

«struct wait_queue» των παραπάνω συναρτήσεων και εξηγήστε το νόηµα και τη

χρησιµότητα της βασικής παραµέτρου «q».

• Εξηγήστε τι αντιπροσωπεύουν οι µεταβλητές «p→counter» και «current→counter» στη συνάρτηση «wake_up()» (γραµµή 327).

5.2 ¢È·¯Â›ÚÈÛË ÌÓ‹Ì˘ – ™Ê¿ÏÌ·Ù· ÛÂÏ›‰ˆÓ

5.2.1 H ‚·ÛÈ΋ Û˘Ó¿ÚÙËÛË Â͢ËÚ¤ÙËÛ˘ «Page faults»

Ο παρακάτω κώδικας αποτελεί τη βασική συνάρτηση εξυπηρέτησης σφαλµάτων

αναφοράς σελίδων («do_page_fault()») της έκδοσης 1.0.9 του λειτουργικού συστή-

µατος Linux.

882 / * This routine handles page faults. It determines the

address,

883 * and the problem, and then passes it off to one of the

appropriate

884 * routines.

885 */

886 asmlinkage void do_page_fault(struct pt_regs *regs,

unsigned long error_code)

887

888 unsigned long address;

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 94

Page 95: Λειτουργικά Συστήματα

889 unsigned long user_esp = 0;

890 unsigned int bit;

891

892 /* get the address */

893 __asm__(“movl %%cr2,%0”:”=r” (address));

894 if (address < TASK_SIZE)

895 if (error_code & 4) /* user mode access? */

896 if (regs–>eflags & VM_MASK)

897 bit = (address – 0xA0000) >> PAGE_SHIFT;

898 if (bit < 32)

899 current–>screen_bitmap |= 1 << bit;

900 else

901 user_esp = regs–>esp;

902

903 if (error_code & 1)

904 do_wp_page(error_code, address, current, user_esp);

905 else

906 do_no_page(error_code, address, current, user_esp);

907 return;

908

909 address –= TASK_SIZE;

910 if (wp_works_ok < 0 && address == 0 && (error_code &

PAGE_PRESENT))

911 wp_works_ok = 1;

912 pg0[0] = PAGE_SHARED;

913 printk(“This processor honours the WP bit even when in

supervisor mode. Good.\n”);

914 return;

915

916 if (address < PAGE_SIZE)

9 55 . 2 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – ™ º ∞ § ª ∞∆∞ ™ ∂ § π ¢ ø ¡

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 95

Page 96: Λειτουργικά Συστήματα

9 6 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

917 printk(“Unable to handle kernel NULL pointer

dereference”);

918 pg0[0] = PAGE_SHARED;

919 else

920 printk(“Unable to handle kernel paging request”);

921 printk(“ at address %08lx\n”,address);

922 die_if_kernel(“Oops”, regs, error_code);

923 do_exit(SIGKILL);

924

Με σκοπό την ευκολότερη αντιµετώπιση της Άσκησης Αυτοαξιολόγησης και της

∆ραστηριότητας που ακολουθούν, µελετήστε λεπτοµερώς το Kεφάλαιο 4 της βιβλιο-

γραφικής αναφοράς [3] και το Kεφάλαιο 4 της βιβλιογραφικής αναφοράς [4] του

παρόντος κεφαλαίου, όπου περιγράφονται και εξηγούνται σε ικανοποιητικό βαθµό

οι τεχνικές υλοποίησης του µηχανισµού εξυπηρέτησης σφαλµάτων αναφορών σελί-

δων (page_faults) του Linux και του 4.3 BSD Unix αντίστοιχα.

Αφού µελετήσετε προσεκτικά τον κώδικα της παραπάνω συνάρτησης, προσπαθή-

στε να απαντήσετε µε απλά λόγια και την απαιτούµενη σαφήνεια στις παρακάτω

ερωτήσεις:

• Σε ποιες περιπτώσεις εκτελείται ο κώδικας που υποδηλώνεται από την εντολή

ελέγχου της γραµµής 916 (κώδικας γραµµών 916–920); Ποιες υποπεριπτώσεις

ελέγχονται µέσω της εντολής αυτής και ποιες λειτουργίες επιτελούνται;

• Ο κώδικας της συνάρτησης χρησιµοποιεί πολλαπλές ενδιάµεσες επιστροφές

ελέγχου («return») αντί για ολοκληρωµένες εντολές ελέγχου, µε σκοπό την παρα-

γωγή ταχύτερου εκτελέσιµου κώδικα. Μπορείτε να ξαναγράψετε τον κώδικα σε

πιο δοµηµένη και ευανάγνωστη µορφή αποφεύγοντας τις ενδιάµεσες αυτές επι-

στροφές;

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.3

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 96

Page 97: Λειτουργικά Συστήματα

5.2.2 BoËıËÙÈΤ˜ Û˘Ó·ÚÙ‹ÛÂȘ Â͢ËÚ¤ÙËÛ˘ «Page faults»

Στον παρακάτω κώδικα περιλαµβάνονται οι δύο απαραίτητες βοηθητικές συναρτή-

σεις εξυπηρέτησης σφαλµάτων αναφοράς σελίδων («do_no_page()» και

«do_wp_page()») της έκδοσης 1.0.9 του λειτουργικού συστήµατος Linux. Οι συναρ-

τήσεις αυτές καλούνται αντίστοιχα µέσα από τη βασική συνάρτηση εξυπηρέτησης

που παρουσιάστηκε στην προηγούµενη υποενότητα και επιτελούν τις ουσιαστικές

εργασίες εξυπηρέτησης ενός σφάλµατος σελίδας.

822 void do_no_page(unsigned long error_code, unsigned long

address,

823 struct task_struct *tsk, unsigned long user_esp)

824

9 75 . 2 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – ™ º ∞ § ª ∞∆∞ ™ ∂ § π ¢ ø ¡

Αφού φέρετε σε πέρας ικανοποιητικά την παραπάνω Άσκηση Αυτοαξιολόγησης

και µελετήσετε ξανά και µε µεγαλύτερη λεπτοµέρεια πλέον τον κώδικα της παρα-

πάνω συνάρτησης, καλείστε να δώσετε αναλυτικές και αρκούντως σαφείς απα-

ντήσεις στα παρακάτω επιπλέον ερωτήµατα:

• Σε ποιο σηµείο της παραπάνω συνάρτησης (δώστε αριθµούς γραµµών) γίνεται

η ουσιαστική εξυπηρέτηση ενός σφάλµατος αναφοράς σελίδων (κλήση αντί-

στοιχων συναρτήσεων κ.λπ.);

• Εξηγήστε περιληπτικά τι σηµαίνουν και για ποιο λόγο χρησιµοποιούνται (α) οι

παράµετροι (regs, error_code) και (β) οι δηλωµένες µεταβλητές (address,

user_esp, bit) της παραπάνω συνάρτησης.

• Τι ακριβώς επιτελείται από τον κώδικα των γραµµών 892–902; Εξηγήστε περι-

ληπτικά και µε σαφήνεια το σκοπό αυτών των γραµµών, καθώς επίσης και το

νόηµα της κάθε µεταβλητής η οποία χρησιµοποιείται.

• Εξηγήστε λεπτοµερώς τι είδους έλεγχος πραγµατοποιείται από το

«IF_statement» της γραµµής «910» και ξαναγράψτε τον κώδικα αυτής της γραµ-

µής διασπώντας την σε περισσότερες και πιο ευανάγνωστες εντολές ελέγχου.

• Τι φαντάζεστε ότι µπορεί να αντιπροσωπεύουν οι σταθερές «TASK_SIZE,

«VM_MASK», «PAGE_SHIFT», «PAGE_PRESENT», «PAGE_SHARED»;

Και τι τιµές κατά τη γνώµη σας µπορούν να πάρουν;

¢Ú·ÛÙËÚÈfiÙËÙ· 5.4

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 97

Page 98: Λειτουργικά Συστήματα

9 8 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

825 unsigned long tmp;

826 unsigned long page;

827 struct vm_area_struct * mpnt;

828

829 page = get_empty_pgtable(tsk,address);

830 if (!page)

831 return;

832 page &= PAGE_MASK;

833 page += PAGE_PTR(address);

834 tmp = *(unsigned long *) page;

835 if (tmp & PAGE_PRESENT)

836 return;

837 ++tsk–>rss;

838 if (tmp)

839 ++tsk–>maj_flt;

840 swap_in((unsigned long *) page);

841 return;

842

843 address &= 0xfffff000;

844 tmp = 0;

845 for (mpnt = tsk–>mmap; mpnt != NULL; mpnt = mpnt–>vm_next)

846 if (address < mpnt–>vm_start)

847 break;

848 if (address >= mpnt–>vm_end)

849 tmp = mpnt–>vm_end;

850 continue;

851

852 if (!mpnt–>vm_ops || !mpnt–>vm_ops–>nopage)

853 ++tsk–>min_flt;

854 get_empty_page(tsk,address);

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 98

Page 99: Λειτουργικά Συστήματα

855 return;

856

857 mpnt–>vm_ops–>nopage(error_code, mpnt, address);

858 return;

859

860 if (tsk != current)

861 goto ok_no_page;

862 if (address >= tsk–>end_data && address < tsk–>brk)

863 goto ok_no_page;

864 if (mpnt && mpnt == tsk–>stk_vma &&

865 address – tmp > mpnt–>vm_start – address &&

866 tsk–>rlim[RLIMIT_STACK].rlim_cur > mpnt–>vm_end –

address)

867 mpnt–>vm_start = address;

868 goto ok_no_page;

869

870 tsk–>tss.cr2 = address;

871 current–>tss.error_code = error_code;

872 current–>tss.trap_no = 14;

873 send_sig(SIGSEGV,tsk,1);

874 if (error_code & 4) /* user level access? */

875 return;

876 ok_no_page:

877 ++tsk–>min_flt;

878 get_empty_page(tsk,address);

879

880

613 / * check that a page table change is actually needed, and call

614 * the low–level function only in that case..

615 */

9 95 . 2 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – ™ º ∞ § ª ∞∆∞ ™ ∂ § π ¢ ø ¡

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 99

Page 100: Λειτουργικά Συστήματα

1 0 0 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

616 void do_wp_page(unsigned long error_code, unsigned long address,

617 struct task_struct * tsk, unsigned long user_esp)

618

619 unsigned long page;

620 unsigned long * pg_table;

621

622 pg_table = PAGE_DIR_OFFSET(tsk–>tss.cr3,address);

623 page = *pg_table;

624 if (!page)

625 return;

626 if ((page & PAGE_PRESENT) && page < high_memory)

627 pg_table = (unsigned long *) ((page & PAGE_MASK) +

PAGE_PTR(address));

628 page = *pg_table;

629 if (!(page & PAGE_PRESENT))

630 return;

631 if (page & PAGE_RW)

632 return;

633 if (!(page & PAGE_COW))

634 if (user_esp && tsk == current)

635 current–>tss.cr2 = address;

636 current–>tss.error_code = error_code;

637 current–>tss.trap_no = 14;

638 send_sig(SIGSEGV, tsk, 1);

639 return;

640

641

642 if (mem_map[MAP_NR(page)] == 1)

643 *pg_table |= PAGE_RW | PAGE_DIRTY;

644 invalidate();

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 100

Page 101: Λειτουργικά Συστήματα

645 return;

646

647 __do_wp_page(error_code, address, tsk, user_esp);

648 return;

649

650 printk(“bad page directory entry %08lx\n»,page);

651 *pg_table = 0;

Αρχικά και πριν την ενασχόλησή σας µε την Άσκηση Αυτοαξιολόγησης και τη ∆ρα-

στηριότητα που ακολουθούν, µελετήστε ξανά και προσεκτικά το Kεφάλαιο 4 της

βιβλιογραφικής αναφοράς [3] και το Kεφάλαιο 4 της βιβλιογραφικής αναφοράς [4]

του παρόντος κεφαλαίου, δίνοντας ακόµα µεγαλύτερη έµφαση στις λεπτοµέρειες

υλοποίησης του µηχανισµού εξυπηρέτησης page_faults του Linux και του 4.3 BSD

Unix αντίστοιχα (ονόµατα και σηµασία σταθερών και µεταβλητών, δοµές και βοη-

θητικές συναρτήσεις, µάσκες, κωδικοί λαθών κ.ά.).

1 0 15 . 2 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – ™ º ∞ § ª ∞∆∞ ™ ∂ § π ¢ ø ¡

Αφού µελετήσετε προσεκτικά τον κώδικα των παραπάνω συναρτήσεων, προσπα-

θήστε να απαντήσετε µε απλά λόγια και την απαιτούµενη σαφήνεια στις παρακά-

τω ερωτήσεις:

• Στον κώδικα της συνάρτησης do_no_page() καλούνται δύο συναρτήσεις µε απώ-

τερο σκοπό την εισαγωγή µίας σελίδας που απουσιάζει στην κύρια µνήµη του

συστήµατος. Ποιες είναι αυτές και σε ποια περίπτωση καλείται η κάθε µία;

• Ποιος βασικός έλεγχος ορθότητας εξετάζεται µέσω της εντολής ελέγχου της

γραµµής 626 στη συνάρτηση do_wp_page(); Ποιες λειτουργίες εκτελούνται,

όταν δεν ικανοποιούνται οι σχετικές συνθήκες, και ποια η σηµασία τους;

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.4

Αφού φέρετε σε πέρας ικανοποιητικά την παραπάνω Άσκηση Αυτοαξιολόγησης

και µελετήσετε ξανά και µε µεγαλύτερη λεπτοµέρεια πλέον τον κώδικα των παρα-

πάνω συναρτήσεων, καλείστε να δώσετε αναλυτικές και αρκούντως σαφείς απα-

ντήσεις στα παρακάτω επιπλέον ερωτήµατα:

¢Ú·ÛÙËÚÈfiÙËÙ· 5.5

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 101

Page 102: Λειτουργικά Συστήματα

1 0 2 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

• Ποια είναι η βασική διαφορά ανάµεσα στις συναρτήσεις «do_no_page()» και

«do_wp_page()»; Να αναφέρετε τις διαφορετικές περιπτώσεις εξυπηρέτησης

«page faults» που καλύπτει η καθεµιά από αυτές τις συναρτήσεις.

• Τι πιστεύετε ότι κάνει ο κώδικας της συνάρτησης «__do_wp_page()» και για

ποιο λόγο καλείται µέσα από τη βασική συνάρτηση «do_wp_page()»; Εξηγή-

στε, επίσης, το νόηµα της κάθε παραµέτρου της συνάρτησης

αυτής(«__do_wp_page()»).

• Τι αντιπροσωπεύει η µεταβλητή (και ταυτόχρονα βασική παράµετρος της συνάρ-

τησης) «address» στη συνάρτηση «do_no_page()»; [Για διευκόλυνσή σας ανα-

τρέξτε σχετικά στη συνάρτηση «do_page_fault()» της υποενότητας 4.2.1.]

• Τι αριθµό διεύθυνσης αντιπροσωπεύει η σταθερή «fffff000» στη γραµµή 843

της συνάρτησης «do_no_page()» και ποια η επίδραση της όλης πράξης που επι-

τελείται σε αυτήν τη γραµµή («address &=0xfffff000») στη µεταβλητή

«address»;

• Τι ακριβώς επιτελείται από τον κώδικα των γραµµών 843–851 της συνάρτησης

«do_no_page(); Εξηγήστε περιληπτικά και µε σαφήνεια το σκοπό αυτών των

γραµµών, καθώς επίσης και το νόηµα της κάθε µεταβλητής η οποία χρησιµο-

ποιείται.

• Τι ακριβώς επιτελείται από τον κώδικα των γραµµών 629–640 της συνάρτησης

«do_wp_page(); Εξηγήστε περιληπτικά και µε σαφήνεια το σκοπό αυτών των

γραµµών καθώς επίσης και το νόηµα της κάθε µεταβλητής η οποία χρησιµο-

ποιείται.

• Τι φαντάζεστε ότι µπορεί να αντιπροσωπεύουν οι σταθερές «PAGE_MASK»,

«PAGE_COW», «PAGE_RW», «PAGE_DIRTY» στον κώδικα της συνάρτησης

«do_wp_page()»; Και τι τιµές κατά τη γνώµη σας µπορούν να πάρουν;

5.2.3 √ Ì˯·ÓÈÛÌfi˜ ÙÔÔı¤ÙËÛ˘ ÛÂÏ›‰ˆÓ ÛÙË ÌÓ‹ÌË

Ο παρακάτω κώδικας περιλαµβάνει τις δύο βασικές συναρτήσεις τοποθέτησης

σελίδων στη φυσική µνήµη του συστήµατος ("put_page()" και "put_dirty_page()")

της έκδοσης 1.0.9 του λειτουργικού συστήµατος Linux.

465 / * This function puts a page in memory at the wanted

address.

466 * It returns the physical address of the page gotten, 0

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 102

Page 103: Λειτουργικά Συστήματα

if

467 * out of memory (either when trying to access page–table

or

468 * page.)

469 */

470 unsigned long put_page(struct task_struct * tsk,unsigned

long page,

471 unsigned long address,int prot)

472

473 unsigned long *page_table;

474

475 if ((prot & (PAGE_MASK|PAGE_PRESENT)) != PAGE_PRESENT)

476 printk("put_page: prot = %08x\n",prot);

477 if (page >= high_memory)

478 printk("put_page: trying to put page %08lx at

%08lx\n",page,address);

479 return 0;

480

481 page_table = PAGE_DIR_OFFSET(tsk–>tss.cr3,address);

482 if ((*page_table) & PAGE_PRESENT)

483 page_table = (unsigned long *) (PAGE_MASK & *page_table);

484 else

485 printk("put_page: bad page directory entry\n");

486 oom(tsk);

487 *page_table = BAD_PAGETABLE | PAGE_TABLE;

488 return 0;

489

490 page_table += (address >> PAGE_SHIFT) & (PTRS_PER_PAGE–1);

491 if (*page_table)

492 printk("put_page: page already exists\n");

1 0 35 . 2 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – ™ º ∞ § ª ∞∆∞ ™ ∂ § π ¢ ø ¡

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 103

Page 104: Λειτουργικά Συστήματα

1 0 4 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

493 *page_table = 0;

494 invalidate();

495

496 *page_table = page | prot;

497 /* no need for invalidate */

498 return page;

499

500

501 /*

502 * The previous function doesn't work very well if you

also want to mark

503 * the page dirty: exec.c wants this, as it has earlier

changed the page,

504 * and we want the dirty–status to be correct (for VM).

Thus the same

505 * routine, but this time we mark it dirty too.

506 */

507 unsigned long put_dirty_page(struct task_struct * tsk,

unsigned long page, unsigned long address)

508

509 unsigned long tmp, *page_table;

510

511 if (page >= high_memory)

512 printk("put_dirty_page: trying to put page %08lx at

%08lx\n",page,address);

513 if (mem_map[MAP_NR(page)] != 1)

514 printk("mem_map disagrees with %08lx at

%08lx\n",page,address);

515 page_table = PAGE_DIR_OFFSET(tsk–>tss.cr3,address);

516 if (PAGE_PRESENT & *page_table)

517 page_table = (unsigned long *) (PAGE_MASK &

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 104

Page 105: Λειτουργικά Συστήματα

*page_table);

518 else

519 if (!(tmp = get_free_page(GFP_KERNEL)))

520 return 0;

521 if (PAGE_PRESENT & *page_table)

522 free_page(tmp);

523 page_table = (unsigned long *) (PAGE_MASK &

*page_table);

524 else

525 *page_table = tmp | PAGE_TABLE;

526 page_table = (unsigned long *) tmp;

527

528

529 page_table += (address >> PAGE_SHIFT) & (PTRS_PER_PAGE–1);

530 if (*page_table)

531 printk("put_dirty_page: page already exists\n");

532 *page_table = 0;

533 invalidate();

534

535 *page_table = page | (PAGE_DIRTY | PAGE_PRIVATE);

536 /* no need for invalidate */

537 return page;

Με σκοπό την ευκολότερη αντιµετώπιση της Άσκησης Αυτοαξιολόγησης και της

∆ραστηριότητας που ακολουθούν, µελετήστε ξανά και προσεκτικά τόσο το Kεφά-

λαιο 4 της βιβλιογραφικής αναφοράς [3], όσο και το Kεφάλαιο 4 της βιβλιογραφι-

κής αναφοράς [4] του παρόντος κεφαλαίου, δίνοντας έµφαση, όµως, αυτή τη φορά

στις τεχνικές υλοποίησης των αλγόριθµων εκχώρησης, αντικατάστασης και τοπο-

θέτησης σελίδων του Linux και του 4.3 BSD Unix αντίστοιχα.

1 0 55 . 2 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – ™ º ∞ § ª ∞∆∞ ™ ∂ § π ¢ ø ¡

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 105

Page 106: Λειτουργικά Συστήματα

1 0 6 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

Αφού µελετήσετε προσεκτικά τον κώδικα των παραπάνω συναρτήσεων, προσπα-

θήστε να απαντήσετε µε απλά λόγια και την απαιτούµενη σαφήνεια στις παρακά-

τω ερωτήσεις:

• Ποιος βασικός έλεγχος ορθότητας πραγµατοποιείται από την εντολή ελέγχου της

γραµµής 477 στη συνάρτηση put_page(); Τι γίνεται αν ικανοποιείται η σχετική

συνθήκη και ποια βασική λειτουργία είναι η πρώτη που εκτελείται στην περί-

πτωση που δεν ικανοποιείται;

• Σε ποιο σηµείο της συνάρτησης put_dirty_page() αντιµετωπίζεται (δώστε αριθ-

µούς γραµµών) η περίπτωση κατά την οποία η προς εισαγωγή σελίδα υπάρχει

ήδη στη µνήµη; Ποιες λειτουργίες επιτελούνται σε αυτήν την περίπτωση;

ÕÛÎËÛË ∞˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.5

Αφού φέρετε σε πέρας ικανοποιητικά την παραπάνω Άσκηση Αυτοαξιολόγησης

και µελετήσετε ξανά και µε περισσότερη προσοχή στις λεπτοµέρειες πλέον τον

κώδικα των παραπάνω συναρτήσεων, καλείστε να δώσετε αναλυτικές και αρκού-

ντως σαφείς απαντήσεις στα παρακάτω επιπλέον ερωτήµατα:

• Όπως είναι εύκολο να καταλάβετε και από τα σχετικά σχόλια, η διαφορά της

συνάρτησης "put_dirty_page()" από την "put_page()" έγκειται στο ότι η πρώτη

καλύπτει επιπλέον και την περίπτωση όπου τα περιεχόµενα της τοποθετούµενης

σελίδας έχουν αλλάξει. Σε ποιο σηµείο της συνάρτησης "put_dirty_page()" (ανα-

φέρατε αριθµούς γραµµών) καλύπτεται ειδικά αυτή η περίπτωση (δηλαδή, ποιο

είναι το κύριο σηµείο στο οποίο διαφέρουν οι κώδικες των δύο συναρτήσεων);

• Εξηγήστε περιληπτικά αλλά µε σαφήνεια ποιο είναι το νόηµα της καθεµιάς από

τις τέσσερις (4) παραµέτρους της συνάρτησης "put_page()" (tsk, page, address,

prot) καθώς και της δηλωµένης µεταβλητής «*page_table».

• Οι σύνθετες εντολές των γραµµών 481, 490 και 496 της συνάρτησης

"put_page()" επιτελούν τις τρεις κύριες λειτουργίες της συνάρτησης αυτής σε

φυσιολογικές συνθήκες. Να αναφέρετε µε απλά λόγια ποιες είναι αυτές οι τρεις

λειτουργίες και να αναλύσετε σε απλές εντολές τον κώδικα της κάθε αντίστοι-

χης γραµµής.

• Στα διαστήµατα των γραµµών «484–489» και «490–494» της συνάρτησης

¢Ú·ÛÙËÚÈfiÙËÙ· 5.6

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 106

Page 107: Λειτουργικά Συστήματα

1 0 75 . 2 ¢ π ∞ Ã ∂ π ƒ π ™ ∏ ª ¡ ∏ ª ∏ ™ – ™ º ∞ § ª ∞∆∞ ™ ∂ § π ¢ ø ¡

"put_page()" καλύπτονται δύο ειδικές περιπτώσεις. Υποβοηθούµενοι από τα σχε-

τικά διαγνωστικά µηνύµατα, εξηγήστε ποιες είναι αυτές καθώς και πώς διαπι-

στώνεται (µέσα από ποιες συγκεκριµένες εντολές ελέγχου κ.λπ.) η ύπαρξή τους.

• Τι λειτουργίες φαντάζεστε ότι επιτελούνται από τη συνάρτηση "get_free_page()",

η οποία καλείται µέσα από την "put_dirty_page()" στη γραµµή 519; Ποια είναι

η επόµενη λειτουργία της "put_dirty_page()", εάν η "get_free_page()" επιστρέ-

ψει 0; [εάν, δηλαδή, δε βρεθεί ελεύθερη σελίδα]

• Τι φαντάζεστε ότι µπορεί να αντιπροσωπεύουν οι σταθερές «PTRS_PER_

PAGE», «PAGE_DIR_OFFSET», «BAD_PAGE_TABLE», «GFP_KERNEL»,

οι οποίες συναντώνται στον κώδικα των δύο παραπάνω συναρτήσεων; Και τι

τιµές κατά τη γνώµη σας µπορούν να πάρουν;

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 107

Page 108: Λειτουργικά Συστήματα

1 0 8 K E º A § A I O 5 : A ™ ∫ ∏ ™ ∂ π ™ K ∞∆∞ ¡ √ ∏ ™ ∏ ™ ∆ ∏ ™ Y § √ ¶ √ π ∏ ™ ∏ ™ ∂ ¡ √ ™ ¶ ƒ∞ ° ª ∞∆ π ∫ √ À § ∂ π ∆ √ À ƒ ° π ∫ √ À ™ À ™ ∆ ∏ ª ∞∆ √ ™

™‡ÓÔ„Ë

Στα πλαίσια αυτού του κεφαλαίου, παρουσιάστηκε τµηµατικά ένα ενδεικτικό µέρος

του κώδικα υλοποίησης (σε γλώσσα C) των βασικότερων λειτουργιών του πυρήνα

του λειτουργικού συστήµατος LINUX (του πλέον δηµοφιλούς στην εποχή µας

Unix–like λειτουργικού συστήµατος για προσωπικούς υπολογιστές – PCs). Παράλ-

ληλα, επιχειρήθηκε η καλύτερη δυνατή κατανόηση, από την πλευρά του αναγνώστη,

του λειτουργικού συστήµατος αυτού µέσω σχετικών ∆ραστηριοτήτων και Ασκήσεων

Αυτοαξιολόγησης.

Η όλη παρουσίαση ήταν ενδεικτική, περιλαµβάνοντας επίδειξη και αντίστοιχες Ασκή-

σεις κατανόησης (α) του βασικού µηχανισµού χρονοδροµολόγησης διαδικασιών του

LINUX, (β) του µηχανισµού επανενεργοποίησης µπλοκαρισµένων διαδικασιών στην

Κ.Μ.Ε. του συστήµατος (wake–up blocked διαδικασιών), (γ) του µηχανισµού αντι-

µετώπισης σφαλµάτων αναφοράς σελίδων (page faults) και (δ) των χρησιµοποιού-

µενων αλγόριθµων εύρεσης διαθέσιµων πλαισίων στη µνήµη του συστήµατος (αντι-

κατάσταση σελίδων κ.ά.).

BÈ‚ÏÈÔÁÚ·Ê›·

[1] B.W. Kernighan and D. Ritchie, "Η Γλώσσα Προγραµµατισµού C", Κλειδάριθ-

µος, 1990 [ελληνική µετάφραση του πρωτότυπου «The C Programming

Language», 2nd edition, Prentice–Hall Inc., Englewood Cliffs, New Jersey, 1988].

[2] Π. Σπυράκης, «Λειτουργικά Συστήµατα Ι», Ελληνικό Ανοικτό Πανεπιστήµιο,

Θεµατική Ενότητα ΠΛH 11, Tόµος B'.

[3] R. Card, E. Dumas and F. Mevel, «The Linux Kernel Boo», 2nd edition, John

Wiley and Sons, New York, 1998.

[4] S. J. Leffler and M. K. McKusick, "The Design and Implementation of the 4.3

BSD Unix Operating System", 2nd edition, Addisson–Wesley Inc., c1990.

[5] URL διευθύνσεις σχετικές µε το LINUX:

(α) "http://www.linux.org", (β) "http://home.rmi.net/~glabuhn/linux.html",

(γ) "http://www.caldera.com", (δ) "http://www.redhat.com",

(ε) "http://www.dandelion.com/linux", (στ) "http://www.linux.or.jp"

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 108

Page 109: Λειτουργικά Συστήματα

∂›ÏÔÁÔ˜

Επιχειρώντας έναν απολογισµό της πρακτικής σας επαφής και ενασχόλησης τόσο

µε το περιβάλλον αλληλεπίδρασης πραγµατικών λειτουργικών συστηµάτων, όσο και

µε τις βασικές δοµές και τεχνικές σχεδιασµού και ανάπτυξης αυτών, µπρούµε να

συνοψίσουµε τα οφέλη τα οποία αποκοµίσατε στα ακόλουθα βασικά σηµεία:

• Η επαφή σας µε το κέλυφος ενός λειτουργικού συστήµατος τύπου UNIX (όπως

είναι το λειτουργικό σύστηµα LINUX στο οποίο πειραµατιστήκατε) σας προσέ-

φερε πολύτιµη εµπειρία και γνώσεις σχετικά µε το χαµηλού επιπέδου περιβάλλον

προγραµµατισµού και διαχείρισης πόρων το οποίο παρέχεται από τέτοιου είδους

συστήµατα, γνώσεις οι οποίες είναι απαραίτητες για την περαιτέρω υψηλότερων

απαιτήσεων ενασχόλησή σας µε λειτουργικά συστήµατα τύπου UNIX, η οποία θα

αποτελέσει πιθανόν επιθυµία σας στο µέλλον.

• Η χρονοδροµολόγηση διεργασιών, η διαχείριση µνήµης, η υποστήριξη εικονικής

µνήµης µε µηχανισµούς σελιδοποίησης, εξυπηρέτησης page–faults και αντικατά-

στασης σελίδων, η διαχείριση εισόδου/εξόδου και οι βασικοί µηχανισµοί συγ-

χρονισµού διαδικασιών, στους οποίους στηρίχθηκε η προσοµοίωση του πυρήνα

ενός λειτουργικού συστήµατος τύπου UNIX την οποία επιχειρήσατε, αποτελούν

την ισχυρή βάση στην οποία στηρίζεται κάθε λειτουργικό σύστηµα τύπου UNIX.

• Με βάση τις λειτουργίες αυτές µπορεί στη συνέχεια εύκολα να επεκταθεί ο πυρή-

νας του λειτουργικού συστήµατος (κάτι το οποίο θα µπορούσε να αποτελέσει αντι-

κείµενο περαιτέρω προσωπικής ενασχόλησής σας στο µέλλον, µε στόχο να χτί-

σετε από µόνοι σας ένα λειτουργικό σύστηµα τύπου UNIX) ρεαλιστικότερων

απαιτήσεων στην υλοποίηση πιο προχωρηµένων και πολύπλοκων υπηρεσιών,

όπως η άµεση διαχείριση πάσης φύσεως περιφερειακών συσκευών, η υποστήρι-

ξη διαδιεργασιακής και δικτυακής επικοινωνίας κ.λπ.

• Η επαφή σας, τέλος, µε τον πραγµατικό κώδικα υλοποίησης ενός τέτοιου λει-

τουργικού συστήµατος τύπου UNIX (LINUX) σας προσέφερε την ιδιαίτερα πολύ-

τιµη γνώση και τριβή µε την πραγµατική χαµηλού επιπέδου πρόσβαση και δια-

χείριση πόρων υλικού (hardware) µίας υπολογιστικής µηχανής, µέσα από µία

κοινή γλώσσα προγραµµατισµού (πόροι, όπως η κύρια µνήµη του συστήµατος, οι

περιφερειακές συσκευές, οι καταχωρητές της µηχανής κ.λπ.).

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 109

Page 110: Λειτουργικά Συστήματα

1 1 0 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

Σε πολλά ωστόσο σηµεία του βιβλίου αυτού, επιχειρήθηκαν σηµαντικές απλου-

στεύσεις όσον αφορά την πιστότητα της προσοµοίωσης των παραπάνω βασικών

µηχανισµών και λειτουργιών, απλουστεύσεις οι οποίες είχαν ως στόχο τη διατήρη-

ση του επιπέδου του εργαστηριακού αυτού µαθήµατος στα επιτρεπτά όρια δυσκο-

λίας. Η πρακτική σας επαφή και εξάσκηση, επίσης, περιορίστηκε ουσιαστικά µόνο

σε UNIX–like λειτουργικά συστήµατα και στη φιλοσοφία υλοποίησης αυτών.

Τόσο η πληρέστερη και πιστότερη προσοµοίωση και υλοποίηση ενός πυρήνα

UNIX–like λειτουργικού συστήµατος χωρίς τους περιορισµούς και παραδοχές οι

οποίες υιοθετήθηκαν στα πλαίσια του βιβλίου αυτού, όσο και η πρακτική επαφή και

ενασχόληση µε τις εσωτερικές δοµές σχεδιασµού και υλοποίησης άλλων δηµοφιλών

λειτουργικών συστηµάτων (ΜS–DOS, Windows, Windows NT & 2000, VMS,

MacOS, IBM OS κ.ά.), µε τη βοήθεια και επισταµένη µελέτη τόσο της παρατιθέµε-

νης, όσο και άλλης σχετικής βιβλιογραφίας, θα µπορούσαν να προταθούν ως τα

κυριότερα απαιτούµενα συµπληρωµατικά πεδία ενασχόλησής σας στο µέλλον, µε

στόχο την ολοκλήρωση των γνώσεών σας στον τοµέα της πρακτικής εκµάθησης των

λειτουργικών συστηµάτων.

Βασίλης Γ. Μάµαλης

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 110

Page 111: Λειτουργικά Συστήματα

A·ÓÙ‹ÛÂȘ AÛ΋ÛÂˆÓ A˘ÙÔ·ÍÈÔÏfiÁËÛ˘

2.1

Εµφάνιση γραµµών που περιέχουν το χαρακτήρα «%» ανάµεσα σε δύο

double–quotes:

grep "^[^"]*"[^%]*%[^"]*".*$" percent.txt

[Τύπωσε όλες τις γραµµές του αρχείου percent.txt που περιέχουν στη σειρά

(ξεκινώντας από την αρχή – «^») (α) κανέναν ή περισσότερους χαρακτήρες διάφο-

ρους του «”» ([^”]*), (β) το χαρακτήρα «”», (γ) κανέναν ή περισσότερους χαρα-

κτήρες διάφορους του «%» ([^%]*), (δ) το χαρακτήρα «%», (ε) κανέναν ή περισ-

σότερους χαρακτήρες διάφορους του «”» ([^”]*), (στ) το χαρακτήρα «”» και (ζ)

οποιουσδήποτε άλλους (κανέναν ή περισσότερους) µέχρι το τέλος της γραµµής

(.*$).]

Εµφάνιση γραµµών που δεν περιέχουν καθόλου το χαρακτήρα «%»:

ggrreepp "^[^%]*$" percent.txt

[Τύπωσε όλες τις γραµµές του αρχείου percent.txt που περιέχουν (ξεκινώντας

από την αρχή – «^») κανέναν, έναν ή περισσότερους χαρακτήρες διάφορους του «%»

(«[^%]*»), µέχρι και το τέλος της γραµµής («$»).]

2.2

Εµφάνιση των γραµµών αυτών µόνο που περιέχουν τις διευθύνσεις των πελατών:

sseedd –n "/^Address/p" customers.txt

[Τύπωσε όλες τις γραµµές («–n», «p») του αρχείου customers.txt που αρχί-

ζουν µε τη λέξη «Address» (/^Address/).]

Εξαγωγή αρχείου µε τα ονόµατα µόνο των πελατών:

sseedd "/^Age/,/^Phone/d" customers.txt

[∆ιάγραψε όλες τις οµάδες γραµµών («d») του αρχείου customers.txt στις οποί-

ες η πρώτη αρχίζει µε τη λέξη «Age» (/^Age/) και η τελευταία αρχίζει µε τη λέξη

«Phone» (/^Phone/). Έτσι, µένουν ως έξοδος µόνο οι γραµµές µε τα ονόµατα των

πελατών.]

2.3

Καταµέτρηση (και εµφάνιση στην οθόνη του τελικού αριθµού αυτών) των ενήλικων

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 111

Page 112: Λειτουργικά Συστήματα

1 1 2 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

πελατών (ηλικία τουλάχιστον 18 ετών):

aawwkk "(NR+2) % 4 == 0 if ($2 >=18) s += 1

END print s " customers.txt

[∆ιατρέχοντας τις γραµµές του αρχείου customers.txt (α) σταµατάµε σε κάθε γραµ-

µή που περιέχει την ηλικία ενός πελάτη ((NR+2) % 4 == 0 – είναι οι δεύτερες στη

σειρά γραµµές κάθε τετράδας γραµµών/στοιχείων ενός πελάτη), (β) ελέγχουµε εάν

το δεύτερο πεδίο της γραµµής αυτής («$2» – η ηλικία, δηλαδή, του πελάτη) έχει τιµή

µεγαλύτερη του «18» («if ($2>=18)») και (γ) σε αυτήν την περίπτωση αυξάνουµε

την τιµή της µεταβλητής «s» κατά ένα («s+=1). Στο τέλος («END») τυπώνουµε την

τελική τιµή του µετρητή που χρησιµοποιήσαµε (της µεταβλητής «s», δηλαδή).]

2.4

Καταµέτρηση των εγγραφών πελατών του αρχείου και εµφάνιση στην οθόνη των

ονοµάτων τους και του συνολικού αριθµού αυτών:

sseedd –n "/^Age/,/^Phone/p" customers.txt |

aawwkk "END printf "Number of customers records = %d\n”, NR "

[Αρχικά χρησιµοποιούµε µία sed εντολή, η οποία τυπώνει τις γραµµές µε τα ονόµα-

τα µόνο των πελατών του αρχείου customers.txt (είναι η ίδια µε αυτήν της Άσκη-

σης Αυτοαξιολόγησης 2.2 µε τη διαφορά ότι εδώ εκτελείται εκτύπωση – «–n», «p»

– αντί για διαγραφή – «d»). Στη συνέχεια διοχετεύουµε µέσω «pipe» την έξοδο της

εντολής αυτής σε ένα «awk» script, το οποίο απλώς τυπώνει επιπλέον στο τέλος

(«END») τον αριθµό των γραµµών της εισόδου του (τη µεταβλητή «NR», δηλαδή, η

οποία µετρά αυτόµατα τις γραµµές εισόδου) µε το κατάλληλο διαγνωστικό µήνυµα.]

2.5

Εµφάνιση των επωνύµων και της ηλικίας των τριών (3) πιο µεγάλων υπερήλικων

(από αυτούς, δηλαδή, µε ηλικία µεγαλύτερη των πενήντα (50) ετών) πελατών:

aawwkk "(NR+3) % 4 == 0 str = $2

(NR+2) % 4 == 0 if ($2 >= 50) printf "%s %d\n", str, $2 "

customers.txt |

ssoorrtt +1nr | sed 3q

[Αρχικά βρίσκουµε και τυπώνουµε ως έξοδο όλους τους υπερήλικες πελάτες µέσω

ενός «awk» script, το οποίο διατρέχοντας τις γραµµές του αρχείου

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 112

Page 113: Λειτουργικά Συστήματα

customers.txt (α) σταµατά σε κάθε γραµµή που περιέχει το ονοµατεπώνυµο ενός

πελάτη ((NR+3) % 4 == 0 – είναι οι πρώτες στη σειρά γραµµές κάθε τετράδας

γραµµών/στοιχείων ενός πελάτη) και καταχωρεί το επώνυµό του (το δεύτερο πεδίο

της γραµµής – «$2») σε µία µεταβλητή «str» («str=$2»), (β) πηγαίνει στη συνέ-

χεια στη γραµµή που περιέχει την ηλικία κάθε πελάτη ((NR+2) % 4 == 0 – οι

δεύτερες αντίστοιχα γραµµές κάθε τετράδας) και (γ) ελέγχει εάν το δεύτερο πεδίο

της γραµµής αυτής («$2» – η ηλικία, δηλαδή, του πελάτη) έχει τιµή µεγαλύτερη του

«50» («if ($2>=50)») και, αν αυτό ισχύει, τυπώνει στην έξοδο µία γραµµή που

περιέχει στη σειρά το επώνυµο (µεταβλητή «str») και την ηλικία (η τιµή του δεύ-

τερου πεδίου – «$2») του συγκεκριµένου πελάτη.

Στη συνέχεια ταξινοµούµε (κατά φθίνουσα σειρά) την έξοδο του «awk» script ως

προς την ηλικία των πελατών, διοχετεύοντάς τη µέσω ενός «pipe» σε µία εντολή

«sort» µε τις κατάλληλες παραµέτρους («+1nr» – ταξινόµηση µε βάση το δεύτε-

ρο πεδίο που περιέχει την ηλικία κάθε πελάτη, µε τις µεγαλύτερες τιµές πρώτα).

Τέλος, διοχετεύουµε εκ νέου την έξοδο της εντολής «sort» µέσω «pipe» σε µία

κατάλληλα διαµορφωµένη εντολή «sed» («3q»), η οποία τυπώνει µόνο τις τρεις (3)

πρώτες γραµµές της προηγούµενης εξόδου που µας ενδιαφέρουν.]

3.1

1 1 3A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ A ™ ∫ ∏ ™ ∂ ø ¡ AÀ ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

Gantt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

P5P4P3P2P1

071106

4444444444

31113611

11212

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

19 20

chart P1 P2 P2 P2 P2 P2 P2 P1 P1 P1 P1 P3 P5 P5 P5 P3 P4 P4 P4 P4

Gantt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

chart P1 P1 P1 P1 P1 P2 P2 P2 P2 P2 P2 P3 P3 P4 P4 P4 P4 P5 P5 P5

(β) Fist Come Fist Serve (FCFS) χρονοδροµολόγηση

(α) Priority based Preemptive (PP) χρονοδροµολόγηση

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 113

Page 114: Λειτουργικά Συστήματα

1 1 4 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

P5P4P3P2P1

54840

4141414141

8810105

11111

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

Gantt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

P5P4P3P2P1

17260

3636363636

4114125

11111

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

19 20

chart P1 P1 P1 P1 P1 P3 P3 P2 P2 P2 P2 P2 P2 P5 P5 P5 P4 P4 P4 P4

(γ) Shortest Remaining Time First (SRTF) χρονοδροµολόγηση

Gantt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

P5P4P3P2P1

56495

4949494949

81061510

34264

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

19 20

chart P1 P1 P2 P1 P2 P3 P1 P2 P3 P1 P2 P4 P2 P4 P5 P2 P4 P5 P4 P5

(δ) Round Robin (RR) χρονοδροµολόγηση

(α) First Come First Serve (FCFS) χωρίς εξυπηρέτηση δίσκου και σηµαφόρους:

3.2

Gantt 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 00

chart P1 P1 P1 P2 P2 P2 P2 P2 P3 P3 P4 P4 P4 P4 P4 P4 P5 P5 P5 P5

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 114

Page 115: Λειτουργικά Συστήματα

1 1 5A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ A ™ ∫ ∏ ™ ∂ ø ¡ AÀ ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

P5P4P3P2P1

39252950

198198198198198

5757363315

11111

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

(β) Shortest Remaining Time First (SRTF) χωρίς εξυπηρέτηση δίσκου και σηµαφόρους:

Gantt 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 00

chart P1 P1 P1 P3 P2 P2 P2 P2 P2 P2 P5 P5 P5 P4 P4 P4 P4 P4 P4 P4

P5P4P3P2P1

7431120

163163163163163

257584015

11111

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

(γ) First Come First Serve (FCFS) µε εξυπηρέτηση δίσκου και σηµαφόρους:

Gantt 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 00

chart P1 P1 P2 P1 P3 P4 P4 P2 P2 P2 P2 P2 P4 P4 P4 P4 P5 P5 P5 P5

P5P4P3P2P1

39244256

198198198198198

5756115321

12222

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

(δ) Shortest Remaining Time First (SRTF) µε εξυπηρέτηση δίσκου και σηµαφόρους:

Gantt 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 00

chart P1 P1 P3 P3 P2 P4 P4 P4 P4 P4 P4 P5 P5 P5 P5 P2 P2 P2 P2 P2

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 115

Page 116: Λειτουργικά Συστήματα

1 1 6 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

(ε) Περιεχόµενα της «Ready Queue» τις χρονικές στιγµές 0,12,14,18,25:

Ready Queue

FCFS SRTF

0 12 14 18 25 0 12 14 18 25

End

(P1) (P2) (P1) P2

(P1) P3 P3 (P2) (P1) P2 P1 (P2)

Start P1 P2 P2 P1 P4 P1 P2 P3 P3 P4

P5P4P3P2P1

1400629

185185185185185

323279024

11132

χρόνος αναµονής

συνολικός χρόνος

χρόνος διεκπεραίωσης

αριθµός εναλλαγών

Σηµείωση: Στον παραπάνω πίνακα (α) παρουσιάζονται τα περιεχόµενα της «Ready

Queue» τη χρονική στιγµή «x» µε την έννοια της προβλεπόµενης χρονοδροµολόγη-

σης για τη χρονική στιγµή «x+1», ενώ (β) µία διαδιασία σηµειωµένη µέσα σε παρέν-

θεση σηµαίνει ότι έχει (είτε την τελευταία είτε κάποια προηγούµενη χρονική στιγ-

µή) τεθεί σε αναµονή για εξυπηρέτηση δίσκου ή απελευθέρωση σηµαφόρου.

3.3

(α) Πρέπει να χρησιµοποιηθεί η γραµµή του πίνακα σελίδων µε αριθµό διεύθυνσης

«10101» (ή αλλιώς η 22η στη σειρά γραµµή αυτού), όπως προκύπτει από τα 5 πρώτα

ψηφία (VPN = 8 – x = 8 – 3 = 5) της δοθείσας εικονικής διεύθυνσης µνήµης:

Πριν καταλήξουµε στο παραπάνω αποτέλεσµα, πρέπει (α) να προσθέσουµε τα 5 αυτά

πρώτα ψηφία της εικονικής διεύθυνσης στο περιεχόµενο του καταχωρητή PTR

(00000+10101=10101) και (β) να ελέγξουµε, εάν το αποτέλεσµα είναι µικρότερο

του περιεχοµένου του καταχωρητή PLR (ισχύει καθώς 10101<11111).

10101 1 0 0 NU 1110000111

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 116

Page 117: Λειτουργικά Συστήματα

(β) Η τελική διεύθυνση αναφοράς στη µνήµη είναι η διεύθυνση (10+x)–ψήφια =

13–ψήφια διεύθυνση «1110000111111», όπως προκύπτει από τον (υπαγορευόµενο

από τη θεωρία της παραγράφου 3.3.1) υπολογισµό:

(∆ιεύθυνση Φυσικής Μνήµης) = (Αριθµός Φυσικής Σελίδας) x PGSIZE + offset =

= (1110000111) x (1000) + (111) = 111000111111,

όπου (α) PGSIZE = 2x = 8 = «1000», (β) το «offset» = «111» προκύπτει από τα x=3

τελευταία ψηφία της δοθείσας εικονικής διεύθυνσης και (γ) ο 10–ψήφιος αριθµός

φυσικής σελίδας («1110000111») λαµβάνεται από το σχετικό πεδίο της αντίστοιχης

εγγραφής (10101) του πίνακα σελίδων. Πριν καταλήξουµε στο παραπάνω αποτέλε-

σµα, πρέπει να ελέγξουµε αν η συγκεκριµένη σελίδα (10101) βρίσκεται στη φυσική

µνήµη του συστήµατος (ισχύει καθώς το VALID_BIT της αντίστοιχης εγγραφής του

πίνακα σελίδων είναι ίσο µε «1»).

(γ) Η νέα µορφή της γραµµής «10101» του πίνακα σελίδων θα είναι η παρακάτω:

Αφ’ενός θα αλλάξει το REF_BIT από «0» σε «1», καθώς πραγµατοποιήθηκε ήδη

µία (η τρέχουσα) αναφορά στη συγκεκριµένη σελίδα,

αφ’ετέρου θα αλλάξει το CHANGED_BIT από «0» σε «1», καθώς από τα δεδοµέ-

να της Άσκησης πραγµατοποιήθηκε «εγγραφή» στη συγκεκριµένη θέση µνήµης.

3.4

10101 1 1 1 NU 1110000111

1 1 7A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ A ™ ∫ ∏ ™ ∂ ø ¡ AÀ ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

1 3 5 4 2 7 5 6 2 8 2 5 3 6 8 2 4 1 3 6

Frame 1 1 1 1 1 1 1 1 6 6 6 6 6 6 6 6 6 6 6 6 6

10

(6 + 4)

Frame 2 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8

Frame 3 5 5 5 5 5 5 5 5 5 5 3 3 3 3 3 3 3 3

Frame 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 1 1

Frame 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Frame 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7

(α) Fisrt In First Out (FIFO):

Number of

Page Faults

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 117

Page 118: Λειτουργικά Συστήματα

1 1 8 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

1 3 5 4 2 7 5 6 2 8 2 5 3 6 8 2 4 1 3 6

Frame 1 1 1 1 1 1 1 1 6 6 6 6 6 6 6 6 6 6 6 6 6

11

(6 + 5)

Frame 2 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8

Frame 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1

Frame 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3

Frame 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Frame 6 7 7 7 7 7 7 7 7 7 7 7 4 4 4 4

(β) Least Recenly Used (LRU):

Number of

Page Faults

1 3 5 4 2 7 5 6 2 8 2 5 3 6 8 2 4 1 3 6

Frame 1 1 1 1 1 1 1 1 6 6 6 6 6 6 6 6 6 6 6 6 6

12

(6 + 6)

Frame 2 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8

Frame 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5

Frame 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3

Frame 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Frame 6 7 7 7 7 7 7 7 7 7 7 7 4 4 4 4

(γ) Least Frequently Used (LFU):

Number of

Page Faults

1 3 5 4 2 7 5 6 2 8 2 5 3 6 8 2 4 1 3 6

Frame 1 1 1 1 1 1 1 1 1 1 1 2 5 5 5 5 2 2 1 1 1

12

(6 + 6)

Frame 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3

Frame 3 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6

Frame 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

Frame 5 2 2 2 2 2 8 8 8 8 8 8 8 8 8 8 8

Frame 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7

(δ) Most Frequently Used (MFU):

Number of

Page Faults

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 118

Page 119: Λειτουργικά Συστήματα

Σηµείωση: Ο αριθµός των παραγόµενων page–faults σε κάθε περίπτωση διαχωρίζε-

ται σε δύο συνιστώσες (τον αριθµό των αναγκαστικών έξι (6) page–faults κατά την

αρχικοποίηση της φυσικής µνήµης, όπως υπαγορεύεται από την τεχνική του

«demand–paging», και τα υπόλοιπα, που παράγονται κατά τη φυσιολογική εκτέλε-

ση του προγράµµατος λόγω έλλειψης περισσότερoυ διαθέσιµου χώρου στη µνήµη).

4.1

Πρόγραµµα υπολογισµού της παράστασης 62+5:

load 6: 000 00110

storex: 100 00000

load 0: 000 00000

add 6: 001 00110

zerox 1: 010 00001

add 5: 001 00101

print: 110 00000

end: 111 00000

4.2

Πρόγραµµα υπολογισµού της παράστασης 5!:

load 5: 000 00101

storex: 100 00000

load 0: 000 00000

add 4: 001 00100

zerox 1: 010 00001

storex: 100 00000

load 0: 000 00000

add 3: 001 00011

zerox 1: 010 00001

storex: 100 00000

load 0: 000 00000

1 1 9A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ A ™ ∫ ∏ ™ ∂ ø ¡ AÀ ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 119

Page 120: Λειτουργικά Συστήματα

1 2 0 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

add 2: 001 00010

zerox 1: 010 00001

end: 111 00000

Η µέγιστη τιµή για την οποία είναι δυνατόν να υπολογιστεί το n! στην υποθετική µας

µηχανή είναι το «πέντε» (5), καθώς το αποτέλεσµα για οποιαδήποτε άλλη µεγαλύτε-

ρη τιµή (π.χ. 6! = 720) υπερβαίνει το µέγιστο αριθµό που µπορεί να αναπαρασταθεί

από τον καταχωρητή συσσώρευσης της µηχανής (ο οποίος είναι ίσος µε 28 –1 = 255).

4.3

Πρόγραµµα υπολογισµού της παράστασης 62*3:

load 31: 000 11111

storex: 100 00000

storey: 101 00000

load 0: 000 00000

add 3: 001 00100

zerox 1: 010 00001

add 3: 001 00100

zeroy 1: 011 00001

print: 110 00000

end: 111 00000

5.1

• O έλεγχος της συνάρτησης «schedule()» µεταφέρεται µέσω της εντολής ελέγχου

της γραµµής 278 στην ετικέτα «confuse_gcc2», όταν έχει βρεθεί/αποφασισθεί µέσα

από το σχετικό loop («for(;;)») ποια είναι η επόµενη διαδικασία που πρέπει να τρέ-

ξει στη Κ.Μ.Ε., η οποία έχει αποθηκευτεί στη µεταβλητή «next». Η εύρεση της

διαδικασίας αυτής πραγµατοποιείται διατρέχοντας την κυκλική ουρά των διαδι-

κασιών (µε κεφαλή την «&init_task») και ελέγχοντας ποια διαδικασία από αυτές

που είναι έτοιµες για τρέξιµο («p–>state=TASK_RUNNING») έχει τη µεγαλύτε-

ρη προτεραιότητα («p–>counter>c»). Η βασική δε λειτουργία του κώδικα της ετι-

κέτας «confuse_gcc2» στη συνέχεια είναι να δροµολογήσει την είσοδο της διαδι-

κασίας αυτής στην Κ.Μ.Ε. µέσω της εντολής της γραµµής 289 («switch_to(next)»).

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 120

Page 121: Λειτουργικά Συστήματα

• Ο κώδικας των γραµµών 276–286 µπορεί να ξαναγραφτεί αποφεύγοντας την εντο-

λή «goto», µε τη χρήση ενός ίδιας λειτουργικότητας «while–loop», το οποίο θα

ελέγχει κατά αντίστροφο τρόπο τη συνθήκη µετάβασης στην ετικέτα

«confuse_gcc2», όπως φαίνεται παρακάτω:

277 while ((p = p–>next_task) != &init_task)

278 if (p–>state == TASK_RUNNING && p–>counter > c)

279 c = p–>counter, next = p;

280 if (!c)

281 for_each_task(p)

282 p–>counter = (p–>counter >> 1) + p–>priority;

283

5.2

• Η δοµή η οποία χρησιµοποιείται, για να κρατούνται οι «κοιµώµενες» διαδικασίες

(wait_queue), όπως φαίνεται τόσο από τη δήλωση της αντίστοιχης παραµέτρου

της συνάρτησης (γραµµή 315), όσο και από τις εντολές διαχείρισής της, είναι µία

«κυκλική ουρά» υλοποιηµένη σε δοµή «δυναµικής λίστας από pointers σε

structures» (struct wait_queue **q). Η διαχείριση της ουράς αυτής γίνεται ουσια-

στικά µέσω µίας µεταβλητής–δείκτη («q»), η οποία αποτελεί (δείχνει) την «κεφα-

λή» (αρχή) της ουράς, ενώ το γεγονός ότι είναι κυκλική δεν απαιτεί να υπάρχει

αντίστοιχα µεταβλητή–δείκτη, η οποία θα σηµατοδοτεί το τέλος της. Η προσπέ-

λασή της πραγµατοποιείται µέσω του πεδίου «next» (βλ. π.χ. γραµµή 364), το

οποίο υπάρχει σε κάθε κόµβο της ουράς και το οποίο δείχνει στον επόµενο κόµβο

αυτής. Το πεδίο «next», τέλος, του τελευταίου στοιχείου της ουράς δείχνει (κυκλι-

κά) στο πρώτο στοιχείο (την κεφαλή), κάτι το οποίο αποτελεί και τη συνθήκη τερ-

µατισµού της διάτρεξης αυτής (βλ. π.χ. γραµµή 365).

• Οι δύο περιπτώσεις κατά τις οποίες ο έλεγχος επιστρέφει χωρίς να εκτελεστεί

καµία λειτουργία (γραµµή 320) είναι (α) όταν ο αρχικός δείκτης προς την κεφα-

λή της ουράς έχει την τιµή «NULL» (!q), πράγµα το οποίο σηµαίνει ότι η σχετι-

κή δοµή ουράς δεν έχει δηµιουργηθεί καν (ή κατ’ επέκταση δεν έχει υπάρξει η

ανάγκη για να δηµιουργηθεί – µία κοιµώµενη διαδικασία, δηλαδή) και (β) όταν ο

δείκτης της κεφαλής (του πρώτου στοιχείου ουσιαστικά) της ουράς έχει την τιµή

«NULL» (!(tmp=*q)), πράγµα το οποίο σηµαίνει ότι η ουρά έχει µεν δηµιουργη-

θεί, είναι, όµως, «άδεια» (δηλαδή, δεν περιέχει αυτή τη στιγµή καµία «κοιµώµε-

νη» διαδικασία).

1 2 1A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ A ™ ∫ ∏ ™ ∂ ø ¡ AÀ ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 121

Page 122: Λειτουργικά Συστήματα

1 2 2 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

5.3

• Γενικά, ο κώδικας της εντολής ελέγχου της γραµµής 916 επιτελεί τις απαραίτη-

τες λειτουργίες στην περίπτωση όπου η δοθείσα διεύθυνση µνήµης («address»)

είναι εκτός των προβλεπόµενων ορίων (τα οποία καθορίζονται µέσω της εντολής

ελέγχου της γραµµής 894 – «if (address < task_size)»). Πιο συγκεκριµένα και ενώ

έχει αφαιρεθεί το µέγεθος της διαδικασίας σε σελίδες («TASK_SIZE»/γραµµή

909), εξετάζεται (α) η περίπτωση όπου η δοθείσα διεύθυνση είναι εντελώς λαν-

θασµένη («else»/γραµµή 919 – όταν η διεύθυνση βρίσκεται καθαρά εκτός ορίου

σελίδων της διαδικασίας – «address>TASK_SIZE+ PAGE_SIZE») και (β) η περί-

πτωση όπου η διεύθυνση δεν ανήκει στη διαδικασία, αλλά βρίσκεται

(«TASK_SIZE < address < TASK_SIZE+PAGE_SIZE») σε διαµοιραζόµενη σελί-

δα µε άλλη διαδικασία (κάτι το οποίο σηµατοδοτείται µέσω της εντολής της γραµ-

µής 918). Και στις δύο περιπτώσεις τυπώνονται τα κατάλληλα διαγνωστικά µηνύ-

µατα (γραµµές 917, 920).

• Ο κώδικας της συνάρτησης «do_page_fault()» από τη γραµµή 894 έως και τη

γραµµή 924 µπορεί να ξαναγραφτεί αποφεύγοντας τις πολλαπλές επιστροφές

(«return»), µε τη χρήση µίας κατάλληλα διαµορφωµένης (και ίδιας λειτουργικό-

τητας µε τη δοµή των πολλαπλών επιστροφών) δοµής «if–then–else», όπως φαί-

νεται παρακάτω:

894 if (address < TASK_SIZE)

.… lines 895–906 …..

908

else

909 address –= TASK_SIZE;

910 if (wp_works_ok < 0 && address == 0 && (error_code &

PAGE_PRESENT))

…. lines 911–913 ….

914

915 else

916 if (address < PAGE_SIZE)

…. lines 917–918 ….

919 else

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 122

Page 123: Λειτουργικά Συστήματα

…. line 920 ….

…. lines 921–923 ….

924

Προσέξτε ιδιαίτερα πότε πρέπει να εκτελείται η εντολή της γραµµής 909 καθώς

και οι εντολές των γραµµών 921–923. Από αυτά τα δύο σηµεία εξαρτάται απο-

κλειστικά και η µορφή της δοµής «if–then–else» που πρέπει να επιλέξετε.

5.4

• Οι δύο συναρτήσεις οι οποίες χρησιµοποιούνται στη συνάρτηση «do_no_page()»

για την εισαγωγή µίας σελίδας που απουσιάζει στην κύρια µνήµη του συστήµα-

τος είναι η «swap_in()»/γραµµή 840 και η «get_empty_page()»/γραµµές 854 και

878. Όπως είναι εύκολο να διαπιστώσει κανείς µελετώντας προσεκτικά τις σχετι-

κές συνθήκες κάτω από τις οποίες καλούνται οι δύο αυτές συναρτήσεις, η

«swap_in()» καλείται στην ειδική περίπτωση που υπάρχει ελεύθερο πλαίσιο, για

να τοποθετηθεί, ενώ αντίθετα η «get_empty_page()» καλείται στην περίπτωση

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

και πρέπει να βρεθεί ένα τέτοιο πλαίσιο µέσω της εκτέλεσης ενός αλγόριθµου

αντικατάστασης σελίδων.

• Μέσω της εντολής ελέγχου της γραµµής 626 ελέγχεται ουσιαστικά αν η «φυσι-

κή» διεύθυνση, η οποία περιέχεται στη συγκεκριµένη εγγραφή του πίνακα σελί-

δων της διαδικασίας, είναι εντός των ορίων της µνήµης του συστήµατος («page

< high_memory»). Στην περίπτωση όπου δεν ισχύει η σχετική συνθήκη, αυτό

σηµαίνει ότι είναι λανθασµένη η συγκεκριµένη εγγραφή του πίνακα σελίδων,

οπότε ο έλεγχος µεταφέρεται στη γραµµή 650 και απλώς τυπώνεται το κατάλλη-

λο διαγνωστικό µήνυµα χωρίς να επιτελείται καµία άλλη λειτουργία.

5.5

• Στη γραµµή 477 της συνάρτησης «put_page()» ελέγχεται η εγκυρότητα της δοθεί-

σας διεύθυνσης σελίδας, η οποία πρέπει να εισαχθεί στη µνήµη, και πιο συγκε-

κριµένα εάν αυτή η διεύθυνση είναι εντός ή εκτός του επιτρεπόµενου (υποστηρι-

ζόµενου) άνω ορίου (high_memory) της µνήµης του συστήµατος. Στην περίπτω-

ση (α) όπου ικανοποιείται η σχετική συνθήκη («page >= high_memory» – δηλα-

δή, η σελίδα εκτός ορίων), τερµατίζεται η συνάρτηση επιστρέφοντας την τιµή «0»

1 2 3A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ A ™ ∫ ∏ ™ ∂ ø ¡ AÀ ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 123

Page 124: Λειτουργικά Συστήματα

1 2 4 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

και εξάγοντας το κατάλληλο διαγνωστικό µήνυµα (γραµµή 478), ενώ στην περί-

πτωση (β) όπου δεν ικανοποιείται η σχετική συνθήκη (δηλαδή η σελίδα είναι εντός

ορίων) η πρώτη λειτουργία που εκτελείται (γραµµή 481) είναι ο σχετικός υπολο-

γισµός και εύρεση της εγγραφής του πίνακα σελίδων της διεργασίας (page table

entry), η οποία αντιστοιχεί στη συγκεκριµένη σελίδα. Ο υπολογισµός αυτός γίνε-

ται µέσω της συνάρτησης «PAGE_DIR_OFFSET()», η οποία επιστρέφει τη σχε-

τική διεύθυνση του πίνακα σελίδων στην οποία «δείχνει» πλέον η µεταβλητή

(pointer) «page_table».

• Η περίπτωση κατά την οποία η προς εισαγωγή σελίδα υπάρχει ήδη στη µνήµη ικα-

νοποιείται από τον κώδικα των γραµµών 529–534 και πιο συγκεκριµένα µέσω της

εντολής ελέγχου της γραµµής 530 («if (*page_table)»), η οποία εξετάζει εάν το

«valid–bit» της συγκεκριµένης προς εισαγωγή σελίδας (στο bit αυτό έχει «προχω-

ρήσει» µέσω της εντολής ολίσθησης της γραµµής 529 ο δείκτης της συγκεκριµέ-

νης γραµµής/εγγραφής του πίνακα σελίδων) είναι ίσο µε «1». Σε αυτήν την περί-

πτωση οι λειτουργίες που επιτελούνται είναι κατά σειρά (α) εκτύπωση του κατάλ-

ληλου διαγνωστικού µηνύµατος (γραµµή 531), (β) θέση του «valid bit» στην τιµή

«0», ώστε να υπάρξει όµοια για όλες τις περιπτώσεις διαχείριση (τόσο για την περί-

πτωση όπου η προς εισαγωγή σελίδα είναι στη µνήµη, όσο και για την αντίθετη

περίπτωση – γραµµές 516–528) µέσω των επόµενων εντολών (µαρκάρισµα

«dirty–bit» και «valid–bit» κ.ά.) και (γ) κλήση της συνάρτησης «invalidate()», µέσω

της οποίας ακυρώνονται όλες οι πραγµατοποιηθείσες διαδικασίες επαναφοράς της

συγκεκριµένης σελίδας στη µνήµη και επαναφέρεται η πρότερη κατάσταση.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 124

Page 125: Λειτουργικά Συστήματα

°ÂÓÈ΋ BÈ‚ÏÈÔÁÚ·Ê›·

[1] B.W. Kernighan and R. Pike, «Το περιβάλλον Προγραµµατισµού UNIX», Κλει-

δάριθµος, 1989 [ελληνική µετάφραση του πρωτότυπου «Unix Programming

Environment», Prentice–Hall, Englewood Cliffs, New Jersey, 1984].

Μία πλήρης καταγραφή και παρουσίαση (µε αρκετά Παραδείγµατα και Ασκή-

σεις) των δυνατοτήτων που προσφέρει το λειτουργικό σύστηµα UNIX σε χαµη-

λού επιπέδου προγραµµατισµό, όπως π.χ. απλές εντολές χρήσης του λειτουργι-

κού συστήµατος (ls, ps, grep, κ.ά.), πλήρης γλώσσα συγγραφής «scripts» του

UNIX (awk, sed scripts κ.λπ.), εντολές για χρήση και διαχείριση πόρων του

συστήµατος (διαχείριση αρχείων, εκτυπωτών, εισόδου/εξόδου, δικτύου κ.λπ.) κ.ά.

[2] B.W. Kernighan and D. Ritchie, «Η Γλώσσα Προγραµµατισµού C», Κλειδάριθ-

µος, Aθήνα, 1990 [ελληνική µετάφραση του πρωτότυπου «The C Programming

Language», 2nd edition, Prentice–Hall, Englewood Cliffs, New Jersey, 1988].

Παρουσιάζει όλα τα βασικά στοιχεία και τις δυνατότητες της γλώσσας προ-

γραµµατισµού C (Ansi C) σε απλή και κατανοητή µορφή µε χρήση πολλών

Παραδειγµάτων και Ασκήσεων (από απλές εντολές επανάληψης και ελέγχου ροής

ως χαµηλού επιπέδου εντολές εισόδου/εξόδου, δείκτες, δυναµική διαχείριση µνή-

µης κ.ά.). Περιέχει, επίσης, πλήρη κατάλογο αναφορών σε όλες τις διαθέσιµες

συναρτήσεις βιβλιοθήκης της Ansi C.

[3] R. Petersen and R. Peterson, «Linux Programmer's Reference», 2nd edition,

Osborne McGraw–Hill Inc., New York, 1998.

Αναλυτική παρουσίαση του περιβάλλοντος προγραµµατισµού σε χαµηλό επίπε-

δο του λειτουργικού συστήµατος Linux, ανάλογη µε αυτήν της βιβλιογραφικής

αναφοράς [1] για το UNIX. ∆ίνεται ιδιαίτερη έµφαση αφενός στην πληρότητα

εντολών και µηχανισµών που παρέχονται στο χρήστη για προγραµµατισµό στο

κέλυφος, αφετέρου στους µηχανισµούς διαχείρισης περιφερειακών και δικτύου

οι οποίοι σε γενικές γραµµές είναι παρόµοιοι µε αυτούς του UNIX.

[4] R. Card, E. Dumas and F. Mevel, «The Linux Kernel Book», 2nd edition, John

Wiley and Sons, New York, 1998.

Εκτενής παρουσίαση της αρχιτεκτονικής, του σχεδιασµού και της υλοποίησης του

πυρήνα του Λ.Σ. Linux. Καλύπτει όλες τις λειτουργικές δοµές του πυρήνα του Linux

(χρονοδροµολόγηση διαδικασιών, διαχείριση µνήµης, εικονική µνήµη, είσοδο/ έξοδο,

διαδιεργασιακή επικοινωνία κ.ά.) παραθέτοντας τόσο αναλυτικές περιγραφές και

επεξηγήσεις, όσο και αποσπασµατικά µέρη του σχετικού κώδικα ανάπτυξης.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 125

Page 126: Λειτουργικά Συστήματα

1 2 6 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

[5] J. L. Peterson and A. Silberschatz, «Operating Systems Concepts», World Student

Series Edition, Addison–Wesley Inc., Reading, Massachusetts, 1985.

Αποτελεί ένα από τα πιο ολοκληρωµένα ακαδηµαϊκά συγγράµµατα στον τοµέα

των λειτουργικών συστηµάτων. ∆ιαπραγµατεύεται µε σαφήνεια και πληρότητα

(και σχετικά Παραδείγµατα και Ασκήσεις) τις πιο αξιόλογες από τις υπάρχουσες

εναλλακτικές τεχνικές, αλγόριθµους και µηχανισµούς για το σχεδιασµό και την

υλοποίηση των βασικότερων λειτουργιών ενός πολυχρηστικού και πολυδιερ-

γα–σιακού λειτουργικού συστήµατος (π.χ. Unix, Linux), όπως χρονοδροµολόγη-

ση διαδικασιών, διαχείριση µνήµης, διαχείριση εικονικής µνήµης και µηχανισµούς

αντικατάστασης σελίδων, διαχείριση εισόδου/εξόδου, σηµαφόρους, αδιέξοδα κ.ά.

[6] Π. Σπυράκης, «Λειτουργικά Συστήµατα Ι», Ελληνικό Ανοικτό Πανεπιστήµιο

(Ε.Α.Π.), Θεµατική Ενότητα ΠΛH 11, Tόµος B'.

Το ακαδηµαϊκό σύγγραµµα µέσω του οποίου διδάσκεστε τις βασικές αρχές των

Λειτουργικών Συστηµάτων στα πλαίσια της φοίτησής σας στο ΕΑΠ. Παρουσιά-

ζει µε ιδιαίτερα φιλικό και παιδαγωγικό τρόπο (Παραδείγµατα, Ασκήσεις Αυτο-

αξιολόγησης κ.ά.) τις βασικότερες αρχές των σύγχρονων λειτουργικών συστη-

µάτων σε ανάλογη βάση µε αυτήν της βιβλιογραφικής αναφοράς [5]. Ιδιαίτερη

έµφαση δίνεται στις δύο θεµελιώδεις έννοιες των πολυχρηστικών και πολυδιερ-

γασιακών λειτουργικών συστηµάτων, τη χρονοδροµολόγηση διαδικασιών και τη

διαχείριση µνήµης.

[7] S. J. Leffler and M. K. McKusick, «The Design and Implementation of the 4.3

Bsd Unix Operating System», 2nd edition, Addisson–Wesley Inc., Reading,

Massachusetts, 1990.

Αναλυτική παρουσίαση και περιγραφή/τεκµηρίωση του σχεδιασµού και της υλο-

ποίησης µίας από τις πλέον γνωστές και ευρέως χρησιµοποιούµενες εκδόσεις του

Λ.Σ. Unix (4.3 BSD). Η παρουσίαση γίνεται σε τεχνικό επίπεδο µε έµφαση στην

αναλυτική περιγραφή των µηχανισµών που χρησιµοποιούνται για κάθε λειτουρ-

γία (π.χ. χρονοδροµολόγηση, διαχείριση µνήµης κ.ά.), στο πώς έχουν υλοποιηθεί

(δοµές κ.ά.) και στην παράθεση του κώδικα υλοποίησης για πολλούς από αυτούς.

[8] A. S. Tanenbaum, «Σύγχρονα Λειτουργικά Συστήµατα» (Τόµος Α'), Παπασωτη-

ρίου, Aθήνα, 1993 [ελληνική µετάφραση του πρωτότυπου «Modern Operating

Systems», Prentice–Hall Inc., Englewood Cliffs, New Jersey, 1992].

Επίσης, από τα πλέον αξιόλογα ακαδηµαϊκά συγγράµµατα στον τοµέα των λει-

τουργικών συστηµάτων µε περιεχόµενο ανάλογο της βιβλιογραφικής αναφοράς

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 126

Page 127: Λειτουργικά Συστήματα

[5]. Ιδιαίτερη έµφαση δίνεται στις Μελέτες Περίπτωσης πάνω σε υπάρχοντα πραγ-

µατικά λειτουργικά συστήµατα (αρχιτεκτονική, µηχανισµοί που έχουν επιλεγεί για

χρονοδροµολόγηση διαδικασιών, διαχείριση µνήµης, αρχείων και περιφερειακών

και πώς έχουν υλοποιηθεί κ.ά.), όπως π.χ. το Unix, το Multics, το Ultrix κ.ά.

[9] ∆ιευθύνσεις URL σχετικές µε το LINUX:

• «http://www.linux.org»: Ο κεντρικός (και πιο αξιόλογος και αξιόπιστος σε θέµα-

τα πληροφόρησης/ενηµέρωσης) κόµβος σχετικά µε το Λ.Σ. Linux και την εξέλι-

ξή του. Περιλαµβάνει πλήρη ενηµέρωση για νέες εκδόσεις και υλοποιήσεις του

Linux, συνοδευτικά πακέτα λογισµικού (office automation, drivers για την υπο-

στήριξη περιφερειακών συσκευών κ.ά.), καθώς επίσης και πηγαίους κώδικες των

δωρεάν διαθέσιµων εκδόσεων Linux, οδηγίες και λύσεις σε προβλήµατα εγκα-

τάστασης και παραποµπές σε άλλες πηγές (Web–pages, βιβλία, κ.ά.)

• «http://home.rmi.net/~glabuhn/linux.html»: Ιδιαίτερα οργανωµένος και ενηµε-

ρωµένος κόµβος του Internet µε χρήσιµες πληροφορίες σε τεχνικό επίπεδο εγκα-

τάστασης και προβληµάτων λειτουργίας του Linux σε διάφορες πλατφόρµες

(συµβουλές για την εγκατάσταση, προβλήµατα στην επικοινωνία µε περιφερει-

ακά, setup σχετικών «drivers», δυσλειτουργία γραφικών κ.ά.).

• «http://www.caldera.com»: Ο κεντρικός κόµβος για την έκδοση «caldera» του

Linux. Περιέχει πλήρεις αναφορές, τεκµηριώσεις, περιγραφές, πλατφόρµες λει-

τουργίας, οδηγίες εγκατάστασης κ.ά. για τη συγκεκριµένη έκδοση.

• «http://www.redhat.com»: Ο κεντρικός κόµβος για την έκδοση «redhat» του

Linux. Περιέχει πλήρεις αναφορές, τεκµηριώσεις, περιγραφές, πλατφόρµες λει-

τουργίας, οδηγίες εγκατάστασης κ.ά. για τη συγκεκριµένη έκδοση.

• «http://www.dandelion.com»: Ο κεντρικός κόµβος για την έκδοση «dandelion»

του Linux. Περιέχει πλήρεις αναφορές, τεκµηριώσεις, περιγραφές, πλατφόρµες

λειτουργίας, οδηγίες εγκατάστασης κ.ά. για τη συγκεκριµένη έκδοση.

• «http://www.linux.or.jp»: Ακαδηµαϊκός/ερευνητικός κόµβος ινστιτούτου της

Ιαπωνίας, ο οποίος περιέχει µία ιδιαίτερα απλή και φιλική ξενάγηση στο χώρο

του Linux και στις δυνατότητές του και στη συνέχεια παρουσιάζει διάφορες εφαρ-

µογές και αρχιτεκτονικές µε βάση το Linux (ως πλατφόρµα), οι οποίες προκύ-

πτουν από αντίστοιχα ερευνητικά προγράµµατα του ινστιτούτου.

1 2 7° ∂ ¡ π ∫ ∏ B π µ § π √ ° ƒ∞ º π ∞

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 127

Page 128: Λειτουργικά Συστήματα

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 128

Page 129: Λειτουργικά Συστήματα

°ÏˆÛÛ¿ÚÈ

Άδειες προσπέλασης αρχείων (file permissions): ∆υαδικός αριθµός που σχετίζε-

ται µε ένα αρχείο και προσδιορίζει ποιος µπορεί να κάνει τι (π.χ. ανάγνωση, εγγρα-

φή, εκτέλεση) µε το αρχείο.

Ανακατεύθυνση (redirection): Μία συντακτική δοµή του κελύφους που επιτρέπει

σε ένα πρόγραµµα να παίρνει την πρότυπη είσοδό του από ένα προσδιοριζόµενο

αρχείο ή να στέλνει την έξοδό του σε προσδιοριζόµενο αρχείο.

Αντικατάσταση σελίδων (page replacement): Η διαδικασία εξαγωγής µίας σελί-

δας διεργασίας από τη φυσική µνήµη του συστήµατος, προκειµένου να εισέλθει στη

θέση της µία άλλη, η οποία (α) απαιτείται από την τρέχουσα εντολή του προγράµ-

µατος εκτέλεσης της διεργασίας και (β) δε βρίσκεται ήδη στη φυσική µνήµη.

Αριθµητική λογική µονάδα (arithmetic logic unit): Το σύνολο των επιµέρους υπο-

λογιστικών στοιχείων (συσσωρευτής, καταχωρητές δείκτη κ.ά.) της Κεντρικής

Μονάδας Επεξεργασίας του συστήµατος, µέσω των οποίων επιτελούνται όλες οι

αριθµητικές/υπολογιστικές λειτουργίες αυτής.

Αρχείο (file): Συλλογή δεδοµένων τα οποία αποθηκεύονται ως ενιαίο σύνολο (µε

ένα κοινό αναγνωριστικό όνοµα) σε δίσκο ή παρόµοιο µέσο αποθήκευσης.

Αφύπνιση διεργασίας (process wake–up): Η διαδικασία επαναφοράς µίας µπλο-

καρισµένης (ή κοιµώµενης) διεργασίας στην ουρά ετοιµότητας της Κεντρικής Μονά-

δας Επεξεργασίας, όταν πάψει να ισχύει η αιτία για την οποία ήταν µπλοκαρισµένη

(π.χ. εξυπηρέτηση από το δίσκο του συστήµατος).

Βρώµικη σελίδα (dirty page): Σελίδα µίας εκτελούµενης διεργασίας του συστή-

µατος, η οποία βρίσκεται στη φυσική µνήµη του συστήµατος και έχουν αλλάξει τα

δεδοµένα της από την τελευταία φορά που εισήλθε σε αυτή.

Γλώσσα µηχανής (machine language): Γλώσσα στην οποία οι εντολές προγράµ-

µατος αντιπροσωπεύονται απευθείας από ακολουθίες δυαδικών ψηφίων, δηλαδή

είναι, σε µορφή άµεσα κατανοητή από το υλικό (Κεντρική Μονάδα Επεξεργασίας)

ενός υπολογιστικού συστήµατος.

Γλώσσα προγραµµατισµού awk: Γλώσσα προγραµµατισµού στο κέλυφος µε πολλά

στοιχεία δανεισµένα από τη γλώσσα C (εντολές επανάληψης, ροής ελέγχου, εισό-

δου/εξόδου κ.ά.), µέσω της οποίας καθίσταται δυνατή η συγγραφή σύνθετων και

πολύπλοκων scripts υψηλών δυνατοτήτων.

Γονικός κατάλογος (parent directory): Ο κατάλογος που βρίσκεται ακριβώς επάνω

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 129

Page 130: Λειτουργικά Συστήματα

1 3 0 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

από ένα δεδοµένο κατάλογο στο δέντρο ενός συστήµατος αρχείων.

∆ίαυλος (σωλήνας – pipe): Σύνδεση µεταξύ δύο διεργασιών µε την οποία επιτυγχά-

νεται να δοθούν τα στοιχεία εξόδου της πρώτης ως στοιχεία εισόδου στη δεύτερη.

∆ιεργασία (process): ∆ραστηριότητα ή διαδοχή εκτελέσεων που συµβαίνει σε ένα

UNIX–like σύστηµα και αναγνωρίζεται ως τέτοια από τον πυρήνα. Η κατάσταση

της διεργασίας (state of the process) περιέχει όλες τις πληροφορίες που χρειάζεται

να γνωρίζει ο πυρήνας γι’ αυτή.

∆ιορθωτής sed: Φίλτρο προγραµµατισµού στο κέλυφος, το οποίο έχει την ικανό-

τητα ευέλικτων µετασχηµατισµών (διορθώσεις, συµπληρώσεις, εισαγωγή/διαγρα-

φή, αναδιοργάνωση γραµµών κ.ά.) σε αρχεία και δεδοµένα τύπου κειµένου.

Επανάληψη (recursion): Η επαναληπτική εφαρµογή µίας διαδικασίας ή εντολής σε

µία οντότητα (π.χ. κατάλογος) και όλα τα άµεσα ή έµµεσα περιεχόµενα µέρη της.

Επιλογή (option): Ενδειξη η οποία µπορεί να προσαρτηθεί σε µία εντολή, µε σκοπό

να τροποποιήσει ή να ελέγξει την ενέργεια της εντολής. Οι επιλογές δίνονται συνή-

θως µε ένα γράµµα.

Κατάλογος (directory): Κόµβος (αρχείο) του δέντρου του συστήµατος αρχείων που

περιέχει συνδέσµους προς άλλα αρχεία και καταλόγους του συστήµατος.

Κατάλογος ρίζα (root directory): Ο κατάλογος που βρίσκεται στην κορυφή του

δέντρου ενός συστήµατος αρχείων και από τον οποίο εκκινούν όλα τα υπόλοιπα

αρχεία και οι υποκατάλογοι του συστήµατος.

Καταχωρητής δείκτη (index register): Βοηθητικός καταχωρητής της Κεντρικής

Μονάδας Επεξεργασίας του συστήµατος, ο οποίος χρησιµοποιείται κατά την εκτέ-

λεση ενός προγράµµατος κυρίως για την υποβοήθηση της δεικτοδοτούµενης πρό-

σβασης στη µνήµη του συστήµατος, την προσωρινή φύλαξη αποτελεσµάτων και ως

µετρητής επαναλήψεων. Παρέχει συνήθως τη δυνατότητα «θέσης≠ στο περιεχόµε-

νό του µίας δεδοµένης τιµής και σύγκρισης του περιεχοµένου του µε το µηδέν.

Κειµενογράφος (editor): Πρόγραµµα µε τη βοήθεια του οποίου είναι δυνατή η δια-

χείριση ενός αρχείου κειµένου από το χρήστη (δηµιουργία, εγγραφή, τροποποίηση,

εµφάνιση κ.λπ.).

Κέλυφος (shell): Πρόγραµµα που ελέγχει το διάλογό σας (interaction) µε ένα

UNIX–like λειτουργικό σύστηµα, διαβάζοντας στοιχεία εισόδου από το τερµατικό σας

και στέλνοντας τα στοιχεία εξόδου του σε αυτό. Είναι δυνατόν, επίσης, ως είσοδος

ή/και έξοδος να χρησιµοποιηθεί άλλη οντότητα εκτός του τερµατικού (π.χ. ένα αρχείο).

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 130

Page 131: Λειτουργικά Συστήματα

Κωδικός πρόσβασης (password): Ακολουθία µυστικών χαρακτήρων που εισάγετε

κατά τη σύνδεσή σας µε ένα σύστηµα, για να πιστοποιήσετε την ταυτότητά σας.

Λειτουργικό σύστηµα LINUX: Ειδική έκδοση/µεταφορά του λειτουργικού συστή-

µατος UNIX για υποστήριξη συστηµάτων προσωπικών υπολογιστών.

Λειτουργικό σύστηµα UNIX: Το πλέον δηµοφιλές πολυδιεργασιακό (multitasking)

και πολυχρηστικό (multi–user) λειτουργικό σύστηµα υποστήριξης µεσαίας και µεγά-

λης κλίµακας υπολογιστικών µηχανηµάτων (mainframes, mid–range systems,

workstations κ.ά.)

Μπλοκαρισµένη διεργασία (blocked process): ∆ιεργασία της οποίας έχει ανα-

σταλλεί η εξυπηρέτηση (εκτέλεση) από την Κεντρική Μονάδα Επεξεργασίας του

συστήµατος, εξαιτίας της απαιτούµενης εξυπηρέτησής της (για την ολοκλήρωση της

οποίας αναµένει ανενεργή σε αντίστοιχη ουρά) από κάποιον περιφερειακό πόρο του

συστήµατος (π.χ. από το δίσκο του συστήµατος για εγγραφή σε ένα αρχείο).

Οµάδα χρηστών (group): Ένα σύνολο χρηστών που αναγνωρίζεται ως τέτοιο από

το σύστηµα αρχείων. Κάθε αρχείο του συστήµατος αρχείων έχει µία ταυτότητα οµά-

δας που συνδέεται µε αυτό.

Όνοµα χρήστη (login–name): Το όνοµα που εισάγετε ως αρχικό αναγνωριστικό της

ταυτότητάς σας, όταν συνδέεστε µε ένα λειτουργικό σύστηµα τύπου UNIX.

Ουρά ετοιµότητας (ready queue): ∆οµή αποθήκευσης της Κεντρικής Μονάδας

Επεξεργασίας, στην οποία φυλάσσονται κάθε χρονική στιγµή οι διεργασίες που είναι

έτοιµες για εξυπηρέτησή τους (εκτέλεση) από την Κεντρική Μονάδα Επεξεργασίας

του συστήµατος.

Παράµετρος εντολής (argument): Λέξη αλφαριθµητικής µορφής, που ακολουθεί

το όνοµα εντολής κατά την κλήση της και δίνει πληροφορίες εισόδου στην εντολή.

Όταν µε την εντολή καλείται ένα σενάριο κελύφους, για να εκτελεστεί, οι παράµε-

τροί της περνούν ως παράµετροι στο σενάριο αυτό.

Πεδίο (field): Ένα µέρος γραµµής κειµένου, εγγραφής δεδοµένων, επικεφαλίδας

µηνύµατος κ.λπ., του οποίου προσδιορίζεται η ταυτότητα.

Πίνακας σελίδων (page table): Πίνακας που περιέχει τις απαραίτητες πληροφορίες

για όλες τις σελίδες µίας διεργασίας (αν βρίσκεται ή όχι στη µνήµη, σε ποια θέση

της φυσικής µνήµης βρίσκεται, αν έχει χρησιµοποιηθεί κ.ά.). Κάθε γραµµή (entry)

του πίνακα αντιστοιχεί σε µία ξεχωριστή σελίδα της διεργασίας.

Προγραµµατισµός στο κέλυφος (shell programming): Η διαδικασία χρήσης όλων

1 3 1° § ø ™ ™ ∞ ƒ π

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 131

Page 132: Λειτουργικά Συστήματα

1 3 2 § ∂ π ∆ √ À ƒ ° π ∫ ∞ ™ À ™ ∆ ∏ ª ∞∆∞

των εντολών και φίλτρων που παρέχονται από το κέλυφος, µε σκοπό τη συγγραφή

απλών, σύνθετων ή/και πολύπλοκων scripts για την άµεση πρόσβαση, χρήση και δια-

χείριση των πόρων του συστήµατος (µνήµη, αρχεία, εκτυπωτής κ.λπ.).

Προτεραιότητα (priority): Αριθµός ο οποίος συνοδεύει µοναδικά κάθε διεργασία

του συστήµατος και το µέγεθός του καθορίζει τη σειρά εκτέλεσής της. Όσο µεγα-

λύτερο αριθµό προτεραιότητας διαθέτει µία διεργασία, τόσο πιο γρήγορα εισέρχε-

ται στην Κεντρική Μονάδα Επεξεργασίας του συστήµατος για την εκτέλεσή της.

Πυρήνας (kernel): Το πρόγραµµα στην καρδιά του λειτουργικού συστήµατος, που

ελέγχει την πρόσβαση στον υπολογιστή και τα αρχεία του, κατανέµει τους πόρους

µεταξύ των διάφορων δραστηριοτήτων που λαµβάνουν χώρα µέσα στον υπολογι-

στή, συντηρεί το σύστηµα αρχείων και διαχειρίζεται τη µνήµη του υπολογιστή.

Ρυθµός εµφάνισης σφαλµάτων αναφορών σελίδων (page–fault rate): Το κλάσµα

των εµφανιζόµενων σφαλµάτων αναφοράς σελίδας σε µία ακολουθία αναφορών µίας

διεργασίας στη µνήµη του συστήµατος προς το συνολικό αριθµό των αναφορών στη

µνήµη της ακολουθίας αυτής.

Σελιδοποίηση (paging): ∆ιαδικασία κατακερµατισµού των περιεχοµένων (εντολές

και δεδοµένα) µίας διεργασίας από το λειτουργικό σύστηµα σε µικρότερα ισοµεγέ-

θη κοµµάτια (σελίδες), µε σκοπό σε κάθε χρονική στιγµή να βρίσκεται στη µνήµη

µόνο το απαραίτητο µέρος (σελίδες) για την εκτέλεση της κάθε διεργασίας και έτσι

να χωρούν σε αυτήν (και να εκτελούνται) όσο το δυνατόν περισσότερες διεργασίες.

Σενάριο κελύφους (shell script): Ακολουθία εντολών προς το κέλυφος, που έχει τη

µορφή αρχείου εισόδου για το κέλυφος και µπορεί να κληθεί σαν να ήταν µία εντο-

λή από µόνη της.

Σηµαφόρος (semaphore): Μεταβλητή δύο καταστάσεων, η οποία µε την ελεγχό-

µενη µετάβασή της από τη µία κατάσταση στην άλλη προστατεύει κρίσιµες περιο-

χές και πόρους του συστήµατος (π.χ. θέσεις µνήµης, κοινές µεταβλητές προγραµ-

µάτων κ.ά.) από τη µη επιθυµητή ταυτόχρονη πρόσβαση πολλαπλών διεργασιών.

Συµβολική γλώσσα (assembly): Ενδιάµεση γλώσσα προγραµµατισµού χαµηλού

επιπέδου, µε περιορισµένο σύνολο εντολών άµεσης χρήσης και προσπέλασης των

δοµικών στοιχείων του συστήµατος (καταχωρητές, µνήµη κ.λπ.), εξαρτώµενο απο-

κλειστικά από την αρχιτεκτονική της κάθε υπολογιστικής µηχανής.

Συµβολοµεταφραστής (assembler): Πρόγραµµα το οποίο µετατρέπει ένα σύνολο

εντολών γραµµένων σε συµβολική γλώσσα σε εντολές της γλώσσας µηχανής ενός

υπολογιστικού συστήµατος.

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 132

Page 133: Λειτουργικά Συστήματα

Συνθηµατικό (password): Ακολουθία µυστικών χαρακτήρων που εισάγετε κατά τη

σύνδεσή σας µε ένα σύστηµα, για να επιβεβαιώσετε την ταυτότητά σας.

Συσσωρευτής (accumulator): Ο βασικός δυαδικός καταχωρητής της αριθµητικής

λογικής µονάδας, ο οποίος έχει την ικανότητα να λαµβάνει µία δυαδική τιµή ως

περιεχόµενό του και να προσθέτει στο περιεχόµενό του άλλους δυαδικούς αριθµούς.

Με βάση τη λειτουργία του συσσωρευτή ολοκληρώνεται συνθετικά και κάθε άλλη

λειτουργία της αριθµητικής λογικής µονάδας και κατ’ επέκταση της Κεντρικής

Μονάδας Επεξεργασίας, όσο πολύπλοκη κι αν είναι.

Σφάλµα αναφοράς σελίδας (page fault): Η περίπτωση κατά την οποία η σελίδα

στην οποία αναφέρεται η τρέχουσα εντολή προγράµµατος µίας διεργασίας δε βρί-

σκεται στη φυσική µνήµη του συστήµατος.

Τερµατικό (terminal): Μονάδα που περιλαµβάνει πληκτρολόγιο και οθόνη και χρη-

σιµοποιείται για την αποστολή ή παραλαβή δεδοµένων από έναν υπολογιστή.

Τρέχων κατάλογος (current directory): Ο κατάλογος στον οποίο βρισκόµαστε την

κάθε δεδοµένη στιγµή ως χρήστες ενός συστήµατος (λέγεται και κατάλογος εργασίας).

Φίλτρο (filter): Πρόγραµµα που τροποποιεί ή µετασχηµατίζει τα στοιχεία εισόδου

του. Καλείται και λειτουργεί συνήθως ως εντολή στο κέλυφος, ενώ µπορεί να λαµ-

βάνει ως είσοδο τόσο στοιχεία από το τερµατικό, όσο και από προσδιοριζόµενο

αρχείο.

Φίλτρο grep: Φίλτρο προγραµµατισµού στο κέλυφος, το οποίο έχει την ικανότητα

να βρίσκει και να αποµονώνει συγκεκριµένες γραµµές ή κοµµάτια αρχείων και δεδο-

µένων τύπου κειµένου, οι οποίες περιέχουν ένα προσδιοριζόµενο πρότυπο (λέξη,

φράση ή γενικότερα αλφαριθµητική ακολουθία χαρακτήρων).

Χρονοδροµολόγηση διεργασιών (process scheduling): Η διαδικασία επιλογής της

σειράς εκτέλεσης ενός συνόλου διεργασιών, οι οποίες βρίσκονται στην ουρά ετοι-

µότητας της Κεντρικής Μονάδας Επεξεργασίας του συστήµατος, µε βάση συγκε-

κριµένα κριτήρια (χρόνος άφιξης, µέγεθος διεργασίας κ.λπ.).

1 3 3° § ø ™ ™ ∞ ƒ π

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 133

Page 134: Λειτουργικά Συστήματα

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 134

Page 135: Λειτουργικά Συστήματα

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 135

Page 136: Λειτουργικά Συστήματα

MAMA§H™. (136ÛÂÏ.) 25/7/2003 10:58 ™ÂÏ›‰· 136