ENOTHTA 3 ΣYNTPEXΩN ΠPOΓPAMMATIΣMOΣ

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ENOTHTA 3 ΣYNTPEXΩN ΠPOΓPAMMATIΣMOΣ"

Transcript

1 ENOTHTA 3 Περιεχόµενα 1. Oι έννοιες του ταυτοχρονισµού και συντρέχοντα προγραµµατισµού 2. Συρρουτίνες 3. Aλληλεπίδραση µεταξύ διεργασιών 4. Aνταγωνισµός µεταξύ διεργασιών 5. Συνεργασία µεταξύ διεργασιών 6. Συµβολισµοί για ταυτόχρονη επεξεργασία 7. Aµοιβαίος αποκλεισµός 8. Aµοιβαίος αποκλεισµός σε επίπεδο λογισµικού 9. Aµοιβαίος αποκλεισµός σε επίπεδο υλικού 10. Aµοιβαίος αποκλεισµός σε επίπεδο λειτουργικού συστήµατος 11. Aµοιβαίος αποκλεισµός σε επίπεδο γλωσσών προγραµµατισµού 3-1

2 1. Oι έννοιες του ταυτοχρονισµού και συντρέχοντα προγραµµατισµού Mε τον όρο ταυτοχρονισµό (concurrency) αναφερόµαστε στην ταυτόχρονη εκτέλεση δύο ή περισσοτέρων διεργασιών σε ένα σύστηµα. Aυτό επιτυγχάνεται µε τη συνεχή εναλλαγή των εκτελούµενων διεργασιών στην KME. Σηµειωτέον ότι ο ταυτοχρονισµός διαφέρει από τον παραλληλισµό (parallelism) όπου το σύστηµα διαθέτει πολλούς επεξεργαστές οι οποίοι εκτελούν παράλληλα περισσότερες της µίας διεργασίες. Tο φαινόµενο του ταυτοχρονισµού δηµιουργείται σε ένα Λ.Σ. λόγω της ύπαρξης πολλών ταυτόχρονα εκτελούµενων διεργασιών. Kατ επέκταση δηµιουργείται η ανάγκη παροχής στον προγραµµατιστή µηχανισµών για την υποστήριξη τεχνικών προγραµµατισµού βασισµένων στην έννοια του ταυτοχρονισµού όπως δηµιουργία νέων διεργασιών, συντονισµός της ταυτόχρονης εκτέλεσης ενός αριθµού διεργασιών, διαδιεργασιακή (interprocess) επικοινωνία, δηλαδή επικοινωνία µεταξύ ταυτόχρονα εκτελούµενων διεργασιών, κλπ. H µορφή αυτή προγραµµατισµού αναφέρεται ως συντρέχων ή σύνδροµος (concurrent) προγραµµατισµός. Iστορικά, ο προποµπός του συντρέχοντος προγραµµατισµού είναι ο µηχανισµός των συρρουτινών (coroutines) που προτάθηκε από τον Conway το O προγραµµατισµός µε συρρουτίνες ήταν προέκταση του προγραµµατισµού µε διαδικασίες (procedures): ενώ στην περίπτωση των διαδικασιών µία διαδικασία έπρεπε να αποπερατώσει την εκτέλεσή της πριν ο έλεγχος εκτέλεσης του προγράµµατος επιστρέψει στη διαδικασία που την κάλεσε, στην περίπτωση των συρρουτινών ο έλεγχος εκτέλεσης του προγράµµατος µπορούσε να µεταφερθεί από τη µία συρρουτίνα στην άλλη οποιαδήποτε στιγµή επιπλέον, η καλούµενη συρρουτίνα επανέρχιζε την εκτέλεσή της από το σηµείο που είχε σταµατήσει. H διαφορά της έννοιας των συρρουτινών από αυτή του συντρέχοντος προγραµµατισµού είναι ότι µόνο µία συρρουτίνα είναι ανά πάσα χρονική στιγµή ενεργοποιηµένη και ότι η εναλλαγή ενεργοποίησης των συρρουτινών γίνεται στατικά σε συγκεκριµένα σηµεία ενός προγράµµατος. 3-2

3 2. Συρρουτίνες Πρόβληµα: Nα διαβαστούν κάρτες των 80 χαρακτήρων και να τυπωθούν σε γραµµές των 125 χαρακτήρων, µετά δε το τέλος κάθε κάρτας να εισαχθεί ένας κενός χαρακτήρας και κάθε δύο ** να αντικαταστηθούν µε ένα #. Σειριακή λύση µε 3 διαδικασίες: ιαδικασία 1η: ιάβασε όλες τις κάρτες σε προσωρινή µνήµη (buffer). ιαδικασία 2η: Kάνε τις αντικαταστήσεις. ιαδικασία 3η: Tύπωσε το αποτέλεσµα σε γραµµές των 125 χαρακτήρων. Mειονεκτήµατα: Xάσιµο χρόνου (overhead) λόγω του ότι εκτελούνται πολλές εντολές E/E αλλά και µεγάλη σπατάλη µνήµης. Λύση µε συρρουτίνες: var rs,sp: character; inbuf: array[1..80] of character; outbuf: array[1..125] of character; procedure read; procedure squash; repeat repeat READCARD(inbuf); if rs * then for i=1 to 80 do sp:=rs; rs:=inbuf[i]; RESUME print RESUME squash; ; else rs= ; RESUME read; RESUME squash; if rs= * then forever ; sp:= # ; RESUME print else sp:= * ; procedure print; RESUME print; sp:=rs; repeat RESUME print; for j=1 to 125 do outbuf[j]:=sp; RESUME read RESUME squash; forever ;. OUTPUT(outbuf); forever ; 3-3

4 3. Aλληλεπίδραση µεταξύ διεργασιών O ταυτοχρονισµός δηµιουργεί στο Λ.Σ. την ανάγκη αντιµετώπισης των ακόλουθων προβληµάτων: ιαχείρηση των εκτελούµενων διεργασιών. Kατανοµή των διαθέσιµων πόρων αναφορικά µε KME, κύρια και περιφερειακή µνήµη και συσκευές E/E µεταξύ των εκτελούµενων διεργασιών. Προστασία του περιβάλλοντος µίας διεργασίας από µη επιτρεπτές παρεµβολές από τις άλλες διεργασίες. Aνεξαρτησία των αποτελεσµάτων που παράγει µία διεργασία από την ταχύτητα εκτέλεσής της σε σχέση µε τις άλλες διεργασίες του συστήµατος. H ταυτόχρονη εκτέλεση περισσοτέρων της µίας διεργασιών οδηγεί συχνά σε φαινόµενα αλληλεπίδρασης µεταξύ των διεργασιών αυτών (process interaction) που µπορούν να χωρισθούν σε 3 κατηγορίες ανάλογα µε το βαθµό στον οποίο µία διεργασία γνωρίζει την ύπαρξη άλλων διεργασιών και πως τυχόν εκµεταλλεύεται αυτή την πληροφορία: Oι διεργασίες δεν γνωρίζουν η µία την ύπαρξη της άλλης (π.χ. οι διεργασίες που αντιστοιχούν στο κέλυφος ενός χρήστη στο Unix). Σε αυτή την περίπτωση δεν τίθεται θέµα υποστήριξης διαδιεργασιακής επικοινωνίας αλλά µπορεί να δηµιουργηθεί πρόβληµα ανταγωνισµού (competition), δηλαδή προσπάθεια από τις εκτελούµενες διεργασίες να δεσµεύσουν τους ίδιους πόρους. Oι διεργασίες γνωρίζουν έµµεσα η µία την ύπαρξη της άλλης (π.χ. µέσω της κοινής χρήσης ενός διαµοιραζόµενου αντικειµένου όπως λ.χ. προσωρινή µνήµη (buffer)). Σε αυτή την περίπτωση δηµιουργείται το φαινόµενο της συνεργασίας (cooperation) µέσω προσπέλασης στο κοινής χρήσης αντικείµενο. Oι διεργασίες γνωρίζουν άµεσα η µία την ύπαρξη της άλλης (π.χ. στη χρήση διοχετεύσεων στο Unix). Σε αυτή την περίπτωση οι διεργασίες γνωρίζουν η µία την άλλη κατ όνοµα και έχουν σχεδιασθεί για να εργάζονται µαζί για την επίτευξη ενός στόχου. Eποµένως και εδώ έχουµε το φαινόµενο της συνεργασίας. 3-4

5 4. Aνταγωνισµός µεταξύ διεργασιών ηµιουργείται κυρίως όταν περισσότερες της µίας διεργασίες προσπαθούν ταυτόχρονα να δεσµεύσουν έναν πόρο. Kλασσικό παράδειγµα είναι αυτό του διεκπεραιωτή ετεροχρονισµένης εκτύπωσης (spooling): out= essay ex1.mod prog.c in=7 ιεργασία A ιεργασία B H διεργασία A διαβάζει την τιµή της µεταβλητής in που δείχνει στην επόµενη ελεύθερη θέση στον κατάλογο των αρχείων που περιµένουν να εκτυπωθούν, αλλά πριν ολοκληρώσει την εργασία της διακόπτεται η εκτέλεσή της και ξεκινά η εκτέλεση της διεργασίας B, η οποία αφού διαβάσει και αυτή την τιµή της in αποθηκεύει στη θέση 7 το αρχείο προς εκτύπωση και ανεβάζει την τιµή της µεταβλητής in κατά µία µονάδα. Tώρα επαναρχίζει η εκτέλεση της διεργασίας A από το σηµείο διακοπής της, η οποία κάνοντας χρήση της παλιάς τιµής τής in τοποθετεί το δικό της αρχείο στη θέση 7 αντί της 8. Aποτέλεσµα είναι ότι το αρχείο της διεργασίας B δεν θα εκτυπωθεί ποτέ. Όταν ένα τελικό αποτέλεσµα εξαρτάται από τη σειρά ή/και τον χρόνο εκτέλεσης δύο ή περισσοτέρων διεργασιών τότε δηµιουργούνται συνθήκες ανταγωνισµού (race conditions). 3-5

6 4. Aνταγωνισµός µεταξύ διεργασιών (συνέχεια) Για την αποφυγή συνθηκών ανταγωνισµού επιβάλλεται ο αµοιβαίος αποκλεισµός (mutual exclusion), δηλαδή ο αποκλεισµός µίας διεργασίας από κάποια ενέργεια που ταυτόχρονα επιτελεί κάποια άλλη διεργασία. Aυτό οδηγεί στον καθορισµό κάποιων µερών στον κώδικα µίας διεργασίας στα οποία η διεργασία αυτή προσπαθεί να προσπελάσει κοινά µεταξύ των διεργασιών αντικείµενα (π.χ. διαµοιραζόµενες περιοχές µνήµης, αρχεία, κλπ.). Aυτά τα µέρη λέγονται κρίσιµα τµήµατα (critical sections) και για τη σωστή εκτέλεση συντρέχουσων διεργασιών πρέπει να διασφαλιστεί ότι ποτέ δύο ή περισσότερες διεργασίες δεν θα βρίσκονται ταυτόχρονα στο ίδιο κρίσιµο τµήµα. H εισαγωγή του αµοιβαίου αποκλεισµού δηµιουργεί δύο ακόµα προβλήµατα: Tου αδιέξοδου (deadlock) όταν λ.χ. δύο διεργασίες χρειάζονται δύο πόρους και κάθε µία από τις διεργασίες έχει δεσµεύσει ένα από τους πόρους και έχοντας αρχίσει οι διεργασίες να εκτελούν το κρίσιµο τµήµα του κώδικά τους για τον δεύτερο πόρο ανακαλύπτουν ότι είναι δεσµευµένος από την άλλη διεργασία. Tης παρατεταµένης στέρησης (starvation) όπου κάποια διεργασία δεν προλαβαίνει να δεσµεύσει κάποιον πόρο λόγω της πιο γρήγορης δέσµευσής του από άλλες διεργασίες. 3-6

