maryxan / SystemProgramming-Project3

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

K24: SYSTEM PROGRAMMING  
3η εργασία - Εαρινό εξάμηνο 2020


Ξανθοπούλου Μαρία 
Α.Μ. : 1115201400300


1.  Αρχεία που παραδίδονται

Μέσα στον φάκελο .tar.gz περιέχονται 21 αρχεία ,18 εκ των οποίων αποτελούν τα αρχεία .c και .h ,ένα queryfile, ένα Makefile καθώς και αυτό το README(σε txt και pdf). Επίσης περιέχεται 1 φάκελος input ο οποίος έχει φτιαχτεί τρέχοντας το script μου, ο οποίος περιέχει ένα μικρό dataset (δείτε στο 2).


2. Εκτέλεση προγράμματος

Για την εκτέλεση του προγράμματος κάνουμε compile με την εντολη make και έπειτα ακολουθούμε την μορφή:

server : ./whoServer -q 8000 -s 8060 -w 5 -b 20 με τα inputs που επιθυμούμε,

client : ./whoClient -q queryfile -w 30 -sp 8000 -sip 127.0.0.1 με τα inputs που επιθυμούμε,

master : make kai meta ./master -w 5 -b 512 -s 127.0.0.1 -p 8060 -i ./input με τα inputs που επιθυμούμε.

!! Το πρόγραμμα ΔΕΝ τρεχει με μικρό buffersize και με μεγάλο input !!
Έχω συμπεριλάβει έναν δικό μου φάκελο με λίγα inputs ο οποίος έχει φτιαχτεί με το script για τον οποίο το πρόγραμμα τρέχει κανονικά.

Το πρόγραμμα δοκιμάστηκε σε περιβάλλον linux και τρέχει και στα μηχανήματα της σχολής.  

3. Τι υλοποιήθηκε

Από τα ζητούμενα της άσκησης υλοποιήθηκαν οι λειτουργίες του master - server - client σε localhost.

Το πρόγραμμα δοκιμάστηκε και σε διαφορετικά μηχανήματα αλλα δεν λειτουργεί κανονικα. Μπορουν να γίνουν συνδέσεις απο διαφορετικά μηχανήματα ανάμεσα σε server - workers για την αποστολή των statistics και των port και από sever - client για την αποστολή των query (το προβλημα είναι όταν ο client παει να συνδεθεί στους workers,και ενώ χρησιμοποιώ την getpeerbyname λόγω χρόνου δεν πρόλαβα να το διορθώσω.)


ΔΕΝ ΥΛΟΠΟΙΗΘΗΚΑΝ : η εντολή /topk-AgeRanges και οι λειτουργίες με οποιoδήποτε signal.


4.  Δομές / Σχεδιαστικές επιλογές

Οι δομές που υλοποιήθηκαν είναι οι δομές της άσκησης 1. Ο κάθε worker έχει τις δικές του δομές δεδομένων,2 linked lists μια για τις ιώσεις και μια για τις χώρες όπου και στις 2 περιπτώσεις κάθε κόμβος της λίστας θα αποθηκεύσει μια διαφορετική ίωση ή χώρα καθώς και ένα AVL tree για κάθε κόμβο της λίστας. Επίσης υλοποιήθηκε και ο κυκλικός buffer.

 
5. Περιγραφή του προγράμματος

Αρχικά ξεκινάμε τον server ο οποίος φτιάχνει τα ζητούμενα threads (το main και τα "others") , και περιμένει συνδέσεις απο τους workers και τον client. Όταν ξεκινήσουν οι workers o parent κάνει ολη τη διδικασία της ασκησης 2 , και οι workers γεμίζουν τις δομές δεδομένων τους. Συνδέονται στον server ο οποίος για κάθε fd που παίρνει το main thread το βάζει στον κυκλικό buffer ( τα other theads διαβάζουν απο αυτόν) και στέλνουν τα στατιστικά τα οποία είναι γραμμένα σε αρχείο και το μοναδικό port number τους (έχει γίνει bind στο port 0). Διατηρούν ανοιχτό το connection και περιμένουν τα query. Ο server αποθηκεύει τα ports σε πίνακα. Έπειτα ξεκινάει ο client και φτιάχνει τα threads τα οποία με cond variable μπλοκάρουν. Όταν τα φτιάξει όλα τα κάνει release και το κάθε ένα στέλνει την εντολή και περιμένει απάντηση. Τερματίζει όταν έχουν απαντήσει όλα. O server τερματίζει με Ctrl+ C και οι workers με /exit. Για τις κοινές μεταβλητές ανάμεσα σε νήματα χρησιμοποιήθηκαν mutexes και condition variables.

About


Languages

Language:C 100.0%