2007-2008:Ασκήσεις

Από OSLab

Πίνακας περιεχομένων

1η άσκηση (Τετάρτη, 5 Μαρτίου 2008)

1o Πρόβλημα
Για κάθε ερώτημα που ακολουθεί δώστε την εντολή που πιστεύετε ότι δίνει πιο αποδοτικά τη ζητούμενη λύση. Επίσης εξηγήστε εν συντομία τη δομή της εντολής που έχετε δώσει. Εάν πρόκειται για μια σύνθετη εντολή, τότε περιγράψτε όλους τους επί μέρους όρους της εντολής.
  • Δημιουργήστε μια ταξινομημένη λίστα (ως προς το μέγεθος) από τις ενεργές διεργασίες του συστήματος που δουλεύετε. Αν μια εφαρμογή εκτελείται πολλαπλές φορές, το όνομα της θα πρέπει να εμφανίζεται μόνο μία φορά. Εμφανίστε την λίστα στην οθόνη σε ελεγχόμενη μορφή.
  • Δημιουργήστε μια λίστα από τις ενεργές διεργασίες του συστήματος που δεν ανοίκουν στον χρήστη root. Εμφανίστε την λίστα στην οθόνη σε ελεγχόμενη μορφή.
  • Τυπώστε στην οθόνη όλα τα αρχεία (όχι φακέλους) τα οποία έχουν τροποποιηθεί εντός της ημέρας.
  • Δημιουργήστε ένα αρχείο executables.txt που να περιέχει την λίστα των αρχείων ενός φακέλου του συστήματος που είναι εκτελέσιμα και παράλληλα εμφανίστε το αρχείο στην οθόνη σε ελεγχόμενη μορφή.
2o Πρόβλημα
Δημιουργήστε ένα bash script με όνομα countfiles.sh, το οποίο θα υπολογίζει το πλήθος των αρχείων κάτω από τον τρέχοντα φάκελο που η ονομασία τους ικανοποιεί ένα συγκεκριμένο pattern. Το script θα πρέπει να εμφανίζει τα σύνολα ανα φάκελο και συνολικά. Παράδειγμα:
 
bash-3.00# countfiles.sh *.h
15 /home/root
2 /home/root/code
4 /home/root/test
12 /home/root/test/old
22 /home/root/tmp
Total 55
Το αρχείο που θα παραδώσετε θα πρέπει να είναι καλά δομημένο (με την χρήση tab, κλπ.) και καλά σχολιασμένο.
3o Πρόβλημα
Δημιουργήστε ένα bash script με όνομα checkproc.sh, το οποίο θα ενημερώνει κατα πόσο εκτελούνται συγκεκριμένες διεργασίες. Το bash script χρησιμοποιεί ένα βοηθητικό αρχείο .procs που είναι τοποθετημένο στον προσωπικό φάκελο του λογαριασμού (δηλ. home directory) και περιέχει ονόματα εφαρμογών (σε οποιαδήποτε μορφή εσείς θέλετε: χωρισμένα με enter, space, tab ...). Αν μια εφαρμογή εκτελείται πολλαπλές φορές στο σύστημα αυτή την στιγμή, εμφανίζετε μόνο μια φορά. Παράδειγμα:
 
bash-3.00# cat ~/.procs
httpd bash
bash-3.00# checkproc.sh
bash is running
Το αρχείο που θα παραδώσετε θα πρέπει να είναι καλά δομημένο (με την χρήση tab, κλπ.) και καλά σχολιασμένο.
4o Πρόβλημα
Αναπτύξτε μια νέα κλήση του συστήματος (system call) στα πλαίσια του διαχειριστή διεργασιών (process manager) που να δέχεται έναν ακέραιο ως παράμετρο και να εκτυπώνει το τετράγωνο του ακεραίου. Υλοποιείστε μια απλή εντολή που χρησιμοποιεί την νέα κλήση του συστήματος που αναπτύξατε. Τα αρχεία που θα παραδώσετε θα πρέπει να είναι καλά δομημένα (με την χρήση tab, κλπ.) και καλά σχολιασμένα.
5o Πρόβλημα
Αναπτύξτε μια νέα κλήση του πυρήνα (kernel call) που να δέχεται έναν ακέραιο ως παράμετρο και να εκτυπώνει το διπλάσιο του ακεραίου. Τα αρχεία που θα παραδώσετε θα πρέπει να είναι καλά δομημένα (με την χρήση tab, κλπ.) και καλά σχολιασμένα.


