Διεργασίες

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

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

 

Καταστάσεις και κύκλος ζωής των διεργασιών.

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

  • Εκτελούμενη (running): Όταν απασχολεί την ΚΜΕ
  • Έτοιμη ή εκτελέσιμη (runnable, ready): Όταν, και αφού είχε σταματήσει προσωρινά να εκτελείται, είναι πλέον έτοιμη και περιμένει τη σειρά της για να πάρει χρόνο στην ΚΜΕ και να συνεχίσει την εκτέλεση της.
  • Υπό αναστολή ή σε αναμονή ή εμποδισμένη (blocked, waiting): Όταν περιμένει την ολοκλήρωση κάποιου εξωτερικού από αυτή συμβάντος (π.χ δεδομένα από κάποια περιφερειακή συσκευή) για να μπορεί να μεταβεί σε κατάσταση ετοιμότητας έτσι ώστε να μπορεί να εκτελεσθεί.

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

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

 

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

Μια σημαντική έννοια στο θέμα του συγχρονισμού των διεργασιών είναι αυτή του κρίσιμου τμήματος (critical section). Κάθε φορά που μια διεργασία εκτελεί ένα τμήμα του προγράμματος το οποίο έχει πρόσβαση σε διαμοιραζόμενους πόρους λέμε ότι βρίσκεται στο κρίσιμο τμήμα της. Δημιουργείται έτσι επίσης η έννοια του αμοιβαίου αποκλεισμού που συνιστά την απαγόρευση μιας διεργασίας να εισέρθει στο κρίσιμο τμήμα της όταν μια άλλη βρίσκεται στο αντίστοιχο δικό της.

Για τον λόγο αυτό υπάρχει μηχανισμός επικοινωνίας μεταξύ των διεργασιών (Inter Process Communication, IPC) o οποίος υλοποιείται με διάφορες μεθόδους (αρχεία, κανάλια επικοινωνίας, ροές δεδομένων, σήματα, σηματοφορείς, ουρές μηνυμάτων κ.ά).

 

Χρονοδρομολόγηση διεργασιών.

Η χρονοδρομολόγηση των διεργασιών έχει ουσιαστικά να κάνει με την χρονοδρομολόγηση της ΚΜΕ και όπως έχει ήδη αναφερθεί γίνεται από τον χρονοδρομολογητή (scheduler).

 

Η χρονοδρομολόγηση λαμβάνει χώρα σε δυο επίπεδα:

  • Μακροχρόνια χρονοδρομολόγηση (long term scheduling ή job scheduling). Εδώ καθορίζεται ποιες από τις διεργασίες που έχουν υποβληθεί από τους χρήστες για εκτέλεση θα φορτωθούν στην μνήμη και θα γίνουν έτοιμες για εκτέλεση.
  • Βραχυχρόνια χρονοδρομολόγηση (short term ή CPU scheduling). Εδώ επιλέγονται οι διεργασίες από την λίστα έτοιμων διεργασιών που θα τους παραχωρηθεί χρόνος στην ΚΜΕ έτσι ώστε να γίνουν εκτελούμενες.

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

  • Αποδοτικότητα (efficiency): Η ΚΜΕ θα πρέπει να είναι απασχολημένη κατά το μεγαλύτερο δυνατό χρονικό διάστημα.
  • Δικαιοσύνη (fairness): Ο χρόνος της ΚΜΕ θα πρέπει να μοιράζεται δίκαια μεταξύ των έτοιμων προς εκτέλεση διεργασιών.
  • Χαμηλό χρόνο απόκρισης (lowresponsetime): Ο χρόνος αναμονής μέχρι την πρώτη έξοδο-απόκριση σε ένα διαλογικό σύστημα πρέπει να είναι χαμηλός.
  • Χαμηλό χρόνο διεκπεραίωσης (lowturnaroundtime). Ο συνολικός χρόνος για την πλήρη εκτέλεση μιας εργασίας πρέπει να είναι χαμηλός.

Ανάλογα με τη στρατηγική που ακολουθούν οι αλγόριθμοι χρονοδρομολόγησης διακρίνονται σε δύο κατηγορίες:

  • Μη διακοπτοί (non preemptive) αλγόριθμοι: Μια διεργασία που έχει τον έλεγχο της ΚΜΕ τον διατηρεί μέχρις ότου ολοκληρωθεί ή χρειαστεί κάποια άλλη λειτουργία.
  • Διακοπτοί (preemptive) αλγόριθμοι: Ο χρόνος της ΚΜΕ μοιράζεται σε χρονικά διαστήματα όμοια ή διαφορετικά μεταξύ τους (κβάντα χρόνου) και αυτά μοιράζονται στις διεργασίες με σειρά η οποία καθορίζεται είτε από τη στιγμή άφιξης της διεργασίες είτε από τον απαιτούμενο χρόνο εκτέλεσης της.

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

 

Προβλήματα Συστημάτων πολυπρογραμματισμού

Ανάλογα με τις σχέσεις που υπάρχουν κάποια στιγμή μεταξύ των  εκτελούμενων διεργασιών αυτές διακρίνονται σε :

  • Ανταγωνιζόμενες διεργασίες

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

  • Συνεργαζόμενες διεργασίες μέσω διαμοιρασμού

Αφορά διεργασίες που αλληλεπιδρούν μεταξύ τους μη γνωρίζοντας η μια την άλλη (π.χ. διαμοιραζόμενα αρχεία ή βάσεις δεδομένων).

  • Συνεργαζόμενες διεργασίες μέσω επικοινωνίας

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

 

Τα Προβλήματα που μπορεί να συμβούν ανάμεσα σε ένα σύνολο εκτελούμενων διεργασιών :

Αδιέξοδο (Deadlock): Η μόνιμη / επ? αόριστον αναμονή ενός συνόλου διεργασιών που είτε συναγωνίζονται για πόρους του συστήματος είτε επικοινωνούν μεταξύ τους. Κυκλική αναμονή: Ύπαρξη μιας κλειστής αλυσίδας διεργασιών 2 ή περισσοτέρων διεργασιών. Κάθε μία αναμένει ένα πόρο που κατέχεται από το επόμενο μέλος της αλυσίδας. Υπάρχει δηλαδή αμοιβαίος αποκλεισμός.

Παρατεταμένη στέρηση (Starvation): Η κατάσταση στην οποία μερικές διεργασίες σημειώνουν πρόοδο οδεύοντας προς την ολοκλήρωσή τους ενώ μερικές άλλες δεν μπορούν να έχουν πρόσβαση σε πόρους.