Πέμπτη 24 Απριλίου 2014

Από τα Δεδομένα στο Πρόγραμμα


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

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

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

Ένα αρχείο στο δίσκο είναι δεδομένα που μένουν για αρκετό χρόνο. Ένα αρχείο mp3 μουσικής είναι σειρά από δεδομένα που μπορούν να παράγουν ήχο!  Όχι μέσα στο αρχείο, εκεί είναι απλά αριθμοί! Αποτελείται από αριθμούς εντολές για το πρόγραμμα που ελέγχει το σύστημα παραγωγής ήχου. Τα δεδομένα δεν είναι η διαδικασία! Και αυτό φαίνεται με την απλή σκέψη ότι το αρχείο mp3 μπορεί να ξαναπαίξει μια οποιαδήποτε άλλη φορά. Τα δεδομένα δηλώνονται ως όρισμα στη διαδικασία αναπαραγωγής. Ορίζουμε δηλαδή ότι ο "παίκτης" μουσικής θα παίξει αυτό το αρχείο, αυτά τα δεδομένα.

Το αρχείο έχει ένα όνομα και μια θέση σε ένα φυσικό χώρο, στο δίσκο αποθήκευσης, η απλά δίσκο, του υπολογιστή. Η θέση έχει και αυτή όνομα, το όνομα φακέλου και μια θέση. Υπάρχει μια θέση που ενώ έχει όνομα έχει "κενή" θέση. Δεν λέμε εδώ  "Δεν έχει θέση" γιατί το δεδομένο είναι εντολή..και το "δεν έχω θέση" είναι εντολή...έτσι η θέση στην ουσία είναι εντολή "έχω αυτή τη Χ θέση" ή "δεν έχω θέση". Στο παράδειγμα του προηγούμενου άρθρου, με τα πιάτα και τα μαχαιροπίρουνα, για μια κοινή διαδικασία...όπου θα μπαίνουν σε κάθε πιάτο ένα μαχαίρι και ένα πιρούνι, θα πρέπει να υπάρχει το "χωρίς μαχαίρι" μαζί με κάθε εντολή "βάλε αυτό το μαχαίρι". Ενώ λοιπόν σε κάθε θέση τραπεζιού θα υπάρχουν τρία δεδομένα, η απόδοση της έλλειψης δεν θα γίνει με έλλειψη δεδομένου αλλά με δεδομένο που δηλώνει έλλειψη. Στο αρχείο μουσικής η σιγή είναι δεδομένο, που δηλώνει απουσία ήχου, και όχι απουσία δεδομένου!

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

Όπως είδαμε ένα αρχείο μουσικής είναι δεδομένα που αποτελούν εντολές ενός προγράμματος που παράγει μουσική. Είδαμε ότι μαζί με αυτά τα δεδομένα υπάρχει το όνομα και η θέση του. Χωρίς να πάμε στο πώς τελικά ξεκινάμε μια διαδικασία σε λεπτομέρειες, θα πρέπει να σκεφθούμε ότι μια διαδικασία παραγωγής μουσικής πρέπει να ζητάει δεδομένα όπως όνομα αρχείου και θέση. Επίσης πρέπει να βρει σε αυτό το αρχείο δεδομένα! Ενώ λοιπόν το όνομα και η θέση αποτελούν παράμετροι για να ξεκινήσει η διαδικασία, τα δεδομένα στο αρχείο δεν είναι απαραίτητο να βρίσκονται εκεί. Κάθε αρχείο έχει επίσης ένα μέγεθος. Όπως κάθε δεδομένο έτσι και το μέγεθος έχει το μηδέν που δηλώνει την έλλειψη (διάβασε παραπάνω που εξηγώ τη απουσία ή έλλειψη). Έτσι ένα αρχείο μπορεί να έχει όνομα και θέση αλλά να μην έχει μέγεθος, ή όπως πρέπει να λέμε, έχει μέγεθος μηδέν. Υπάρχει όμως ένας τρόπος αναφοράς για όλα τα αρχεία όπου το μέγεθος έχει κοινή μονάδα. Δηλαδή το μέγεθος ένα σημαίνει ακριβώς το ίδιο πράγμα σε όλα τα αρχεία. Αυτό είναι η ψηφιολέξη ή η ομάδα δυαδικών ψηφίων, αριθμημένα μάλιστα από το μικρότερης σημαντικότητας ψηφίο έως το υψηλότερης σημαντικότητας ψηφίο (bit, μπιτ, τιμές 0 ή 1). Η ψηφιολέξη αν είναι των οκτώ ψηφίων τότε ονομάζεται byte (μπάιτ). Έτσι κάθε αρχείο μπορεί να εκφραστεί σε μέγεθος μπάιτς, και περιλαμβάνεται και το μέγεθος μηδέν. Μάλιστα μας αρέσει να το λέμε το μέγεθος,  κοινό σε όλα τα αρχεία, ως μήκος αρχείου. Μηδενικό μήκος έχει όποιο αρχείο δεν έχει δεδομένα (μπορεί να πάρει σε άλλο χρόνο), αλλά υπάρχει ως όνομα σε κάποια θέση. Ουσιαστικά η περιγραφή ενός αρχείου με όνομα, θέση και μήκος είναι δεδομένα που θα γίνουν όρισμα για τη διαδικασία παραγωγής μουσικής. Αν δεν υπάρχουν δεδομένα μέσα στο αρχείο τότε η διαδικασία δεν θα παίξει τίποτα! Αν όμως δίναμε όνομα που δεν υπήρχε ή θέση που δεν υπήρχε...τότε η διαδικασία  δεν θα έπαιζε τίποτα και θα γύρναγε μήνυμα λάθους. Δηλαδή τα λάθος δεδομένα είναι εντολές που αντιλαμβάνεται η διαδικασία και προκαλούν το αποτέλεσμα της επίδοσης μηνύματος σφάλματος.

