50 Ketseo,Theoni Sarif,Omar 104

Σχετικά έγγραφα
an:3 are:6 a:10

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

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

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

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

fall2018/k22/home m1436+at-di.

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

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

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

Kitchen Doormam. Floor with Tables. Restaurant Floorplan and Operation

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

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

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

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

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

wget --post-file meme.jpg :9646

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

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

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

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

ΤΕΛΙΚΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ

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

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

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

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

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

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

cgi.di.uoa.gr/~mema. Nikos Chondros, Panagiotis Diamantopoulos, Yannis Pappas, and Christos Patsonakis.

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

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

ΥΛΟΠΟΙΗΣΗ ΠΡΟΤΥΠΩΝ ΕΠΙΚΟΙΝΩΝΙΑΣ ΜΕ ΤΗ ΒΙΒΛΙΟΘΗΚΗ JAVA.NET ΣΤΑ ΠΛΑΙΣΙΑ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΥ ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΟΥ ΤΕΕ

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

XAMPP Apache MySQL PHP javascript xampp

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

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Σχήμα 1: TCP αποστολέας με παράθυρο αποστολέα = 1

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

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

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

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσμία: Τετάρτη 23/11/2016, 21:00

Ethernet Ethernet ΙΕΕΕ CSMA/CD

Κεφάλαιο 7.3. Πρωτόκολλο TCP

14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

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

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

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

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

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

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

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο. Εργαστηριακή Άσκηση 1 17/01/2012

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

Εργαστήριο ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ UNIX

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

Αντικειμενοστρεφής Προγραμματισμός

Οδηγίες ρυθμίσεων ταμειακών μηχανών Sam 4s ER-230EJ, ER-420EJ, NR-300, NR-320 για την αποστολή ΓΓΠΣ

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

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

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

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

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Αρχές Δικτύων Επικοινωνιών. Επικοινωνίες Δεδομένων Μάθημα 4 ο

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

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

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

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

ΤΕΧΝΟΛΟΓΙΑ ΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

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

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

ΕΡΓΑΣΙΑ 2. Κατασκευάζοντας Ημερολόγια. Ημερομηνία Ανάρτησης: 23/02/2018 Ημερομηνία Παράδοσης: 13/03/2018, 09:00

Λειτουργικά Συστήματα. Οργάνωση Μαθήματος

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

4.1.1 Πρωτόκολλο TCP - Δομή πακέτου

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

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

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

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

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

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

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

PROXY SERVER. Άριστη πύλη διαχωρισμού μεταξύ του εσωτερικού δικτύου και του Internet.

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

Επεξεργασία Αρχείων Κειµένου

7.3 Πρωτόκολλο TCP. 1. Το TCP πρωτόκολλο παρέχει υπηρεσίες προσανατολισµένες σε σύνδεση. Σ Λ

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

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

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

ιεργασίες και Επεξεργαστές στα Κατανεµηµένων Συστηµάτων

1. Ξεκινώντας. 1.1 Τι είναι η Java. PDF created with FinePrint pdffactory Pro trial version

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

Transcript:

