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

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Από τη C στη C++ Hy240b project 2014 Phase 1.
Advertisements

Λειτουργικό Σύστημα (Operating System) 1o μέρος
ΧΡΟΝΟΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΔΙΕΡΓΑΣΙΩΝ
Λογισμικο συστηματοσ Κεφάλαιο 4ο
Κληρονομικότητα. Εισαγωγή  Κληρονομικότητα (Inheritance) καλείται ο μηχανισμός με τον οποίο μία νέα κλάση που ονομάζεται παράγωγη (derived class) δημιουργείται.
Νήματα στη Java Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
Λειτουργικά Συστήματα
ΛΟΓΙΣΜΙΚΟ ΣΥΣΤΗΜΑΤΟΣ Κεφάλαιο 4 ο Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
Λειτουργικό Σύστημα 2ο μέρος.
Κεφάλαιο 1ο: ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΤΩΝ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
ΕΠΙΚΟΙΝΩΝΙΑ ΑΝΘΡΩΠΟΥ – ΜΗΧΑΝΗΣ Εαρινό Εξάμηνο 2007 Παρουσίαση Εργαλείου Ανάπτυξης JBuilder Τσουρού Σταυρούλα, ΑΜ 708 Μαδεμλής Ιωάννης, ΑΜ 669.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα.
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
 Αυδίκου Χριστίνα  Γιουμούκης Παναγιώτης  Κιντσάκης Θάνος  Πάπιστας Γιάννης.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 11: Intro to Applets Εβδομάδα 11: Εισαγωγή στα Applets.
NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4 1.  Ένα thread έχει: ID, program counter, register set, stack  Μοιράζεται με τα άλλα threads της ίδιας διεργασίας.
Νήματα Οι διεργασίες έχουν τα παρακάτω συστατικά:
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
Κεφάλαιο 11.2 Sockets.
Η ΕΚΤΕΛΕΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΧΡΗΣΤΗ ΑΠ’ ΤΟΝ Η/Υ ΤΟΜΕΑΣ ΤΕΧΝΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Δ.ΙΕΚ ΠΑΤΡΑΣ.
Διαχείριση μνήμης Υπόβαθρο Εναλλαγή Συνεχής κατανομή Σελιδοποίηση
ΣΥΝΑΡΤΗΣΕΙΣ.
Πρότυπα Σχεδίασης Design Patterns Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμ. Εφ. Πληροφορικής.
Κατανεμημένα Συστήματα με Java
Ποιότητα Λογισμικού Ενότητα 3: Σουίτες Ελέγχων. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
Ποιότητα Λογισμικού Ενότητα 2: Παραμετρικοί έλεγχοι στο JUnit. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής.
Templates Standard Template Library (STL) Exceptions Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμήμα Εφαρμοσμένης Πληροφορικής.
Applets Εκμεταλλεύονται τo γραφικό υπόβαθρο που παρέχουν οι browsers, έχοντας έτσι τη δυνατότητα προβολής γραφικών και τη δυνατότητα υλοποίησης ενός γραφικού.
JAVA: Threads Θ. Βαρβαρίγου Καθηγ. ΕΜΠ Τηλ
RPC Multithreaded voting system Γεωργόπουλος Άλκης Κολωνιάρη Γεωργία Κοντογιώργης Τάσος Λεοντιάδης Ηλίας Πετράκης Γιάννης.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Tomcat Θ. Βαρβαρίγου Καθηγήτρια ΕΜΠ Τηλ
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
Applets Εκτελούνται από τον appletviewer και από Java enabled web browsers Εκμεταλλεύονται τo γραφικό υπόβαθρο που παρέχουν οι browsers, έχοντας έτσι τη.
Διεργασίες.
Βασικά στοιχεία της Java
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
Κεφάλαιο 3 Τύποι Δεδομένων - Τελεστές. Πρωτογενείς τύποι δεδομένων: int, float, double, chars ΤύποςΌνομαΜέγεθος byte 8-bit signed, short 16-bit.
Εισαγωγή στη Java (Μέρος B’) Για όσους γνωρίζουν C++ Βασίλης Στούμπος
Νήματα με την χρήση των Posix Threads (pthreads)‏.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 8: Κατασκευαστές. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Κωνσταντίνος Αντωνής © 2014Διαδικτυακός και Ταυτόχρονος Προγραμματισμός Ομοιόμορφη Αποδοτική Διαχείριση του Ταυτοχρονισμού των Εξυπηρετητών 1.
Αντικειμενοστραφής Προγραμματισμός Ι
ΠΑΡΑΔΕΙΓΜΑ: ΤΑ ΕΠΙΠΕΔΑ ΥΛΙΚΟΥ – ΛΟΓΙΣΜΙΚΟΥ ΣΕ ΕΝΑΝ ΥΠΟΛΟΓΙΣΤΗ.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Διαχείριση Πόρων (1/10) Εισαγωγή στην Πληροφορκή 1 Στα πρώτα χρόνια των υπολογιστών, όπου μόνο ένα πρόγραμμα είχε τη δυνατότητα να βρίσκεται στην κύρια.
Δικτυακός Προγραμματισμός (Θ)
Οντοκεντρικός Προγραμματισμός
Εργαστηριακό σεμινάριο Χειμερινό εξάμηνο
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κλάσεις και αντικείμενα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Wrapper Classes, Abstract Classes and Interfaces
Λειτουργικά Συστήματα και Ασφάλεια Πληροφοριακών Συστημάτων ΔΙΕΡΓΑΣΙΕΣ
ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ (ΕΡΓΑΣΤΗΡΙΟ)
Ομοιόμορφη Αποδοτική Διαχείριση του Ταυτοχρονισμού των Εξυπηρετητών
Το μοντέλο πελάτη - εξυπηρετητή
Εισαγωγή στον Προγ/μό Υπολογιστών
Εισαγωγή στη Java Χαρακτηριστικά της Java Εργαλεία της Java
Κεφάλαιο 10 Streams.
ΔΙΕΡΓΑΣΙΕΣ.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εξαιρέσεις [Exceptions]
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεταγράφημα παρουσίασης:

