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

Σχετικά έγγραφα
$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

50 Ketseo,Theoni Sarif,Omar 104

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

an:3 are:6 a:10

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

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

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

fall2018/k22/home m1436+at-di.

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

Kitchen Doormam. Floor with Tables. Restaurant Floorplan and Operation

Για το μέρος αυτό της άσκησης θα υλοποιήσετε μια εφαρμογή κελύφους η οποία θα χρησιμοποιείται ως εξής:

wget --post-file meme.jpg :9646

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

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

Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ Εαρινό Εξάμηνο

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

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που

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

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

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

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

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

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

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

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

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

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

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

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

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

Εργαστήριο Διοίκησης Παραγωγής & Έργων. Εισαγωγή στην προσομοίωση διεργασιών χρησιμοποιώντας το λογισμικό Extend

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

Α2. Να γράψετε τους αριθμούς 1-5 από τη Στήλη Α και δίπλα το γράμμα της Στήλης Β που δίνει τη σωστή αντιστοίχηση.

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

ΤΕΙ Κρήτης, Παράρτηµα Χανίων

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

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

Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη

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

Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών

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

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επανάληψης. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

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

Κεφάλαιο 4: Λογισμικό Συστήματος

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. «Τουρισμός Joomla Content management System»

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

Epsilon Net PYLON Platform

Ειδικά Θέματα Προγραμματισμού

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

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

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

Έκδοσης 2005 Π. Κεντερλής

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

Πρωτόκολλα Διαδικτύου

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System)

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

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

Χρησιμοποιούμε από το Λογισμικό Προσομοίωσης AnyLogic το αρχείο-μοντέλο Call Center.alp που υπάρχει στο φάκελο \models\call Center\

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

MYY703: Δίκτυα Υπολογιστών I Εργαστήρια

Θεματογράφος (ή ο βοηθός του Καθηγητή)

Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access)

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ ÊÁËÁÌÁÔÁ

Τι είναι υποπρόγραμμα; Τμήμα προγράμματος το οποίο επιτελεί ένα αυτόνομο υπολογιστικό έργο (γράφεται χωριστά από το υπόλοιπο πρόγραμμα)

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

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

ΕΡΓΑΣΤΗΡΙΟ 1: Εισαγωγή, Χρήσιμες Εφαρμογές

MEGASOFT ΤΜΗΜΑ ΤΕΧΝΙΚΗΣ ΥΠΟΣΤΗΡΙΞΗΣ. Οδηγός Σύνδεσης Ταμειακών Μηχανών Online

ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP

Θέματα διπλωματικών εργασιών σε. Συστοιχίες παράλληλης εξυηρέτησης εφαρμογών Διαδικτύου

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

Θεωρητικό Μέρος. 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); } }

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

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 7ο ΚΕΦΑΛΑΙΟ

ΣΥΝΟΛΟ ΣΕΛΙ ΩΝ: ΕΠΤΑ (7)

ΕΡΓΑΣΙΕΣ ΟΝΤΟΚΕΝΤΡΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία

Γ τάξη Τεχνολογικής Κατεύθυνσης Ενιαίου Λυκείου ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. ΔΟΜΗ ΕΠΙΛΟΓΗΣ Διδάσκων: ΔΟΥΡΒΑΣ ΙΩΑΝΝΗΣ

7.4 Πρωτόκολλο UDP. 3. Στη περίπτωση που ένα μήνυμα χωράει σε ένα τμήμα, χρησιμοποιούμε το πρωτόκολλο TCP.

Η γλώσσα προγραμματισμού C

ΕΓΧΕΙΡΙΔΙΟ ΜΑΘΗΤΗ. της Πλατφόρμας Τηλεκατάρτισης

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εργαλεία ανάπτυξης εφαρμογών internet Ι

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΕΡΓΑΣΙΩΝ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΤΟ ΛΟΓΙΣΜΙΚΟ EXTEND. 1 ο εργαστήριο Διοίκησης και Παραγωγής Έργων

Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων Σωτήρης Γυφτόπουλος

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

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

FTP - (File Transfer Protocol ) Πρωτόκολλο Μεταφοράς Αρχείων

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