Κ24: Προγραμματισμός Συστήματος 3η Εργασία Εαρινό Εξάμηνο 2016 Προθεσμία Υποβολής: Κυριακή 5 Ιουνίου 2016 Ωρα 23:59 Εισαγωγή στην Εργασία: Ο στόχος της εργασίας αυτής είναι να εξοικειωθείτε με την χρήση sockets και νημάτων (threads) στην δημιουργία μιας διαδικτυακής εφαρμογής. Επιπλέον στα πλαίσια της εργασίας θα πρέπει να συγχρονίσετε τα νήματα που η εφαρμογή σας θα χρησιμοποιήσει. Καλείστε να υλοποιήσετε ένα πρόγραμμα server (bankserver) που θα κάνει εξομοίωση μιας λειτουργίας διαχείρισης τράπεζας. Το πρόγραμμα θα διατηρεί πληροφορία για ονόματα και τους λογαριασμούς τους στην κυρίως μνήμη. Κάθε λογαριασμός διατηρεί το τρέχον υπόλοιπό του και μια λίστα από τα ποσά (συνολικά, ανά λογαριασμό) που έχει λάβει από άλλους λογαριασμούς. Berenson,Byrgot 46 Abrams,Alan 400 Berenson,Byrgot 320 Delis,Alex 50 Ketseo,Theoni 40 Delis,Alex 105 Ketseo,Theoni 1025 Papadopoulos,Alex 31 Papadopoulos,Alex 345 Paskalis,Sarantis 755 Abrams,Alan 30 Paskalis,Sarantis 120 Sanos,Joel 6 Thomson,Helen 638 Rontogiannis,Panos 265 Friedman,John 21 Sarif,Omar 104 Thomson,Helen 45 Σχήμα 1: Πληροφορίες που διατηρούνται στον bankserver Ο πίνακας στα αριστερά του Σχήματος 1 είναι απλούστευση. Θα χρειαστείτε δομές για γρήγορη πρόσβαση σε τυχαίο λογαριασμό (π.χ. ένα hash table). Ο bankserver θα δέχεται εντολές από προγράμματα πελάτες (bankclients) μέσω συνδέσεων sockets. Τα προγράμματα πελάτες θα δίνουν εντολές για δημιουργία λογαριασμού με αρχικό υπόλοιπο, μεταφορά χρημάτων μεταξύ λογαριασμών και εκτύπωση πληροφοριών σχετικών με τους λογαριασμούς. Θα υπάρχει μία σύνδεση (socket) ανά πελάτη, αλλά πάνω από αυτή θα στέλνονται πιθανά πολλαπλές εντολές. Το πρόγραμμα bankserver αναλαμβάνει: Τη δημιουργία της αρχικής δομής που θα αποθηκεύονται οι πληροφορίες λογαριασμού και μεταφοράς ποσών. Τη λήψη εντολών από πελάτες (bankclients) που λειτουργούν ταυτόχρονα για τη διαχείριση των λογαριασμών. Την εκτέλεση των εντολών και την επιστροφή σε κάθε bankclient του όποιου αποτελέσματος (επιτυχία, αποτυχία, αδυναμία εκτέλεσης). Το πρόγραμμα bankclient αναλαμβάνει: Την αποστολή εντολής δημιουργίας νέου λογαριασμού με νέο όνομα, αρχικό υπόλοιπο. Την αποστολή εντολής μεταφοράς ποσού μεταξύ λογαριασμών 1

Την αποστολή εντολής λήψης πληροφορίας για το υπόλοιπο λογαριασμού/λογαριασμών. Την εμφάνιση των αποτελεσμάτων στο stdout. Περιγραφή του bankserver: Ο bankserver κατά την εκκίνηση του, θα περιμένει για εξωτερικές συνδέσεις σε μια θύρα (port) που θα καθορίζεται από τη γραμμή εντολών. Κάθε νέα σύνδεση που δέχεται ο bankserver μέσω δικτυακής επικοινωνίας (π.χ. κάθε νέο socket που επιστρέφει η accept για επικοινωνία με τον αντίστοιχο πελάτη) θα τοποθετείται σε μια ουρά εκτέλεσης. Η τοποθέτηση αυτή μπορεί να γίνεται από το βασικό νήμα του bankserver που ονομάζουμε master/administrative thread. Θεωρούμε ότι ο bankserver διαθέτει ένα thread pool από workers σταθερού μεγέθους. Το κάθε τέτοιο worker thread του pool αναλαμβάνει μία σύνδεση/πελάτη που προέρχεται από την ουρά εκτέλεσης. Κάθε τέτοιο worker thread είναι υπεύθυνο να εκτελέσει τις εντολές που λαμβάνει και να στείλει τις κατάλληλες απαντήσεις στον αντίστοιχο πελάτη, μέσω του socket. Οταν ένας πελάτης ολοκληρώσει τη δουλειά του, το αντίστοιχο worker thread που διεκπεραίωσε τις εντολές, ξαναγίνεται διαθέσιμο στο επίπεδο του bankserver. Στο σημείο αυτό, το εν λόγω νήμα επιστρέφει στο worker thread pool και περιμένει για να αναλάβει νέα σύνδεση από την ουρά εκτέλεσης όταν μια τέτοια σύνδεση/πελάτης υπάρχει ή εμφανιστεί. Επίσης θεωρούμε ότι η ουρά εκτέλεσης έχει ένα μέγιστο μέγεθος. Σε περίπτωση που η ουρά εκτέλεσης είναι κενή, τα διαθέσιμα worker threads θα πρέπει να περιμένουν. Σε περίπτωση που η ουρά εκτέλεσης έχει δεχθεί τουλάχιστον μια σύνδεση -κάτι που ο master/administrative thread θα πρέπει να γνωρίζει- ένας απο τους (διαθέσιμους) worker threads μπορεί να αναλάβει εργασία. Στο μάλλον απίθανο σενάριο υπό φυσιολογικές συνθήκες η ουρά να βρεθεί γεμάτη, ο πελάτης απλά θα μπλοκάρει/περιμένει μέχρι να εξυπηρετηθεί. Στο σχεδιασμό σας μπορείτε να υιοθετήσετε ένα η και πιο πολλούς master ή management threads. Περιγραφή του bankclient: Ο bankclient συνδέεται με τον bankserver μέσω διεύθυνσης IP και θύρας που καθορίζονται από τη γραμμή εντολών. Στη συνέχεια ξεκινάει να δέχεται εντολές είτε μέσω stdin είτε μέσω αρχείου εντολών και εκτυπώνει τις απαντήσεις που λαμβάνει από τον bankserver στο stdout. Λεπτομερείς Προδιαγραφές για Γραμμές Εντολής: Το πρόγραμμα bankserver εκτελείται από τη γραμμή εντολών ως εξής: $./bankserver -p <port> -s <thread pool size> -q <queue size> όπου: <port>: Η θύρα στην οποία θα ακούει το socket για εισερχόμενες συνδέσεις από πελάτες για εισαγωγή εντολών. <thread pool size>: Ο αριθμός των worker threads στο thread pool. <queue size>: Το μέγεθος της ουράς εκτέλεσης Το πρόγραμμα bankclient εκτελείται από τη γραμμή εντολών ως εξής: $./bankclient -h <server host> -p <server port> -i <command file> όπου: <server host>: Η συμβολική διεύθυνση (όνομα) του μηχανήματος του server. <server port>: Η θύρα στην οποία ακούει ο server για εξωτερικές συνδέσεις. <command file>: Το αρχείο που περιέχει εντολές που θα αποσταλούν προς τον server. Τα ορίσματα της γραμμής εντολών είναι υποχρεωτικά και για τα δύο εκτελέσιμα προγράμματα. Επιπλέον, τα ζευγάρια ορισμάτων μπορεί να δίνονται σε διαφορετική σειρά από αυτή της εκφώνησης. 2

