Thursday 14 August 2008

Αλλά τι είναι ένας υπολογιστής; ΙΙ

Περνώντας ένα επίπεδο παραπάνω από αυτές τις λογικές πύλες μπορούν να φτιαχνούν πιο πολύπλοκα ηλεκτρονικά εξαρτήματα. Οι αγωγοί που συνδέουν τις ηλεκτρονικές συσκευές μεταξύ τους και μεταφέρουν δεδομένα από τη μία στην άλλη λέγονται buses. Aν υποθέσουμε ότι χρειαζόμαστε να συνδέσουμε 3 συσκευές μεταξύ τους τότε χρειάζονται 3 αγωγοί που συνδεουν κάθε συσκευή με όλες τις άλλες. Με 4 συσκευές τότε ο αριθμός των αγωγών είναι 6, για 5 συσκευές χρειαζόμαστε 10 αγωγούς κ.τ.λ. Μια απλή τεχνική να μειωθεί το πλήθος των αγωγών είναι κάθε συσκευή να έχει τον κωδικό της, όλες οι συσκευές να συνδεθούν σε σειρά και στην αρχή των δεδομένων να υπαρχει ο κωδικός της κάθε συσκευής. Έτσι όλα τα δεδομένα περνάνε με τη σειρά από όλες τις συσκευες αλλά μόνο η συσκευή με το σωστό κωδικό δεχεται τα δεδομενα. Υπ'όψην ότι τα δεδομένα μπορεί να είναι όχι "απλά δεδομένα" αλλά κάποιο σύνολο οδηγιων που πρέπει να εκτελέσει η κάθε συσκευή.

Τι συμβαίνει όμως στην περίπτωση που ένας αγωγός πάθει βλάβη; Τότε όλο το σύστημα θα πάψει να λειτουργει. Στην περίπτωση αυτή πρέπει να υπάρχουν εφεδρικοί αγωγοί, αλλά πόσοι; Για 3 αγωγους είπαμε ότι χρειάζονται 3 αγωγοι, ενω αν χρησιμοποιήσουμε την τεχνικη διέυθυνσης τότε μειωνονται στους 2. Είναι εύκολο να δει κανεις ότι με 3 αγωγους όμως αν συμβεί το πολύ σε έναν αγωγό βλάβη τότε το σύστημα μπορεί να συνεχίσει να λειτουργεί. Παρόμοιες τεχνικές έχουν αναπτυχθεί και για πιο πολύπλοκα συστήματα.

Το πιο βασικό στοιχειo μνήμης είναι το register (καταχωρητής). Οι μνήμες αυτές είναι πολύ μικρές σε χωρητικότητα αλλά η ταχύτητα προσπέλασης τους είναι πολύ μεγάλη και είναι ενσωματωμένες στον επεργαστή. (Στους προγραμματιστές C είναι ίσως γνωστή η τεχνική να τοποθετούν μια μεταβλητή που θα χρησιμοποιηθεί πολλές φορές σε register για να αυξηθεί η ταχύτητα του προγράμματος.)

Εχοντας αυτά ως δομικά στοιχεία μπορούμε τώρα να γράψουμε ένα πρόγραμμα. Το σύνολο οδηγιών (instruction set) δεν είναι τίποτε άλλο από συνδυασμούς 4 βασικών οδηγιών - πρόσθεση, αφαιρεση, φορτωση, αποθηκευση δυαδικών αριθμών. Στις πρώτες assembly γλώσσες οι δυνατότητες δεν ήταν πολλές παραπάνω από αυτές τις 4. Καταρχήν χρειάζεται μια μνήμη για να αποθηκευτούν αυτές οι οδηγίες, ο καταχωρητης, και οι οδηγίες αυτές εκτελούνται από τον επεξεργαστή. Aς υποθέσουμε ότι στον καταχώρητη έχει αποθηκευτεί το παρακάτω σύνολο οδηγίων:

Φορτωσε τη θέση μνήμης 123 (η οποια περιλαμβάνει τον αριθμό 0101)
Φορτωσε τη θέση μνήμης 456 (η οποια περιλαμβάνει τον αριθμό 0011)
Πρόσθεσε τα δύο
Αποθηκευσε το αποτέλεσμα στη θέση μνήμης 789

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

Αποθηκευσε τον αριθμό 0011 στη θέση μνήμης 345
Τιποτε
Τιποτε
Τιποτε

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