Παράδοση:

  • Η άσκηση είναι ομαδική (αυστηρά 4 ατόμων)
  • Η προθεσμία υποβολής είναι η Τετάρτη 26 Μαρτίου, ώρα 23:59 Τετάρτη 16 Απριλίου, ώρα 23:59
    • Σε περίπτωση που η άσκηση παραδοθεί με καθυστέρηση, για κάθε εβδομάδα καθηστέρησης θα υπάρξει μείωση 30%.
    • Αν παρατηρηθεί αντιγραφή, τότε όλες οι ομάδες που συνεργάστηκαν και εμπλέκονται στην αντιγραφή, θα μηδενιζονται στο μάθημα.
  • Η παράδοση γίνεται με την χρήση του εργαλείου submit μόνο από τον εκπρόσωπο της ομάδας
  • Το αρχείο που θα παραδώσετε πρέπει να έχει το όνομα 1.tar.gz και να περιέχει:
    1. Το αρχείο με όνομα readme που περιέχει ΜΟΝΟ 4 γραμμές, μια γραμμή ανά μέλος της ομάδας με το ΑΜ, Ονοματεπώνυμο, e-mail -- με αυτή την σειρά και με το ονοματεπώνυμο να είναι γραμμένο με την χρήση λατινικών χαρακτήρων (όπως εμφανίζονται στο mail σας).
    2. Για το πρόβλημα 1, ένα αρχείο problem1.txt που να περιέχει τις απαντήσεις σας.
    3. Για τα προβλήματα 2-3, τα αρχεία countfiles.sh και checkproc.sh (καλά δομημένα και καλά σχολιασμένα).
    4. Για τα προβλήματα 4-5, τα αρχεία που υλοποιούν τις νέες λειτουργίες θα πρέπει να τοποθετηθούν σε φακέλους αντίστοιχους με αυτούς που χρησιμοποιεί ο κώδικας minix 3. π.χ. για το 4o πρόβλημα, τα αρχεία που αφορούν τον process manager θα πρέπει να είναι τοποθετημένα στον υποφάκελο src/servers/pm, το αρχείο που υλοποιεί την απλή εντολή θα πρέπει να βρίσκεται στον υποφάκελο src/commands/simple, για το 5o πρόβλημα, το αρχείο system.c θα πρέπει να βρίσκεται στον υποφάκελο src/kernel κοκ.
  • Μόνο τα παραπάνω αρχεία θα βαθμολογηθούν και ΚΑΝΕΝΑ άλλο.
  • ΌΛΑ ΤΑ ΟΝΟΜΑΤΑ ΤΩΝ ΑΡΧΕΙΩΝ ΚΑΘΩΣ ΚΑΙ ΤΑ ΠΕΡΙΕΧΟΜΕΝΑ ΠΡΕΠΕΙ ΝΑ ΑΠΟΤΕΛΟΥΝΤΑΙ ΜΟΝΟ ΑΠΟ ΛΑΤΙΝΙΚΟΥΣ ΧΑΡΑΚΤΗΡΕΣ.


Σχετικό υλικό:


2η άσκηση (Τετάρτη, 19 Μαρτίου 2008)

1o Πρόβλημα
Τροποποιείστε τον αλγόριθμο χρονοπρογραμματισμού του Minix έτσι ώστε:
  • Να υποστηρίζει 32 ουρές προτεραιότητας.
  • Να υποστηρίζει 8 ουρές προτεραιότητας.
  • Να έχει μόνο 1 ουρά προτεραιότητας, δηλαδή να εκφυλιστεί στον αλγόριθμου Round Robin.
