/OS-Project1

Child processes send requests to parent process, works like a client-server model.

Primary LanguageCMIT LicenseMIT

Βασιλείου Ρηγίνος sdi1900019

Το πρόγραμμά μου αποτελείται από μια main στην οποία υπάρχει ο κώδικας για τη γονική διεργασία και για τα παιδιά. Αρχικά φτιάχνω τη διαμοιραζόμενη μνήμη και την κάνω attach στο process. Ανοίγω το αρχείο από το οποίο θέλω να διαβάσω τις γραμμές , μπορείτε να δώσετε όποιο αρχείο κειμένου θέλετε στη μεταβλητή filename). Στην αρχή υπολογίζω τις γραμμές του αρχείου. Μετά φτιάχνω τους σημαφόρους. Χρησιμοποιώ 3 named semaphores. Ο sem1 είναι για να δηλώνει αν η γονική διεργασία έχει τελειώσει με το προηγούμενο παιδί. Ο sem2 δείχνει αν ο πατέρας έχει τελειώσει με το προηγούμενο αίτημα και ο sem3 περιμένει το παιδί να γράψει στη μνήμη.

Στη γονική διεργασία

Έχουμε το shared memory, και ο πρώτος σημαφόρος δείχνει ότι ο πατέρας δε χρειάζεται να περιμένει κάποιο παιδί (έχει αρχικοποιηθεί με 1, οπότε μπαίνει στην sem_wait() χωρίς να χρειαστεί να περιμένει). Τώρα έχει τιμή 0. Μετά περιμένει από το παιδί να γράψει στη μνήμη εφόσον ο 3ος σημαφόρος είναι 0. Παίρνει από το παιδί τον τυχαίο αριθμό και ψάχνει τη γραμμή του αρχείου, τη βρίσκει και την εκτυπώνει. Μετά δηλώνει πως είναι έτοιμος για το επόμενο request.

Στο παιδί

Έχουμε το shared memory, και με τον δεύτερο σημαφόρο περιμένουμε τον πατέρα να τελειώσει με το προηγούμενο request. Βρίσκει έναν τυχαίο αριθμό και τον γράφει στη μνήμη. Μετά δηλώνει στον πατέρα ότι έγραψε στη μνήμη. Όταν τελειώσει με τα n requests δηλώνει στον πατέρα ότι τελείωσε αυτό το παιδί.

Η clock

Αρχίζει από τη στιγμή που θα γράψει το παιδί στη μνήμη και τελειώνει στη στιγμή που θα επιστρέψει από τη γονική διεργασία και έχει εκτυπωθεί το μήνυμα.