ιαχείριση Τηλεφωνικών Κλήσεων

Interactive Power Point

Transcript:

Κ24: Προγραμματισμός Συστήματος 3η Εργασία Εαρινό Εξάμηνο 2017 Προθεσμία Υποβολής: Κυριακή 4 Ιουνίου 2017 Ωρα 23:59 Εισαγωγή στην Εργασία: Ο στόχος της εργασίας αυτής είναι να εξοικειωθείτε με την χρήση sockets και νημάτων (threads) στην δημιουργία μιας διαδικτυακής εφαρμογής σε περιβάλλον Linux. Επιπλέον στα πλαίσια της εργασίας θα πρέπει να συγχρονίσετε τα νήματα που η εφαρμογή σας θα χρησιμοποιήσει. Η εργασία σας θα υλοποιεί ένα σύστημα κατοπτρισμού επιλεγόμενης έντασης (selective-overhead mirroring) για αντιγραφή πολλαπλών απομακρυσμένων καταλόγων σε μία επιλεγμένη συσκευή. Το εν λόγω σύστημα κατοπτρισμού αποτελείται από μια σειρά από διαδικτυακά προγράμματα που όλα μαζί επιτυγχάνουν την επιθυμητή μεταφορά αρχείων. Επιμέρους προγράμματα θα πρέπει να κάνουν χρήση νημάτων για να επιτευχθεί η «παράλληλη» μεταφορά δεδομένων. Συνοπτική Περιγραφή: Το Σχήμα 1 παρουσιάζει την οργάνωση και την αλληλεπίδρασή εμπλεκομένων προγραμμάτων στην υλοποίηση του συστήματος. Το διαδικτυακό πρόγραμμα πελάτη Initiatior, μπορεί να επικοινωνήσει με διαδικασία κατοπτρισμού (Server) σε οποιαδήποτε μηχανή παρέχοντας όχι μόνο τις συσκευές αλλά και συγκεκριμένα στοιχεία των αντίστοιχων συστημάτων αρχείου που θα πρέπει να κατοπτριστούν. Ο χρήστης του Initiator παραθέτει ως παραμέτρους τις δικτυακές διευθύνσεις του Server και ενός η περισσότερων Servers, μαζί με μία παράμετρο ανοχής σε καθυστέρηση που θα πρέπει να επιδειχθεί από κάθε Server που συμμετάσχει στον κατοπτρισμό. Ο Server δέχεται μέσω δικτυακής σύνδεσης τις πληροφορίες για τις απομακρυσμένες συσκευές από τις οποίες θα πρέπει να αντλήσει τα αρχεία με την βοήθεια νημάτων που τα ονομάζουμε Managers. Τέλος ο Server με την βοήθεια ενός σταθερού αριθμού νημάτων τύπου worker μεταφέρει στον τοπικό του αποθηκευτικό χώρο τα αρχεία που διαθέτουν οι απομακρυσμένες συσκευές. Οι απομακρυσμένες συσκευές θα εκτελούν το πρόγραμμα Server, το οποίο είναι υπεύθυνο για την εξυπηρέτηση των αιτήσεων από τον Server όσον αφορά τη λίστα των διαθέσιμων αρχείων/καταλόγων αλλά και για τη μεταφορά των επιμέρους αρχείων (περιεχόμενο). Λειτουργική Κλήση και Περιγραφή των Εμπλεκομένων Προγραμμάτων: Ο Initiator συνδέεται με τον Server μεσώ δικτύου και μεταφέρει τις τοποθεσίες των Servers των οποίων τους διαθέσιμους καταλόγους θα πρέπει να αντιγράψει ο Server. Η κλήση του Initiator έχει ως εξής: $./Initiator -n <ServerAddress> -p <ServerPort> \\ -s <ServerAddress1:ServerPort1:dirorfile1:delay1, \\ ServerAddress2:ServerPort2:dirorfile2:delay2,...> 1. ServerAddress είναι η δικτυακή διεύθυνση της συσκευής όπου εκτελείται ο Server. Η παράμετρος μπορεί να είναι είτε όνομα είτε IP διεύθυνση, δηλαδή είτε linux23.di.uoa.gr είτε 195.134.65.24. 2. ServerPort είναι ο αριθμός της θύρας στην οποία ακούει ο Server στην συσκευή ServerAddress. Η παράμετρος είναι ακέραιος αριθμός. 1