2o Πρόβλημα
Υλοποιείστε τον αλγόριθμο χρονοπρογραμματισμού "δίκαιας διανομής" (Fair-Share Scheduling) που περιγράφεται στο κεφάλαιο 2.5.4 του βιβλίου A.Tanenbaum, "Σύγχρονα Λειτουργικά Συστήματα", Κλειδάριθμος, ISBN 9602095865, σελίδα 195.
3o Πρόβλημα
Αναπτύξτε μια νέα κλήση του συστήματος (system call) στα πλαίσια του διαχειριστή διεργασιών (process manager) που να δέχεται έναν ακέραιο ως παράμετρο και να επιστρέφει στην διεργασία που την κάλεσε την εγγραφή του πίνακα διεργασιών που αντιστοιχεί στην παράμετρο (σύμφωνα με το πεδίο process ID).


Παράδοση:

  • Η άσκηση είναι ομαδική (αυστηρά 4 ατόμων)
    • ΔΕΝ ΕΠΙΤΡΕΠΟΝΤΑΙ ΑΛΛΑΓΕΣ ΣΤΙΣ ΣΥΝΘΕΣΕΙΣ ΤΩΝ ΟΜΑΔΩΝ
  • Η προθεσμία υποβολής είναι η Δευτέρα 12 Μαΐου, ώρα 23:59 Δευτέρα 19 Μαΐου, ώρα 23:59
    • Σε περίπτωση που η άσκηση παραδοθεί με καθυστέρηση, για κάθε εβδομάδα καθηστέρησης θα υπάρξει μείωση 30%.
    • Αν παρατηρηθεί αντιγραφή, τότε όλες οι ομάδες που συνεργάστηκαν και εμπλέκονται στην αντιγραφή, θα μηδενιζονται στο μάθημα.
  • Η παράδοση γίνεται με την χρήση του εργαλείου submit μόνο από τον εκπρόσωπο της ομάδας
  • Το αρχείο που θα παραδώσετε πρέπει να έχει το όνομα 2.tar.gz και να περιέχει:
    1. Το αρχείο με όνομα readme που περιέχει ΜΟΝΟ 4 γραμμές, μια γραμμή ανά μέλος της ομάδας με το ΑΜ, Ονοματεπώνυμο, e-mail -- με αυτή την σειρά και με το ονοματεπώνυμο να είναι γραμμένο με την χρήση λατινικών χαρακτήρων (όπως εμφανίζονται στο mail σας).
    2. Για κάθε πρόβλημα, τα αρχεία που υλοποιούν τις νέες λειτουργίες θα πρέπει να τοποθετηθούν σε φακέλους αντίστοιχους με αυτούς που χρησιμοποιεί ο κώδικας minix 3. π.χ. για το 1o πρόβλημα, τα αρχεία που αφορούν τον πυρήνα θα πρέπει να βρίσκονται στον υποφάκελο src/kernel, για το 3o πρόβλημα, τα αρχεία που αφορούν τον process manager θα πρέπει να είναι τοποθετημένα στον υποφάκελο src/servers/pm κοκ.
  • Μόνο τα παραπάνω αρχεία θα βαθμολογηθούν και ΚΑΝΕΝΑ άλλο.
  • ΌΛΑ ΤΑ ΟΝΟΜΑΤΑ ΤΩΝ ΑΡΧΕΙΩΝ ΚΑΘΩΣ ΚΑΙ ΤΑ ΠΕΡΙΕΧΟΜΕΝΑ ΠΡΕΠΕΙ ΝΑ ΑΠΟΤΕΛΟΥΝΤΑΙ ΜΟΝΟ ΑΠΟ ΛΑΤΙΝΙΚΟΥΣ ΧΑΡΑΚΤΗΡΕΣ.


Σχετικό υλικό:


3η άσκηση (Δευτέρα, 9 Απριλίου 2008)

