Τεχνολογία Υπολογιστικών Συστημάτων & Λειτουργικά Συστήματα - Βιβλίο Μαθητή
Λειτουργικά Συστήματα Απεικόνιση Διεργασιών Επιστροφή στην αρχική σελίδα του μαθήματος

Μάθημα

7.2

Διεργασίες και Ελαφρές Διεργασίες

 

Σκοπός του μαθήματος αυτού είναι να παρουσιάσει την έννοια της διεργασίας, που είναι πολύ βασική στα ΛΣ, την έννοια της ελαφριάς διεργασίας και να δείξει τις ομοιότητες και τις διαφορές τους. Σκοπός του μαθήματος

Όταν ολοκληρώσεις το μάθημα αυτό, θα μπορείς:

  • Να περιγράφεις πώς ένα ΛΣ μπορεί να κατανέμει το χρόνο του μεταξύ πολλών προγραμμάτων
  • Να εξηγείς τι είναι η διεργασία και σε τι διαφέρει από ένα πρόγραμμα
  • Να ορίζεις τι είναι η μεταγωγή περιβάλλοντος
  • Να εξηγείς τι είναι η ελαφρή διεργασία και σε τι διαφέρει από μία διεργασία
  • Να προσδιορίζεις πότε είναι προτιμότερο να χρησιμοποιούμε τις ελαφρές διεργασίες
Τι θα μάθεις;
 
 

Στους περισσότερους υπολογιστές που έχουν μια μόνο ΚΜΕ, σε κάθε χρονική στιγμή μπορεί να εκτελείται μια μόνο εντολή γλώσσας μηχανής, άρα και ένα μόνο πρόγραμμα. Είναι όμως δυνατόν να κατανέμει η ΚΜΕ το χρόνο της, δίνοντας εκ περιτροπής ένα μικρό ποσοστό του χρόνου της σε κάθε ένα πρόγραμμα έτσι ώστε να δίνει την εντύπωση στους χρήστες ότι τα εκτελεί όλα μαζί.

 

Διάγραμμα 1

Ας υποθέσουμε ότι ο ζαχαροπλάστης (η ΚΜΕ) έχει να παρασκευάσει τέσσερα γλυκά, και οι οδηγίες τους αναφέρουν ότι απαιτούν: το Α 35' (10' προετοιμασία και 25' ψήσιμο), το Β 40', το Γ 45' (10' προετοιμασία, 25' ψήσιμο και 10' ολοκλήρωση) και το Δ 15' (5' προετοιμασία και 10' ψήσιμο) αντίστοιχα. Αν η εκτέλεση των συνταγών γίνει με τη σειρά παραλαβής τους, χωρίς παράλληλη χρησιμοποίηση του φούρνου, το όλο έργο μπορεί να οργανωθεί στις φάσεις του Διαγράμματος 1.

Διάγραμμα 2

Αν η εκτέλεση των συνταγών γίνεται με τη σειρά παραλαβής, αλλά με παράλληλη προετοιμασία και χρήση του φούρνου, έχουμε σημαντική βελτίωση στον απαιτούμενο χρόνο, όπως βλέπουμε στο Διάγραμμα 2.

 

Διάγραμμα 3

Αν όμως ο ζαχαροπλάστης αφιερώνει 5' σε κάθε γλυκό, τότε το πρόγραμμα παρασκευής τους μπορεί να οργανωθεί σαν το Διάγραμμα 3. Ο τρόπος αυτός παρασκευής των γλυκών έχει ως αποτέλεσμα τη γρηγορότερη ολοκλήρωση αυτών που παρασκευάζονται εύκολα, ανεξάρτητα από τη σειρά με την οποία δόθηκαν οι συνταγές.

 

Αντίστοιχα ένα λειτουργικό σύστημα καταμερισμού χρόνου θα μοιράζει το χρόνο της ΚΜΕ σε μικρά στοιχειώδη διαστήματα, τα κβάντα χρόνου (time quanta). Σε κάθε κβάντο επιλέγεται ένα από τα προγράμματα και εκτελούνται εντολές από αυτό μέχρι να τελειώσει το χρονικό διάστημα που του διατέθηκε. Όταν ο χρόνος ολοκληρωθεί, επιλέγεται ένα άλλο πρόγραμμα για εκτέλεση κ.ο.κ.