7 5. Συνεργασία µεταξύ διεργασιών Mέσω κοινής χρήσης κάποιων αντικειµένων (µεταβλητών, αρχείων, βάσεων δεδοµένων, κλπ.). Tα προβλήµατα του αµοιβαίου αποκλεισµού, του αδιέξοδου και της παρατεταµένης στέρησης υπάρχουν και εδώ. Όµως τα κοινά αντικείµενα µπορούν να προσπελασθούν για διάβασµα ή για γράψιµο και µόνο στη δεύτερη περίπτωση χρειάζεται αµοιβαίος αποκλεισµός. Ένα άλλο πρόβληµα που παρατηρείται εδώ και έχει να κάνει µε την ενηµέρωση κοινών δεδοµένων είναι αυτό της συνέπειας των δεδοµένων (data coherence) όπως φαίνεται στο ακόλουθο παράδειγµα: P1: a:=a+1; a:=a+1; b:=b+1; b:=2*b; P2: b:=2*b; b:=b+1; a:=2*a; a:=2*a; όπου το ζητούµενο είναι µετά το τέλος εκτέλεσης των εντολών να ισχύει η σχέση a=b. Mε την εκτέλεση στα αριστερά αυτό επιτυγχάνεται αλλά µε την εκτέλεση στα δεξιά δεν επιτυγχάνεται παρόλο που οι δύο διεργασίες έχουν σεβασθεί τη συνθήκη αµοιβαίου αποκλεισµού για τις δύο µεταβλητές ξεχωριστά. Aυτό που χρειάζεται είναι και οι τέσσερεις εντολές να θεωρηθούν κρίσιµο τµήµα. Mέσω άµεσης επικοινωνίας µε τη χρήση µηνυµάτων (messages). Λόγω της έλλειψης κοινού αντικειµένου επικοινωνίας δεν τίθεται θέµα αµοιβαίου αποκλεισµού αλλά τα άλλα προβλήµατα παραµένουν. Aδιέξοδο µπορεί να δηµιουργηθεί αν µία διεργασία περιµένει µήνυµα από µία άλλη και αντίστροφα. Παρατεταµένη στέρηση µπορεί να προκύψει αν λ.χ. µία διεργασία P1 προσπαθεί να επικοινωνήσει µε 2 άλλες διεργασίες P2 και P3 και αυτές µε την P1 η P1 µπορεί να επικοινωνεί συνεχώς µε την P2 και η P3 να µην καταφέρει ποτέ να ανταλλάξει µηνύµατα µε την P1. 3-7

8 6. Συµβολισµοί για ταυτόχρονη επεξεργασία Για την υποστήριξη ταυτόχρονης επεξεργασίας στο επίπεδο λογισµικού θα πρέπει οι γλώσσες προγραµµατισµού να έχουν συµβολισµούς που να δηλώνουν ταυτοχρονία, διαδιεργασιακή επικοινωνία, κρίσιµα τµήµατα, κλπ. Kάθε γλώσσα προγραµµατισµού έχει τους δικούς της συµβολισµούς αλλά για µία γλώσσα βασισµένη στο δοµηµένο προγραµµατισµό µπορούµε να θεωρήσουµε την ύπαρξη ενός συµβολισµού του τύπου par par όπου όλες οι εντολές µέσα στο µπλοκ εκτελούνται ταυτόχρονα. Eπίσης µπορούµε να θεωρήσουµε την υποστήριξη δύο ενσωµατωµένων συναρτήσεων enter_critical(r) και exit_critical(r) για τον προσδιορισµό κρίσιµων τµηµάτων αναφορικά µε κάποιον πόρο R. Έτσι το προηγούµενο παράδειγµα θα µπορούσε να γραφεί σε µία (ψευδο) γλώσσα προγραµµατισµού που υποστηρίζει τους ανωτέρω συµβολισµούς ως εξής: program mutual_excl; int a:=1, b:=1; procedure P1(int a,b) enter_critical(a,b); a:=a+1; b:=b+1; exit_critical(a,b); ; procedure P2(int a,b) enter_critical(a,b); b:=2*b; a:=2*a; exit_critical(a,b); ; par par P1(a,b); P2(a,b);. 3-8

9 7. Aµοιβαίος Aποκλεισµός Για τη σωστή υποστήριξη αµοιβαίου αποκλεισµού πρέπει να ικανοποιούνται οι ακόλουθες προϋποθέσεις: 1. Όλες οι διεργασίες υπόκεινται στον περιορισµό του αµοιβαίου αποκλεισµού, δηλαδή µόνο µία διεργασία ανά πάσα στιγµή µπορεί να βρίσκεται στο κρίσιµο τµήµα της που αντιστοιχεί σε κάποιο συγκεκριµένο πόρο ή κοινό αντικείµενο. 2. Aν µία διεργασία διακοπεί όταν δεν βρίσκεται σε κρίσιµο τµήµα, θα πρέπει να το κάνει µε τρόπο που να µην επηρεάζει άλλες διεργασίες. 3. εν επιτρέπεται η επ αόριστον αναµονή µίας διεργασίας για να εισέλθει σε κρίσιµο τµήµα, δηλαδή φαινόµενα αδιέξοδου ή παρατεταµένης στέρησης. 4. Aν µία διεργασία δεν βρίσκεται σε κάποιο κρίσιµο τµήµα δεν µπορεί να απαγορέψει σε άλλη διεργασία την είσοδο στο κρίσιµο τµήµα. 5. εν επιτρέπονται υποθέσεις σε ότι αφορά την ταχύτητα εκτέλεσης των διεργασιών ή το πλήθος των επεξεργαστών στο σύστηµα. 6. εν επιτρέπεται η επ αόριστον παραµονή µίας διεργασίας σε κρίσιµο τµήµα. H υποστήριξη αµοιβαίου αποκλεισµού και η ικανοποίηση των ανωτέρω προϋποθέσεων µπορεί να γίνει σε 4 επίπεδα: Στο επίπεδο του λογισµικού, δηλαδή µε τη χρήση κατάλληλων προγραµµατιστικών τεχνικών σε κάποια γλώσσα προγραµµατισµού. Στο επίπεδο του υλικού, µέσω της υλοποίησης ειδικών εντολών σε γλώσσα µηχανής. Στο επίπεδο του Λ.Σ. µε την παροχή από το ίδιο το Λ.Σ. προς τον χρήστη κατάλληλων µηχανισµών. Στο επίπεδο της γλώσσας προγραµµατισµού µε την παροχή από την ίδια τη γλώσσα προς τον προγραµµατιστή κατάλληλων µηχανισµών οι οποίοι υποστηρίζονται από τον µεταγλωττιστή της γλώσσας αυτής. 3-9

10 8. Aµοιβαίος αποκλεισµός σε επίπεδο λογισµικού Aλγόριθµος του Dekker. Περίπτωση µε 2 διεργασίες: program Dekker1; int process_number; procedure Process1; while process_number=2 do {nothing} ; process_number:=2; ; procedure Process2; while process_number=1 do {nothing} ; process_number:=1; ; process_number:=1; par Process1; Process2; par. 3-10

11 8. Aµοιβαίος αποκλεισµός σε επίπεδο λογισµικού (συνέχεια) H συνάρτηση enter_critical() υλοποιείται µε το βρόχο που ελέγχει συνέχεια την τιµή της µεταβλητής process_number περιµένοντας να πάρει σαν τιµή τον αριθµό της διεργασίας. H συνάρτηση exit_critical() υλοποιείται µε τη χρήση του τελεστή ανάθεσης που δίνει στη µεταβλητή process_number σαν τιµή τον αριθµό της άλλης διεργασίας. Aπαιτεί την αυστηρή εναλλαγή (strict alteration) των διεργασιών κατά την εισαγωγή τους στα κρίσιµα τµήµατα µε αποτέλεσµα η γρηγορότερη από τις διεργασίες να καθυστερείται από την πιο αργή (από πλευράς χρήσης του κρίσιµου τµήµατος) διεργασία. Aν λ.χ. η P1 χρησιµοποιεί την KME µόνο µία φορά την ώρα και η P2 100 φορές, τότε η P2 είναι αναγκασµένη να ακολουθεί τον ρυθµό της πολύ πιο αργής P1, διότι δεν είναι δυνατόν να χρησιµοποιήσει ξανά η P2 την KME πριν το χρησιµοποιήσει η P1. Eπίσης, η χρήση του βρόχου while για τον επαναλαµβανόµενο έλεγχο της µεταβλητής process_number δηµιουργεί το φαινόµενο της ενεργούς αναµονής (busy waiting) που σπαταλά χρόνο της KME. Tέλος, το πιο σηµαντικό από όλα, αν µία διεργασία βρισκόµενη στο κρίσιµο τµήµα της διακοπεί απρόοπτα, η άλλη δεν µπορεί να συνεχίσει δηµιουργώντας αδιέξοδο. H επόµενη παραλλαγή του αλγόριθµου προσπαθεί να απαλείψει αυτά τα προβλήµατα. 3-11

12 8. Aµοιβαίος αποκλεισµός σε επίπεδο λογισµικού (συνέχεια) program Dekker2; bool P1inside, P2inside; procedure Process1; while P2inside do {nothing} ; P1inside:=true; P1inside:=false; ; procedure Process2; while P1inside do {nothing} ; P2inside:=true; P2inside:=false; ; P1inside:=false; P2inside:=false; par Process1; Process2; par. 3-12

13 8. Aµοιβαίος αποκλεισµός σε επίπεδο λογισµικού (συνέχεια) H δεύτερη παραλλαγή προσπαθεί να εξαλείψει τα προβλήµατα του αδιέξοδου και της αυστηρής εναλλαγής αναγνωρίζοντας ότι χρειάζεται η αποθήκευση πληροφοριών για την κατάσταση και των δύο διεργασιών και όχι µόνο αυτής που βρίσκεται µέσα στο κρίσιµο τµήµα. Έτσι χρησιµοποιούνται δύο boolean µεταβλητές και κάθε διεργασία µπορεί να ενηµερώσει τη δικιά της µεταβλητή αλλά και να δει την τιµή της άλλης µεταβλητής για να πληροφορηθεί την κατάσταση της άλλης διεργασίας. Aν και λύνει εν µέρει τα προβλήµατα που αναφέρθηκαν, η λύση αυτή δηµιουργεί ένα χειρότερο: δεν εγγυάται τον αµοιβαίο αποκλεισµό, δηλαδή υπάρχει περίπτωση και οι δύο διεργασίες να βρεθούν ταυτόχρονα στο κρίσιµο τµήµα. Aυτό συµβαίνει αν οι δύο διεργασίες, ταυτόχρονα, έχοντας διαπιστώσει ότι η τιµή της µεταβλητής της άλλης διεργασίας ειναι false συνεχίζουν και αφού θέσουν την τιµή true στη δικιά τους µπαίνουν στο κρίσιµο τµήµα. Tο πρόβληµα εποµένως έγκειται στο ότι µία διεργασία µπορεί να αλλάξει την κατάσταση τής µεταβλητής της αφού η άλλη την έχει ελέγξει. H τρίτη παραλλαγή προσπαθεί να λύσει το πρόβληµα που αναφέρθηκε προηγουµένως µε το να υποχρεώνει κάθε διεργασία να δηλώσει πρώτα ότι επιθυµεί να µπει στο κρίσιµο τµήµα της πριν αρχίσει να εκτελεί το βρόχο (ουσιαστικά εναλλάσουµε τις δύο γραµµές κώδικα). Aν και πράγµατι αυτή η λύση υποστηρίζει σωστά τον αµοιβαίο αποκλεισµό εν τούτοις επαναφέρει το πρόβληµα του αδιέξοδου: αν προλάβουν και οι δύο διεργασίες να θέσουν την τιµή της αντίστοιχης µεταβλητής τους σε true πριν προλάβει η άλλη διεργασία να αρχίσει να εκτελεί το βρόχο while τότε η κάθε µία θα νοµίζει ότι η άλλη έχει ήδη αρχίσει να εκτελεί το κρίσιµο τµήµα της. 3-13

14 8. Aµοιβαίος αποκλεισµός σε επίπεδο λογισµικού (συνέχεια) program Dekker3; bool P1wantstoenter, P2wantstoenter; procedure Process1; P1wantstoenter:=true; while P2wantstoenter do {nothing} ; P1wantstoenter:=false; ; procedure Process2; P2wantstoenter:=true; while P1wantstoenter do {nothing} ; P2wantstoenter:=false; ; P1wantstoenter:=false; P2wantstoenter:=false; par Process1; Process2; par. 3-14

15 8. Aµοιβαίος αποκλεισµός σε επίπεδο λογισµικού (συνέχεια) Tο πρόβληµα µε την τρίτη παραλλαγή ήταν ότι κάθε διεργασία µπορούσε να επιµείνει να µπει στο κρίσιµο τµήµα της χωρίς να υποχρεούται να κάνει πίσω, δηµιουργώντας έτσι αδιέξοδο στην εκτέλεση του βρόχου. H τέταρτη παραλλαγή προσπαθεί να επιλύσει το πρόβληµα µε το να αναγκάζει µία διεργασία που έχει δηλώσει ότι θέλει να εκτελέσει το κρίσιµο τµήµα της να κάνει πίσω αν η επιθυµία της δεν έχει ικανοποιηθεί µέσα σε κάποιο µικρό αλλά τυχαίο χρονικό διάστηµα. Παρ όλο που φαίνεται ότι η παραλλαγή αυτή λύνει όλα τα προβλήµατα χωρίς να δηµιουργεί καινούργια, εν τούτοις αυτό δεν αληθεύει. Όσο και αν είναι απίθανο, είναι ωστόσο δυνατόν να δηµιουργηθεί το πρόβληµα της επ αόριστον αναµονής (indefinite postponement) αν δηµιουργηθεί η ακόλουθη αλληλουχία εκτέλεσης εντολών: H διεργασία P1 θέτει τη τιµή της µεταβλητής P1wantstoenter σαν true H διεργασία P2 θέτει τη τιµή της µεταβλητής P2wantstoenter σαν true H διεργασία P1 ελέγχει τη τιµή της µεταβλητής P2wantstoenter H διεργασία P2 ελέγχει τη τιµή της µεταβλητής P1wantstoenter H διεργασία P1 θέτει τη τιµή της µεταβλητής P1wantstoenter σαν false H διεργασία P2 θέτει τη τιµή της µεταβλητής P1wantstoenter σαν false H διεργασία P1 θέτει τη τιµή της µεταβλητής P1wantstoenter σαν true H διεργασία P2 θέτει τη τιµή της µεταβλητής P2wantstoenter σαν true Aυτή η αλληλουχία εκτέλεσης εντολών µπορεί να συνεχίσει επ άπειρον χωρίς καµµία από τις δύο διεργασίες να µπορέσει ποτέ να εκτελέσει το κρίσιµο τµήµα της. H πέµπτη (!) παραλλαγή χρησιµοποιεί αρκετές από τις τεχνικές που αναφέρθηκαν µέχρι τώρα. H κατανόηση τού γιατί η τελευταία αυτή παραλλαγή επιλύει όλα τα προβλήµατα που αναφέρθηκαν χωρίς να δηµιουργεί καινούργια αφήνεται σαν άσκηση. 3-15

16 8. Aµοιβαίος αποκλεισµός σε επίπεδο λογισµικού (συνέχεια) program Dekker4; bool P1wantstoenter, P2wantstoenter; procedure Process1; P1wantstoenter:=true; while P2wantstoenter do P1wantstoenter:=false; delay(random_number); P1wantstoenter:=true; P1wantstoenter:=false; ; procedure Process2; P2wantstoenter:=true; while P1wantstoenter do P2wantstoenter:=false; delay(random_number); P2wantstoenter:=true; P2wantstoenter:=false; ; P1wantstoenter:=false; P2wantstoenter:=false; par Process1; Process2; par. 3-16

17 8. Aµοιβαίος αποκλεισµός σε επίπεδο λογισµικού (συνέχεια) program Dekker_final; int favoured_process; bool P1wantstoenter, P2wantstoenter; procedure Process1; ; P1wantstoenter:=true; while P2wantstoenter do if favoured_process=2 then P1wantstoenter:=false; while favoured_process=2 do {nothing} ; P1wantstoenter:=true; favoured_process:=2; P1wantstoenter:=false; procedure Process2; ; P2wantstoenter:=true; while P1wantstoenter do if favoured_process=1 then P2wantstoenter:=false; while favoured_process=1 do {nothing} ; P2wantstoenter:=true; favoured_process:=1; P2wantstoenter:=false; P1wantstoenter:=false; P2wantstoenter:=false;. favoured_process:=1; par Process1; Process2; par 3-17

18 8. Aµοιβαίος αποκλεισµός σε επίπεδο λογισµικού (συνέχεια) Aλγόριθµος του Peterson (για 2 διεργασίες, πιο απλός από του Dekker): program Peterson; int favoured_process; bool P1wantstoenter, P2wantstoenter; procedure Process1; P1wantstoenter:=true; favoured_process:=2; while P2wantstoenter and favoured_process=2 do ; P1wantstoenter:=false; ; procedure Process2; P2wantstoenter:=true; favoured_process:=1; while P1wantstoenter and favoured_process=1 do ; P2wantstoenter:=false; ; P1wantstoenter:=false; P2wantstoenter:=false; favoured_process:=1; par Process1; Process2; par. 3-18

19 9. Aµοιβαίος αποκλεισµός σε επίπεδο υλικού Ξεκινώντας από τη σκέψη ότι αυτό που διακόπτει τη λειτουργία µίας διεργασίας είναι οι διακόπτες (interrupts) θα µπορούσαµε να επιτύχουµε αµοιβαίο αποκλεισµό µε την αποσύνδεση και επανασύνδεση των διακοπτών. Mία διεργασία θα µπορούσε να έχει κώδικα του τύπου: < αποσύνδεση διακοπτών > < επανασύνδεση διακοπτών > Aυτή η λύση όµως είναι ασύµφορη λόγω του ότι µειώνει δραµατικά την απόδοση του συστήµατος. Eπιπλέον, δεν είναι εφαρµόσιµη σε συστήµατα µε πολλούς επεξεργαστές. Mία άλλη λύση ξεκινάει από τη σκέψη ότι στο επίπεδο του υλικού η προσπέλαση σε µία συγκεκριµένη θέση µνήµης από κάποια διεργασία εµποδίζει αυτόµατα την προσπέλαση στην ίδια θέση µνήµης από άλλη διεργασία. Aυτό επιτρέπει την υποστήριξη µίας εντολής έλεγξε και θέσε (test and set) testset(i) η οποία αν η τιµή της θέσης µνήµης i είναι 0 το κάνει 1 και δηλώνει επιτυχή εκτέλεση και αν η τιµή της i είναι 1 απλά δηλώνει αποτυχία. Σηµειωτέον ότι ο έλεγχος και αλλαγή της τιµής της i γίνονται σαν αδιαίρετες (indivisible) πράξεις: boolean function testset(int i); if i=0 then i:=1; testset:=true else testset:=false; Mία άλλη παρόµοια λύση είναι αυτή της εντολής exchange(r,i) η οποία ανταλλάσει τα περιεχόµενα της θέσης µνήµης i µε αυτά του καταχωρητή r. Kαι εδώ, όσο διαρκεί η εκτέλεση της εντολής η θέση µνήµης είναι κλειδωµένη. H υλοποίηση της exchange(r,i) είναι απλή: procedure exchange(register r; byte m); variable temp; temp:=m; m:=r; r:=temp; 3-19

20 9. Aµοιβαίος αποκλεισµός σε επίπεδο υλικού (συνέχεια) Kάνοντας χρήση της εντολής testset ο αµοιβαίος αποκλεισµός µπορεί να υλοποιηθεί ως ακολούθως: program Mutual_Exclusion; int flag; procedure Process1; while not testset(flag) do {nothing} ; flag:=0; ; procedure Process2; while not testset(flag) do {nothing} ; flag:=0; ; flag:=0; par par. Process1; Process2; 3-20

21 9. Aµοιβαίος αποκλεισµός σε επίπεδο υλικού (συνέχεια) Kάνοντας χρήση της εντολής exchange ο αµοιβαίος αποκλεισµός µπορεί να υλοποιηθεί ως ακολούθως: program Mutual_Exclusion; int flag; procedure Process1; int key; key:=1; while key 0 do exchange(key,flag); exchange(key,flag); ; procedure Process2; int key; key:=1; while key 0 do exchange(key,flag); exchange(key,flag); ; flag:=0; par. par Process1; Process2; 3-21

22 9. Aµοιβαίος αποκλεισµός σε επίπεδο υλικού (συνέχεια) Oι ανωτέρω λύσεις έχουν τα εξής πλεονεκτήµατα: Eπεκτείνονται εύκολα για την περίπτωση περισσοτέρων των δύο διεργασιών ακόµα και στην περίπτωση συστηµάτων µε πολλούς επεξεργαστές. Mοναδική προϋπόθεση είναι η ύπαρξη κοινής µνήµης. Eίναι απλές σαν έννοιες και εποµένως εύκολο να ελεγχθεί η σωστή χρήση τους. Mπορούν να υποστηρίξουν πολλαπλά κρίσιµα τµήµατα µε τη χρήση διαφορετικών µεταβλητών. Tα µειονεκτήµατα είναι όµως σηµαντικά: Παρόλο που υποστηρίζουν αµοιβαίο αποκλεισµό εν τούτοις το κάνουν µε τη χρήση ενεργούς αναµονής και άρα τη σπατάλη κύκλων µηχανής. εν αποφεύγεται το πρόβληµα της παρατεταµένης στέρησης γιατί κάποια διεργασία µπορεί να περιµένει επ άπειρον να εκτελέσει το κρίσιµο τµήµα της. Eπίσης είναι πιθανή η δηµιουργία αποκλεισµού στην περίπτωση που µία διεργασία ενώ βρίσκεται στο κρίσιµο τµήµα της διακοπεί από µία άλλη διεργασία µεγαλύτερης προτεραιότητας. Π.χ., αν η P1 ενώ βρίσκεται σε ένα κρίσιµο τµήµα διακοπεί από την P2 η οποία έχει µεγαλύτερη προτεραιότητα από την P1, τότε αν επιπλέον η P2 προσπαθήσει να εισέλθει στο ίδιο κρίσιµο τµήµα θα έχουµε αποκλεισµό: η P2 δεν θα µπορεί να συνεχίσει αλλά λόγω του ότι έχει µεγαλύτερη προτεραιότητα δεν θα αφήσει και την P1 να συνεχίσει. 3-22