Κατανεμημένα Συστήματα Νηματα (Threads)

Εισαγωγή Κάθε νήμα εκτέλεσης είναι ουσιαστικά μια ανεξάρτητη ροή του ελέγχου εκτέλεσης, μέσα στο πρόγραμμα. Η έννοια του νήματος (thread) είναι παρόμοια με αυτήν της διεργασίας (process), με τη διαφορά ότι τα διάφορα νήματα μοιράζονται τον ίδιο χώρο διευθύνσεων, κάτι που δε συμβαίνει συνήθως με τις διεργασίες. Με άλλα λόγια δυο διαφορετικά νήματα μέσα σε ένα πρόγραμμα έχουν τη δυνατότητα πρόσβασης σε κάποιο αντικείμενο του προγράμματος ενώ δυο διαφορετικές διεργασίες συνήθως βλέπουν διαφορετικά αντίγραφα του ίδιου αντικειμένου.

Διεργασίες και Νήματα

Νημάτα μέσα σε Διεργασίες Η δημιουργία διεργασιών είναι πιο «ακριβή» από άποψη χώρου, διότι ή μνήμη του πατέρα αντιγράφεται στο παιδί. Η επικοινωνία μεταξύ των διεργασιών είναι πιο χρονοβόρα από την επικοινωνία μεταξύ των νημάτων. Η εναλλαγή νημάτων μέσα στην ίδια διεργασία είναι φθηνότερη από την εναλλαγή διεργασιών, οι οποίες ανήκουν σε διαφορετικές διεργασίες.

Σχέση Νημάτων και Διεργασιών Για την καλύτερη κατανόηση της τεχνολογίας των νημάτων, θα ήταν χρήσιμο να διευκρινιστεί η σχέση μεταξύ μίας διεργασίας και ενός νήματος. Ένα νήμα ανήκει σε μία διεργασία, και χρησιμοποιεί τους πόρους αυτής της διεργασίας. Το νήμα όμως κατέχει τη δική του, αυτόνομη ροή ελέγχου. Σε μία διεργασία μπορούν να ανήκουν πολλά νήματα. Μία καλύτερη περιγραφή προκύπτει αν θεωρήσουμε το νήμα σαν μία διαδικασία η οποία να μπορεί να εκτελείται αυτόνομα σε μία διεργασία.