Η διαδικασία αυτή είναι αρκετά πολύπλοκη και επιβαρύνει τις απαιτήσεις του ίδιου του ΛΣ. Το όφελος όμως από αυτή είναι (1) η αύξηση της απόδοσης, αφού το υλικό χρησιμοποιείται παράλληλα και (2) η μείωση του χρόνου ανακύκλωσης, αφού τα προγράμματα κατά μέσο όρο εξυπηρετούνται πιο γρήγορα.

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

  • Να σημειώνει μέχρι ποιο σημείο της τρέχουσας συνταγής έχει φθάσει, ώστε να μπορεί να συνεχίσει από το σωστό σημείο όταν έλθει ξανά η σειρά της.
  • Να τοποθετήσει ό,τι από το γλυκό έχει παρασκευάσει μέχρι εκείνη τη στιγμή σε ένα ορισμένο μέρος, για να μπορεί αργότερα να το ξαναπάρει.
  • Αν κάποιο βήμα της τρέχουσας συνταγής δεν είναι δυνατόν να διακοπεί, όπως π.χ. όταν κάτι ψήνεται στο φούρνο, πρέπει να σημειώσει ότι αυτό το βήμα εκκρεμεί. Όταν το ψήσιμο ολοκληρωθεί, θα τοποθετήσει το ψημένο γλυκό μαζί με τα υπόλοιπα υλικά που θα ολοκληρώσουν την παρασκευή του γλυκού και θα βάλει στο φούρνο ό,τι από την επόμενη συνταγή μέχρι τώρα βρισκόταν σε αναμονή.

 

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

Βλέπουμε λοιπόν ότι ένα ΛΣ διαχειρίζεται προγράμματα σε εκτέλεση· μπορεί π.χ. να εκτελεί πολλές φορές το ίδιο πρόγραμμα, μία φορά για κάθε χρήστη. Τα εκτελούμενα προγράμματα αποτελούν ανεξάρτητες οντότητες για το ΛΣ και ονομάζονται διεργασίες (processes).

Μια διεργασία είναι ένα πρόγραμμα ή ένα αυτόνομο τμήμα προγράμματος υπό εκτέλεση. Οι όροι πρόγραμμα και διεργασία διαφοροποιούνται από το γεγονός ότι το πρόγραμμα είναι παθητική οντότητα ενώ η διεργασία είναι ενεργητική.

 

Η εναλλαγή από τη μια διεργασία στην άλλη ονομάζεται μεταγωγή περιβάλλοντος (context switching). Οι πληροφορίες που κρατούνται κατά τη μεταγωγή περιβάλλοντος αφορούν τα ακόλουθα:

  • Από ποια εντολή του προγράμματος πρέπει να συνεχισθεί η εκτέλεση της διεργασίας την επόμενη φορά
  • Ποια είναι η κατάσταση της ΚΜΕ, ώστε να επαναφερθεί για να συνεχιστεί σωστά η εκτέλεση της διεργασίας
  • Ποια είναι τα ενδιάμεσα αποτελέσματα που έχουν υπολογιστεί μέχρι εκείνη τη στιγμή

Σύγκριση επίδοσης λειτουργικών συστημάτων

 
Ένα απλοποιημένο παράδειγμα μπορεί να δείξει με παραστατικό τρόπο τις διαφορές μεταξύ των διαφόρων ΛΣ και τα πλεονεκτήματα του καταμερισμού χρόνου. Σε ένα υπολογιστικό σύστημα δίνονται για εκτέλεση τρία προγράμματα με απαιτήσεις σε χρόνο που φαίνονται στον παράπλευρο πίνακα. Κάνουμε την υπόθεση ότι κάθε διεργασία χρησιμοποιεί κατά σειρά πρώτα την ΚΜΕ, μετά το δίσκο και μετά τον εκτυπωτή.
  ΚΜΕ Δίσκος Εκτυπωτής Σύνολο