23 10. Aµοιβαίος αποκλεισµός σε επίπεδο Λ.Σ. Xρήση σηµάτων (signals) δύο ή περισσότερες διεργασίες µπορούν να συγχρονίσουν την εκτέλεσή τους µέσω της αποστολής και αναµονής λήψης σηµάτων. Για την καταµέτρηση των σηµάτων χρησιµοποιούνται ειδικές µεταβλητές που λέγονται σηµαφόροι (semaphores) σε συνδυασµό µε δύο θεµελιώδεις λειτουργίες: signal(s) και wait(s). Oι σηµαφόροι προτάθηκαν από τον E. W. Dijkstra το H wait(s) µειώνει την τιµή του σηµαφόρου s κατά µία µονάδα. Aν η τιµή του s γίνει αρνητική η διεργασία που εκτέλεσε την εντολή αναστέλλει την εκτέλεσή της και µπαίνει σε µία ουρά υπό αναστολή διεργασιών σχετιζόµενη µε το σηµαφόρο s. H signal(s) αυξάνει την τιµή του σηµαφόρου s κατά µία µονάδα. Aν η τιµή του s δεν είναι θετική τότε µία από τις διεργασίες που βρίσκονται υπό αναστολή στην ουρά τής s αλλάζει την κατάστασή της σε έτοιµη για εκτέλεση. Aν ο ορισµός του σηµαφόρου καθορίζει ότι η διεργασία που θα ενεργοποιηθεί είναι η πρώτη στην ουρά (δηλαδή αυτή που βρίσκεται υπό αναστολή το µεγαλύτερο χρονικό διάστηµα), τότε ο σηµαφόρος αυτός λέγεται ισχυρός. Στην αντίθετη περίπτωση που δεν καθορίζεται η σειρά ενεργοποίσης των διεργασιών, ο σηµαφόρος αυτός λέγεται αδύνατος. Oι δυαδικοί σηµαφόροι (binary semaphores) µπορούν να πάρουν µόνο τις τιµές 0 και 1, είναι πιο εύκολο να υλοποιηθούν από τους γενικούς σηµαφόρους και µπορεί να αποδειχθεί ότι έχουν την ίδια εκφραστική ικανότητα µε τους γενικούς σηµαφόρους. Eξυπακούεται ότι η εκτέλεση των εντολών signal και wait θα πρέπει να γίνεται σαν ατοµική ενέργεια (atomic action). Για την υλοποίησή τους µπορεί να χρησιµοποιηθούν οι τεχνικές που αναφέρθηκαν µέχρι τώρα (αλγόριθοι τύπου Dekker ή Peterson, εντολές τύπου testset, κλπ.). Oι σηµαφόροι προσφέρουν ένα σχετικά εύκολο τρόπο συγχρονισµού και διαδιεργασιακής επικοινωνίας αλλά θέλει προσοχή η χρήση τους γιατί µικρά λάθη µπορούν να οδηγήσουν εύκολα σε δηµιουργία αδιεξόδων. 3-23

24 10. Aµοιβαίος αποκλεισµός σε επίπεδο Λ.Σ. (συνέχεια) Oρισµός σηµαφόρων: type semaphore = record count:integer; queue:list of process; ; var s:semaphore; wait(s): s.count:=s.count-1; if s.count<0 then βάλε αυτή τη διεργασία στο s.queue; θέσε τη διεργασία υπό αναστολή; ; signal(s): s.count:=s.count+1; if s.count 0 then αφαίρεσε µία διεργασία P από την s.queue; τοποθέτησε την P στη λίστα διεργασιών έτοιµων για εκτέλεση; ; 3-24

25 10. Aµοιβαίος αποκλεισµός σε επίπεδο Λ.Σ. (συνέχεια) Oρισµός δυαδικών σηµαφόρων: type binary semaphore = record value:(0,1); queue:list of process; ; var s:binary semaphore; waitb(s): if s.value=1 then s.value=0 else βάλε αυτή τη διεργασία στο s.queue; θέσε τη διεργασία υπό αναστολή; ; signalb(s): if s.queue is empty then s.value=1 else αφαίρεσε µία διεργασία P από την s.queue; τοποθέτησε την P στη λίστα διεργασιών έτοιµων για εκτέλεση; ; 3-25

26 10. Aµοιβαίος αποκλεισµός σε επίπεδο Λ.Σ. (συνέχεια) Yλοποίηση σηµαφόρων µε βάση την εντολή testset: type semaphore = record count:integer; flag:integer; queue:list of process; ; var s:semaphore; wait(s): repeat {nothing} until testset(s.flag); s.count:=s.count-1; if s.count<0 then βάλε αυτή τη διεργασία στο s.queue; θέσε τη διεργασία υπό αναστολή (περιλαµβάνει την εντολή s.flag:=0); ; else s.flag:=0; signal(s): repeat {nothing} until testset(s.flag); s.count:=s.count+1; if s.count 0 then αφαίρεσε µία διεργασία P από την s.queue; τοποθέτησε την P στη λίστα διεργασιών έτοιµων για εκτέλεση; ; s.flag:=0; 3-26

27 10. Aµοιβαίος αποκλεισµός σε επίπεδο Λ.Σ. (συνέχεια) Eναλλακτικός τρόπος υλοποίησης σηµαφόρων µε διακόπτες. wait(s): απενεργοποίησε τους διακόπτες; s.count:=s.count-1; if s.count<0 then βάλε αυτή τη διεργασία στο s.queue; θέσε τη διεργασία υπό αναστολή και ενεργοποίησε τους διακόπτες; else ενεργοποίησε τους διακόπτες; signal(s): απενεργοποίησε τους διακόπτες; s.count:=s.count+1; if s.count 0 then αφαίρεσε µία διεργασία P από την s.queue; τοποθέτησε την P στη λίστα διεργασιών έτοιµων για εκτέλεση; ; ενεργοποίησε τους διακόπτες; 3-27

28 10. Aµοιβαίος αποκλεισµός σε επίπεδο Λ.Σ. (συνέχεια) Kάνοντας χρήση σηµαφόρων ο αµοιβαίος αποκλεισµός µπορεί να υλοποιηθεί ως ακολούθως: program Mutual_Exclusion; semaphore sema; procedure Process1; wait(sema); signal(sema); procedure Process2; wait(sema); signal(sema); sema:=1; par par Process1; Process2; 3-28

29 10. Aµοιβαίος αποκλεισµός σε επίπεδο Λ.Σ. (συνέχεια) Kάνοντας χρήση δύο σηµαφόρων µπορούµε να υλοποιήσουµε το κλασσικό πρόβληµα του παραγωγού-καταναλωτή (producer-consumer), για την περίπτωση προσωρινής µνήµης (buffer) µίας θέσης. Mπορούν να δηµιουργηθούν παραλλαγές του προβλήµατος µε προσωρινή µνήµη περισσότερων της µίας θέσεων. program Producer_Consumer; int buffer; semaphore value_put, value_get; procedure Producer; int result; < υπολόγισε το result > wait(value_get); buffer:=result; signal(value_put); procedure Consumer; int result; wait(value_put); result:=buffer; signal(value_get); < κατανάλωσε το result > value_put:=0; value_get:=1; par Producer; Consumer; par 3-29

30 10. Aµοιβαίος αποκλεισµός σε επίπεδο Λ.Σ. (συνέχεια) Ένας άλλος τρόπος είναι τα µηνύµατα (messages) που επιτυγχάνουν ταυτόχρονα και το συντονισµό και την επικοινωνία µεταξύ των διεργασιών. Yπάρχουν και εδώ δύο θεµελειώδεις λειτουργίες: s(destination,message) στέλνει το µήνυµα σε καθορισµένο προορισµό, receive(source,message) δέχεται µήνυµα από συγκεκριµένη πηγή. Aνάλογα µε την περίπτωση, η εκτέλεση από µία διεργασία της εντολής s(destination,message) µπορεί να προκαλέσει ή όχι την αναστολή εκτέλεσης της διεργασίας µέχρις ότου το µήνυµα φτάσει στον προορισµό του (blocking ή nonblocking s). Στην περίπτωση εκτέλεσης της receive, συνήθως η διεργασία αναστέλλει την εκτέλεσή της µέχρις ότου ληφθεί το ζητούµενο µήνυµα. Στην περίπτωση που και οι δύο εντολές οδηγούν σε αναστολή της διεργασίας που τις κάλεσε µέχρι την αποπεράτωση εκτέλεσής τους, έχουµε την τεχνική του ραντεβού (όπως στη γλώσσα Ada). H επικοινωνία µπορεί να γίνει είτε άµεσα χρησιµοποιώντας σαν source και destination τις ίδιες τις διεργασίες είτε έµµεσα µε τη χρήση κάποιου κοινού γραµµατοκιβωτίου (mailbox) και εντολών του τύπου s(mailbox,message) receive(mailbox,message) 1 3 Γ

31 10. Aµοιβαίος αποκλεισµός σε επίπεδο Λ.Σ. (συνέχεια) Kάνοντας χρήση αποστολής και λήψης µηνυµάτων µέσω ενός γραµµατοκιβωτίου µπορούµε να µοντελοποιήσουµε τον αµοιβαίο αποκλεισµό ως εξής: program mutual_exclusion; mailbox box; procedure Process1; message msg; receive(box,msg); s(box,msg); procedure Process2; message msg; receive(box,msg); s(box,msg); s(box,null); par Process1; Process2; par 3-31

32 10. Aµοιβαίος αποκλεισµός σε επίπεδο Λ.Σ. (συνέχεια) Kάνοντας χρήση δύο γραµµατοκιβωτίων µπορούµε να µοντελοποιήσουµε το πρόβληµα του παραγωγού-καταναλωτή ως εξής: program Producer_Consumer; mailbox prod, cons; procedure Producer; message msg; receive(prod,msg); msg:=produced_value; s(cons,msg); procedure Consumer; message msg; receive(cons,msg); < κατανάλωσε το msg > s(prod,null); s(prod,null); par Producer; Consumer; par 3-32

33 11. Aµοιβαίος αποκλεισµός σε επίπεδο γλωσσών προγραµµατισµού Έχει το πλεονέκτηµα ότι ο προγραµµατισµός γίνεται σε υψηλότερο επίπεδο και ελαχιστοποιεί τις πιθανότητες για λάθη. Mία από τις πιο γνωστές αρχές συγχρονισµού σε επίπεδο γλωσσών προγραµµατισµού είναι ο παρακολουθητής (monitor) που προτάθηκε από τους Tony Hoare και Brinch Hansen το Παρακολουθητής είναι µία οµάδα από διαδικασίες, µεταβλητές και δοµές δεδοµένων που οµαδοποιούνται σε ένα ειδικό τύπο πακέτου. Mία διεργασία µπορεί να καλέσει τις διαδικασίες ενός παρακολουθητή αλλά όχι και να προσπελάσει άµεσα στις εσωτερικές δοµές του πακέτου οι οποίες θεωρούνται προστατευόµενοι πόροι (καθιστώντας έτσι τον παρακολουθητή προποµπό του αντικειµενοστρεφούς προγραµµατισµού). Ένα από τα πλεονεκτήµατα της υψηλού επιπέδου αυτής προσέγγισης είναι ότι υπεύθυνος για την υλοποίηση του αµοιβαίου αποκλεισµού είναι ο µεταγλωττιστής της γλώσσας προγραµµατισµού που υποστηρίζει παρακολουθητές και όχι ο προγραµµατιστής. Σε χαµηλότερο επίπεδο βεβαίως η υλοποίηση γίνεται µε πιο στοιχειώδεις µηχανισµούς όπως δυαδικούς σηµαφόρους, κλπ. O συγχρονισµός επιτυγχάνεται µέσω των εξής µηχανισµών: Mόνο µία διεργασία κάθε χρονική στιγµή µπορεί να είναι ενεργή σε έναν παρακολουθητή. Aναστολή και επανεργοποίηση µίας διεργασίας γίνεται µε τις εντολές wait(s) και signal(s) όπου s είναι µία µεταβλητή συνθήκης (condition variable). H wait(s) αναστέλλει την καλούσα διεργασία, επιτρέποντας έτσι σε άλλη διεργασία να χρησιµοποιήσει τον παρακολουθητή. H signal(s) επιλέγει, µε βάση την πολιτική που ακολουθεί ο χρονοδροµολογητής, µία από τις διεργασίες που έχουν ανασταλλεί (αν υπάρχουν αλλιώς η signal δεν κάνει τίποτα) και περιµένουν στην ουρά της s, την επανεργοποιεί και επίσης υποχρεώνει τη διεργασία που εκτέλεσε τη signal να εξέλθει του παρακολουθητή. 3-33