Χαρακτηριστικά των Νημάτων Ένα νήμα μπορεί να έχει ανεξάρτητη ροή ελέγχου, και να είναι προγραμματίσιμο γιατί διατηρεί: Στοίβα Ιδιότητες χρονοπρογραμματισμού (όπως προτεραιότητα) Σύνολο σημάτων σε αναμονή και σε διακοπή Δεδομένα των νημάτων.

Χαρακτηριστικά ενός νήματος

Χαρακτηριστικά ενός νήματος Σε μία διεργασία μπορεί να ανήκουν πολλά νήματα, τα οποία μοιράζονται τους πόρους της και εκτελούνται στον ίδιο χώρο διευθύνσεων. Σε ένα πολυνηματικό πρόγραμμα (multi- threaded program) υπάρχουν ανά πάσα στιγμή πολλαπλά σημεία εκτέλεσης.

Διαμοιρασμός πόρων Ο διαμοιρασμός των πόρων από τα νήματα έχει τα εξής αποτελέσματα: Οι αλλαγές που πραγματοποιούνται από ένα νήμα στους διαμοιραζόμενους πόρους (όπως, για παράδειγμα, το κλείσιμο ενός αρχείου), είναι ορατές από όλα τα άλλα νήματα. Δύο δείκτες που έχουν την ίδια τιμή αναφέρονται στο ίδιο δεδομένο. Είναι δυνατή η ανάγνωση και η εγγραφή στην ίδια θέση μνήμης.

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

Δημιουργία Νημάτων στην JAVA Όταν αρχίζει η εκτέλεση ενός Java προγράμματος, μπορεί κανείς να φαντασθεί ότι υπάρχει μόνο ένα νήμα εκτέλεσης. Η παρατήρηση αυτή δεν είναι ακριβής αφού πρώτον μαζί με κάθε νήμα εκτέλεσης ενός Java προγράμματος τρέχει τουλάχιστον και ο συλλέκτης σκουπιδιών και δεύτερον στην περίπτωση των Java applets, ο αριθμός των νημάτων εκτέλεσης αυξάνεται κατά πολύ επειδή δημιουργεί νέα νήματα το ίδιο το σύστημα όποτε το κρίνει σκόπιμο.

Δημιουργία Νημάτων στην JAVA Για να δημιουργήσει όμως ο χρήστης ένα νέο νήμα, πρέπει να δημιουργήσει ένα νέο αντικείμενο, που να προέρχεται από την κλάση Thread, που ορίζεται στο πακέτο java.lang, ή από κάποια υποκλάση της. Το νέο αυτό αντικείμενο παριστάνει μια νέα εργασία που πρέπει να αρχίσει να εκτελείται παράλληλα με την παλιά. Υπάρχουν δύο τρόποι για την υλοποίηση νέων νημάτων εκτέλεσης. Σε κάθε περίπτωση ο κώδικάς που υλοποιεί τη νέα εργασία τοποθετείται σε μια μέθοδο με όνομα run.

Τρόποι για την υλοποίηση νέων νημάτων εκτέλεσης Πρώτος τρόπος για την υλοποίηση νέων νημάτων εκτέλεσης. Η νέα εργασία υλοποιείται από μια μέθοδο με το όνομα run η οποία δηλώνεται ως μέθοδος μιας νέας κλάσης που δημιουργείται και υλοποιεί τη διαπροσωπεία Runnable. Στο Σχήμα φαίνεται ένα παράδειγμα μιας κλάσης που υλοποιεί την έπ’άπειρον εκτύπωση στην οθόνη της τιμής ενός μετρητή.