Μηνύματα που ανταλλάσσονται: Ο bankclient δέχεται τις εξής εντολές: 1. add account <init amount> <name> [delay] Προσθέτει ένα λογαριασμό με αρχικό υπόλοιπο. 2. add transfer <amount> <src name> <dst name> [delay] Προσθέτει μεταφορά ποσού μεταξύ δύο λογαριασμών. 3. add multi transfer <amount> <src name> <dst name1> <dst name2>... [delay] Προσθέτει μεταφορά ποσού από ένα λογαριασμό σε πολλούς. 4. print balance <name> Επιστρέφει το υπόλοιπο του λογαριασμού. 5. print multi balance <name1> <name2>... Επιστρέφει τα υπόλοιπα πολλών λογαριασμών. 6. sleep <time> Καθυστερεί τη μετάδοση της επόμενης εντολής στον bankserver 7. exit Τερματίζει το πρόγραμμα πελάτη bankclient. όπου: <name>: Το χαρακτηριστικό όνομα λογαριασμού. <init amount>: Το αρχικό υπόλοιπο του λογαριασμού. <delay>: Η ελάχιστη διάρκεια της επεξεργασίας της εντολής από τον server σε msec. <src name>: Ο λογαριασμός από τον οποίο πραγματοποιείται η μεταφορά. <dst name>: Ο λογαριασμός στον οποίο πραγματοποιείται η μεταφορά. <sleep>: Ο χρόνος σε msec που θα πρέπει να περιμένει ο bankclient πριν στείλει την επόμενη εντολή στον bankserver. Η παράμετρος delay στις πρώτες 3 εντολές είναι προαιρετική. Ολες οι άλλες παράμετροι είναι υποχρεωτικές. Το νόημα της παραμέτρου delay είναι ότι εξομοιώνεται καθυστέρηση ενός πραγματικού συστήματος. Δηλαδή θα πρέπει ο εξομοιωτής σας (δηλαδή ο bankserver) να συμπεριφέρεται σαν πραγματικά η εντολή να παίρνει delay msec για να εκτελεστεί. Συγκεκριμένα αυτό σημαίνει ότι αν κλειδώνετε κάποια δομή για ταυτόχρονη προσπέλαση από πολλά νήματα, θα πρέπει να υπάρχει αντίστοιχη καθυστέρηση ανάμεσα στο κλείδωμα και το ξεκλείδωμα. Η 6η sleep και η 7η εντολή exit εκτελούνται τοπικά στον bankclient. Ολες οι άλλες εντολές μεταδίδονται στον bankserver. Ο bankserver μπορεί να απαντήσει με τα εξής μηνύματα: 1. Για την εντολή add account: Success. Account creation (name:init amount) Error. Account creation failed (name:init amount) 2. Για την εντολή add transfer: Success. Transfer addition (src name:dst name:amount[:delay]) Error. Transfer addition failed (src name:dst name:amount[:delay]) 3. Για την εντολή add multi transfer: 3

Success. Multi-Transfer addition (src name:amount[:delay]) Error. Multi-Transfer addition failed (src name:amount[:delay]) 4. Για την εντολή print balance: Success. Balance (name:amount) Error. Balance (name) 5. Για την εντολή print multi balance: Success. Multi-Balance (name1/amount1:name2/amount2:...) Error. Multi-Balance (name1:name2:...) 6. Για οποιαδήποτε άλλη είσοδο/εντολή: Error. Unknown command Σημαντικές Οδηγίες: Η βασική πρόκληση της εργασίας είναι να υποστηρίξετε γρήγορη πρόσβαση στους λογαριασμούς (δηλ. σε τυχαίο λογαριασμό) και παραλληλισμό μεταξύ των νημάτων. Δηλαδή η ιδεώδης λύση δεν θα περιέχει μία και μόνο κλειδαριά για ολόκληρη τη δομή που κρατάει τους λογαριασμούς, αλλά αρκετές μικρότερες και ανεξάρτητες κλειδαριές. Για να υποστηρίξετε κάτι τέτοιο, αν μια λειτουργία επηρεάζει πολλούς λογαριασμούς, θα πρέπει να προστατευθούν όλοι από ταυτόχρονη πρόσβαση πολλών νημάτων. Η κάθε εντολή πρέπει να συμπεριφέρεται σαν αδιαίρετη μονάδα. Για παράδειγμα αν υπάρχει σε εξέλιξη μια εντολή του τύπου add multi transfer και πριν τελειώσει η εν λόγω εντολή φτάσει μια εντολή print multi balance, δεν πρέπει η δεύτερη να φαίνεται σαν να έγινε στη μέση της πρώτης (με κάποιους λογαριασμούς ανανεωμένους και κάποιους όχι). Φυσικά η λύση σας θα πρέπει να εξασφαλίζει ότι το πρόγραμμα δεν έχει race conditions, δηλαδή δεν βλέπει ασυνεπή δεδομένα (π.χ. ατελείς δομές) σε χαμηλό επίπεδο και δεν έχει deadlock. Διαδικαστικά: Το πρόγραμμά σας θα πρέπει να τρέχει στα μηχανήματα Linux της σχολής. Για επιπρόσθετες ανακοινώσεις, παρακολουθείτε το forum του μαθήματος στο piazza.com για να δείτε ερωτήσεις/απαντήσεις/διευκρινήσεις που δίνονται σχετικά με την άσκηση. Η παρακολούθηση του φόρουμ στο piazza.com είναι υποχρεωτική. Τι πρέπει να Παραδοθεί: 1. Ολη η δουλειά σας σε ένα tar-file που να περιέχει όλα τα source files, header files και Makefile. Προσοχή: φροντίστε να τροποποιήσετε τα δικαιώματα αυτού του αρχείου πριν την υποβολή, π.χ. με την εντολή: $ chmod 644 OnomaEponymoProject3.tar Για πιο πολλές λεπτομέρειες δείτε τη σελίδα του μαθήματος. 2. Ενα README (απλό text αρχείο) με κάποια παραδείγματα μεταγλώττισης και εκτέλεσης του προγράμματός σας. Επίσης, μπορείτε να συμπεριλάβετε άλλες διευκρινίσεις που κρίνετε απαραίτητες (για τυχόν παραδοχές που έχετε κάνει, κτλ.). 4

3. Οποιαδήποτε πηγή πληροφορίας, συμπεριλαμβανομένου και κώδικα που μπορεί να βρήκατε στο Διαδίκτυο θα πρέπει να αναφερθεί και στον πηγαίο κώδικά σας αλλά και στο παραπάνω README. Τι θα Βαθμολογηθεί: 1. Η συμμόρφωση του κώδικά σας με τις προδιαγραφές της άσκησης. 2. Η οργάνωση και η αναγνωσιμότητα (μαζί με την ύπαρξη σχολίων) του κώδικα. 3. Η χρήση Makefile και η κομματιαστή σύμβολο-μετάφραση (separate compilation). Άλλες Σημαντικές Παρατηρήσεις: 1. Οι εργασίες είναι ατομικές. 2. Οποιος υποβάλλει/δείχνει κώδικα που δεν έχει γραφτεί από την ίδια/τον ίδιο μηδενίζεται στο μάθημα. 3. Αν και αναμένεται να συζητήσετε με φίλους και συνεργάτες το πως θα επιχειρήσετε να δώσετε λύση στο πρόβλημα, αντιγραφή κώδικα (οποιασδήποτε μορφής) είναι κάτι που δεν επιτρέπεται και δεν πρέπει να γίνει. Οποιοσδήποτε βρεθεί αναμεμειγμένος σε αντιγραφή κώδικα απλά παίρνει μηδέν στο μάθημα. Αυτό ισχύει για όλους όσους εμπλέκονται, ανεξάρτητα από το ποιος έδωσε/πήρε κλπ. 4. Το πρόγραμμά σας θα πρέπει να γραφτεί σε C ή C++. 5