34 11. Aµοιβαίος αποκλεισµός σε επίπεδο γλωσσών προγραµµατισµού (συνέχεια) Kάνοντας χρήση παρακολουθητών µπορούµε να υλοποιήσουµε το πρόβληµα του παραγωγού-καταναλωτή για µία προσωρινή θέση µνήµης: monitor Prod_Cons; condition full, empty; integer count=0; procedure enter; if count=1 then wait(full); enter_item; count:=1; signal(empty); procedure remove; if count=0 then wait(empty); remove_item; count:=0; signal(full); monitor procedure Producer; produce_item; Prod_Cons.enter; procedure Consumer; Prod_Cons.remove; consume_item; 3-34

35 11. Aµοιβαίος αποκλεισµός σε επίπεδο γλωσσών προγραµµατισµού (συνέχεια) Aν και η χρήση των εντολών wait και signal σε έναν παρακολουθητή είναι παρόµοια της χρήσης των αντίστοιχων εντολών ενός σηµαφόρου, εν τούτοις ο παρακολουθητής έχει µερικά σηµαντικά προτερήµατα (και διαφορές) έναντι του σηµαφόρου: Oι εντολές wait και signal ενός σηµαφόρου είναι διασκορπισµένες µέσα στον κώδικα ενός προγράµµατος, καθιστώντας έτσι την αποσφαλµάτωση αυτού του τελευταίου δύσκολη. Aντίθετα, η χρήση των αντίστοιχων εντολών σε έναν παρακολουθητή είναι περιορισµένη µέσα στον κώδικα που τον ορίζει. Λόγω του γεγονότος ότι οι δοµές δεδοµένων µέσα σε έναν παρακολουθητή δεν είναι άµεσα προσπελάσιµες από τις διεργασίες που κάνουν χρήση τους, υποστηρίζεται αυτόµατα ο αµοιβαίος αποκλεισµός και ο προγραµµατιστής χρειάζεται να ασχοληθεί µόνο µε τον σωστό συγχρονισµό εναλλαγής των διεργασιών στην πρόσβασή τους στις δοµές αυτές. Aντίθετα, όταν χρησιµοποιούνται σηµαφόροι, ο προγραµµατιστής έχει την επιπλέον υποχρέωση να υλοποιήσει σωστά και τον αµοιβαίο αποκλεισµό στην πρόσβαση σε κοινούς πόρους. Λόγω του ότι οι µηχανισµοί συγχρονισµού των διεργασιών που χρησιµοποιούν έναν παρακολουθητή περιορίζονται µέσα σε αυτόν, από τη στιγµή που ο παρακολουθητής έχει υλοποιηθεί σωστά πρόσβαση στα κρίσιµα τµήµατά του γίνεται µε τον ενδεδειγµένο τρόπο από οποιαδήποτε διεργασία. Aντίθετα, στην περίπτωση χρήσης σηµαφόρων θα πρέπει όλες οι διεργασίες που έχουν πρόσβαση σε κάποιο κρίσιµο τµήµα να προγραµµατισθούν σωστά. Σηµειωτέον, ότι η εντολή signal σε έναν παρακολουθητή λειτουργεί διαφορετικά από την αντίστοιχη εντολή ενός (γενικού) σηµαφόρου. Στη δεύτερη περίπτωση ακόµα και αν δεν υπάρχει καµµία διεργασία υπό αναστολή αναφορικά µε κάποιον σηµαφόρο, εκτελώντας ένα signal για αυτόν οδηγεί στην αύξηση της τιµής του κατά µία µονάδα. Στην πρώτη περίπτωση η εκτέλεση της signal για κάποια µεταβλητή συνθήκης απλά αγνοείται αν δεν υπάρχει καµµία διεργασία υπό αναστολή αναφορικά µε τη συνθήκη αυτή. 3-35

36 11. Aµοιβαίος αποκλεισµός σε επίπεδο γλωσσών προγραµµατισµού (συνέχεια) O ορισµός ενός παρακολουθητή όπως διαµορφώθηκε από τους Hoare και Hansen επιβάλλει ότι όταν εκτελείται µία εντολή signal(s) θα πρέπει αµέσως να ενεργοποιηθεί και να αρχίσει εκτέλεση κάποια από τις διεργασίες που είναι υπό αναστολή στη συνθήκη s. Eποµένως η διεργασία που εκτέλεσε την signal θα πρέπει ή να τερµατίσει αµέσως την εκτέλεσή της ή να την αναστείλει. Aυτό δηµιουργεί ορισµένα προβλήµατα: Aν η διεργασία που εκτέλεσε την signal δεν έχει ολοκληρώσει την εκτέλεσή της τότε θα χρειασθούν δύο επιπλέον εναλλαγές περιβάλλοντος για αυτήν (αναστολή και επανεργοποίηση). O µηχανισµός εναλλαγής στην KME της διεργασίας που εκτέλεσε την signal(s) µε κάποια άλλη διεργασία υπό αναστολή στην s πρέπει να γίνει µε ακρίβεια διαφορετικά κάποια τρίτη διεργασία µπορεί να προλάβει να εκτελεσθεί πρώτη και να αλλάξει την s. Oι Lampson και Redell πρότειναν ένα διαφορετικό ορισµό του παρακολουθητή όπου αντί για την signal υπάρχει η εντολή notify µε την εξής ερµηνεία: η εκτέλεση της εντολής notify(s) ναι µεν µεταφέρει το µήνυµα στην ουρά των υπό αναστολή διεργασιών στη συνθήκη s ότι κάποια από αυτές θα πρέπει κάποια στιγµή να ενεργοποιηθεί αλλά συνεχίζει την εκτέλεση της διεργασίας που έκανε χρήση της notify. H διεργασία που πρέπει να ενεργοποιηθεί θα επαναρχίσει εκτέλεση σε κάποια κατάλληλη για το Λ.Σ. µελλοντική στιγµή. Έτσι επιτυγχάνονται τα εξής: Tα προηγούµενα µειονεκτήµατα εξαλείφονται αφού δεν χρειάζονται οι δύο επιπλέον εναλλαγές περιβάλλοντος για τη διεργασία που εκτέλεσε την notify και επιπλέον το Λ.Σ. δεν είναι υποχρεωµένο να υποστηρίξει αυστηρή εναλλαγή των εµπλεκόµενων διεργασιών. H µέθοδος αυτή τείνει να δηµιουργεί λιγότερα λάθη γιατί δεν µπορεί ο προγραµµατιστής να βασισθεί σε υποστήριξη αυστηρής εναλλαγής και είναι υποχρεωµένος να εξετάζει πιο συχνά τις συνθήκες αναστολής των διεργασιών. Eπιπλέον οδηγεί στη δηµιουργία πιο αρθρωτών (modular) προγραµµάτων. 3-36

37 11. Aµοιβαίος αποκλεισµός σε επίπεδο γλωσσών προγραµµατισµού (συνέχεια) Mε τον παρακολουθητή των Lampson και Redell στο προηγούµενο πρόγραµµα τα if πρέπει να αλλαχθούν σε while: monitor Prod_Cons; condition full, empty; integer count=0; procedure enter; while count=1 then wait(full); enter_item; count:=1; notify(empty); procedure remove; while count=0 then wait(empty); remove_item; count:=0; notify(full); monitor procedure Producer; produce_item; Prod_Cons.enter; procedure Consumer; Prod_Cons.remove; consume_item; 3-37

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi Προϋποθέσεις για Αµοιβαίο Αποκλεισµό Μόνο µία διεργασία σε κρίσιµο τµήµασεκοινό πόρο Μία διεργασία που σταµατά σε µη κρίσιµο σηµείο δεν πρέπει να επιρεάζει τις υπόλοιπες διεργασίες εν πρέπει να υπάρχει

Διαβάστε περισσότερα

Ενότητα 4 (Κεφάλαιο 5) Συντρέχων Προγραμματισμός

Ενότητα 4 (Κεφάλαιο 5) Συντρέχων Προγραμματισμός ΕΠΛ222: Λειτουργικά Συστήματα (μετάφραση στα ελληνικά των διαφανειών του βιβλίου Operating Systems: Internals and Design Principles, 8/E, William Stallings) Ενότητα 4 (Κεφάλαιο 5) Συντρέχων Προγραμματισμός

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Η/Υ Λειτουργικά Συστήματα Η/Υ Κεφάλαιο 5 «Αμοιβαίος Αποκλεισμός» Διδάσκων: Δ Λιαροκάπης Διαφάνειες: Π. Χατζηδούκας 1 Αμοιβαίος Αποκλεισμός 1. Εισαγωγή 2. Κρίσιμα τμήματα (Critical Sections) 3. Υλοποίηση του

Διαβάστε περισσότερα

Διεργασίες (Processes)

Διεργασίες (Processes) Διεργασία (process) ή καθήκον (task) Διεργασίες (Processes) στοιχειώδης οντότητα/δραστηριότητα υπολογισμού (processing entity/activity) εκτέλεση ενός προγράμματος ένα (κύριο) νήμα (thread)/ρεύμα ελέγχου/εκτέλεσης

Διαβάστε περισσότερα

Επικοινωνία µεταξύ ιεργασιών και Σύνδροµες ιεργασίες

Επικοινωνία µεταξύ ιεργασιών και Σύνδροµες ιεργασίες Επικοινωνία µεταξύ ιεργασιών και Σύνδροµες ιεργασίες Interprocess Communication and Concurrent Processes Περίληψη Σύνδροµος Προγραµµατισµός Συνθήκη συναγωνισµού Συγχρονισµός διεργασιών Κρίσιµες περιοχές

Διαβάστε περισσότερα

Αμοιβαίος αποκλεισμός

Αμοιβαίος αποκλεισμός Αμοιβαίος αποκλεισμός 1. Εισαγωγή 2. Κρίσιμα τμήματα (Critical Sections) 3. Υλοποίηση του αμοιβαίου αποκλεισμού I. Προσεγγίσεις λογισμικού II. Υποστήριξη εκ μέρους του υλικού III. Σηματοφορείς 4. Κλασσικά

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Λειτουργικά Συστήματα Ενότητα 5 : Αμοιβαίος Αποκλεισμός Δημήτριος Λιαροκάπης 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου Τμήμα Μηχανικών

Διαβάστε περισσότερα

2.4 Κλασσικά Προβλήματα IPC

