1 Κλήση Απομακρυσμένων Διεργασιών (Remote Procedure Call - RPC) Γεωργόπουλος Άλκης Κολωνιάρη Γεωργία Κοντογιώργης Τάσος Λεοντιάδης Ηλίας Πετράκης Γιάννης
2 Βασική Ιδέα Να επιτραπεί στα προγράμματα να καλούν διαδικασίες που εκτελούνται σε διαφορετικές μηχανές. Διεργασία στη μηχανή Α καλεί διαδικασία στη μηχανή Β: Η εκτέλεση της διεργασίας στην Α αναστέλλεται και η εκτέλεση πραγματοποιείται στη Β Πληροφορίες μπορούν να δοθούν από την καλούσα και την καλούμενη με τη μορφή παραμέτρων ή και να επιστραφούν σαν το αποτέλεσμα της διαδικασίας. Ο προγραμματιστής δεν γνωρίζει για οποιαδήποτε μεταβίβαση μηνύματος πραγματοποιηθεί.
3 Βασική RPC Λειτουργία Πυρήνας Μεταδιδόμενο μήνυμα μέσα στο δίκτυο Μηχανή ΕξυπηρετούμενουΜηχανή Εξυπηρέτη Ψευδορουτίνα Εξυπηρετούμενου Ψευδορουτίνα Εξυπηρέτη ΕξυπηρέτηςΕξυπηρε- τούμενος Κλήση Επιστροφή Τακτοποίηση Παραμέτρων Αποτακτο- ποίηση Παραμέτρων Αποτακτοποίηση αποτελέσματος Τακτοποίηση Αποτελέσματος
4 Client stub Διαφορετική έκδοση της απομακρυσμένης διαδικασίας Δεν τοποθετεί τις παραμέτρους σε καταχωρητές και δεν ζητάει δεδομένα Τακτοποιεί τις παραμέτρους σε μήνυμα και ζητά από τον πυρήνα να το στείλει στον εξυπηρέτη. Παίρνει το αποτέλεσμα και το προωθεί στον εξυπηρετούμενο
5 Server stub Συνδέεται με την πραγματική διεργασία εξυπηρέτη Περιμένει για εισερχόμενα μηνύματα Αποτακτοποιεί τις παραμέτρους από το μήνυμα που της έστειλε η ψευδορουτίνα εξυπηρετούμενου Παίρνει τις παραμέτρους και καλεί την πραγματική διεργασία εξυπηρέτη Τακτοποιεί το αποτέλεσμα και το στέλνει στον εξυπηρετούμενο
6 Βήματα Εκτέλεσης Κλήσης RPC 1. Η διαδικασία του εξυπηρετούμενου καλεί την ψευδορουτίνα εξυπηρετούμενου με τον συνηθισμένο τρόπο 2. Η ψευδορουτίνα εξυπηρετούμενου σχηματίζει ένα μήνυμα προκαλώντας παγιδεύσεις στον πυρήνα. 3. Ο πυρήνας στέλνει το μήνυμα στον απομακρυσμένο πυρήνα. 4. Ο απομακρυσμένος πυρήνας παραδίδει το μήνυμα στην ψευδορουτίνα εξυπηρέτη. 5. Η ψευδορουτίνα εξυπηρέτη παίρνει τις παραμέτρους από το μήνυμα και καλεί τον εξυπηρέτη.
7 Βήματα Εκτέλεσης Κλήσης RPC 6. Ο εξυπηρέτης ολοκληρώνει την εκτέλεση του και επιστρέφει τα αποτελέσματα στην ψευδορουτίνα. 7. Η ψευδορουτίνα εξυπηρέτη σχηματίζει μηνύματα με τα αποτελέσματα προκαλώντας παγιδεύσεις στον πυρήνα. 8. Ο απομακρυσμένος πυρήνας στέλνει το μήνυμα στον πυρήνα του εξυπηρετούμενου. 9. Ο πυρήνας του εξυπηρετούμενου παραδίδει το μήνυμα στην ψευδορουτίνα εξυπηρετούμενου. 10. Η ψευδορουτίνα εξυπηρετούμενου παίρνει τα αποτελέσματα και τα επιστρέφει στον εξυπηρετούμενο.
8 Υλοποίηση Έστω η παρακάτω συνάρτηση που παίρνει σαν όρισμα έναν αριθμό και επιστρέφει το τετράγωνο του. int square(int num){ return num*num; } Θα παρουσιαστεί ο τρόπος μετατροπής του προγράμματος με αυτήν την τοπική κλήση συνάρτησης σε απομακρυσμένη κλήση της συνάρτησης
9 Protocol Definition File Το πρώτο βήμα είναι η δημιουργία του αρχείου με τους ορισμούς Η κατάληξη του αρχείου είναι.x Περιέχεται ο ορισμός του τύπου της επιστρεφόμενης τιμής και του τύπου των ορισμάτων square.x program SQUARE{ version FIRST{ int square(int)=1; }=1; }=0x ;
10 rpcgen Αφού έχει δημιουργηθεί το αρχείο με τους ορισμούς καλούμε την εντολή rpcgen –C –a square.x Μετά το τρέξιμο δημιουργούνται τα ακόλουθα αρχεία: square.h: υπάρχουν ορισμοί. Περιέχεται σε όλα τα παρακάτω αρχεία. square_xdr.c: καθορίζεται η μορφή αναπαράστης των δεδομένων. square_clnt.c και square_svc.c : είναι οι ψευδορουτίνες εξυπηρετούμενου και εξυπηρέτη
11 Συνέχεια… square_client.c Tο αρχείο στο οποίο θα γραφεί ο κώδικας για τον client. Περιέχει έτοιμο τον κώδικα για τη δημιουργία του client Περιέχει έτοιμες τις κλήσεις για τις συναρτήσεις που εκτελούνται στον server (οι οποίες καθορίζονται στο.x αρχείο). Στο παράδειγμα μας η συνάρτηση square square_server.c Είναι το αρχείο στο οποίο θα γραφεί ο κώδικας για τις λειτουργίες του server οι οποίες ορίζονται στο.x αρχείο Περιέχει τον σκελετό των συναρτήσεων
12 Περιγραφή του συστήματος ηλεκτρονικής ψηφοφορίας Εφαρμογή client-server με τη χρήση RPC
13 Ανάλυση απαιτήσεων της εφαρμογής Κάθε ψηφοφόρος έχει ένα μοναδικό id. Τα ids, τα ονόματα των υποψηφίων και οι ψήφοι ανά υποψήφιο αποθηκεύονται στον server. Η εφαρμογή προσφέρει δυνατότητα επαναφοράς από σφάλματα στο server, λόγω της χρήσης αρχείων για την αποθήκευση όλων των δεδομένων του συστήματος.
14 Η εφαρμογή vote_client Όταν ο client συνδέεται στον server εμφανίζεται το ακόλουθο μενού στην οθόνη του: 1. Vote 2. Results 3. Exit ?
15 Η εφαρμογή vote_server Στον server αποθηκεύονται τα αρχεία: candidates που περιέχει: το πλήθος των ψηφοφόρων. το πλήθος των υποψηφίων τα ονόματα των υποψηφίων votes: με τις ψήφους ανά υποψήφιο ενημερώνεται κάθε φορά που καταχωρείται μία επιτυχής ψήφος
16 Συνέχεια... voters: Για κάθε ψηφοφόρο: τον αυξοντά αριθμό του έναν τυχαίος κωδικός παραγώμενο από τον server Αν έχει ψηφίσει η όχι. voters.txt: με τους κωδικούς των ψηφοφόρων, που παράγονται από τη συνένωση του αύξοντα αριθμού του και του τυχαίου κωδικού που είναι αποθηκευμένα στο αρχείο voters. Υποθέτουμε ότι οι κωδικοί μοιράζονται στους ψηφοφόρους.
17 Η επιλογή Vote Client Ζητείται από τον ψηφοφόρο το id του. Τυπώνεται στην οθόνη μια λίστα με τους υποψηφίους Ζητείται να ψηφίσει κάποιον. Ο server θα του επιστρέψει έναν κωδικό λάθους / επιτυχίας. Server O server ελέγχει την σωστή διεξαγωγή της ψηφοφορίας και στέλνει τα κατάλληλα μηνύματα. Αν το pin (id) είναι σωστό ή όχι. (αρχείο voters) Αν υπάρχει ο υποψήφιος. (αρχείο candidates) Αν έχει ήδη ψηφίσει ο συγκεκριμένος ψηφοφόρος. (αρχείο voters) Αν η ψήφος καταχωρήθηκε με επιτυχία. Αν η ψηφοφορία είναι επιτυχής οι αλλαγές γράφονται αμέσως στα αρχεία του server.
18 Vote Screen ***************MENU***************** 1. Vote 2. Results 3. Exit ?. 1 Give your id:4677 ********CANDIDATES*********** 1: Ilias Leontiadis 2: Tasos Kontogiorgis 3: Georgia Koloniari 4: Alkis Georgopoulos 5: Giannis Petrakis Give candidate number:5 Vote Succeeded
19 Η επιλογή Results Client O client ζητάει να δει τα μέχρι τότε αποτελέσματα Καλείται η Remote procedure results. Server Διαβάζει το αρχείο votes που περιέχει τα μέχρι στιγμής αποτελέσματα Δημιουργεί ένα string με τα αποτελέσματα: Σύνολο ψήφων Όνομα υποψηφίων Αριθμός ψήφων ανά υποψήφιο Ποσοστά Και το επιστρέφει στον client.
20 Results Screen Voted: 7 ID Name Votes % 1. Ilias Leontiadis % |** | 2. Tasos Kontogiorgis % |***** | 3. Georgia Koloniari 0 0.0% | | 4. Alkis Georgopoulos 0 0.0% | | 5. Giannis Petrakis % |******* | 6. Evagelia Pitoura % |** | 7. Lefko 0 0.0% | |