AUEBSH – ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Solved

$ 29.99
Category:

Description

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

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

1η Προγραμματιστική Εργασία

Αντικείμενο: Στην 1ης εργασία θα υλοποιήσετε έναν δικό σας φλοιό (auebsh) που θα μιμείται το φλοιό του Linux, δηλαδή, ένα πρόγραμμα το οποίο θα επαναλαμβάνει τα εξής βήματα: α) εμφάνιση προτροπής (prompt), β) ανάγνωση γραμμής εντολών (command line) από το τερματικό, και γ) δημιουργία κατάλληλων διεργασιών για εκτέλεση της γραμμής εντολών. Η εργασία είναι οργανωμένη σε στάδια κλιμακωτής δυσκολίας που θα βαθμολογηθούν ανεξάρτητα, έτσι ώστε ακόμη κι αν δεν ολοκληρώσετε όλα τα ζητούμενα, να πάρετε βαθμούς. Ο κώδικάς σας θα πρέπει να λειτουργεί σωστά στην εικονική μηχανή που διατίθεται στα CSLAB και στο διαδίκτυο (βλ. ανακοίνωση στο eclass). Η εργασία είναι ομαδική και είναι σχεδιασμένη για ομάδες τριών (3) ατόμων, μπορείτε όμως να την κάνετε και σε μικρότερες ομάδες.

Βήματα εργασίας:
1. auebsh1 (20%). Ο φλοιός αυτός θα δέχεται απλές μεμονωμένες εντολές. Συγκεκριμένα, α) θα εμφανίζει ως προτροπή το όνομά του και τον χαρακτήρα «>» (δηλαδή, auebsh1>), β) θα διαβάζει το όνομα ενός προγράμματος από το τερματικό, γ) θα δημιουργεί μια νέα διεργασία για να εκτελέσει το πρόγραμμα το οποίο διάβασε, και δ) θα περιμένει να τερματιστεί η νέα διεργασία. Μόλις η νέα διεργασία τερματιστεί, ο φλοιός θα διαβάζει και θα εκτελεί την επόμενη εντολή. Για παράδειγμα, ο φλοιός θα μπορεί να εκτελέσει γραμμές εντολών της μορφής «ls».
2. auebsh2 (20%). Ο φλοιός αυτός θα κάνει ό,τι και ο auebsh1 και επιπλέον θα δέχεται ανακατεύθυνση της τυπικής εισόδου/τυπικής εξόδου από/προς αρχεία για τις εντολές που εκτελεί. Για παράδειγμα, ο φλοιός θα μπορεί να εκτελέσει γραμμές εντολών της μορφής «sort < in.txt > out.txt».
3. auebsh3 (20%). Ο φλοιός αυτός θα κάνει ό,τι και ο auebsh2 και επιπλέον θα δέχεται παραμέτρους για τις εντολές που εκτελεί. Για παράδειγμα, ο φλοιός θα μπορεί να εκτελέσει γραμμές εντολών της μορφής «sort –u < in.txt > out.txt».
4. auebsh4 (20%). Ο φλοιός αυτός θα κάνει ό,τι και ο auebsh3 και επιπλέον θα εκτελεί ακολουθίες εντολών με μία σωλήνωση. Για παράδειγμα, ο φλοιός θα μπορεί να εκτελέσει γραμμές εντολών της μορφής «ls -l /home/csuser/Downloads | sort –u > listing.txt».
5. auebsh5 (20%). Ο φλοιός αυτός θα κάνει ό,τι και ο auebsh4 και επιπλέον θα εκτελεί ακολουθίες εντολών χωρίς περιορισμό στο πλήθος των σωληνώσεων. Για παράδειγμα, ο φλοιός θα μπορεί να εκτελέσει γραμμές εντολών της μορφής «ls -l /home/csuser/Downloads | sort –u | wc –l > count.txt».