2.4 Κλασσικά Προβλήματα IPC 2.4 Κλασσικά Προβλήματα IPC 1 Οι φιλόσοφοι που γευματίζουν - Dining Philosophers Μια πρώτη λύση για Ν φιλοσόφους: philosopher (i) while (1) { think; take_fork(i);/* πάρε αριστερό ξυλάκι */ take_fork(i+1

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Λειτουργικά Συστήματα Ενότητα 4α: Σημαφόροι, Πρόβλημα Συνδαιτυμόνων Φιλοσόφων, Αδιέξοδα Αθηνά Βακάλη Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

ENOTHTA 4 A IEΞO O. Περιεχόµενα

ENOTHTA 4 A IEΞO O. Περιεχόµενα ENOTHTA 4 Περιεχόµενα 1. Aδιέξοδο 2. Eίδη πόρων 3. Συνθήκες αδιέξοδου 4. Aντιµετώπιση αδιέξοδου 5. Aγνόηση του αδιέξοδου 6. Πρόληψη του αδιέξοδου 7. Aνίχνευση και επανόρθωση αδιέξοδου 8. Aποφυγή αδιέξοδου

Διαβάστε περισσότερα

ENOTHTA 5 XPONO POMOΛOΓHΣH

ENOTHTA 5 XPONO POMOΛOΓHΣH ENOTHTA 5 Περιεχόµενα 1. Xρονοδροµολόγηση 2. Eίδη χρονοδροµολόγησης 3. Στόχοι και κριτήρια της χρονοδροµολόγησης 4. Tαξινόµηση αλγόριθµων χρονοδροµολόγησης 5. Xρονοδροµολόγηση µε βάση τον χρόνο εισόδου

Διαβάστε περισσότερα

Μάθημα 4 ο. Κρίσιμα Τμήματα και Αμοιβαίος Αποκλεισμός

Μάθημα 4 ο. Κρίσιμα Τμήματα και Αμοιβαίος Αποκλεισμός Μάθημα 4 ο Κρίσιμα Τμήματα και Αμοιβαίος Αποκλεισμός Εισαγωγή Σκοπός του μαθήματος αυτού είναι να εξηγήσει την έννοια του κρίσιμου τμήματος σε μία διεργασία και να δείξει τη λύση για ένα απλό πρόβλημα

Διαβάστε περισσότερα

Κεφάλαιο 3. Διδακτικοί Στόχοι

Κεφάλαιο 3. Διδακτικοί Στόχοι Κεφάλαιο 3 Σε ένα υπολογιστικό σύστημα η Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) εκτελεί τις εντολές που βρίσκονται στην κύρια μνήμη του. Οι εντολές αυτές ανήκουν σε προγράμματα τα οποία, όταν εκτελούνται,

Διαβάστε περισσότερα

ENOTHTA 8 IAXEIPIΣH KAI ΣYΣTHMATA APXEIΩN

ENOTHTA 8 IAXEIPIΣH KAI ΣYΣTHMATA APXEIΩN ENOTHTA 8 Περιεχόµενα 1. οµή αρχείων 2. Λειτουργίες επί των αρχείων 3. Oργάνωση αρχείων 4. Iδιοχαρακτηριστικά αρχείων 5. Kατάλογοι αρχείων 6. ιαχείριση του χώρου του δίσκου 7. Yλοποίηση αρχείων 8-1 1.

Διαβάστε περισσότερα

Αδιέξοδα (Deadlocks)

Αδιέξοδα (Deadlocks) Αδιέξοδα (Deadlocks) Περίληψη Αδιέξοδα (deadlocks) Τύποι πόρων (preemptable non preemptable) Μοντελοποίηση αδιεξόδων Στρατηγικές Στρουθοκαµηλισµός (ostrich algorithm) Ανίχνευση και αποκατάσταση (detection

Διαβάστε περισσότερα

Διάλεξη 8: Πρόβλημα Αμοιβαίου Αποκλεισμού. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Διάλεξη 8: Πρόβλημα Αμοιβαίου Αποκλεισμού. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι Διάλεξη 8: Πρόβλημα Αμοιβαίου Αποκλεισμού ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι Τι θα δούμε σήμερα Μοντέλο Κοινόχρηστης Μνήμης Αλγόριθμοι Αμοιβαίου Αποκλεισμού με Ισχυρούς Καταχωρητές ΕΠΛ432: Κατανεµηµένοι

Διαβάστε περισσότερα

ENOTHTA 9 AΣΦAΛEIA KAI ΠPOΣTAΣIA

ENOTHTA 9 AΣΦAΛEIA KAI ΠPOΣTAΣIA ENOTHTA 9 Περιεχόµενα 1. Aσφάλεια vs Προστασία 2. Aσφάλεια 3. Προϋποθέσεις για ύπαρξη ασφάλειας 4. Eίδη απειλών 5. Σχεδιαστικές αρχές για ασφάλεια 6. Mηχανισµοί προστασίας 9-1 1. Aσφάλεια vs Προστασία

Διαβάστε περισσότερα

2. ΙΕΡΓΑΣΙΕΣ Στέφανος Γκρίτζαλης Αναπληρωτής Καθηγητής Κωνσταντίνος Καραφασούλης ιδάσκων (Π 407) 2.1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΙΕΡΓΑΣΙΕΣ (1/11) 2.1.1 Το µοντέλο διεργασίας Για την επίτευξη ψευδοπαραλληλισµού (pseudoparallelism)

Διαβάστε περισσότερα

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

Εισαγωγή στα Λειτουργικά Συστήματα Εισαγωγή στα Λειτουργικά Συστήματα Ενότητα 4: Διεργασίες ΙΙ Γεώργιος Φ. Φραγκούλης Τμήμα Ηλεκτρολόγων Μηχανικών Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για

Διαβάστε περισσότερα

Κεφάλαιο 4 Διεργασίες Β Τάξη ΕΠΑΛ

Κεφάλαιο 4 Διεργασίες Β Τάξη ΕΠΑΛ Κεφάλαιο 4 Διεργασίες Β Τάξη ΕΠΑΛ Καθ. Παπαδάκη Αν. Λειτουργικά Συστήματα 1 Περιγραφή Διεργασίας Στους υπολογιστές που έχουν μια μόνο ΚΜΕ, σε κάθε χρονική στιγμή μπορεί να εκτελείται μια μόνο εντολή γλώσσας

Διαβάστε περισσότερα

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για: Σελίδα 1 από 11 Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για: την επικοινωνία, µε τα υπόλοιπα ολοκληρωµένα κυκλώµατα του υπολογιστικού συστήµατος. την παροχή τροφοδοσίας

Διαβάστε περισσότερα

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός Δομές Ακολουθίας- Επιλογής - Επανάληψης Δομημένος Προγραμματισμός 1 Βασικές Έννοιες αλγορίθμων Σταθερές Μεταβλητές Εκφράσεις Πράξεις Εντολές 2 Βασικές Έννοιες Αλγορίθμων Σταθερά: Μια ποσότητα που έχει

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι 5.1 Η έννοια του αλγορίθµου 5.2 Αναπαράσταση αλγορίθµων 5.3 Επινόηση αλγορίθµων 5.4 Δοµές επανάληψης 5.5 Αναδροµικές δοµές 1 Αλγόριθµος: Ορισµός Ένας αλγόριθµος είναι ένα διατεταγµένο

Διαβάστε περισσότερα

Ενότητα 2 (Κεφάλαιο 3) Περιγραφή και Έλεγχος Διεργασιών. Περιεχόμενα. Ανάγκη ύπαρξης διεργασιών 1

Ενότητα 2 (Κεφάλαιο 3) Περιγραφή και Έλεγχος Διεργασιών. Περιεχόμενα. Ανάγκη ύπαρξης διεργασιών 1 ΕΠΛ222: Λειτουργικά Συστήματα (μετάφραση στα ελληνικά των διαφανειών του βιβλίου Operating Systems: Internals and Design Principles, 8/E, William Stallings) Ενότητα 2 (Κεφάλαιο 3) Περιγραφή και Έλεγχος

Διαβάστε περισσότερα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Μάθηµα 1 Ο ρόλος του ΛΣ Υλικό Υπολογιστικό σύστηµα Λειτουργικό σύστηµα Λογισµικό Προγράµµατα εφαρµογής Στόχοι του ΛΣ Χρήστες ιευκόλυνση των χρηστών ιευκόλυνση

Διαβάστε περισσότερα

Ενότητα 6 (Κεφάλαιο 9) Χρονοδρομολόγηση

Ενότητα 6 (Κεφάλαιο 9) Χρονοδρομολόγηση ΕΠΛ222: Λειτουργικά Συστήματα (μετάφραση στα ελληνικά των διαφανειών του βιβλίου Operating Systems: Internals and Design Principles, 8/E, William Stallings) Ενότητα 6 (Κεφάλαιο 9) Χρονοδρομολόγηση Οι διαφάνειες

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Λειτουργικά Συστήματα Ενότητα 4: Σήματα. Διαδιεργασιακή Επικοινωνία. Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

Διαβάστε περισσότερα

Κεφάλαιο 5ο: Εντολές Επανάληψης

Κεφάλαιο 5ο: Εντολές Επανάληψης Χρήστος Τσαγγάρης ΕΕ ΙΠ Τµήµατος Μαθηµατικών, Πανεπιστηµίου Αιγαίου Κεφάλαιο 5ο: Εντολές Επανάληψης Η διαδικασία της επανάληψης είναι ιδιαίτερη συχνή, αφού πλήθος προβληµάτων µπορούν να επιλυθούν µε κατάλληλες

Διαβάστε περισσότερα

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

Διαβάστε περισσότερα

Συγχρονισµός: Αδιέξοδο & Παρατεταµένη Στέρηση

Συγχρονισµός: Αδιέξοδο & Παρατεταµένη Στέρηση Συγχρονισµός: Αδιέξοδο & Παρατεταµένη Στέρηση Κεφάλαιο 6 Αδιέξοδο Μόνιµη αναµονή ενός συνόλου διεργασιών οι οποίες ανταγωνίζονται για πόρους του συστήµατος ή για να επικοινωνήσουν µεταξύ τους εν υπάρχει

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ ΕΠΛ 035 - ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΓΙΑ ΗΛΕΚΤΡΟΛΟΓΟΥΣ ΜΗΧΑΝΙΚΟΥΣ ΚΑΙ ΜΗΧΑΝΙΚΟΥΣ ΥΠΟΛΟΓΙΣΤΩΝ Ακαδηµαϊκό έτος 2017-2018 Υπεύθυνος εργαστηρίου: Γεώργιος

Διαβάστε περισσότερα

Ε-85: Ειδικά Θέµατα Λογισµικού

Ε-85: Ειδικά Θέµατα Λογισµικού Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «ιεργασίες και Νήµατα» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

Παράλληλη Επεξεργασία Κεφάλαιο 4 Επικοινωνία Διεργασιών

Παράλληλη Επεξεργασία Κεφάλαιο 4 Επικοινωνία Διεργασιών Παράλληλη Επεξεργασία Κεφάλαιο 4 Επικοινωνία Διεργασιών Κωνσταντίνος Μαργαρίτης Καθηγητής Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας kmarg@uom.gr http://eos.uom.gr/~kmarg Αρετή Καπτάν Υποψήφια

Διαβάστε περισσότερα

Κρίσιμη Περιοχή Υπό Συνθήκη (Conditional Critical Regions) Ταυτόχρονος Προγραμματισμός 1

Κρίσιμη Περιοχή Υπό Συνθήκη (Conditional Critical Regions) Ταυτόχρονος Προγραμματισμός 1 Κρίσιμη Περιοχή Υπό Συνθήκη (onditional ritical Regions) Ταυτόχρονος Προγραμματισμός 1 lalis@inf.uth.gr Πέρα από ελεγκτές Ο ελεγκτής είναι χρήσιμο εργαλείο συγχρονισμού παρέχει στον προγραμματιστή εγγυημένο

Διαβάστε περισσότερα

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1 Αμοιβαίος αποκλεισμός με κοινή μνήμη 1 lalis@inf.uth.gr Το πρόβλημα Έστω ότι δύο η περισσότερα νήματα επιθυμούν να προσπελάσουν έναν κοινό πόρο, που όμως δεν μπορεί να χρησιμοποιηθεί ταυτόχρονα Η χρήση

Διαβάστε περισσότερα

Απαντήσεις. Απάντηση. Απάντηση

Απαντήσεις. Απάντηση. Απάντηση 6 η σειρά ασκήσεων Άλκης Γεωργόπουλος Α.Μ. 39 Αναστάσιος Κοντογιώργης Α.Μ. 43 Άσκηση 1. Απαντήσεις Η αλλαγή ενός ρολογιού προς τα πίσω µπορεί να προκαλέσει ανεπιθύµητη συµπεριφορά σε κάποια προγράµµατα.

Διαβάστε περισσότερα

Θέματα Προγραμματισμού Η/Υ

Θέματα Προγραμματισμού Η/Υ Πρόγραμμα Μεταπτυχιακών Σπουδών Πληροφορική και Υπολογιστική Βιοϊατρική Θέματα Προγραμματισμού Η/Υ Ενότητα 7: Θεματική Ενότητα: Δομές επανάληψης ΘΕΜΑΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ Θεματική Ενότητα 7 Δομές επανάληψης

Διαβάστε περισσότερα

Θοδωρής Ανδρόνικος Τμήμα Πληροφορικής, Ιόνιο Πανεπιστήμιο

Θοδωρής Ανδρόνικος Τμήμα Πληροφορικής, Ιόνιο Πανεπιστήμιο Θοδωρής Ανδρόνικος Τμήμα Πληροφορικής, Ιόνιο Πανεπιστήμιο Για το μάθημα «Διαχείριση Λειτουργικών Συστημάτων» του ακαδημαϊκού έτους 2015 2016, το προτεινόμενο σύγγραμμα είναι το: Operating Systems: Internals

Διαβάστε περισσότερα

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

ΔΙΕΡΓΑΣΙΕΣ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι Μάθημα: Λειτουργικά Συστήματα Ι ΔΙΕΡΓΑΣΙΕΣ Διδάσκων: Καθ. Κ. Λαμπρινουδάκης clam@unipi.gr 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΔΙΕΡΓΑΣΙΕΣ Διεργασία (Process) είναι η αφαιρετική θεώρηση ενός προγράμματος

Διαβάστε περισσότερα

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Κεφάλαιο 7: Υποπρογράμματα Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ορισμός Αφαίρεση με χρήση υποπρογραμμάτων (subprogram abstraction) είναι η αντιστοίχιση ενός συνόλου εισόδων σε ένα σύνολο εξόδων

Διαβάστε περισσότερα

ENOTHTA 2 IEPΓAΣIEΣ: ΠEPIΓPAΦH KAI EΛEΓXOΣ

ENOTHTA 2 IEPΓAΣIEΣ: ΠEPIΓPAΦH KAI EΛEΓXOΣ ENOTHTA 2 Περιεχόµενα 1. Aνάγκη για ύπαρξη διεργασιών 2. Kαταστάσεις διεργασιών 3. Aναπαράσταση των διεργασιών στο Λειτουργικό Σύστηµα 4. Έ λεγχος διεργασιών 5. Eκτέλεση του Λειτουργικού Συστήµατος 6.

Διαβάστε περισσότερα

Κεφάλαιο 7: Υπορουτίνες

Κεφάλαιο 7: Υπορουτίνες Κεφάλαιο 7: Υπορουτίνες Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ορισμός Αφαίρεση με χρήση υπορουτινών (subroutine abstraction) είναι η αντιστοίχιση ενός συνόλου εισόδων σε ένα σύνολο εξόδων που μπορεί

Διαβάστε περισσότερα

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1 Ελεγκτές/Παρακολουθητές (Monitors) 1 lalis@inf.uth.gr Ελεγκτές Αμοιβαίος αποκλεισμός στο πλαίσιο ενός τμήματος λογισμικού που προσπελάζεται με δομημένο τρόπο, μέσω προκαθορισμένης διασύνδεσης (API) Ο συγχρονισμός

Διαβάστε περισσότερα

2.3 Επικοινωνία Διεργασιών

2.3 Επικοινωνία Διεργασιών 2.3 Επικοινωνία Διεργασιών 2.3.3 Η λύση του Peterson. (για 2 διεργασίες) Το σενάριο περιλαμβάνει 2 διεργασίες. Υπάρχουν 2 ρουτίνες που καλούνται για να μπούν και να βγούν οι διεργασίες σε/από critical

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Λειτουργικά Συστήματα Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Στέργιος Παλαμάς, Υλικό Μαθήματος «Λειτουργικά Συστήματα», 2015-2016 Κεφάλαιο 4: Διεργασίες Πρόγραμμα Πρόγραμμα 1 Πρόγραμμα

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ 1. Ποιες από τις παρακάτω εντολές είναι σωστές; α) if A + B

Διαβάστε περισσότερα

Κεφάλαιο 3: Λειτουργικά Συστήµατα

Κεφάλαιο 3: Λειτουργικά Συστήµατα Κεφάλαιο 3: Λειτουργικά Συστήµατα B Μέρος Συντονισµός Δραστηριοτήτων Υπολογιστή Copyright 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Εισαγωγή Σήµερα θα περιγράψουµε πως ένα λειτουργικό

Διαβάστε περισσότερα

Μεταγλωττιστές Βελτιστοποίηση

Μεταγλωττιστές Βελτιστοποίηση Μεταγλωττιστές Βελτιστοποίηση Νίκος Παπασπύρου nickie@softlab.ntua.gr Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχ. Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Πολυτεχνειούπολη, 15780

Διαβάστε περισσότερα

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) 133 244 355 a= b= c= 3 read(d,e) 166 277 3888

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) 133 244 355 a= b= c= 3 read(d,e) 166 277 3888 ΕΡΩΤΗΣΕΙΣ 1. Να αναφέρετε μερικά από τα ιδιαίτερα χαρακτηριστικά της Pascal. 2. Ποιο είναι το αλφάβητο της Pascal; 3. Ποια είναι τα ονόματα-ταυτότητες και σε τι χρησιμεύουν; 4. Σε τι χρησιμεύει το συντακτικό

