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

$ 20.99
Category:

Description

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

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

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

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

Σκοπός: Στις εργασίες σας θα υλοποιήσετε ένα σύστημα παραγγελιών και διανομής πίτσας με χρήση του πακέτου νημάτων POSIX threads (pthreads). Στη δεύτερη εργασία έχουμε προσθέσει διανομείς που μεταφέρουν τις παραγγελίες στους πελάτες και έχουμε αλλάξει τη συμπεριφορά των παρασκευαστών. Ο κώδικάς σας θα πρέπει να λειτουργεί σωστά στην εικονική μηχανή που διατίθεται στα CSLAB και στο διαδίκτυο (βλ. ανακοίνωση στο eclass). Η εργασία είναι ομαδική και είναι σχεδιασμένη για ομάδες τριών (3) ατόμων, μπορείτε όμως να την υλοποιήσετε και σε μικρότερες ομάδες. Ο βαθμός της 2ης εργασίας θα είναι το 10% του τελικού βαθμού (δηλαδή, 1 μονάδα στις 10).

Αντικείμενο: Η πιτσαρία διαθέτει Ncook παρασκευαστές, Νoven φούρνους και Ndeliverer διανομείς. Η πρώτη παραγγελία γίνεται τη χρονική στιγμή 0, και κάθε επόμενη (διαδοχική) παραγγελία γίνεται μετά από ένα τυχαίο ακέραιο χρονικό διάστημα στην περιοχή [Torderlow,Torderhigh]. Κάθε παραγγελία περιλαμβάνει έναν τυχαίο ακέραιο αριθμό από πίτσες στο διάστημα [Norderlow,Νorderhigh]. Η παραγγελία αρχικά περιμένει μέχρι ένας παρασκευαστής να γίνει διαθέσιμος. Όταν συμβεί αυτό, ο παρασκευαστής χρειάζεται Tprep χρόνο να ετοιμάσει κάθε πίτσα. Στη συνέχεια, ο παρασκευαστής περιμένει μέχρι ένας φούρνος να γίνει διαθέσιμος. Όταν συμβεί αυτό, ο παρασκευαστής τοποθετεί όλες τις πίτσες της παραγγελίας στον ίδιο φούρνο, και απελευθερώνεται για την επόμενη παραγγελία (δεν περιμένει να τελειώσει το ψήσιμο). Οι πίτσες ψήνονται για χρόνο Tbake. Όταν ολοκληρωθεί το ψήσιμο, ο φούρνος κλείνει αυτόματα και περιμένει έναν διανομά. Όταν ένας διανομέας γίνει διαθέσιμος, αναλαμβάνει μία έτοιμη παραγγελία, την βγάζει από το φούρνο (ο οποίος απελευθερώνεται), την πακετάρει και την παραδίδει στον πελάτη, με την παράδοση να διαρκεί ένα τυχαίο ακέραιο χρονικό διάστημα στην περιοχή [Tlow,Thigh]. Μετά την παράδοση, ο διανομές χρειάζεται το ίδιο ακριβώς διάστημα ώστε να επιστρέψει στο κατάστημα και να αναλάβει την επόμενη παραγγελία. Κάθε παρασκευαστής ασχολείται με μία μόνο παραγγελία μέχρι να την βάλει στο φούρνο, και κάθε διανομέας μεταφέρει μία μόνο παραγγελία σε κάθε διαδρομή.

Είσοδος και δεδομένα: Οι ακόλουθες σταθερές θα ορίζονται σε ένα αρχείο δηλώσεων:
• Ncook=2 παρασκευαστές (1/3 της 1ης εργασίας)
• Noven=5 φούρνοι
• Ndeliverer=10 διανομείς
• Torderlow=1 λεπτό
• Torderhigh=5 λεπτά
• Norderlow=1 πίτσες
• Norderhigh=5 πίτσες
• Tprep=1 λεπτό
• Tbake=10 λεπτά
• Tlow=5 λεπτά
• Thigh=15 λεπτά
Το πρόγραμμά σας θα δέχεται δύο (ακριβώς) παραμέτρους με το πλήθος των πελατών προς εξυπηρέτηση, Ncust, και τον τυχαίο σπόρο για τη γεννήτρια των τυχαίων αριθμών.