Server worker1 fetching a specific FS item from a ServerX at a time Queue of Directories/Files Requests worker2 Initiator worker3 fetching a specific FS item from a ServerY at a time workerm Manager1 Manager2 Manager3 Manager4 ManagerN Server 1 Server 2 Server 3 Server 4 Server N Σχήμα 1: Επικοινωνία προγραμμάτων Initiator, Server, Server(s). 3. ServerAddressX είναι η δικτυακή διεύθυνση μιας απομακρυσμένης συσκευής όπου εκτελείται ένας Server. Η παράμετρος μπορεί να είναι είτε όνομα είτε IP διεύθυνση, δηλαδή είτε linux23.di.uoa.gr είτε 195.134.65.24. 4. ServerPortX είναι ο αριθμός της θύρας στην οποία ακούει ο Server στη συσκευή ServerAddressX. Η παράμετρος είναι ακέραιος αριθμός. 5. dirorfilex είναι το συμβολικό όνομα της οντότητας (κατάλογος η αρχείο) που θα πρέπει αναδρομικά να ανακτηθεί και όλα της τα περιεχόμενα (και η δομή) να κατοπτριστούν στον Server. 6. delayx είναι η καθυστέρηση που θα χρησιμοποιήσει ο Server στη συσκευή ServerAddressX κατά την αποστολή των αρχείων. Στα παραπάνω υποθέτουμε ότι σαν χρήστες γνωρίζουμε που υπάρχουν Servers και ποιο είναι το (πιθανό) περιεχόμενο σε σχέση με το σύστημά αρχείων που ο κάθε ένας εξυπηρετεί. Σε περίπτωση που ο Server δεν υφίσταται (δηλ. δεν τρέχει) ο χρήστης θα πρέπει να ενημερωθεί σχετικά. Επίσης όταν τερματιστεί η διαδικασία κατοπτρισμού, ο Initiator θα πρέπει να ενημερωθεί για τα στατιστικά της μεταφοράς π.χ. αριθμός μεταφερόμενων οντοτήτων συστήματος, συνολικό μέγεθος bytes που μεταφέρεται, μέσο μέγεθος και διασπορά μεγέθους αρχείων που έχουν μεταφερθεί καθώς και συνολικός αριθμός αρχείων/καταλόγων που έχουν μεταφερθεί. Η κλήση του Server έχει ως εξής: $./Server -p <port> -d <dirorfilename> 1. port είναι ο αριθμός της θύρας στην οποία θα ακούει ο Server. 2