Πρώτος τρόπος Παράδειγμα: class CountingJob implements Runnable { private int counter; public CountingJob (int c) { counter = c; } public void run( ) { while(true) System.out.println(counter++); } Δημιουργείται μια νέα κλάση η οποία υλοποιεί τη διαπροσωπεία Runnable Στη κλάση αυτή δηλώνεται μια μέθοδος run η οποία υλοποιεί τη νέα εργασία

Πρώτος τρόπος CountingJob job = new CountingJob(1); Στη συνέχεια, για να αρχίσει η εκτέλεση της εργασίας, απαιτείται η δημιουργία ενός αντικειμένου τύπου Thread, περνώντας τον κατασκευαστή του ένα αντικείμενο της νέας εργασίας ως παράμετρο. Η έναρξη της εκτέλεσης πραγματοποιείται καλώντας τη μέθοδο start του αντικειμένου Thread. Μετά την κλήση της start η εκτέλεση της νέας εργασίας συνεχιζεται είτε ώσπου να τελειώσει η εκτέλεση της μεθόδου Run, είτε μέχρι να κληθεί η μέθοδος stop του αντικειμένου Thread. Παράδειγμα του μέρους αυτού του κώδικα φαίνεται στο σχήμα . Σημειώνεται εδώ ότι είναι επίσης δυνατόν το αντικείμενο τύπου Thread να αποτελεί τμήμα της κλάσης CountingJob και η εκτέλεση της νέας εργασίας να αρχίζει στον κατασκευαστή αυτής της κλάσης. CountingJob job = new CountingJob(1); Thread t = new Thread (job); t.start();

Δεύτερος τρόπος class CountingJob extends Thread { private int counter; public CountingJob (int c) { counter = c; start(); } public void run( ) { while(true) System.out.println(counter++); Η νέα εργασία υλοποιείται από μια μέθοδο run που ορίζεται από μια νέα υποκλάση της Thread. Με βάση αυτόν τον τρόπο το παράδειγμα του προηγούμενου Σχήματος θα είχε τη μορφή που φαίνεται στο διπλανό Σχήμα.

Χειρισμός Νημάτων στην JAVA Εκτός από τις μεθόδους start και stop της κλάσης Thread που χρησιμοποιούνται για την εκκίνηση και τον τερματισμό της εκτέλεσης ενός νήματος η κλάση παρέχει κι άλλες μεθόδους για τον περαιτέρω χειρισμό των νημάτων. Τέτοιες είναι οι: suspend και resume που χρησιμοποιούνται για την προσωρινή παύση της εκτέλεσης ενός νήματος και την επανεκκίνηση της αντίστοιχα. Οι μέθοδοι αυτές σε αντίθεση με τις start και stop μπορούν να κληθούν περισσότερες από μια φορές. sleep(n) χρησιμοποιείται για την καθυστέρηση ενός νήματος εκτέλεσης κατά n milliseconds.

Χειρισμός Νημάτων στην JAVA currentThread πρόκειται για μια στατική μέθοδο η οποία επιστρέφει το τρέχον νήμα εκτέλεσης και είναι χρήσιμή για την πρόσβαση στο αρχικό νήμα. setDaemon Η μέθοδος αυτή παίρνει ως παράμετρο μια τιμή Boolean. Αν η τιμή της παραμέτρου είναι true τότε το νήμα χαρακτηρίζεται ως δαίμων. Οι «δαίμονες» είναι νήματα που καταστρέφονται αυτόματα μετά τον τερματισμό όλων των άλλων νημάτων.

Χειρισμός Νημάτων στην JAVA setPriority Αυτή η μέθοδος χρησιμοποιείται για τον καθορισμό της προτεραιότητας εκτέλεσης του νήματος. Η προτεραιότητα είναι μια αριθμητική τιμή : όσο μεγαλύτερη είναι αυτή τόσο περισσότερος χρόνος αφιερώνεται από τον υπολογιστή για την εκτέλεση του νήματος. Με άλλα λόγια νήματα με μεγαλύτερη προτεραιότητα πριμοδοτούνται από το διερμηνέα της Java έναντι νημάτων με μικρότερη προτεραιότητα. yield Αυτή η μέθοδος χρησιμοποιείται για να παραχωρήσει ένα νήμα το χρόνο υπολογισμού που του έχει δοθεί.