Έξοδος εργασίας: Για κάθε παραγγελία, τη στιγμή της παραλαβής θα τυπώνεται στην οθόνη ένα μήνυμα της μορφής:
• Η παραγγελία με αριθμό <oid> παραδόθηκε σε <X> λεπτά και κρύωνε για <Y> λεπτά. Η σειρά των γραμμών θα είναι τυχαία, αλλά οι γραμμές δεν πρέπει να μπλέκονται μεταξύ τους. Ο χρόνος <Χ> συμβολίζει το διάστημα από την εισαγωγή της παραγγελίας μέχρι την παράδοσή της στον πελάτη, ενώ ο χρόνος <Υ> το διάστημα από την ολοκλήρωση του ψησίματος της παραγγελίας μέχρι την παράδοσή της στον πελάτη.
Στο τέλος της εκτέλεσης, το σύστημα θα τυπώνει τα ακόλουθα:
• Μέσο και μέγιστο χρόνο παράδοσης των παραγγελιών.
• Μέσο και μέγιστο χρόνο κρυώματος των παραγγελιών.

Δομή κώδικα: Το αρχικό νήμα του προγράμματός σας θα δημιουργεί ένα νήμα ανά παραγγελία (συνολικά Ncust νήματα) στα οποία θα μεταβιβάζετε έναν αριθμό νήματος (από 1 έως Ncust) ώστε να τα διακρίνετε. Κάθε νήμα στη συνέχεια θα εκτελεί τα παραπάνω βήματα μέχρι να ολοκληρωθεί η παραγγελία και θα τυπώνει την κατάλληλη έξοδο. Τέλος, το αρχικό νήμα θα τυπώνει την τελική έξοδο. Θα χρειαστείτε τουλάχιστον τα ακόλουθα:
• Μία ακέραιη μεταβλητή και ένα mutex για να μετράτε το πλήθος των διαθέσιμων παρασκευαστών και μία μεταβλητή συνθήκης για να συγχρονίσετε τις παραγγελίες με τους παρασκευαστές, έτσι ώστε όταν δεν υπάρχουν διαθέσιμοι παρασκευαστές να μπλοκάρονται οι παραγγελίες. Με αντίστοιχο τρόπο θα χειριστείτε τους φούρνους και τους διανομείς.
• Πραγματικές μεταβλητές (πιθανόν και τα σχετικά mutex) για τους χρόνους παράδοσης και κρυώματος.
• Ένα mutex για κλείδωμα της οθόνης όταν τυπώνετε την έξοδο.
Προσοχή στο να τερματίζετε σωστά τα νήματα, να τα περιμένετε όπου χρειάζεται και (κυρίως!) να απελευθερώνετε σωστά όση μνήμη δεσμεύετε.

Υποδείξεις:
• Ισχύουν όλες οι υποδείξεις της 1ης εργασίας. Προτείνεται να ξεκινήσετε από τον κώδικα της 1ης εργασίας και να τον επεκτείνετε όπου χρειάζεται.
• Προσοχή στο ότι οι παρασκευαστές απελευθερώνονται μόλις βρεθεί φούρνος (άρα, χρειάζονται λιγότεροι) και στο ότι οι φούρνοι απελευθερώνονται μόλις βρεθεί διανομές.
• Προσοχή επίσης στο ότι οι διανομείς είναι απασχολημένοι και μετά την παράδοση της παραγγελίας, αφού πρέπει να επιστρέψουν στο κατάστημα.

Παραδοτέα: Ο κώδικάς σας πρέπει να αποτελείται από ένα αρχείο με δηλώσεις
(συμπεριλαμβανομένων των σταθερών) και ένα αρχείο κώδικα C για το πρόγραμμα. Τα αρχεία αυτά πρέπει να έχουν ονόματα της μορφής p3x-p3y-p3z-pizza2.h για τις δηλώσεις, p3x-p3y-p3zpizza2.c για τον κώδικα C , όπου και p3x-p3y-p3z είναι οι αριθμοί μητρώου σας. Εκτός από τον κώδικα, θα πρέπει να γράψετε μία αναφορά η οποία να περιγράφει τη δομή του κώδικά σας και να αναφέρει τυχόν περιορισμούς ή πρόσθετα χαρακτηριστικά που έχετε υλοποιήσει. Η αναφορά πρέπει να είναι ένα αρχείο σε μορφή PDF με όνομα της μορφής p3x-p3y-p3z-pizza2.pdf. Τέλος, θα πρέπει να συμπεριλάβετε ένα αρχείο με όνομα test-res2.sh το οποίο θα μεταγλωττίζει και θα εκτελεί το πρόγραμμά σας με παραμέτρους 100 πελάτες και αρχικό σπόρο 1000. Αυτά τα τέσσερα αρχεία (και τίποτα άλλο) θα πρέπει να συμπιεστούν σε ένα αρχείο σε μορφή zip με όνομα της μορφής p3x-p3y-p3z-pizza2.zip και να υποβληθούν από ένα μόνο μέλος της ομάδας μέσω της υποβολής εργασιών του eclass.

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

Reviews

There are no reviews yet.

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

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