2. <dirorfilename> είναι το pathname ενός καταλόγου ή/και αρχείου που διαθέτει η συσκευή προς αντιγραφή σε άλλες συσκευές. Ο Server θα δέχεται συνδέσεις και θα εξυπηρετεί δύο ειδών αιτήματα: 1. LIST <ServerID> <delay> Είναι η αρχική επικοινωνία του Server με ένα συγκεκριμένο Server. Η εντολή αυτή επιστρέφει τη λίστα των αρχείων/καταλόγων που ο Server εξυπηρετεί και παρέχει στον Server την delay στην οποία η μεταφορά περιεχομένου αρχείων και καταλόγων υπόκειται. Μετά την αποστολή της λίστας των αρχείων, κλείνει η σύνδεση μεταξύ Server και αντίστοιχου ManagerX. Σημειώνεται ότι αποστέλλεται ιεραρχικά όλη η δομή των καταλόγων και των αρχείων που διατίθεται. 2. FETCH <dirorfilename> Ο Server παρέχει στο worker που αναζητεί το περιεχόμενο του <dirorfilename>. Αυτό συμβαίνει αφού ο Server πρώτα θα καθυστερήσει την αποστολή του αρχείου/καταλόγου που ζητήθηκε κατά delay seconds. Σε περίπτωση που δεν υπάρχει τέτοιο αρχείο/κατάλογος, ένα μήνυμά λάθους επιστρέφεται. Η κλήση της λειτουργίας του Server έχει ως εξής: $./Server -p <port> -m <dirname> -w <threadnum> 1. port είναι ο αριθμός της θύρας στην οποία θα ακούει ο Server. 2. dirname είναι το pathname του καταλόγου κάτω από τον οποίο θα αποθηκεύονται οι απομακρυσμένοι κατάλογοι. Κάθε απομακρυσμένος κατάλογος θα αποθηκεύεται κάτω από τον κατάλογο dirname/content name/, όπου το content name θα προκύπτει από τη διεύθυνση και τη θύρα λειτουργίας του Server, για παράδειγμα linux03.di.uoa.gr 233, όπου linux03.di.uoa.gr είναι η διεύθυνση και 233 είναι η θύρα λειτουργίας του συγκεκριμένου Server. 3. threadnum είναι ο (σταθερός) αριθμός των νημάτων workers που δημιουργεί ο Server. Ο Server δημιουργεί δυο ειδών νήματα: Manager και worker. Τα Manager νήματα δημιουργούνται με την άφιξη ενός αιτήματος κατοπτρισμού από το Initiator και γενικά υπάρχει ένα τέτοιο νήμα για κάθε Server. Ο Server στην εκκίνηση του, δημιουργεί έναν αριθμό workers που λαμβάνεται ως όρισμα από τη γραμμή εντολής (threadnum). Οταν ο Server δεχθεί ένα αίτημα κατοπτρισμού από τον πελάτη Initiator, δημιουργεί τόσα Manager νήματα όσοι είναι και οι Servers που αναφέρονται στο αίτημα. Τα νήματα Manager δουλεύουν «παράλληλα» ως εξής: κάθε Manager επικοινωνεί με ένα Server. Θα στέλνει το αίτημα LIST με τις σχετικές παραμέτρους συμπεριλαμβανομένης και της επιθυμητής καθυστέρησης σε δευτερόλεπτα και θα λαμβάνει τη λίστα με τα αρχεία που εξυπηρετούνται. Καθώς ο Manager λαμβάνει τα αρχεία/καταλόγους, τα τοποθετεί σε ένα κοινό buffer που έχει πεπερασμένο μέγεθος. Τα στοιχεία (αιτήσεις) που ο εν λόγω buffer αποθηκεύει μπορεί να έχουν την μορφή: <dirorfilename, ServerAddress, ServerPort> Ο buffer διαμοιράζεται ανάμεσα σε όλα τα νήματα τύπου Manager και worker. Οταν ένας Manager τοποθετήσει και το τελευταίο dirorfilename στο buffer τερματίζει. Θα πρέπει να διαχειρίζεστε τον buffer σύμ- 3