Πρόγ.1 2 2 3 7
Πρόγ.2 3 2 1 6
Πρόγ.3 2 3 2 7
Σύνολο 7 7 6 20
Το σχεδιάγραμμα εκτέλεσης για ένα ΛΣ ομαδικής επεξεργασίας είναι το εξής:
 
Σύστημα ομαδικής επεξεργασίας
Για το σύστημα πολυπρογραμματισμού και το σύστημα καταμερισμού χρόνου θα έχουμε:
 
Σύστημα πολυπρογραμματισμού
Σύστημα καταμερισμού χρόνου
  Συνολικός
χρόνος
Ανενεργός
χρόνος
Τέλος
της π1
Τέλος
της π2
Τέλος
της π3
Ομαδική Επεξεργασία 20 40 7 13 20
Πολυπρογραμματισμός 12 16 7 8 12
Καταμερισμός χρόνου 12 16 9 12 11

Τα αποτελέσματα για τα τρια συστήματα συνοψίζονται στον παράπλευρο πίνακα. Παρατηρούμε ότι ο συνολικός χρόνος εκτέλεσης και ο ανενεργός χρόνος για το σύστημα ομαδικής επεξεργασίας είναι πολύ μεγαλύτεροι από ό,τι στα άλλα δυο συστήματα. Το σύστημα καταμερισμού χρόνου έχει άλλο ένα πλεονέκτημα: καμία διεργασία δεν ευνοείται ως προς το πότε θα τερματίσει (ενώ στο σύστημα πολυπρογραμματισμού υπάρχει τέτοια ανισότητα)· μια και όλες οι διεργασίες έχουν περίπου τις ίδιες χρονικές απαιτήσεις, τελειώνουν περίπου στον ίδιο χρόνο.

 

Οι επιδόσεις της εκτέλεσης των διαφόρων διεργασιών από ένα ΛΣ εξαρτάται από τον τύπο του ΛΣ, αλλά επηρεάζεται και από τις απαιτήσεις των διεργασιών.

 

Ελαφρές διεργασίες

Κάθε ΛΣ αποτελείται από πολλά επί μέρους προγράμματα, τα οποία εκτελούνται παράλληλα για να εξυπηρετούν τους χρήστες, είναι δηλαδή και αυτό χωρισμένο σε διεργασίες. Το ίδιο μπορεί να γίνει και με τα προγράμματα των χρηστών, να διαιρεθούν δηλαδή σε τμήματα τα οποία εκτελούνται παράλληλα.

Ο ζαχαροπλάστης (ΚΜΕ) αφιερώνει 5' κάθε φορά στην εκτέλεση μιας συνταγής. Αυτά τα 5' μπορεί να τα μοιράσει σε 5 τμήματα του 1' το καθένα. Σε κάθε τέτοιο τμήμα του 1' μπορεί να ασχοληθεί σε κάθε τμήμα με ένα διαφορετικό στοιχείο του γλυκού το οποίο είναι ανεξάρτητο από τα άλλα. Έτσι μπορεί π.χ. να παρακολουθεί το ψήσιμο της ζύμης στο φούρνο και να ανακατεύει την κρέμα που βράζει.

 

Όταν όμως τα τμήματα αυτά πρέπει να μοιράζονται διάφορα στοιχεία του προγράμματος, όπως π.χ. μεταβλητές, μπορεί να χρησιμοποιηθεί και ένα εναλλακτικό είδος διεργασιών, οι ελαφρές διεργασίες (lightweight processes) ή νήματα εκτέλεσης (threads of execution) ή απλούστερα νήματα (threads).

Τα νήματα έχουν πολλές ομοιότητες με τις διεργασίες και μια βασική διαφορά: χρησιμοποιούν από κοινού ένα τμήμα μνήμης, στο οποίο έχουν όλα πρόσβαση.

 

