waitpid(), read(), write(), pipe(), mkfifo() κ.α.).

Σχετικά έγγραφα
fall2018/k22/home m1436+at-di.

... s12 s13 s14. Σχήμα1: ΙεραρχίαΔιεργασιώνμε l=3καιβάθος d=3. Οκάθεεργάτης(worker)δουλεύειμετο 1/27του αρχείου των ψήφων.

./mydiz {-c -a -x -m -d -p -j} <archive-file> <list-of-files/dirs>

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

Kitchen Doormam. Floor with Tables. Restaurant Floorplan and Operation

an:3 are:6 a:10

εμφανίζονται σε ένα γράφημα που υλοποιείται από κλήση στην εφαρμογή gnuplot.

$./MirrorInitiator -n <MirrorServerAddress> -p <MirrorServerPort> \\ -s <ContentServerAddress1:ContentServerPort1:dirorfile1:delay1, \\

0 The quick brown fox leaped over the lazy lazy dog 1 Quick brown foxes leaped over lazy dogs for fun

50 Ketseo,Theoni Sarif,Omar 104

ABC3341, CCD2345, ,... CCDA2345, , ,00E

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

inotify system call interface του Linux [1, 2]. prompt >>./mirr source backup uoa.gr/fall2018/k22/home compilation.

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

Εισαγωγή. Interface της εφαρμογής. Κ24: Προγραμματισμός Συστήματος - 1η Εργασία, Εαρινό Εξάμηνο 2019 Προθεσμία Υποβολής: Παρασκευή 15 Μαρτίου, 23:59

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Σημειώνουμε ότι τα αρχεία περιλαμβάνουν κανονικά αρχεία, καταλόγους και συνδέσμους (links). Οι αντίστοιχες εντολές είναι οι εξής:

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Άσκηση 3 (ανακοινώθηκε στις 14 Μαΐου 2018, προθεσμία παράδοσης: 8 Ιουνίου 2018, 12 τα μεσάνυχτα).

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Δομημένος Προγραμματισμός

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Εισαγωγή στο Flex. Μεταγλωττιστές, Χειμερινό εξάμηνο

ΘΕΜΑ Α. Μονάδες 10 Α2.

Πληροφορική 2. Δομές δεδομένων και αρχείων

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Εισαγωγή στην Πληροφορική

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

1. Δεν μπορεί να γίνει κλήση μίας διαδικασίας μέσα από μία συνάρτηση.

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y»

Κατανεμημένα Συστήματα

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

Προγραμματισμός ΙI (Θ)

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο M. Χατζόπουλος. Προθεσμία: 19/01/2015

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

Γ7.8 Εγγραφές (Structures) Γ Λυκείου Κατεύθυνσης

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΗ ΑΣΚΗΣΗ 2

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Λιβανός Γιώργος Εξάμηνο 2017Β

Εργαστήριο 5. Εαρινό Εξάμηνο

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

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

Εισαγωγή στα Λειτουργικά Συστήματα (Λ/Σ) Το UNIX και οι εντολές του Παρουσίαση 3

Κατανεμημένα Συστήματα. Ενότητα # 2: Εκλογή αρχηγού Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 1. Χειμερινό Εξάμηνο

Κινητά και Διάχυτα Συστήματα. Ενότητα # 8: Εκλογή αρχηγού Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

ΗΥ 134. Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 1. Εισαγωγή. Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Προγραμματισμός συστημάτων UNIX/POSIX

Εργαστήριο Λειτουργικών Συστημάτων - Αλγόριθμοι Χρονοπρογραμματισμού. Εργαστηριακή Άσκηση

HY-486 Αρχές Κατανεμημένου Υπολογισμού

ΘΕΜΑΤΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΕΞΕΤΑΣΕΩΝ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Δέντρα Απόφασης (Decision(

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

Πρόγραμμα όρασης. Στη συνέχεια θα περιγράψουμε πώς δουλεύει το ρομπότ.

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

BΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΞΕΤΑΣΗ ΦΕΒΡΟΥΑΡΙΟΥ 2005

Θέμα Β. ΓΙΑ γ ΑΠΟ 1 ΜΕΧΡΙ 4. ΓΙΑ δ ΑΠΟ 1 ΜΕΧΡΙ 4. Α[γ,δ] 17 - (γ-1)*4 - δ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗ

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Μάθημα 7 ο. Αλγόριθμοι Χρονοδρομολόγησης

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΔΟΚΙΜΑΣΙΑ

Εργαστήριο 5 fork(), exec(), signals

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

make Προγραμματισμός II 1

Λειτουργικό Σύστημα: διαχείριση πόρων. Τι είναι ένα αρχείο ; Διαχείριση αρχείων. Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Τμήμα Πληροφορικής και Τηλεπικοινωνιών 2η Εργασία - Τμήμα: Περιττών Αριθμών Μητρώου Κ22: Λειτουργικά Συστήματα Χειμερινό Εξάμηνο 18 Ημερομηνία Ανακοίνωσης: Παρασκευή 26 Οκτωβρίου 2018 Ημερομηνία Υποβολής: Τετάρτη 21 Νοεμβρίου 2018 Ωρα 23:59 Εισαγωγή στην Εργασία: Στα πλαίσια της εργασίας θα πρέπει να γράψετε ένα πρόγραμμα το οποίο δημιουργεί νέες διεργασίες-παιδιά (children) με τη βοήθεια της εντολής συστήματος fork(). Τα παιδιά-διεργασίες συνθέτουν μια ιεραρχία διεργασιών που έχει τη μορφή ενός δυαδικού δέντρου (binary tree). Το δέντρο αυτό έχει εσωτερικούς κόμβους καθώς και κόμβους-φύλλα (leaf nodes). Ο σκοπός της άσκησης είναι η εκτέλεση ερωτημάτων (queries) σε ένα υψηλού-επιπέδου δυαδικό αρχείο εγγραφών και η ταξινόμηση των αποτελεσμάτων της αναζήτησης. Οι διεργασίες του δυαδικού δέντρου διεργασιών υλοποιούν την αναζήτηση εγγραφών στο αρχείο. Οι κόμβοι-φύλλα αναλαμβάνουν την αναζήτηση εγγραφών σε τμήματα του αρχείου, ενώ οι εσωτερικοί κόμβοι συνθέτουν τα αποτελέσματα που παίρνουν από τα παιδιά τους και τα προωθούν στους γονείς τους. Η τελική ταξινόμηση των αποτελεσμάτων γίνεται από το πρόγραμμα συστήματος sort(), αφού τελειώσει η διαδικασία της αναζήτησης. Στα πλαίσια αυτής της άσκησης θα κάνετε τα εξής: Δημιουργία ιεραρχίας διεργασιών με την κλήση συστήματος fork(). Εκτέλεση διαφόρων προγραμμάτων χρήστη/συστήματος από τις διεργασίες της ιεραρχίας. Χρήση ενός αριθμού από κλήσεις συστήματος (π.χ. fork(), exec*(), getpid(), getppid(), wait(), waitpid(), read(), write(), pipe(), mkfifo() κ.α.). Διαδικαστικά: Το πρόγραμμά σας θα πρέπει να γραφτεί σε C (ή C++ αν θέλετε αλλά χωρίς την χρήση STL/Templates) και να τρέχει στις μηχανές Linux workstations του τμήματος. Υπεύθυνοι για την άσκηση αυτή (ερωτήσεις, αξιολόγηση, βαθμολόγηση κλπ.) είναι ο κ. Στράτος Σκλεπάρης eskleparis+at-di, η κ. Αριάννα Τριανταφύλλου sdi1300179+at-di, και ο κ. Οδυσσέας Τρισπιώτης odytrisp+at-di. Παρακολουθείτε την ιστοσελίδα του μαθήματος http://www.di.uoa.gr/~ad/k22/ για επιπρόσθετες ανακοινώσεις αλλά και την ηλεκτρονική-λίστα (η-λίστα) του μαθήματος στο URL https://piazza.com/ uoa.gr/fall2018/k22/home Το πρόγραμμα σας (source code) πρέπει να αποτελείται από τουλάχιστον δυο (και κατά προτίμηση πιο πολλά) διαφορετικά αρχεία. Το πρόγραμμά σας θα πρέπει απαραιτήτως να κάνει χρήση separate compilation. Η Ιεραρχία των Διεργασιών : Το Σχήμα 1 δείχνει μια αντιπροσωπευτική ιεραρχία διεργασιών που το πρόγραμμά σας θα πρέπει να δημιουργήσει. Ο στόχος αυτής της ιεραρχίας είναι να βοηθήσει να γίνει αναζήτηση εγγραφών που πληρούν κάποια κριτήρια, από ένα (μεγάλο) αρχείο εγγραφών. Το αρχείο είναι σε binary format. Ολο το δυαδικό δένδρο έχει στόχο ένα κοινό σκοπό για τον οποίο δουλεύουν οι κόμβοι splitters/s και searchers με συνεργατικό τρόπο. Ετσι, οι κόμβοι εκτελούν διαφορετικά εκτελέσιμα προγράμματα ανάλογα με το ρόλο που έχουν: τα εκτελέσιμα και οι searcher(s) υλοποιούν την αναζήτηση, το root κάνει την ενορχήστρωση όλων των διεργασιών και το sort ταξινομεί το τελικό αποτέλεσμα. Γενικά, οι διεργασίες παίρνουν παραμέτρους από τους γονείς τους ώστε 1

root sort sm0 internal nodes sm1 sm2 height h internal nodes sm3 sm4 sm5 sm6 leaf nodes s0 s1 s2 s3 s4 s5 s6 s7 searcher nodes Σχήμα 1: Παράδειγμα ιεραρχίας διεργασιών να κάνουν την συγκεκριμένη δουλειά που τους έχει ανατεθεί και επίσης παράγουν κάποια αποτέλεσμα/-τα και στατιστικά τα οποία τα επιστρέφουν συνήθως στην διεργασία μητέρα τους. Λειτουργία Κόμβων: Οι λειτουργίες των διαφόρων κόμβων (διεργασιών) έχουν ως εξής: 1. leaf node: η διαδικασία λαμβάνει από την μητέρα της το όνομα του αρχείου, το εύρος της αναζήτησης (από ποια εγγραφή μέχρι ποια θα πρέπει ο συγκεκριμένος κόμβος να ψάξει) και τέλος την συνθήκη με την οποία γίνεται η αναζήτηση. Τα αποτέλεσμα θα πρέπει να περάσουν στην διαδικασία γονιός με την βοήθεια ενός απλού pipe ή ενός named pipe (FIFO). Επίσης με τον ίδιο τρόπο μπορούν να περάσουν στο γονιό στατιστικά για τον χρόνο εκτέλεσης του κόμβου. 2. node: μεταξύ άλλων παραμέτρων, η διαδικασία λαμβάνει από την μητέρα της το όνομα του αρχείου, το εύρος της αναζήτησης, τη συνθήκη με την οποία γίνεται η αναζήτηση όπως επίσης και το βάθος του (εναπομείναντος) δένδρου. Εάν το βάθος δεν είναι 1, η διαδικασία δημιουργεί δύο παιδιά που τρέχουν το ίδιο εκτελέσιμο. Ανάλογα με το τρόπο διαχείρισης εύρους αναζήτησης μπορεί το κάθε ένα από αυτά τα παιδιά να λαμβάνει το μισό εύρος αναζήτησης (και όλες τις άλλες απαιτούμενες παραμέτρους συμπεριλαμβανομένου και του νέου βάθους μειωμένου κατά 1). Αν το βάθος είναι 1, η διαδικασία δημιουργεί δύο παιδιά που όμως τώρα τρέχουν το εκτελέσιμο του leaf node (πάντα με τα σχετικά ορίσματα). Στο τέλος της λειτουργίας του, ένας κόμβος παραλαμβάνει τα αποτελέσματα των παιδιών του (με την βοήθεια των δύο υφιστάμενων pipes η named pipes FIFOs), τα συγχωνεύει και το νέο 2

σύνθετο αποτέλεσμα προωθείται στο γονιό. Στο γονιό προωθούνται επίσης στατιστικά για το χρόνο εκτέλεσης των παιδιών (πάλι με pipe/fifo) και οποιαδήποτε άλλη πληροφορία κρίνετε απαραίτητη. 3. root node: η αρχική αυτή διεργασία λειτουργεί σαν άγκυρα του δυαδικού δέντρου και κάνει την συνολική ενορχήστρωση του εγχειρήματος. Σε πρώτη φάση δημιουργεί την υψηλότερη διαδικασία merge η οποία με την σειρά της λειτουργεί όπως αναφέραμε παραπάνω. Οι κατάλληλες παράμετροι περνούν από την την root στην merge που βρίσκεται στην κορυφή του δυαδικού δένδρου. Μόλις η root συγκετρώσει όλα τα αποτελέσματα αναζήτησης, τα παραδίδει στην διαδικασία που διεκπεραιώνει το πρόγραμμα sort() που ταξινομεί τα αποτελέσματα και τα δίνει στο tty. Η διεργασία initial επίσης τυπώνει και τα απαραίτητα στατιστικά (δηλ. το μέσο χρόνο εκτέλεσης των παιδιών της) και έτσι ολοκληρώνεται η δουλειά της ιεραρχίας. 4. sort node: η διαδικασία αυτή ταξινομεί όλα τα αποτελέσματα της αναζήτησης με τη βοήθεια του προγράμματος συστήματος sort() Για την πλήρη περιγραφή του εν λόγω προγράμματος επικαλεστείτε στην γραμμή εντολής του tty σας: man 1 sort. Το εν λόγω πρόγραμμά λαμβάνει σαν είσοδο ASCII αρχεία και παράγει σχετική έξοδο. θεωρείστε ότι η ταξινόμηση γίνεται στην πρώτη κολόνα το αρχείου εισόδου. Για ευκολία Νέες διαδικασίες στην ιεραρχία δημιουργούνται με fork() και όταν αυτό είναι απαραίτητο το address space των νέων αυτών διεργασιών επικαλύπτεται με exec*() που θα πρέπει να δέχεται τα κατάλληλα ορίσματα όπως το υπό αναζήτηση αρχείο το εύρος αναζήτησης, το βάθος του δυαδικού δένδρου που πρέπει να δημιουργηθεί και οτιδήποτε άλλο είναι απαραίτητο. Για την επικοινωνία των διεργασιών με γονείς/παιδιά θα πρέπει να χρησιμοποιήσετε pipe(), mkfifo(), κλπ. Τέλος, όταν οι searchers τερματίζουν στέλνουν και ένα σήμα SIGUSR2 στο root. Ο τελευταίος μαζί με τα στατιστικά που τελικά παράγει επίσης παρέχει και τον αριθμό στο σημάτων SIGUSR2 που έχει λάβει από τις διαδικασίες- κόμβους στο επίπεδο φύλλων. Μορφοποίηση Δεδομένων στο Αρχείο Αναζήτησης: Το δυαδικό αρχείο αναζήτησής αποτελείται από εγγραφές που έχουν την εξής μορφοποίηση: Αριθμός Μητρώου τύπου long Ονομα τύπου char[20] Επίθετο τύπου char[20] Οδός Κατοικίας τύπου char[20] Αριθμός Κατοικίας τύπου int Ονομα Πόλης τύπου char[20] Ταχυδρομικός Τομέας τύπου char[6] Μισθός τύπου float Μορφοποίηση Εξόδου: Το αποτέλεσμα μιας επερώτησης που δεν είναι κενό, θα πρέπει μαζί με τις εγγραφές που βρίσκει το πρόγραμμά μας (σε μορφή ASCII) να παρέχει και τα εξής στατιστικά: Min, Max και μέσος όρος χρόνου εκτέλεσης για τις διαδικασίες searchers. 3

Min, Max και μέσος όρος χρόνου εκτέλεσης για τις διαδικασίες splitters/s. Turnaround Time για την ολοκλήρωση της επερώτησης. Γραμμή Κλήσης της Εφαρμογής: Η εφαρμογή μπορεί να κληθεί με τον παρακάτω αυστηρό τρόπο στην γραμμή εντολής (tty):./myfind h Height d Datafile -p Pattern -s όπου myfind είναι το εκτελέσιμο που θα δημιουργήσετε, Datafile είναι το binary αρχείο εισόδου δεδομένων. Height είναι το βάθος του πλήρους δυαδικού δέντρου αναζήτησης που θα δημιουργηθεί, με μέγιστη επιτρεπόμενη τιμή βάθους = 5. Η ελάχιστη τιμή βάθους που επιτρέπεται είναι 1 που σημαίνει ένα κόμβο splitter- και δύο παιδιά searcher που κάνουν αναζήτηση το καθένα στο μισό αρχείο, βάθος= 2 σημαίνει ένα κόμβο splitter- με δύο παιδιά splitter- που το καθένα έχει δύο παιδιά searcher που μπορεί να κάνουν αναζήτηση στο 1/4 του αρχείου το καθένα κτλ. Pattern είναι το (sub-)string το οποίο ψάχνουμε στο (δυαδικό) αρχείο δεδομένων (οποιοδήποτε πεδίο). Η εμφάνιση της σημαίας -s δηλώνει ότι οι κόμβοι searchers ψάχνουν τμήματα του αρχείου που είναι ανομοιόμορφα το πλήθος (skew) των εγγραφών που ψάχνουν. Αν υποθέσουμε ότι έχουμε 2 h searchers και το αρχείο Datafile έχει k εγγραφές, ο πρώτος searcher θα πρέπει να αναλάβει k 1/Σ 2h n=1n πρώτες εγγραφές, ο δεύτερος searcher k 2/Σ 2h n=1n εγγραφές που ακολουθούν, ο i th searcher k i/σ 2h n=1n εγγραφές που αντιστοιχούν, κλπ. Η μη εμφάνιση της σημαίας -s δηλώνει οτι όλοι οι searchers αναλαμβάνουν τμήματά του Datafile που έχουν τον ίδιο αριθμό από εγγραφές (δηλ. k/2 h ). Ολες οι παραπάνω σημαίες μπορούν να εμφανίζονται με οποιαδήποτε σειρά. Η έξοδος του προγράμματος σας θα πρέπει να γίνεται στο tty εκτέλεσης του προγράμματος. Χαρακτηριστικά του Προγράμματος που Πρέπει να Γράψετε: 1. Δεν μπορείτε να κάνετε pre-allocate οποιοδήποτε χώρο αφού η δομή(-ές) θα πρέπει να μπορεί(-ουν) να μεγαλώσει(-ουν) χωρίς ουσιαστικά κανέναν περιορισμό όσον αφορά στον αριθμό των εγγραφών που μπορούν να αποθηκεύσουν. Η χρήση στατικών πινάκων/δομών που δεσμεύονται στην διάρκεια της συμβολομετάφρασης του προγράμματος σας δεν είναι αποδεκτές επιλογές. 2. Για την δομή που θα υιοθετήσετε θα πρέπει να μπορείτε να εξηγήσετε (και να δικαιολογήσετε στην αναφορά σας) την πολυπλοκότητα που οι τεχνικές που υιοθετείτε παρουσιάζουν. 3. Πριν να τερματίσει η εκτέλεση της εφαρμογής, το περιεχόμενο των δομών απελευθερώνεται με σταδιακό και ελεγχόμενο τρόπο. 4. Αν πιθανώς κάποια κομμάτια του κωδικά σας προέλθουν από κάποια δημόσια πηγή, θα πρέπει να δώσετε αναφορά στη εν λόγω πηγή είτε αυτή είναι βιβλίο, σημειώσεις, Internet URL κλπ. και να εξηγήσετε πως ακριβώς χρησιμοποιήσατε την εν λόγω αναφορά. 5. Εχετε πλήρη ελευθερία να επιλέξετε το τρόπο με τον οποίο τελικά θα υλοποιήσετε βοηθητικές δομές. Τι πρέπει να Παραδοθεί: 1. Μια σύντομη και περιεκτική εξήγηση για τις επιλογές που έχετε κάνει στο σχεδιασμό του προγράμματος σας (2-3 σελίδες σε ASCII κειμένου είναι αρκετές). 2. Οπωσδήποτε ένα Makefile (που να μπορεί να χρησιμοποιηθεί για να γίνει αυτόματα το compile του προγράμματος σας). Πιο πολλές λεπτομέρειες για το (Makefile) και πως αυτό δημιουργείται δίνονται 4

στην ιστοσελίδα του μαθήματος. 3. Ενα tar-file με όλη σας την δουλειά σε έναν κατάλογο που πιθανώς να φέρει το όνομα σας και θα περιέχει όλη σας την δουλειά δηλ. source files, header files, output files (αν υπάρχουν) και οτιδήποτε άλλο χρειάζεται. Άλλες Σημαντικές Παρατηρήσεις: 1. Οι εργασίες είναι ατομικές. 2. Το πρόγραμμα σας θα πρέπει να τρέχει στα Linux συστήματα του τμήματος αλλιώς δεν μπορεί να βαθμολογηθεί. 3. Αν και αναμένεται να συζητήσετε με φίλους και συνεργάτες το πως θα επιχειρήσετε να δώσετε λύση στο πρόβλημα, αντιγραφή κώδικα (οποιαδήποτε μορφής) είναι κάτι που δεν επιτρέπεται και δεν πρέπει να γίνει. Οποιοσδήποτε βρεθεί αναμεμειγμένος σε αντιγραφή κώδικά απλά παίρνει μηδέν στο μάθημα. Αυτό ισχύει για όσους εμπλέκονται ανεξάρτητα από το ποιος έδωσε/πήρε κλπ. 4. Το παραπάνω ισχύει αν διαπιστωθεί έστω και μερική άγνοια του κώδικα που έχετε υποβάλει ή άπλα υπάρχει υποψία ότι ο κώδικας είναι προϊόν συναλλαγής με τρίτο/-α άτομο/α. 5. Προγράμματα που δεν χρησιμοποιούν separate compilation χάνουν αυτόματα 5% του βαθμού. 6. Σε καμιά περίπτωση τα Windows δεν είναι επιλέξιμη πλατφόρμα για την παρουσίαση αυτής της άσκησης. 5