φωνα με την λογική πολλαπλών παραγωγών/πολλαπλών καταναλωτών. Τα νήματα worker θα δουλεύουν παράλληλα ως εξής: κάθε νήμα worker θα αφαιρεί ένα στοιχείο από τον buffer εφόσον βέβαια υπάρχει τέτοιο στοιχείο. Για κάθε στοιχείο που ανασύρει από τον buffer, ο worker συνδέεται στον κατάλληλο Server και στέλνει ένα αίτημα FETCH με το dirorfilename. Μετά την ανάλογη καθυστέρηση που εισάγει ο Server, λαμβάνει το αρχείο, βρίσκει το μέγεθος του και αυξάνει τις διαμοιραζόμενες μεταβλητές bytestransferred και filestransferred, Ο Server θα χρησιμοποιεί μεταβλητές που οποιαδήποτε στιγμή μπορούν να δώσουν μια ακριβή εικόνα όσον αφορά στο πόσο έχει προχωρήσει μια μεταφορά. Για παράδειγμα η μεταβλητή numdevicesdone παρέχει τον τρέχοντα αριθμό συσκευών για τις οποίες έχει ολοκληρωθεί η μεταφορά. Αν η τιμή της numdevicesdone είναι ίση με τον αριθμό συσκευών από τους οποίους ζητά ο Initiator να γίνει η μεταφορά αρχείων, τότε το τελευταίο ενεργό νήμα worker θα σηματοδοτήσει μέ την condition variable alldone το γεγονός ότι όλα τα αρχεία από όλες τις συσκευές που ζητήθηκαν από τον Initiator πελάτη έχουν μεταφερθεί και η επεξεργασία του αιτήματος έχει ολοκληρωθεί. Ο Server θα επιστρέψει στον Initiator τα στατιστικά που υπάρχουν επαυξημένων με μέσο όρο μεγέθους μεταφορών και σχετική διασπορά. Στα προγράμματα σας, κοινές μεταβλητές που μοιράζονται ανάμεσα σε πολλαπλά νήματα θα πρέπει να προστατεύονται με τη χρήση mutexes. Τονίζεται πως το busy-waiting δεν είναι αποδεκτή λύση για τη παραμονή πρόσβασης στον κοινό buffer ανάμεσα στους Manager παραγωγούς και στους worker καταναλωτές. Γενίκευση της Άσκησης: Η παραπάνω αρχιτεκτονική μπορεί (με αλλαγές) να γενικευτεί ώστε ένα σύνολο από κόμβους να προσφέρει ταυτόχρονα όλες τις υπηρεσίες (να είναι δηλαδή και Server και Server). Αν επιλέξετε και προχωρήσετε στην επιτυχή γενίκευση της υλοποίησής σας, θα λάβετε ένα επιπλέον 15% του βαθμού της εργασίας. Ωστόσο η πρώτη σας και κύρια επιμέλεια είναι να δώσετε λύση στην βασική έκδοση της προγραμματιστικής άσκησης. Διαδικαστικά: Το πρόγραμμά σας θα πρέπει να γραφτεί σε C (ή C++ αλλά χωρίς την χρήση έτοιμων δομών της standard βιβλιοθήκης/stl) και να τρέχει στα Linux workstations του τμήματος. Το πρόγραμμα σας (source code) πρέπει να αποτελείται από τουλάχιστον δυο (και κατά προτίμηση πιο πολλά) διαφορετικά αρχεία. Η χρήση του separate compilation είναι επιτακτική! Η οργάνωση και η αναγνωσιμότητα (μαζί με την ύπαρξη σχολίων) του κώδικα περιλαμβάνονται στα κριτήρια βαθμολόγησης. Για επιπρόσθετες ανακοινώσεις, παρακολουθείτε το forum του μαθήματος στο piazza.com. Η πλήρης διεύθυνση είναι https://piazza.com/uoa.gr/spring2017/k24/home. Η παρακολούθηση του φόρουμ στο Piazza είναι υποχρεωτική. Τι πρέπει να Παραδοθεί: 1. Μια σύντομη και περιεκτική εξήγηση για τις επιλογές που έχετε κάνει στο σχεδιασμό του προγράμματος σας (1-2 σελίδες ASCII κειμένου είναι αρκετές) σε αρχείο README. 2. Οποιαδήποτε πηγή πληροφορίας, συμπεριλαμβανομένου και κώδικα που μπορεί να βρήκατε στο Διαδίκτυο ή αλλού θα πρέπει να αναφερθεί και στον πηγαίο κώδικά σας αλλά και στο παραπάνω README. 4

3. Ολη η δουλειά σας σε ένα tar-file (OnomaEponymoProject3.tar) που να περιέχει όλα τα source files, header files, Makefile. Άλλες Σημαντικές Παρατηρήσεις: 1. Οι εργασίες είναι ατομικές. 2. Οποιος υποβάλλει / δείχνει κώδικα που δεν έχει γραφτεί από την ίδια/τον ίδιο μηδενίζεται στο μάθημα. 3. Αν και αναμένεται να συζητήσετε με φίλους και συνεργάτες το πως θα επιχειρήσετε να δώσετε λύση στο πρόβλημα, αντιγραφή κώδικα (οποιαδήποτε μορφής) είναι κάτι που δεν επιτρέπεται. Οποιοσδήποτε βρεθεί αναμεμιγμένος σε αντιγραφή κώδικά απλά παίρνει μηδέν στο μάθημα. Αυτό ισχύει για όσους εμπλέκονται ανεξάρτητα από το ποιος έδωσε/πήρε κλπ. 5