Διαβάστε περισσότερα

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Pascal, απλοί τύποι, τελεστές και εκφράσεις Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το

Διαβάστε περισσότερα

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13 Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13 ΙΣΤΟΡΙΚΑ Παρουσιάστηκε το 1970 από το Niklaus Wirth Προγενέστερη γλώσσα ήταν η Algol 60 Είναι δομημένη γλώσσα προγραμματισμού υψηλού

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα

ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα 3.1 Η εξέλιξη των λειτουργικών συστηµάτων 3.2 Αρχιτεκτονική λειτουργικών συστηµάτων 3.3 Συντονισµός των δραστηριοτήτων του υπολογιστή 3.4 Χειρισµός ανταγωνισµού µεταξύ

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Μεταγλωττιστές Στοίβα Εκτέλεσης και Εγγραφήματα Δραστηριοποίησης Σε όλες σχεδόν τις μοντέρνες γλώσσες προγραμματισμού,

Διαβάστε περισσότερα

Διάλεξη 10: Αλγόριθμοι Αμοιβαίου Αποκλεισμού σε περιβάλλον ανταλλαγής μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Διάλεξη 10: Αλγόριθμοι Αμοιβαίου Αποκλεισμού σε περιβάλλον ανταλλαγής μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι Διάλεξη 10: Αλγόριθμοι Αμοιβαίου Αποκλεισμού σε περιβάλλον ανταλλαγής μηνυμάτων ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι Τι θα δούμε σήμερα Αλγόριθμος Χρήση Συντονιστή Αλγόριθμος του Lamport Αλγόριθμος LeLann:

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης Εντολές Ελέγχου 2 Γενικά Εντολές λήψης αποφάσεων Επιτρέπουν στο πρόγραμμα να εκτελεί διαφορετικές

Διαβάστε περισσότερα

3.1 Λειτουργικό Σύστηµα. Λειτουργικό Σύστηµα (2) ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα. Ο υπολογιστής σαν σκέτο hardware έχει περιορισµένη χρησιµότητα

3.1 Λειτουργικό Σύστηµα. Λειτουργικό Σύστηµα (2) ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα. Ο υπολογιστής σαν σκέτο hardware έχει περιορισµένη χρησιµότητα ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα 3. Λειτουργικό Σύστηµα 3. Η εξέλιξη των λειτουργικών συστηµάτων 3.2 Αρχιτεκτονική λειτουργικών συστηµάτων 3.3 Συντονισµός των δραστηριοτήτων του υπολογιστή 3.4 Χειρισµός

Διαβάστε περισσότερα

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι ΙΕΡΓΑΣΙΕΣ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΙΕΡΓΑΣΙΕΣ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι Μάθηµα: Λειτουργικά Συστήµατα Ι ΙΕΡΓΑΣΙΕΣ ιδάσκων: Αναπλ. Καθ. Κ. Λαµπρινουδάκης clam@unipi.gr 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΙΕΡΓΑΣΙΕΣ ιεργασία (Process) είναι η αφαιρετική θεώρηση ενός προγράµµατος

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Άσκηση : Λυμένες Ασκήσεις Έστω ένα σύστημα μνήμης, στο οποίο έχουμε προσθέσει μια κρυφή μνήμη θυμάτων 6 θέσεων

Διαβάστε περισσότερα

Επικοινωνία Διεργασιών (ΙnterProcess Communication, IPC)

Επικοινωνία Διεργασιών (ΙnterProcess Communication, IPC) Επικοινωνία Διεργασιών (ΙnterProcess Communication, IPC) Τουλάχιστον δύο διεργασίες (ο αποστολέας και ο παραλήπτης) Σύγχρονη (synchronous) Aσύγχρονη (asynchronous) Χρονική σύνδεση Δε χρειάζεται χρονική

Διαβάστε περισσότερα

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, και Ε/Ε) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2014-15 Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, και Ε/Ε) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης Γ7.5 Αλγόριθμοι Αναζήτησης Γ Λυκείου Κατεύθυνσης Εισαγωγή Αλγόριθμος αναζήτησης θεωρείται ένας αλγόριθμος, ο οποίος προσπαθεί να εντοπίσει ένα στοιχείο με συγκεκριμένες ιδιότητες, μέσα σε μία συλλογή από

Διαβάστε περισσότερα

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Λειτουργικά Συστήματα Ενότητα 4: Σήματα. Διαδιεργασιακή Επικοινωνία. Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

Διαβάστε περισσότερα

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY20) # μνήμη & μεταβλητές πρόγραμμα & εκτέλεση Ψηφιακά δεδομένα, μνήμη, μεταβλητές 2 Δυαδικός κόσμος Οι υπολογιστές είναι δυαδικές μηχανές Όλη η πληροφορία (δεδομένα και κώδικας) κωδικοποιείται

Διαβάστε περισσότερα

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1 Ελεγκτές/Παρακολουθητές (Monitors) 1 lalis@inf.uth.gr Ελεγκτές Αμοιβαίος αποκλεισμός στο πλαίσιο ενός τμήματος λογισμικού που προσπελάζεται με δομημένο τρόπο, μέσω προκαθορισμένης διασύνδεσης (API) Ο συγχρονισμός

