Εργαστηριακή Άσκηση Εργαστήριο Λειτουργικών Συστημάτων Οι First Come First Serve (FCFS), Shortest Job First (SJF), Round Robin (RR), Priority Weighted (PRI) Β. Τσακανίκας Β. Ταμπακάς Τμήμα Μηχανικών Πληροφορικής ΤΕ Περιεχόμενα... 1 First Come First Serve... 1 Shortest Job First... 2 Priority Weighted... 2 Round Robin... 2 Κριτήρια Αξιολόγησης αλγορίθμων δρομολόγησης... 3 Ο προσομοιωτής CPU Scheduler Simulator... 4 Είσοδος Προσομοίωσης... 4 Εκτέλεση Προσομοίωσης... 6 Έξοδος Προσομοίωσης... 7 Πειραματικό μέρος...σφάλμα! Δεν έχει οριστεί σελιδοδείκτης. Παρακάτω ακολουθεί μία σύντομη περιγραφή των βασικότερων αλγορίθμων χρονοπρογραμματισμού. First Come First Serve Ο πιο απλός αλγόριθμος χρονοδρομολόγησης ονομάζεται αλγόριθμος με βάση τη σειρά άφιξης (First Come First Served - FCFS). Η υλοποίηση του γίνεται πολύ εύκολα: η λίστα έτοιμων διεργασιών λειτουργεί όπως μια ουρά αναμονής. Κάθε νέα διεργασία που ετοιμάζεται να εκτελεστεί στην επόμενη έκρηξή της στην ΚΜΕ εισάγεται στο τέλος της λίστας έτοιμων διεργασιών. Όταν έρθει η ώρα να εισαχθεί στην ΚΜΕ μια νέα διεργασία, επιλέγεται αυτή που είναι στην αρχή της λίστας, προωθείται στην ΚΜΕ και εκεί εκτελεί ολόκληρη την έκρηξή της στην ΚΜΕ. Η επίδοση του αλγορίθμου αυτού αν κριθεί με βάση το χρόνο ανακύκλωσης (turnaround time) είναι χαμηλή, γιατί εξαναγκάζει ακόμα και διεργασίες με πολύ σύντομες εκρήξεις ΚΜΕ 1/9
να αναμένουν για την εκτέλεση άλλων. Παρόμοιες επιδόσεις πετυχαίνει και με βάση τα υπόλοιπα κριτήρια αξιολόγησης που αναφέρθηκαν στο μάθημα αυτό η χρησιμοποίηση π.χ. της ΚΜΕ μπορεί να είναι χαμηλή. Το βασικό πλεονέκτημα της εξυπηρέτησης με βάση τη σειρά άφιξης είναι η απλότητά της. Ο αλγόριθμος είναι πάρα πολύ απλός να προγραμματιστεί και καταναλώνει ελάχιστο χρόνο για την εκτέλεσή του. Shortest Job First Ο αλγόριθμος εξυπηρέτησης με βάση τη διάρκεια (Shortest Job First - SJF), κατατάσσει τις διεργασίες κατά αύξουσα σειρά διάρκειας. Πρώτα εκτελείται η συντομότερη διεργασία, μετά αυτή με την αμέσως μεγαλύτερη διάρκεια κ.ο.κ. Τελευταία εκτελείται αυτή με τη μεγαλύτερη διάρκεια. Μια διεργασία που εισάγεται στη λίστα έτοιμων διεργασιών, όταν μια άλλη ήδη εκτελείται, θα τοποθετηθεί στο κατάλληλο σημείο ανάλογα με τη διάρκεια της έκρηξής της στην ΚΜΕ, και θα εκτελεστεί πριν από κάποια άλλη που είχε εισαχθεί στη λίστα νωρίτερα αλλά είχε μεγαλύτερη διάρκεια. Όσον αφορά το χρόνο που οι διεργασίες βρίσκονται σε αναμονή, ο αλγόριθμος με βάση τη διάρκεια είναι βέλτιστος, δηλαδή κανένας άλλος αλγόριθμος δεν μπορεί να επιτύχει καλύτερο μέσο χρόνο αναμονής. Priority Weighted Οι τρεις αλγόριθμοι που περιγράφηκαν στις προηγούμενες παραγράφους αποτελούν ειδική περίπτωση ενός γενικότερου αλγόριθμου, ο οποίος δρομολογεί διεργασίες με βάση την προτεραιότητά (priority) τους. Στον αλγόριθμο αυτό, σε κάθε διεργασία αντιστοιχίζεται μια αριθμητική τιμή, που είναι η προτεραιότητά της, και η διεργασία με τη μεγαλύτερη προτεραιότητα επιλέγεται κάθε φορά για εκτέλεση. Όταν δυο ή περισσότερες διεργασίες έχουν την ίδια προτεραιότητα, τότε επιλέγεται πρώτα η παλαιότερη, δηλαδή χρονοδρομολογούνται με βάση τη σειρά άφιξης. Round Robin Ο αλγόριθμος κυκλικής επαναφοράς (Round Robin - RR) έχει σχεδιασθεί ειδικά για συστήματα καταμερισμού χρόνου (time sharing) όπου δίνεται ένα μικρό ποσό χρόνου εναλλάξ σε κάθε διεργασία. Αυτό το μικρό ποσό χρόνου, όπως ήδη έχουμε πει, ονομάζεται κβάντο χρόνου (time quantum) και έχει συνήθως διάρκεια της τάξης των 10 msec. Η λίστα έτοιμων διεργασιών είναι η ουρά στην οποία περιμένουν οι διεργασίες. Κάθε φορά που περνά ένα κβάντο χρόνου, η ΚΜΕ διακόπτει την τρέχουσα διεργασία και την τοποθετεί στο τέλος της λίστας έτοιμων διεργασιών. Αφαιρεί στη συνέχεια τη διεργασία που βρίσκεται στην αρχή της ουράς και την παραχωρεί στην ΚΜΕ για το επόμενο κβάντο χρόνου. 2/9
Αν μια διεργασία ολοκληρώσει την εκτέλεσή της προτού τελειώσει το κβάντο χρόνου που της έχει παραχωρηθεί, απελευθερώνει οικειοθελώς την ΚΜΕ και το ΛΣ παραχωρεί την ΚΜΕ στην επόμενη έτοιμη διεργασία. Αν υπάρχει μόνο μια διεργασία στο σύστημα, τότε της παραχωρούνται διαδοχικά κβάντα χρόνου. Κριτήρια Αξιολόγησης αλγορίθμων δρομολόγησης Τα πιο συνηθισμένα κριτήρια αξιολόγησης είναι: 1. Ο βαθμός χρησιμοποίησης της ΚΜΕ (CPU utilization). Πρόκειται για το ποσοστό του χρόνου που η ΚΜΕ είναι απασχολημένη. Αν το υπολογιστικό σύστημα λειτουργεί για χρονικό διάστημα Τ ολ και η ΚΜΕ έχει απασχοληθεί για χρόνο Τ απ, ο βαθμός χρησιμοποίησής της είναι Τ απ /Τ ολ. Οι «καλοί» βαθμοί χρησιμοποίησης είναι κοντά στο 1 (όπου η ΚΜΕ είναι συνεχώς απασχολημένη). 2. Η ρυθμαπόδοση (throughput). Είναι το πλήθος των εργασιών που ολοκληρώνονται στη μονάδα του χρόνου. Αν π.χ. μέσα σε μια ώρα ολοκληρωθούν 1800 εργασίες, τότε η ρυθμαπόδοση του συστήματος είναι 0,5 εργασίες/sec. Όσο πιο μεγάλη είναι η ρυθμαπόδοση, τόσο καλύτερη γίνεται η απόδοση του συστήματος. 3. Ο χρόνος ανακύκλωσης ή διεκπεραίωσης (turnaround time). Είναι ο συνολικός χρόνος που απαιτείται για την πλήρη εκτέλεση μιας εργασίας, από τη στιγμή που αυτή υποβάλλεται στο σύστημα μέχρι τη στιγμή που ολοκληρώνεται. Αυτός ο χρόνος περιλαμβάνει την αρχική αναμονή της εργασίας μέχρι να επιλεγεί για φόρτωση στην κύρια μνήμη, το χρόνο εκτέλεσης στην ΚΜΕ, το χρόνο Ε/Ε και το χρόνο αναμονής σε διάφορες ουρές του συστήματος. 4. Ο χρόνος αναμονής (waiting time). Πρόκειται για το χρόνο που πέρασε η διεργασία στη λίστα έτοιμων διεργασιών αναμένοντας την εκτέλεσή της. Ο χρόνος αναμονής είναι ένας «καλύτερος» δείκτης της καθυστέρησης που επιβάλλει το σύστημα σε μια διεργασία από το χρόνο ανακύκλωσης, γιατί ο δεύτερος περιέχει και το χρόνο που εκτελείται η διεργασία στην ΚΜΕ ή εκτελεί λειτουργίες Ε/Ε, ο οποίος είναι σταθερός για κάθε διεργασία και δεν εξαρτάται από το ΛΣ. 5. Ο χρόνος απόκρισης (response time). Σε διαλογικά συστήματα ενδιαφέρει πολλές φορές ο χρόνος που απαιτείται μέχρι το σύστημα να δώσει την πρώτη έξοδοαπόκριση για μια διεργασία, που ονομάζεται χρόνος απόκρισης. Αυτός διαφέρει από το χρόνο ανακύκλωσης κατά το χρονικό διάστημα που απαιτείται για την ολοκλήρωση της εξόδου μιας διεργασίας, και συνεπώς δεν εξαρτάται από την ταχύτητα της συσκευής εξόδου. Αν π.χ. μια διεργασία μετά το τέλος των υπολογισμών της εκτυπώνει τα αποτελέσματα, ο χρόνος απόκρισης μετριέται μέχρι τη στιγμή που αρχίζει η εκτύπωση ο χρόνος της εκτύπωσης δεν συνυπολογίζεται. 3/9
Ο προσομοιωτής CPU Scheduler Simulator Ο προσομοιωτής «CPU Scheduler Simulator» είναι ένας προσομοιωτής γραμμένος στην γλώσσα προγραμματισμού JAVA, ο οποίος έχει την δυνατότητα να προσομοιώσει την λειτουργία βασικών αλγορίθμων χρονοπρογραμματισμού. Ο προσομοιωτής δέχεται ως είσοδο ένα σύνολο εργασιών με συγκεκριμένα χαρακτηριστικά (ανάλογα με τον αλγόριθμο χρονοπρογραμματισμού που δοκιμάζουμε) και υπολογίζει και στατιστικά στοιχεία σχετικά με την λειτουργία του επεξεργαστή που εκτελεί τις εργασίες. Μπορούμε να επιλέξουμε τον αλγόριθμο δρομολόγησης που επιθυμούμε να χρησιμοποιήσουμε από την επιλογή: Options -> Algorithm. Αξίζει να σημειωθεί πως δύο από τους προαναφερθέντες αλγόριθμους (Shortest Job First και Priority weighted) έχουν υλοποιηθεί στον προσομοιωτή σε δύο εκδόσεις, με επανα-εισαγωγή (Preemptive) και χωρίς επανα-εισαγωγή (Non-preemptive). Η επιλογή αυτή γίνεται στον προσομοιωτή εκτελώντας Options -> Preemption (check: Preemptive, uncheck: Non- Preemptive). Όταν εκτελούμε την έκδοση με επανα-εισαγωγή, στο ενδεχόμενο όπου εμφανίζεται στην ουρά αναμονής μία διεργασία είτε με μικρότερο χρόνο εκτέλεσης από αυτή που εκτελείται (SJF) είτε με μεγαλύτερη προτεραιότητα (PW), η ΚΜΕ παύει να εκτελεί την τρέχουσα διεργασία και εκτελεί την νέα διεργασία. Στις αντίστοιχες εκδόσεις χωρίς επαναεισαγωγή, ολοκληρώνεται η εκτέλεση της τρέχουσας διεργασίας και μετά ξεκινά η εκτέλεση της νέας διεργασίας. Είσοδος Προσομοίωσης Η είσοδος του προσομοιωτή είναι αρχεία CSV, δομημένα ως εξής: 4/9
Διάρκεια εκτέλεσης (Initial Burst Time) o Είναι ο απαιτούμενος χρόνος που η ΚΜΕ χρειάζεται για να εκτελέσει την διεργασία. Καθυστέρηση (Delay) o Είναι ο χρόνος που μεσολαβεί από την άφιξη της (n-1) διεργασίας μέχρι την άφιξη της n διεργασίας στην οποία αναφέρεται ο εν λόγω χρόνος. Προτεραιότητα (Priority) o Για αλγορίθμους που χρησιμοποιούν την παράμετρο της προτεραιότητας, αυτή η είσοδος αναφέρεται στο σχετικό βάρος της διεργασίας. Στην κλίμακα 0-9, 9 είναι η χαμηλότερη προτεραιότητα και 0 η υψηλότερη. Στον παρακάτω πίνακα εμφανίζεται ένα παράδειγμα εισόδου. Προσοχή: Στους αλγορίθμους που δεν χρησιμοποιούν προτεραιότητα, η στήλη αυτή πρέπει να συμπληρωθεί με προτεραιότητα 1 για όλες τις διεργασίες. Sample Process Data Burst Delay Priority 7 70 5 24 70 4 37 95 8 13 25 3 3 45 0 56 55 6 25 95 1 20 10 1 15 45 2 17 60 5 29 15 7 6 70 0 Σημείωση: Ειδικά για τον αλγόριθμο RR (Round Robin), o προσομοιωτής διαθέτει σταθερό κβάντο χρόνου (=10), το οποίο δεν μπορεί να τροποποιηθεί στα πειράματά μας. Για να δημιουργήσουμε μία είσοδο για τον προσομοιωτή, δημιουργούμε με έναν απλό κειμενογράφο (notepad) ένα αρχείο και το αποθηκεύουμε με κατάληξη *.dat. Στην συνέχεια δημιουργούμε τις τρεις προαναφερθείσες στήλες δεδομένων (χωρίς τις επικεφαλίδες). Κάθε 5/9
αριθμός στην ίδια γραμμή είναι χωρισμένος με διάστημα tab (\t) με τον διπλανό του (δείτε openclass για παράδειγμα αρχείου). Υπάρχει πάντα φυσικά η δυνατότητα δημιουργίας τυχαίας πηγής εισόδου. Εκτέλεση Προσομοίωσης Ο προσομοιωτής ξεκινά ή/και διακόπτει την εκτέλεση της προσομοίωσης πατώντας το checkbox στο κάτω μέρος του περιβάλλοντος. Επίσης μπορούμε να δούμε την ουρά αναμονής καθώς εκτελείται η προσομοίωση πατώντας Options > Show hidden. 6/9
Έξοδος Προσομοίωσης Τα στατιστικά εξόδου που υπολογίζει ο προσομοιωτής εμφανίζονται κατά την διάρκεια προσομοίωσης στο κάτω μέρος του περιβάλλοντος. Αυτά είναι: CPU (Χρόνος ΚΜΕ) o Time: Ο συνολικός χρόνος λειτουργίας της ΚΜΕ o Idle: Ο χρόνος που η ΚΜΕ είναι ανενεργή και δεν εκτελεί καμία διεργασία. o Busy: Ο χρόνος που η ΚΜΕ είναι ενεργή και εκτελεί κάποια διεργασία. Response (Απόκριση): Αναφέρεται στο χρόνο όπου μία έτοιμη προς εκτέλεση διεργασία έμεινε στην ουρά πριν αρχίσει να εκτελείται. o Min: Ελάχιστη τιμή o Mean: Μέση τιμή o Max: Μέγιστη τιμή o StdDev: Τυπική απόκλιση τιμών Turnaround Time (χρόνος ανακύκλωσης ή διεκπεραίωσης) o Min: Ελάχιστη τιμή o Mean: Μέση τιμή o Max: Μέγιστη τιμή o StdDev: Τυπική απόκλιση τιμών Wait Time (χρόνος αναμονής) o Min: Ελάχιστη τιμή o Mean: Μέση τιμή o Max: Μέγιστη τιμή o StdDev: Τυπική απόκλιση τιμών Άσκηση 1 Θεωρείστε τέσσερις διεργασίες P1,P2,P3,P4 με χρόνους άφιξης 0, 20, 29, 50 και διάρκεια εκτέλεσης 60,40,30,30 αντίστοιχα. Εάν στο σύστημα εκτελείται αλγόριθμος FCFS, ποια θα 7/9
είναι η σειρά ολοκλήρωσης των διεργασιών; Πότε θα ολοκληρωθεί η εκτέλεση και των τεσσάρων διεργασιών; Υπολογίστε το μέσο χρόνο διεκπεραίωσης (ΜΧΔ) και το μέσο χρόνο αναμονής (ΜΧΑ) των 4 διεργασιών (θεωρείστε ότι ο χρόνος θεματικής εναλλαγής context switch είναι αμελητέος). Υπόδειξη: Δημιουργείστε το διάγραμμα Gantt και βρείτε «χειρωνακτικά» τους παραπάνω χρόνους. Στη συνέχεια δημιουργείστε το κατάλληλο αρχείο εισόδου για τον προσομειωτή και εκτελέστε το πείραμα. Συγκρίνετε τους χρόνους που υπολογίσατε εσείς με τους χρόνους (turnaround time, wait time) του προσομοιωτή. Άσκηση 2 Επαναλάβατε την προηγούμενη άσκηση για την πολιτική χρονοδρομολόγησης SJF (Shortest Job First) στην μη-προεκχωρητική (non preemptive) και στην προεκχωρητική (preemptive) έκδοσή της η οποία είναι γνωστή ως Shortest Remaining Time First SRTF. Άσκηση 3 Επαναλάβατε την άσκηση 1 για την πολιτική χρονοδρομολόγησης RR (Round Robin). Θεωρείστε κβάντο χρόνου 10. Άσκηση 4 Δίνονται οι διεργασίες P1, P2, P3, P4. Υποθέστε ότι όλες οι διεργασίες φθάνουν στην ready queue τη χρονική στιγμή 0, με τη σειρά που εμφανίζονται στον πίνακα ιεργασία Χρόνος Εκτέλεσης Προτεραιότητα (msec) P1 5 2 P2 2 1 P3 3 4 P4 2 2 Η υψηλότερη προτεραιότητα δηλώνεται από το μικρότερο αριθμό στη σχετ ική στήλη. Βρείτε το ΜΧΑ και το ΜΧΔ για τον αλγόριθμο προτεραιοτήτων. Λάβετε υπόψη την υπόδειξη της άσκησης 1. Άσκηση 5 i. Εκτελέστε 20 προσομοιώσεις (New random source) 50 διεργασιών η κάθε μία τους για τον αλγόριθμο χρονοπρογραμματισμού RoundRobin. Καταγράψτε για κάθε προσομοίωση τα στατιστικά εξόδου και συμπληρώστε κατάλληλα το φύλλο εργασίας. ii. Επαναλάβετε το ερώτημα (i) για τον αλγόριθμο FCFS. iii. Επαναλάβετε το ερώτημα (i) για τον αλγόριθμο SJF. iv. Επαναλάβετε το ερώτημα (i) για τον αλγόριθμο SJF (preemptive). v. Επαναλάβετε το ερώτημα (i) για τον αλγόριθμο PW. vi. Επαναλάβετε το ερώτημα (i) για τον αλγόριθμο PW (preemptive). v ii. Συνδυάστε όλα τα αποτελέσματα σε κοινό διάγραμμα. Τι παρατηρείτε; Ποιος αλγόριθμος και σε ποιο μετρικό είναι καλύτερος; Συμβαδίζει το αποτέλεσμα με την θεωρία; 8/9
viii. Δημιουργήστε ένα αρχείο εισόδου με 100 διεργασίες για τις οποίες ο RR δίνει την μικρότερη μέση τιμή αναμονής για τις διεργασίες. Ποιο κριτήριο εκμεταλλευτήκατε; ix. Επαναλάβετε το ερώτημα (viii) για τον FCFS. x. Επαναλάβετε το ερώτημα (viii) για τον SJF. xi. Ποιο είναι το % κέρδος στον χρόνο της ΚΜΕ όταν χρησιμοποιώ την επιλογή preemptive στον SJF και ποιο όταν χρησιμοποιούμε το PW; Ποιο είναι το μετρικό που επηρεάζεται περισσότερο από την είσοδο της επιλογής preemptive; Βιβλιογραφία 1. http://jimweller.com/jim-weller/jim/java_proc_sched/ 2. http://www.gitam.edu/er esource/comp/gvr(os)/5.3.htm 3. http://wiki.o sdev.org/scheduling_algorithms 9/9