ΚΑΛΑΜΠΟΚΗΣ ΕΥΑΓΓΕΛΟΣ 1115202100045
ΔΟΜΗ ΕΡΓΑΣΙΑΣ: /////////////////////////////////////////////////////////////////////////////////////////////////////// bin: περιέχει τα εκτελέσιμα αρχεία build: περιέχει τα αντικειμενικά αρχεία include: περιέχονται οι βιβλιοθήκες και οι βασικές δομές που χρειάστηκαν src: περιέχει τα .c αρχεία που είναι βασικά για την εργασία (server, commander, ProgDelay) tests,lib: είναι άδεια καθώς δεν χρησιμοποιήθηκαν Makefile README.md ///////////////////////////////////////////////////////////////////////////////////////////////////////
ΜΕΤΑΓΛΩΤΤΙΣΗ: /////////////////////////////////////////////////////////////////////////////////////////////////////// Η εργασία γίνεται compile τρέχοντας: make Τρέχοντας make clean καθαρίζονται τα παραγόμενα αρχεία που δημιουργούνται κατά τη διαδικασία της μεταγλώττισης του προγράμματος όπως τα αντικειμενικά και τα εκτελέσιμα ///////////////////////////////////////////////////////////////////////////////////////////////////////
ΕΝΕΡΓΟΠΟΙΗΣΗ ΚΑΙ ΕΚΤΕΛΕΣΗ ΕΝΤΟΛΩΝ: /////////////////////////////////////////////////////////////////////////////////////////////////////// Ενεργοποίηση server: ./bin/jobExecutorServer portnum bufferSize threadPoolSize
Ενεργοποίηση commander: ./bin/jobCommander serverName portNum jobCommanderInputCommand
Τα jobCommanderInputCommand είναι τα ακόλουθα:
1.issueJob job 2.setConcurrency Ν 3.stop jobID 4.poll 5.exit ///////////////////////////////////////////////////////////////////////////////////////////////////////
ΒΑΣΙΚΗ ΙΔΕΑ: /////////////////////////////////////////////////////////////////////////////////////////////////////// jobCommander.c: Το αρχείο αυτό αφού ενεργοποιηθεί ο server λαμβάνει μια εντολή εκ των 5 βασικών από τη γραμμή εντολών και αφου συνδεθέι με τον server τη μεταβιβάζει σε αυτόν παραμένοντας ενεργός μέχρι να λάβει κάποια απάντηση ανάλογα με την εντολή που έχει στείλει.
JobExecutorServer.c: Το αρχείο αυτό αποτελείται από 3 threads: Το main thread αναλαμβάνει τη σύνδεση με τους αντίστοιχους commanders, τη δημιουργία των αρχικών worker threads και τη δημιουργία του (detached) commander thread για κάθε job commander. Το commander thread λαμβάνει την ενολή που έχει μεταβιβαστεί και ανάλογα με το είδος της εντολής κάνει την αντίστοιχη δουλειά στέλνοντας και την απαραίτητη απάντηση στον commander και προσθέντοντας την εντολή στο buffer αν χρειάζεται. Τέλος τα worker threads αναλαμβάνουν πλήρως συγχρονισμένα πάντα μεταξύ τους και με το υπόλοιπο πρόγραμμα την εκτέλεση των εντολών και τη δημιουργία και διαγραφή των οutput αρχείων. ///////////////////////////////////////////////////////////////////////////////////////////////////////