Όπως για κάθε διεργασία, έτσι και για κάθε νήμα το ΛΣ κρατά ένα σύνολο από πληροφορίες σε μια ειδική περιοχή της μνήμης, η οποία αποκαλείται Σύνολο Ελέγχου Νήματος (Thread Control Block) ή αλλιώς ΣΕΝ (TCB). Το ΣΕΝ κρατά τις απαραίτητες πληροφορίες για κάθε νήμα, αλλά όσες πληροφορίες είναι κοινές μεταξύ τους (π.χ. αυτές για τη μοιραζόμενη μνήμη) καταγράφονται μια φορά μόνο.

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

Όταν ένα πρόγραμμα διαιρεθεί σε νήματα που εκτελούνται «παράλληλα» (όπως οι διεργασίες), αντί σε ανεξάρτητες διεργασίες, προκαλείται μικρότερη επιβάρυνση στο υπολογιστικό σύστημα, γιατί η μεταγωγή περιβάλλοντος μεταξύ νημάτων είναι πιο γρήγορη από ό,τι μεταξύ διεργασιών. Επιπλέον δεν είναι απαραίτητο πάντα να χρησιμοποιηθούν μηχανισμοί επικοινωνίας από τα νήματα, αφού έχουν για το σκοπό αυτό τη μνήμη που μοιράζονται, κάτι που θα γίνει κατανοητό παρακάτω.

 

Ένα παράδειγμα προγράμματος που μπορεί να χωριστεί σε νήματα, φαίνεται στο σχήμα. Το πρόγραμμα αυτό υπολογίζει για τις μεταβλητές x και y:

  • Με τη ρουτίνα Athroisma, το άθροισμα τους και το αποθηκεύει στη μεταβλητή sum.
  • Με τη ρουτίνα Diafora, τη διαφορά τους και την αποθηκεύει στη μεταβλητή diff.
  • Με τη ρουτίνα Phliko, το πηλίκο τους και το αποθηκεύει στη μεταβλητή quot.

Οι τρεις αυτοί υπολογισμοί προσδιορίζουν την τιμή διαφορετικών μεταβλητών και ο ένας δεν εξαρτάται από τον άλλο, έτσι μπορούν να γίνουν παράλληλα.

Αν επιλέξουμε να διαιρέσουμε το πρόγραμμα σε τρεις ταυτόχρονες διεργασίες, και οι τρεις χρειάζονται τις μεταβλητές x και y για να κάνουν τους υπολογισμούς τους. Έτσι η λύση αυτή έχει δυο μειονεκτήματα:

  • Η μνήμη σπαταλάται, γιατί έχουμε τρία διαφορετικά αντίγραφα κάθε μεταβλητής στη μνήμη. Εδώ βέβαια πρόκειται για δυο μεταβλητές μόνο, αλλά αν επρόκειτο για πολλά δεδομένα, η σπατάλη θα ήταν πολύ ουσιαστική.
  • Πρέπει να χρησιμοποιηθεί κάποιος μηχανισμός επικοινωνίας που θα εξασφαλίζει ότι οι μεταβλητές x και y των τριών διεργασιών περιέχουν τα ίδια δεδομένα. Αν π.χ. τα δεδομένα δίνονται από το χρήστη, πρέπει η μια από τις τρεις διεργασίες να τα διαβάσει και να τα στείλει στις άλλες δυο, ή μια άλλη διεργασία να τα ζητήσει από το χρήστη και να τα γράψει σε ένα αρχείο, από όπου θα τα διαβάσουν οι υπόλοιπες. Αυτές οι διαδικασίες και προγραμματιστικό κόπο απαιτούν, και επιβαρύνουν το χρόνο εκτέλεσης των διεργασιών, και απαιτούν επιπλέον πόρους του συστήματος (μηχανισμούς επικοινωνίας ή αρχεία).

Η εναλλακτική λύση που δεν έχει τα παραπάνω μειονεκτήματα είναι να χωρίσουμε το πρόγραμμα σε τρία νήματα. Τα νήματα αυτά θα μοιράζονται τη μνήμη που καταλαμβάνουν οι δυο μεταβλητές, και θα τη διαβάζουν για να κάνουν τους υπολογισμούς τους. Μόνο ένα αντίγραφο των μεταβλητών θα κρατείται στη μνήμη -έτσι δε γίνεται σπατάλη- και βέβαια δεν τίθεται ζήτημα επικοινωνίας για ανταλλαγή δεδομένων.

 

