Διεργασία (προγραμματισμός)

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Διεργασία στην επιστήμη υπολογιστών ονομάζεται το μέσο εκτέλεσης προγραμμάτων στα περισσότερα λειτουργικά συστήματα. Μία διεργασία υλοποιείται ως μία δομή δεδομένων του πυρήνα, η οποία δημιουργείται όταν κάποιο πρόγραμμα φορτώνεται στη μνήμη για εκτέλεση και στην οποία αντιστοιχίζονται τα εξής στοιχεία:

1) Ένας ακέραιος αναγνωριστικός αριθμός (pid)

2) Ο κώδικας του εκτελούμενου προγράμματος

3) Η στοίβα του εκτελούμενου προγράμματος

4) Ο σωρός

5) Ο μετρητής προγράμματος

6) Τα περιεχόμενα των καταχωρητών του επεξεργαστή κατά την εκτέλεση του προγράμματος

7) Λοιπές πληροφορίες, όπως πόροι που το πρόγραμμα χρησιμοποιεί κάθε στιγμή (π.χ. ανοιχτά αρχεία)


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

Στα προεκτοπιστικά λειτουργικά συστήματα (preemptive) γίνεται αυτόματη εναλλαγή διεργασιών κάθε λίγες διακοπές του ρολογιού (στην αρχή κάθε "χρονικού κβάντου") ώστε να επιτευχθεί η ψευδαίσθηση της παράλληλης εκτέλεσης πολλών διεργασιών. Στην πραγματικότητα οι διεργασίες εναλλάσονται στον επεξεργαστή με εξαιρετικά μεγάλη συχνότητα (συνήθως το κβάντο διαρκεί κάποια millisecond). Η εναλλαγή αυτή ονομάζεται θεματική εναλλαγή (context switch) και, προκειμένου να είναι εφικτή, πρέπει όλες οι πληροφορίες που είναι αποθηκευμένες στην τοπική μνήμη του επεξεργαστή για την εκτελούμενη διεργασία, ο μετρητής προγράμματος και τα περιεχόμενα των καταχωρητών, να αποθηκευτούν σε έναν χώρο κάπου στη RAM κατά τη θεματική εναλλαγή. Έτσι, όταν έρθει ξανά η σειρά αυτής της διεργασίας να εκτελεστεί, θα μπορούν να φορτωθούν πάλι πίσω στους καταχωρητές και η εκτέλεση να συνεχίσει από εκεί που σταμάτησε. Το 5) και το 6) της προηγούμενης λίστας παρέχουν αυτόν ακριβώς το χώρο. Το ποια διεργασία θα εκτελείται κάθε στιγμή καθορίζεται από έναν μηχανισμό του λειτουργικού συστήματος η συμπεριφορά του οποίου δεν μπορεί να προβλεφθεί ή να τροποποιηθεί από το χρήστη, το χρονοπρογραμματιστή.

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