Μια σκέψη για ένα πράγμα που πρέπει να ξεκαθαρίσουμε. Μια ομάδα δεδομένων  είναι ένα σύνολο αριθμών που θα βρίσκονται σε μια μνήμη για κάποιο διάστημα, και αυτοί οι αριθμοί αποτελούν εντολές για εκείνη τη διαδικασία που θα οριστεί να "επεξεργαστεί" τα δεδομένα. Τα δεδομένα μπορούν να αλλάζονται ή όχι, αλλά μπορούν και να σβήνονται. Σβήσιμο σημαίνει δυο πράγματα στον υπολογιστή. Αν κάτι αναφέρεται με όνομα, να μην υπάρχει πια αυτό το όνομα και αυτό λέγεται σβήσιμο αναφοράς. Το άλλο σβήσιμο είναι η αλλαγή! Δηλαδή αν ένα δεδομένο έχει ένα αριθμό έστω το δέκα με την αλλαγή του σε οκτώ...σβήσαμε το δέκα. Κάθε αλλαγή προκαλεί την απόρριψη ενός δεδομένου και την δημιουργία ενός νέου.

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

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

Το λειτουργικό σύστημα είναι το πρόγραμμα που επεξεργάζεται τα αρχεία βλέποντάς τα με το δικό τρόπο. Για το λειτουργικό σύστημα υπάρχουν εντολές που τροποποιούν το σύστημα αρχείων, όπως για παράδειγμα εντολή αλλαγής ονόματος! Έτσι στην ουσία το λειτουργικό σύστημα είναι μια σειρά διαδικασιών που μάλιστα αποτελούν αρχεία εντολών, και βρίσκονται στο ίδιο σύστημα αρχείων που θα βάλουμε τα δεδομένα μας! Οι διαδικασίες ξεχωρίζουν από τα δεδομένα αμυδρά. Και αυτό γιατί υπάρχουν εναλλαγές στους ρόλους. Π.χ. αν στην έξοδο των ηχείων βάζαμε φωτορυθμικά συστήματα και δεν ακούγαμε ήχο, ενώ το πρόγραμμα θα έπαιζε το mp3 αρχείο, ο ήχος θα γίνονταν εντολές "άνοιξε φως" στο φωτορυθμικό, άρα δεν θα είχε την ώρα εκείνη την υπόσταση του ήχου, αλλά εκείνη του ελέγχου του φωτορυθμικού! Το φωτορυθμικό αποτελεί το "hardware" ή ελληνικά τη διαδικασία σε φυσική υλοποίηση, ή τη φυσική διαδικασία. Τέτοια φυσική υλοποίηση είναι όλος ο υπολογιστής! Μια διαδικασία που παίρνει δεδομένα και επενεργεί στη φυσική υλοποίηση, είναι μια προγραμματιστική διαδικασία, αποτελεί ένα πρόγραμμα. Ένα πρόγραμμα μπορεί να βρίσκεται μόνιμα στο σύστημα και αυτό συνήθως είναι το βασικό σύστημα εισόδου και εξόδου. Το λειτουργικό σύστημα φορτώνεται από το δίσκο σε προσωρινή μνήμη για να εκτελείται γρηγορότερα, αφού όλες οι διαδικασίες πάνω στα αρχεία γίνονται από αυτό. Έτσι το βασικό σύστημα ξέρει που θα βρει το πρώτο μέρος του λειτουργικού, εκείνου του μέρους όπου υπάρχει το πρόγραμμα για να τρέχει αρχεία ως διαδικασίες, ως αρχεία εντολών, ή εκτελέσιμα αρχεία! Και έτσι ξεκινάει ο υπολογιστής!


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

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

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

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.