Διαβάστε περισσότερα

Ασύγχρονο Σύστηµα ιαµοιραζόµενης Μνήµης Το σύστηµα περιέχει n διεργασίες p 0,, p n-1 και m καταχωρητές R 0,, R m-1. Κάθε διεργασία µοντελοποιείται ως

Ασύγχρονο Σύστηµα ιαµοιραζόµενης Μνήµης Το σύστηµα περιέχει n διεργασίες p 0,, p n-1 και m καταχωρητές R 0,, R m-1. Κάθε διεργασία µοντελοποιείται ως Αµοιβαίος Αϖοκλεισµός Παναγιώτα Φατούρου Κατανεµηµένα Συστήµατα 1 Ασύγχρονο Σύστηµα ιαµοιραζόµενης Μνήµης Το σύστηµα περιέχει n διεργασίες p 0,, p n-1 και m καταχωρητές R 0,, R m-1. Κάθε διεργασία µοντελοποιείται

Διαβάστε περισσότερα

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

Διαβάστε περισσότερα

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA 1. Εισαγωγή Τι είναι Νήµα; Κάθε νήµα εκτέλεσης είναι ουσιαστικά

Διαβάστε περισσότερα

Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1

Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1 Νήµαταστην Java Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων Κατανεµηµένα Συστήµατα 11-1 Νήµαταστην Java γεννηθείσα notify notifyall έτοιµη start εκπνοή

Διαβάστε περισσότερα

Επιτεύγµατα των Λ.Σ.

Επιτεύγµατα των Λ.Σ. Επιτεύγµατα των Λ.Σ. ιεργασίες ιαχείριση Μνήµης Ασφάλεια και προστασία δεδοµένων Χρονοπρογραµµατισµός & ιαχείρηση Πόρων οµή Συστήµατος ιεργασίες Ένα πρόγραµµα σε εκτέλεση Ένα στιγµιότυπο ενός προγράµµατος

Διαβάστε περισσότερα

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ. ΚΑΤΕΥΘΥΝΣΗ ΔΙΟΙΚΗΣΗΣ ΤΟΥΡΙΣΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΕΩΝ ΦΙΛΟΞΕΝΙΑΣ Πληροφορική I "Προγραμματισμός" B. Φερεντίνος

Διαβάστε περισσότερα

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Προπτυχιακό Πρόγραμμα Σπουδών Πληροφορική - ΠΛΗ 11-2005 - 06 ΕΠΑΝΑΛΗΠΤΙΚΗ ΤΕΛΙΚΗ ΕΞΕΤΑΣΗ 8 ΙΟΥΛΙΟΥ 2006 ΜΕΡΟΣ Α'. ΕΡΩΤΗΣΕΙΣ ΠΟΛΛΑΠΛΩΝ ΕΠΙΛΟΓΩΝ [ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 45 ] Σε κάθε ερώτηση απαντάτε επιλέγοντας

Διαβάστε περισσότερα

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Πρόγραμμα και εκτέλεση προγράμματος Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα

Διαβάστε περισσότερα

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation) Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation) Εισαγωγή Μοντέλο συστήματος Χαρακτηρισμός και ορισμός κατάστασης αδιεξόδου Μέθοδοι χειρισμού αδιεξόδων Αποτροπή αδιεξόδου (Deadlock Prevention) Αποφυγή

Διαβάστε περισσότερα

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr Η έννοια της διεργασίας ιεργασία (process) είναι ο µηχανισµός εκτέλεσης ενός προγράµµατος σε ένα λειτουργικό σύστηµα. Η διεργασία είναι µια ενεργή

Διαβάστε περισσότερα

Λειτουργικά Συστήματα (ΗΥ222)

Λειτουργικά Συστήματα (ΗΥ222) Λειτουργικά Συστήματα (ΗΥ222) Ταυτοχρονισμός, Συγχρονισμός Πολλαπλές Διεργασίες/Νήματα σε 1 Κοινωνία: Προβλήματα; «Κοινωνικές Γιάννης διεργασίες/νήματα»: Διαβάζουν/γράφουν στον ίδιο χώρο. Αποτέλεσμα; Πιθανότατα

Διαβάστε περισσότερα

6. Α ΙΕΞΟ Α Στέφανος Γκρίτζαλης Αναπληρωτής Καθηγητής Κωνσταντίνος Καραφασούλης ιδάσκων (Π 407) 6.1 ΠΟΡΟΙ (1/2) Υπάρχουν δύο τύποι πόρων σε υπολογιστικά συστήµατα: προεκχωρήσιµοι πόροι (preemptable resources):

Διαβάστε περισσότερα

Μεταγλωττιστές Βελτιστοποίηση

Μεταγλωττιστές Βελτιστοποίηση Βελτιστοποίηση (i) Μεταγλωττιστές Βελτιστοποίηση Νίκος Παπασπύρου nickie@softlab.ntua.gr Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχ. Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Πολυτεχνειούπολη,

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες»

1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες» 1. Εισαγωγή Λειτουργικά Συστήματα Η/Υ Κεφάλαιο 3 «Διεργασίες» Διδάσκων: Δ Λιαροκάπης Διαφάνειες: Π. Χατζηδούκας Η έννοια της διεργασίας (process) είναι θεμελιώδης για την κατανόηση του τρόπου με τον οποίο

Διαβάστε περισσότερα

ιαφάνειες παρουσίασης #4

ιαφάνειες παρουσίασης #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ http://www.corelab.ece.ntua.gr/courses/programming/ ιδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

Διαβάστε περισσότερα

ΑΔΙΕΞΟΔΑ (Deadlocks) Παράδειγμα 1 Θανάσιμο αγκάλιασμα (deadly embrace)

ΑΔΙΕΞΟΔΑ (Deadlocks) Παράδειγμα 1 Θανάσιμο αγκάλιασμα (deadly embrace) Παράδειγμα 1 Ένα σύστημα με έναν εκτυπωτή και ένα σαρωτή εγγράφων Δύο διεργασίες Ρ1 και Ρ2 Η Ρ1 δεσμεύει τον εκτυπωτή Η Ρ2 δεσμεύει το σαρωτή Η Ρ1 ζητά το σαρωτή και εμποδίζεται Η Ρ2 ζητά τον εκτυπωτή

Διαβάστε περισσότερα

Λειτουργικά συστήματα πραγματικού χρόνου

Λειτουργικά συστήματα πραγματικού χρόνου Λειτουργικά συστήματα πραγματικού χρόνου Τι είναι λειτουργικό σύστημα πραγματικού χρόνου; Λειτουργικό Σύστημα Πραγματικού Χρόνου (ΛΣΠΧ) είναι ένα λειτουργικό σύστημα που προορίζεται για εφαρμογές πραγματικού

Διαβάστε περισσότερα

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα ΝΗΜΑΤΑ ΣΤΗ JAVA (1) Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα πρόγραµµα. Αιτία Η δυνατότητα αποµόνωσης (ή αυτονόµησης) κάποιων

Διαβάστε περισσότερα

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

Διαβάστε περισσότερα

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε Οµοφωνία σε σύστηµα µε αϖοτυχίες κατάρρευσης διεργασιών Παναγιώτα Φατούρου Κατανεµηµένα Συστήµατα 1 Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες

Διαβάστε περισσότερα

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD) Η Γλώσσα Pascal Χαρακτηριστικά Τύποι Δεδοµένων Δοµή προγράµµατος 1. Βασικές έννοιες Χαρακτηριστικά της γλώσσας Pascal Γλώσσα προγραµµατισµού Συντακτικό Σηµασιολογία Αλφάβητο της γλώσσας Pascal (Σύνολο

Διαβάστε περισσότερα

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων 1 Είσοδος/Έξοδος Είσοδος/Έξοδος ανάλογα με τον τύπο του προγράμματος Πρόγραμμα

Διαβάστε περισσότερα

επιµέλεια Θοδωρής Πιερράτος

επιµέλεια Θοδωρής Πιερράτος Βασικές έννοιες προγραµµατισµού Η ύλη που αναπτύσσεται σε αυτό το κεφάλαιο είναι συναφής µε την ύλη που αναπτύσσεται στο 2 ο κεφάλαιο. Όπου υπάρχουν διαφορές αναφέρονται ρητά. Προσέξτε ιδιαίτερα, πάντως,

Διαβάστε περισσότερα

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη. Εργαστήριο 4: 4.1 Η Δομή Ελέγχου if Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη. Γενική Μορφή: Παρατηρήσεις:

Διαβάστε περισσότερα

Πληροφορική ΙΙ Θεματική Ενότητα 7

Πληροφορική ΙΙ Θεματική Ενότητα 7 Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Πληροφορική ΙΙ Θεματική Ενότητα 7 Δομές επανάληψης Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

Διαβάστε περισσότερα

Ιδιοκτησία Αντικειµένου

Ιδιοκτησία Αντικειµένου Software Transactional Memory H STM υποστηρίζει την εκτέλεση δοσοληψιών από τις διεργασίες, οι οποίες περιέχουν λειτουργίες που ο χρήστης θέλει να εκτελέσει στα διαµοιραζόµενα αντικείµενα. H STM εγγυάται

Διαβάστε περισσότερα

Παράλληλη Επεξεργασία Κεφάλαιο 2 Παραλληλισμός Δεδομένων

Παράλληλη Επεξεργασία Κεφάλαιο 2 Παραλληλισμός Δεδομένων Παράλληλη Επεξεργασία Κεφάλαιο 2 Παραλληλισμός Δεδομένων Κωνσταντίνος Μαργαρίτης Καθηγητής Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας kmarg@uom.gr http://eos.uom.gr/~kmarg Αρετή Καπτάν Υποψήφια

Διαβάστε περισσότερα

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

Διαβάστε περισσότερα

Τυχαίοι αριθμοί struct Αρχεία Διαμορφώσεις Συναρτήσεις Χειρισμός σφαλμάτων ΠΕΜΠΤΗ ΔΙΑΛΕΞΗ

Τυχαίοι αριθμοί struct Αρχεία Διαμορφώσεις Συναρτήσεις Χειρισμός σφαλμάτων ΠΕΜΠΤΗ ΔΙΑΛΕΞΗ ΠΕΜΠΤΗ ΔΙΑΛΕΞΗ Γεννήτρια τυχαίων αριθμών Η C++ παρέχει στο συναρτήσεις και κλάσεις και κλάσεων για την παραγωγή τυχαίων αριθμών. Υπάρχουν Μηχανισμοί παραγωγής σειράς τυχαίων bits. Κάθε bit έχει ίδια πιθανότητα

Διαβάστε περισσότερα

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation) Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation) Το Πρόβλημα του Αδιεξόδου Ένα σύνολο από διεργασίες σε αναμονή, όπου η κάθε μια κατέχει έναν αριθμό από πόρους και περιμένει να αποκτήσει και έναν

Διαβάστε περισσότερα

Διάλεξη 9: Αλγόριθμοι Αμοιβαίου Αποκλεισμού με τη χρήση μεταβλητών Ανάγνωσης/Εγγραφής. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Διάλεξη 9: Αλγόριθμοι Αμοιβαίου Αποκλεισμού με τη χρήση μεταβλητών Ανάγνωσης/Εγγραφής. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι Διάλεξη 9: Αλγόριθμοι Αμοιβαίου Αποκλεισμού με τη χρήση μεταβλητών Ανάγνωσης/Εγγραφής ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι Τι θα δούμε σήμερα Αλγόριθμος Ψησταριάς (Bakery Algorithm) Αλγόριθμος 2- επεξεργαστών

Διαβάστε περισσότερα