1o Πρόβλημα
Αναπτύξτε μια νέα κλήση του συστήματος (system call) στα πλαίσια του συστήματος αρχείων (file system) που να δέχεται ένα όνομα αρχείου (char * name) ως παράμετρο. Επιστρέφει στην διεργασία που την κάλεσε το πρώτο i-node του αρχείου.
2o Πρόβλημα
Αναπτύξτε μια νέα κλήση του συστήματος (system call) στα πλαίσια του συστήματος αρχείων (file system) που να δέχεται ένα όνομα αρχείου (char * name) ως παράμετρο. Επιστρέφει στην διεργασία που την κάλεσε το ποσοστό κατακερματισμού των blocks του αρχείου. Ως ποσοστό κατακερματισμού ορίζουμε τον αριθμό των blocks που δεν είναι συναιχόμενα ως προς το συνολικό αριθμό των blocks του αρχείου.
Παράδειγμα: Ένα αρχείο είναι αποθηκευμένο στα blocks: 1001, 1002, 1003, 1050, 1420, 1421, 1422. Τα blocks 1003, 1050 και 1420 δεν ειναι συναιχόμενα. Το ποσοστό κατακερματισμού είναι 3/7=42.8%
3o Πρόβλημα
Αναπτύξτε μια νέα κλήση του συστήματος (system call) στα πλαίσια του συστήματος αρχείων (file system) που να δέχεται ένα όνομα αρχείου (char * name) ως παράμετρο. Μεταφέρει τα blocks του αρχείου σε κάποιο σημείο της αποθηκευτικής μονάδας έτσι ώστε να ελαχιστοποιείται ο κατακερματισμός των blocks του αρχείου (ή να εξαλίφεται εντελώς).


Παράδοση:

  • Η άσκηση είναι ομαδική (αυστηρά 4 ατόμων)
    • ΔΕΝ ΕΠΙΤΡΕΠΟΝΤΑΙ ΑΛΛΑΓΕΣ ΣΤΙΣ ΣΥΝΘΕΣΕΙΣ ΤΩΝ ΟΜΑΔΩΝ
  • Η προθεσμία υποβολής είναι η Δευτέρα 9 Ιουνίου, ώρα 23:59 Κυριακή 22 Ιουνίου, ώρα 23:59
    • Σε περίπτωση που η άσκηση παραδοθεί με καθυστέρηση, για κάθε εβδομάδα καθηστέρησης θα υπάρξει μείωση 30%.
    • Αν παρατηρηθεί αντιγραφή, τότε όλες οι ομάδες που συνεργάστηκαν και εμπλέκονται στην αντιγραφή, θα μηδενιζονται στο μάθημα.
  • Η παράδοση γίνεται με την χρήση του εργαλείου submit μόνο από τον εκπρόσωπο της ομάδας
  • Το αρχείο που θα παραδώσετε πρέπει να έχει το όνομα 3.tar.gz και να περιέχει:
    1. Το αρχείο με όνομα readme που περιέχει ΜΟΝΟ 4 γραμμές, μια γραμμή ανά μέλος της ομάδας με το ΑΜ, Ονοματεπώνυμο, e-mail -- με αυτή την σειρά και με το ονοματεπώνυμο να είναι γραμμένο με την χρήση λατινικών χαρακτήρων (όπως εμφανίζονται στο mail σας).
    2. Για κάθε πρόβλημα, τα αρχεία που υλοποιούν τις νέες λειτουργίες θα πρέπει να τοποθετηθούν σε φακέλους αντίστοιχους με αυτούς που χρησιμοποιεί ο κώδικας minix 3. π.χ. για το 1o πρόβλημα, τα αρχεία που αφορούν το σύστημα αρχείων θα πρέπει να βρίσκονται στον υποφάκελο src/servers/fs κοκ.
  • Μόνο τα παραπάνω αρχεία θα βαθμολογηθούν και ΚΑΝΕΝΑ άλλο.
  • ΌΛΑ ΤΑ ΟΝΟΜΑΤΑ ΤΩΝ ΑΡΧΕΙΩΝ ΚΑΘΩΣ ΚΑΙ ΤΑ ΠΕΡΙΕΧΟΜΕΝΑ ΠΡΕΠΕΙ ΝΑ ΑΠΟΤΕΛΟΥΝΤΑΙ ΜΟΝΟ ΑΠΟ ΛΑΤΙΝΙΚΟΥΣ ΧΑΡΑΚΤΗΡΕΣ.


Σχετικό υλικό:


Εξέταση Ιουνίου (?? Ιουνίου 2008)

Βαθμολογία Εξέτασης


Εξέταση Σεπτεμβρίου (?? Σεπτεμβρίου 2008)

2007-2008:Ασκήσεις:Εξέταση Σεπτεμβρίου