Πρόσθετες απαιτήσεις:
• Απαγορεύεται η χρήση κλήσεων που δημιουργούν νέο φλοιό για εκτέλεση εντολών (π.χ. εκτέλεση του /bin/sh), και η κλήση της system(). Χρήση τους επιφέρει μηδενισμό.
• Θα πρέπει να είναι σαφές ποιος φλοιός εκτελείται. Για παράδειγμα, αν τρέχει ο πρώτος φλοιός, στην αρχή κάθε γραμμής πρέπει να εμφανίζεται «auebsh1>».
• Για την ανακατεύθυνση εξόδου θα υποστηρίζεται μόνο η δημιουργία καινούργιου αρχείου (>). Για παράδειγμα αν το αρχείο out.txt προϋπάρχει και εκτελέσουμε την εντολή sort –u > out.txt τα περιεχόμενα του out.txt θα διαγράφονται και στη θέση τους θα μπαίνει η έξοδος της εντολής. Το σύμβολο προσάρτησης (>>) της εξόδου
θα θεωρείται συντακτικό λάθος. Υποθέστε ότι υπάρχει κενό ανάμεσα στα σύμβολα ανακατεύθυνσης (< και >) και το όνομα του αρχείου ανακατεύθυνσης.
• Ο φλοιός σας πρέπει να τερματίζει όταν διαβάσει τον ειδικό χαρακτήρα EOF. Μπορείτε να στείλετε EOF στον φλοιό πληκτρολογώντας CTRL-D στην αρχή μιας εντολής. • Θα πρέπει να ορίσετε ένα μέγιστο συνολικό μέγεθος για τη γραμμή εντολών (τουλάχιστον 255 χαρακτήρες) και να ελέγχετε ότι η είσοδος δεν το ξεπερνά.
• Ο φλοιός σας δεν πρέπει να αφήνει διεργασίες ζόμπι (θα βαθμολογούνται αρνητικά). • Ο κώδικάς σας πρέπει να είναι δομημένος με συναρτήσεις με συγκεκριμένο έργο, έτσι ώστε να μπορείτε να τον επαναχρησιμοποιήσετε σε πολλούς φλοιούς.
• Οι συναρτήσεις που χρησιμοποιούνται σε πολλούς φλοιούς πρέπει να βρίσκονται σε ένα βοηθητικό αρχείο κώδικα, και όχι να αντιγράφονται στο αρχείο κώδικα κάθε φλοιού. • Θα πρέπει να γίνονται όλοι οι κατάλληλοι έλεγχοι σε συναρτήσεις κλήσης συστήματος (π.χ. fork(), pipe()) καθώς και συναρτήσεις δέσμευσης μνήμης.

Υποδείξεις:
• Για να αναλύσετε τη γραμμή εντολών σε εντολές και παραμέτρους, μπορείτε να χρησιμοποιήσετε τη συνάρτηση char *strtok(char *newstring, const char *delimiters). Προσοχή στο ότι η strtok() τροποποιεί την πρώτη της παράμετρο.
• Για να συνδεθεί αυτόματα το βοηθητικό αρχείο κώδικα με το κύριο αρχείο κώδικα κάθε φλοιού, αρκεί να τα γράψετε και τα δύο στη γραμμή εντολών του μεταγλωττιστή.
• Για να συνδέσετε τις εντολές με τις σωληνώσεις και για να κάνετε ανακατεύθυνση εισόδου/εξόδου, θα χρειαστείτε την κλήση dup() ή την κλήση dup2().
• Για να εντοπίσετε το τέλος της εισόδου, βρείτε τι επιστρέφεται στο πρόγραμμα όταν ο χρήστης στέλνει EOF.
• Δεν θα υλοποιήσετε τις ενσωματωμένες εντολές στο φλοιό (π.χ. δομές ελέγχου και επανάληψης). Ο φλοιός σας θα εκτελεί εξωτερικές εντολές, δηλαδή προγράμματα που καλούνται από τον φλοιό. Επίσης, δεν θα υλοποιήσετε χαρακτήρες wildcard (π.χ. το *). • Σκεφτείτε κατά το σχεδιασμό του κάθε φλοιού:
o Αν και πόσες διεργασίες-παιδιά χρειάζονται. o Αν πρέπει και πώς μπορείτε να επιβάλλετε τη σειρά εκτέλεσης των παιδιών.
o Πόσες σωληνώσεις χρειάζονται.
o Αν και πώς μπορεί να αξιοποιηθεί ο κώδικας από προηγούμενα βήματα.

Παραδοτέα: Ο κώδικάς σας πρέπει να αποτελείται από ένα αρχείο με δηλώσεις για όλους τους φλοιούς (p3y-p3z-auebsh.h), ένα αρχείο κώδικα C με τις κοινές συναρτήσεις για όλους τους φλοιούς (p3x-p3y-p3z-auebsh-common.c) και από ένα αρχείο κώδικα C για κάθε φλοιό (p3x-p3y-p3z-auebsh-Ν.c) όπου N είναι ο αριθμός του φλοιού από 1 έως 5 και p3x-p3yp3z είναι οι αριθμοί μητρώου σας. Εκτός από τον κώδικα, θα πρέπει να παραδώσετε μία αναφορά σε μορφή PDF (p3x-p3y-p3z-auebsh.pdf) η οποία να περιγράφει τη δομή του κώδικά σας για κάθε φλοιό και να αναφέρει τυχόν περιορισμούς ή τυχόν πρόσθετα χαρακτηριστικά που έχετε υλοποιήσει. Αυτά τα οκτώ αρχεία (και τίποτα άλλο) θα πρέπει να συμπιεστούν σε ένα αρχείο σε μορφή 7zip με όνομα της μορφής p3x-p3y-p3z-auebsh.7z και να υποβληθούν από ένα μόνο μέλος της ομάδας μέσω της υποβολής εργασιών του eclass.

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

Reviews

There are no reviews yet.

Be the first to review “AUEBSH – ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Solved”

Your email address will not be published. Required fields are marked *