Τα προγράμματα που μπορούν να διαιρεθούν σε τμήματα, κάθε ένα από τα οποία ανατίθεται σε ένα νήμα, ονομάζονται ταυτόχρονα (concurrent programs). Ένα τέτοιο πρόγραμμα είναι το προηγούμενο, ή π.χ. το σύστημα κράτησης θέσεων μιας αεροπορικής εταιρίας, όπου κάθε πράκτορας αντιστοιχεί σε ένα νήμα.

 

 

 

 

var
x, y: integer;
sum, diff: integer;
quot: real;

procedure Athroisma;
begin
   sum := x + y
end;

procedure Diafora;
begin
   diff := x - y
end;

procedure Phliko;
begin
   quot := x / y
end;

 

Στα επόμενα μαθήματα, ο όρος «Διεργασία» θα χρησιμοποιείται τόσο για τις διεργασίες (που δε χρησιμοποιούν μνήμη από κοινού) όσο και για τα νήματα (τα οποία χρησιμοποιούν μνήμη από κοινού), εκτός και αν αναφέρεται διαφορετικά.

 

Εικόνα

Ο καταμερισμός του χρόνου της ΚΜΕ μεταξύ πολλών προγραμμάτων δίνει τη δυνατότητα να εκτελούνται αυτά ταυτόχρονα βελτιώνοντας συνολικά τις επιδόσεις του υπολογιστικού συστήματος. Τα προγράμματα που βρίσκονται σε κάποιο στάδιο της εκτέλεσής τους από την ΚΜΕ ονομάζονται διεργασίες. Η διαδικασία εναλλαγής από τη μια διεργασία στην άλλη, δηλαδή η μεταγωγή περιβάλλοντος, απαιτεί την καταγραφή πληροφοριών για τη διεργασία που διακόπτεται ώστε να μπορεί να συνεχιστεί αργότερα σωστά η εκτέλεσή της.

Μια εναλλακτική μορφή οργάνωσης ταυτόχρονων προγραμμάτων, τα οποία διαιρούνται σε τμήματα που μπορούν να εκτελούνται παράλληλα, είναι τα νήματα, μια «ελαφριά» μορφή διεργασιών. Τα νήματα χρησιμοποιούν κοινό τμήμα μνήμης και έτσι δεν απαιτούν μηχανισμούς επικοινωνίας πολλές φορές· επίσης επιβαρύνουν λιγότερο το υπολογιστικό σύστημα.

Εικόνα
Διεργασία Process
Ελαφρή διεργασία Lightweight Process
Κβάντο Χρόνου Time Quantum πληθ.-a
Μεταγωγή Περιβάλλοντος Context Switching
Νήμα Thread
Νήμα Εκτέλεσης Thread of Execution
Σύνολο Ελέγχου Διεργασίας - ΣΕΔ Process Control Block - PCB
Σύνολο Ελέγχου Νήματος - ΣΕΝ Thread Control Block - TCB
Ταυτόχρονο Πρόγραμμα Concurrent Program

Ερωτήσεις

  • Ποια είναι τα οφέλη και οι συνέπειες όταν το ΛΣ εναλλάσσει προγράμματα στη χρήση της ΚΜΕ;
  • Σε τι διαφέρει η διεργασία από ένα πρόγραμμα; Μπορούν πολλές διεργασίες να αντιστοιχούν στο ίδιο πρόγραμμα;
  • Ποια είναι η βασική διαφορά μίας διεργασίας με μία ελαφρή διεργασία;
  • Τι είναι η μεταγωγή περιβάλλοντος για μία διεργασία; Είναι η ίδια με τη μεταγωγή περιβάλλοντος για μία ελαφρή διεργασία;
  • Πότε συμφέρει να χρησιμοποιήσουμε τις ελαφρές διεργασίες; Πότε νομίζεις ότι πρέπει να τις αποφύγουμε;