Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
Δημιουργία Διεργασιών
Η διεργασία γονέας (parent process) δημιουργεί παιδιά (child processes), τα οποία, με τη σειρά τους, μπορούν να δημιουργήσουν άλλες διεργασίες διαμορφώνοντας έτσι ένα δέντρο διεργασιών. Η διεργασία γονέας και τα παιδιά της εκτελούνται ταυτόχρονα. Η διεργασία παιδί είναι ένα διπλότυπο της διεργασίας γονέα. Υλοποίηση στο UNIX: η κλήση συστήματος fork δημιουργεί μία νέα διεργασία.
2
Δέντρο διεργασιών σε ένα σύστημα UNIX
root page daemon swapper init User 1 User 2 User 3
3
Κλήσεις συστήματος UNIX
fork() wait() exit()
4
UNIX fork() Από την τρέχουσα διεργασία προκύπτουν δύο διεργασίες: ο γονέας και το παιδί. Η διεργασία παιδί κληρονομεί από τον γονέα: ακριβές αντίγραφο της μνήμης, περιεχόμενα καταχωρητών, όλα τα αρχεία τα οποία έχει ανοίξει ο γονέας. Επιστρέφει -1 εάν δεν επιτύχει. Ο γονέας και το παιδί εκτελούν στο ίδιο σημείο μετά την κλήση fork(). Για το παιδί, η fork() επιστρέφει 0. Για το γονέα, η fork() επιστρέφει τον προσδιοριστή διεργασίας (Process identifier) του παιδιού.
5
Παράδειγμα fork() Το πλαίσιο εκτέλεσης (execution context) της διεργασίας παιδί είναι αντίγραφο του πλαισίου εκτέλεσης του γονέα στη χρονική στιγμή της κλήσης.
6
Λειτουργία fork (1/6)
7
Λειτουργία fork (2/6)
8
Λειτουργία fork (3/6)
9
Λειτουργία fork (4/6)
10
Λειτουργία fork (5/6)
11
Λειτουργία fork (6/6)
12
Παράδειγμα fork
13
Κανονικός τερματισμός διεργασίας: exit()
αυτή η κλήση συστήματος: Σώζει το αποτέλεσμα – όρισμα της exit. Kλείνει όλα τα ανοικτά αρχεία και τις συνδέσεις. Αποδεσμεύει την μνήμη. Αποδεσμεύει τις περισσότερες από τις δομές OS που έχει δεσμεύσει η διεργασία. Ελέγχει αν η γονική διεργασία είναι ζωντανή. Εάν η γονική διεργασία είναι ζωντανή, το αποτέλεσμα της τρέχουσας κρατείται (μαζί με PID και CPU time) μέχρι να το ζητήσει ο γονέας. Σε αυτή την περίπτωση η διεργασία δεν «πεθαίνει» αλλά μπαίνει σε μία κατάσταση zombie. Εάν η γονική διεργασία δεν είναι ζωντανή, όλες οι δομές αποδεσμεύονται και η διεργασία παιδί τερματίζει.
14
Κλήση συστήματος wait()
H wait() υλοποιεί ένα απλό τρόπο για την επιβεβαίωση της ολοκλήρωσης μίας διεργασίας. Η καλούσα διεργασία αναστέλεται μέχρι να καλέσει την exit κάποιο από τα παιδιά της. Οταν έχει παιδί καλέσει την exit(), το λειτουργικό σύστημα αποδεσμεύει (unblock) την γονική διεργασία και επιστρέφει την τιμή της exit ως αποτέλεσμα της wait(). Εάν δεν υπάρχουν «ζωντανά» παιδιά, η wait επιστρέφει άμεσα. Εάν υπάρχουν παιδιά σε κατάσταση zombie, η wait επιστρέφει την τελική κατάσταση τους (exit state) και τα αποδεσμεύει.
15
Αλλες σχετικές κλήσεις συστήματος
η getpid επιστρέφει τον προσδιοριστή της καλούσας διεργασίας. Παράδειγμα pid=getpid(); η getppid επιστρέφει τον προσδιοριστή της γονικής διεργασίας.
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.