monkey90 Δημοσ. 8 Μαΐου 2012 Δημοσ. 8 Μαΐου 2012 Έχω την εξείς άσκηση την οποία δε μπορώ να λύσω. Αν μπορεί να με βοηθήσει κάποιος θα μου προσθέσει βαθμούς. Σε ψευδογλώσσα η λύση. Είναι διαθέσιμη η συνάρτηση getCurrentTime() η οποία επιστρέφει τη τρέχουσα ημερομηνία και ώρα. Λέει στο παραπάνω πρόβλημα στη λύση που θα δώσετε θα ενσωματώσετε τις εξείς διευθετύσεις. 1)εάν ενασ αναγνώστης ζητησει πρόσβαση στη βάση δεδομένων ενώ είναι κλειδωμένοι για τους αναγνώστες και παράλληλα υπαρχει εγγραφέας που περιμένει για πάνω από 10 δευτερα, τότε ο αναγνώστης εξαναγκάζεται σε αναμονή και θα του επιτραπεί η είσοδος μόνο όταν θα έχει τελειώσει ο εγγραφέας 2)εάν αρθεί το κλείδωμα της βάσης δεδομένων από έναν εγγραφέα και βρίσκονται σε αναμονή τόσο αναγνώστες όσο και εγγραφείς τότε θα επιτραπεί η συνέχεια της εκτέλεσης σε αυτόν που περιμένει περισσότερο. Εάν επιλεχθεί να συνεχίσει ο αναγνώστης τότε θα επιτραπεί και σε τυχόν λοιπούς αναγνώστες που αναμένουν να συνεχίσουν. Έχω βρει αυτό το πχ(το τελευταίο) http://jcsites.juniata.edu/faculty/rhodes/os/ch5d.htm αλλά δεν βγάζω άκρη. Ευχαριστώ για το χρόνο σας.
ChRis6 Δημοσ. 8 Μαΐου 2012 Δημοσ. 8 Μαΐου 2012 Κλασσικο προβλημα συγχρονισμου.... Καθε αναγνωστης/εγγραφεας προτου κανει τη δουλεια του , στελνει μηνυμα εισοδου στη βαση δεδομενων/κρισιμο τμημα και περιμενει απαντηση απο το συντονιστη . Οι λειτουργιες send και receive μπλοκαρουν μεχρι ανα ζευγη ! Δηλαδη , αν ο συντονιστης καλεσει την receive( "the_message" , &pid) , θα μπλοκαρει μεχρις οτου λαβει ενα μηνυμα "the_message" απο καποιον ! Αρα ( οπως λεει και το link που δινεις ) ενας αναγνωστης / εγγραφεας στελνει μηνυμα στο συντονιστη ( controller ) και περιμενει απαντηση. Οταν λαβει απαντηση , τοτε ειναι σιγουρος οτι μπορει να μπει ! Και φυσικα οταν τελειωνει , ενημερωνει το συντονιστη , ωστε αυτος να δωσει το "ok" σε αλλους που ενδεχομενως περιμενουν( εχουν μπλοκαρει δηλαδη ) στο receive τους. Συνηθως επιτρεπεται να εχεις πολλους αναγνωστες στη βαση δεδομενων/κρισιμο τμημα , αλλα μονο εναν εγγραφεα για προφανεις λογους Για αυτο συνηθως ο συντονιστης αν ξερει οτι εκεινη τη στιγμη υπαρχουν ενεργοι αναγνωστες , επιβεβαιωνει την εισοδο και σε αλλους αναγνωστες και δεν τους αφηνει να περιμενουν.Αυτο βεβαια ειναι προβλημα , γιατι αν ερχονται συνεχως αναγνωστες και στη βαση δεδομενων εχεις συνεχεια τουλαχιστον εναν , τοτε οι εγγραφεις ειναι καταδικασμενοι να περιμενουν για παντα ! Για αυτο το λογο , η ασκηση σου βαζει μεσα ενα timeout , ωστε να μην υπαρχει λιμοκτονια για τους εγγραφεις ! Το κεντρικο σημειο του προβληματος και της ασκησης , οπως καταλαβαινεις, ειναι ο συντονιστης ! Αυτος πρεπει να δινει το "οκ" σε εγγραφεις/ αναγνωστες , να θυμαται ποσοι περιμενουν , για ποσο χρονο περιμενουν κτλ ! Αυτο ειναι σχετικα ευκολο , αν θεωρησεις οτι καθε reader/writer εχει ενα μοναδικο id . Αν ξερεις οτι τα id ειναι μοναδικα , τοτε αυτο που πρεπει να κανεις ειναι να ελεγχεις αρχικα αν καποιος ειναι μεσα στο κρισιμο τμημα/ βαση δεδομενων , ποιος απο τους 2 ειναι μεσα( reader ή writer ) και αναλογα με τις παραπανω συνθηκες και της ασκησης δινεις το "οκ" σε αιτησεις που φτανουν .
monkey90 Δημοσ. 8 Μαΐου 2012 Μέλος Δημοσ. 8 Μαΐου 2012 Ευχαριστώ για την απάντισή σου. Το πρόβλημα μου είναι πως μπερδέβομαι πολύ με τον ψευδοκώδικα >_< Μήπος μπορείς να προσθέσεις στον κώδικα του site τις απαραίτητες γραμμές ψευδοκώδικα. Το ξέρω τα θέλω όλα έτοιμα αλλά δε βγάζω άκρη. Το παλέβω πάντως. σε ευχαριστώ
ChRis6 Δημοσ. 8 Μαΐου 2012 Δημοσ. 8 Μαΐου 2012 Ο κωδικας της σελιδας που δινεις ειναι σε ψευδοκωδικα νομιζω. Πες μου ποια σημεια δεν καταλαβαινεις και θα προσπαθησω , οσο μπορω , να σε βοηθησω
monkey90 Δημοσ. 8 Μαΐου 2012 Μέλος Δημοσ. 8 Μαΐου 2012 είναι σε ψευδοκώδικα και η λύση που θα δώσω εγώ πάλι σε ψευδοκώδικα θα είναι. Η αλλαγή που θα κάνω (με τη χρήση της getCurrentTime() είναι στην συνάρτηση controler? Οι άλλες 2 θα μείνουν όπως είναι? Τι είναι το if(!empty("fini")) ?
ChRis6 Δημοσ. 8 Μαΐου 2012 Δημοσ. 8 Μαΐου 2012 Ναι το συντονιστη πρεπει να φτιαξεις ! Οι εγγραφεις/αναγνωστες ειναι απλοι και δεν βλεπω αυτη τη στιγμη να χρειαζεται να προσθεσεις κατι στον κωδικα τους. Συμβουλη : Μην παρεις σαν βαση τον συντονιστη που εχει η συγκεκριμενη σελιδα . Προσπαθησε μονος σου να βρεις ενα αφηρημενο "πρωτοκολλο" επικοινωνιας και υστερα γραψε σε κωδικα την παραπανω "αφηρημενη" λυση σου ! Δηλαδη αποφασησε ποσες και ποιες ουρες αναγνωστων/εγγραφεων θα χρειαστεις , ποτε καποιος πρεπει να περιμενει , ποτε μπορει να βγει απο την ουρα κτλ
monkey90 Δημοσ. 8 Μαΐου 2012 Μέλος Δημοσ. 8 Μαΐου 2012 Ευχαριστώ πάρα πολύ το προσπαθώ. έχω μια απορία..δεν καταλβαίνω στην controller. το count που πρωτοπαίρνει τιμη..
ChRis6 Δημοσ. 8 Μαΐου 2012 Δημοσ. 8 Μαΐου 2012 Αρχικα βρες μια απλη λυση που να παρεχει μονο το συγχρονισμο σε αναγνωστες/εγγραφεις ! Αν υλοποιησεις αυτο , ολα τα παραπανω που ζηταει η ασκηση θα ειναι πιο ευκολο να γινουν Edit: Ναι ειναι ενα θεμα που παιρνει τιμη το count !
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα