Κεντρική Μονάδα Επεξεργασίας

thumb|230px|Μεγέθυνση του μικροεπεξεργαστή Intel 80486DX2 κατά την κατασκευή του (πραγματικό μέγεθος : 12 × 6,75 mm).

Η **Κεντρική Μονάδα Επεξεργασίας - ΚΜΕ** (αγγλικά: central processing unit - **CPU**), είναι το κεντρικό εξάρτημα που επεξεργάζεται δεδομένα σε έναν ηλεκτρονικό υπολογιστή, ελέγχει τη λειτουργία του και εκτελεί βασικές λειτουργίες διασύνδεσης και μεταβίβασης εντολών. Αν η ΚΜΕ αποτελείται από ένα μόνο ολοκληρωμένο κύκλωμα, τότε ονομάζεται μικροεπεξεργαστής (*microprocessor*) ή μικροελεγκτής (*microcontroller*).

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

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

### Λυχνίες κενού
[thumb|220px|Ο [EDVAC σχεδιάστηκε ώστε να εκτελεί αποθηκευμένα προγράμματα.]]

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

Ο υπολογιστής λυχνιών ENIAC, που ολοκληρώθηκε το 1946, σηματοδοτεί την αρχή της πρώτης γενιάς υπολογιστών. Ο *ENIAC* προγραμματιζόταν από τον χρήστη (*operator*), αλλά η διαδικασία του προγραμματισμού ήταν εξαιρετικά δύσκολη, επίπονη και χρονοβόρα διαδικασία καθώς γινόταν σε φυσικό επίπεδο, ανοιγοκλείνοντας διακόπτες ή μετακινώντας καλώδια. Για να διευκολυνθεί η διαδικασία του προγραμματισμού, διατυπώθηκε από τον μαθηματικό Τζον φον Νόιμαν η ιδέα του αποθηκευμένου προγράμματος. Ο φον Νόιμαν δημοσίευσε την μελέτη του το 1945, προτείνοντας την κατασκευή ενός νέου υπολογιστή, του *EDVAC*, που θα εκτελούσε αποθηκευμένα προγράμματα. Με αυτόν τον τρόπο η δημιουργία και η τροποποίηση ενός προγράμματος θα ήταν πιο εύκολη, μεταβάλλοντας απλώς τα περιεχόμενα της μνήμης. 

Ο EDVAC, που ολοκληρώθηκε τον Αύγουστο του 1949, μπορούσε να εκτελέσει ένα συγκεκριμένο σύνολο εντολών (*instruction set*). Συνδυάζοντας τις εντολές ο χρήστης δημιουργούσε ένα πρόγραμμα και το αποθήκευε στη μνήμη, περιμένοντας τον υπολογιστή να το εκτελέσει. Η πρότυπη σχεδίαση του *EDVAC*, που μείωσε δραματικά τον απαιτούμενο χρόνο προγραμματισμού, ονομάστηκε αρχιτεκτονική φον Νόιμαν, προς τιμήν του εμπνευστή και σχεδιαστή της. Παρόμοιες προσεγγίσεις, ανέπτυξαν και άλλοι επιστήμονες, όπως ο Άλαν Τούρινγκ και ο Κόνραντ Τσούζε. Αξιοσημείωτος είναι ο υπολογιστής *Mark I* του πανεπιστημίου Χάρβαρντ, που ολοκληρώθηκε πριν τον *EDVAC* και χρησιμοποιούσε επίσης ένα σχέδιο αποθήκευσης προγραμμάτων σε διάτρητη ταινία αντί για ηλεκτρονική μνήμη. Η σχεδίαση που προέκυψε από τον *Mark I* ονομάστηκε αρχιτεκτονική Χάρβαρντ και η βασική της διαφορά με την αρχιτεκτονική φον Νόιμαν είναι ότι διαχωρίζει τον χώρο αποθήκευσης εντολών και δεδομένων.

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

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

### Ολοκληρωμένα κυκλώματα
thumb|220px|Η κονσόλα χρήστη ενός υπολογιστή System/360, διακρίνονται οι καταχωρητές και οι διακόπτες.

Το ολοκληρωμένο κύκλωμα (*integrated circuit*, *IC*), ή "τσιπ" (*chip*) όπως συχνά αναφέρεται, επιτελεί μια ολοκληρωμένη διαδικασία, με την έννοια ότι δέχεται δεδομένα και επιστρέφει αποτελέσματα. Κατασκευάζεται πάνω σε ένα μικροσκοπικό κομμάτι πυριτίου, που ως ημιαγωγός, μπορεί να ενθυλακώσει την λειτουργία των τρανζίστορ, των αντιστάσεων και των αγωγών ώστε αυτά να μην κατασκευάζονται πλέον ξεχωριστά. Πολλά τρανζίστορ κατασκευάζονται με ευκολία πάνω σε μια λεπτή επιφάνεια πυριτίου ενώ τα κυκλώματα δημιουργούνται με την μέθοδο της επιμετάλλωσης. Αρχικά μόνο βασικά κυκλώματα, όπως οι πύλες NOR, κατασκευάζονταν σε ολοκληρωμένα κυκλώματα. Οι επεξεργαστές που κατασκευάστηκαν με απλά ολοκληρωμένα κυκλώματα κατατάσσονται ως συσκευές με μικρή κλίμακα ολοκλήρωσης.

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

Χαρακτηριστικός αντιπρόσωπος της τρίτης γενιάς επεξεργαστών είναι οι υπολογιστές της αρχιτεκτονικής System/360 από την ΙΒΜ. Η εταιρεία προσπάθησε να ξεπεράσει την ασυμβατότητα που υπήρχε μεταξύ των υπολογιστών, ακόμη και κοινού κατασκευαστή, ώστε να εκτελείται ένα πρόγραμμα, χωρίς τροποποιήσεις, και από άλλους υπολογιστές με διαφορετική ταχύτητα και επιδόσεις. Για να το πετύχει αυτό, η *[[IBM]]* εισήγαγε την έννοια του μικροπρογράμματος (*microprogram*). Το σύνολο της αρχιτεκτονικής *System/360* έγινε τόσο δημοφιλής που κυριάρχησε στα συστήματα μεγάλης υπολογιστικής ισχύς (mainframes) για πολλές δεκαετίες και συνεχίζει να εφαρμόζεται με παρόμοιο τρόπο στους σύγχρονους υπολογιστές.

### Μικροεπεξεργαστές

[thumb|220px|Ο μικροεπεξεργαστής [Intel 80486DX2.]]

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

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

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

Η ΚΜΕ αποτελείται από τρία κύρια τμήματα.

* **Καταχωρητές** (*Registers*): Μικρά κύτταρα μνήμης στο εσωτερικό του επεξεργαστή, που χρησιμοποιούνται για την προσωρινή αποθήκευση των δεδομένων, καθώς αυτά υφίστανται επεξεργασία. Μερικοί καταχωρητές έχουν ειδική λειτουργία.
** Απαριθμητής προγράμματος (*program counter*): περιέχει την διεύθυνση της επόμενης εντολής που θα ανακτηθεί από την μνήμη για να εκτελεστεί. 
** Καταχωρητής εντολών (*Instruction register*): αποθηκεύει τον κωδικό λειτουργίας της εντολής πριν αποκωδικοποιηθεί από την ΚΜΕ. 
** Συσσωρευτής (*accumulator*): καταχωρητής που συνήθως χρησιμοποιείται για τις αριθμητικές και λογικές πράξεις. 
* **Αριθμητική και Λογική Μονάδα** (Arithmetic and Logical Unit, ALU): εκτελεί αριθμητικές και λογικές πράξεις.
* **Μονάδα Ελέγχου** (*Control Unit*): Ελέγχει τη ροή δεδομένων από και προς την ΚΜΕ, τους καταχωρητές, τη μνήμη και τις περιφερειακές μονάδες εισόδου/εξόδου.

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

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

### Μορφή και κωδικοποίηση
Μια εντολή μπορεί να επεξεργαστεί δεδομένα ή να μεταβάλλει καταστάσεις στο εσωτερικό της ΚΜΕ. Αν είναι εντολή επεξεργασίας μπορεί να μεταφέρει, να προσθέσει, ή να συγκρίνει δεδομένα, ενώ αν είναι εντολή μεταβολής μπορεί να τροποποιήσει τον απαριθμητή προγράμματος και τον καταχωρητή ενδείξεων. Μεταβάλλοντας τον απαριθμητή προγράμματος μπορεί να αλλάξει η ροή εκτέλεσης του προγράμματος. Τέτοιες εντολές είναι γνωστές ως "άλματα" (*jumps*) και είναι ο βασικός τρόπος υλοποίησης των βρόχων επιλογής και επανάληψης. Ο καταχωρητής ενδείξεων περιέχει διακριτές καταστάσεις ελέγχου, όπως ο ενδείκτης υπερχείλισης. Οι ενδείκτες επηρεάζουν τον τρόπο με τον οποίο συμπεριφέρεται ένα πρόγραμμα, δεδομένου ότι συχνά αποτελούν αναφορά στα αποτελέσματα διαφόρων εργασιών.

Κάθε εντολή περιλαμβάνει την λειτουργία που θα εκτελέσει, την πηγή των δεδομένων και την διεύθυνση της επόμενης εντολής. Όλες αυτές οι πληροφορίες κωδικοποιούνται σε ένα ή περισσότερα bytes ανάλογα με τον τύπο της εντολής. Για να προκύψουν όσο το δυνατόν λιγότερα bytes δεχόμαστε ότι η επόμενη εντολή ακολουθεί αμέσως μετά την τρέχουσα εντολή. Έτσι συνήθως οι εντολές αποτελούνται από δύο τμήματα, το πρώτο τμήμα περιέχει τον κωδικό εντολής (*operation code*) και υποδηλώνει τη λειτουργία προς εκτέλεση, και το δεύτερο τμήμα περιέχει πληροφορίες που απαιτούνται για την εν λόγω εντολή, για παράδειγμα οι τελεστές για την λειτουργία της πρόσθεσης ή η διεύθυνση της επόμενης εντολής αν είναι εντολή διακλάδωσης.

Για κάθε εντολή υπάρχει διαφορετική κωδικοποίηση. Ακόμη και στην ίδια εντολή, ανάλογα με τον τύπο τελεστών που χρησιμοποιεί, δηλαδή αν είναι καταχωρητές, θέσεις μνήμης ή απευθείας δεδομένα, υπάρχει διαφορετική κωδικοποίηση. Στην πραγματικότητα όλες οι εντολές είναι δυαδικοί αριθμοί που έχουν αντιστοιχηθεί σε μια λειτουργία. Για να γίνονται πιο κατανοητές οι εντολές συνήθως αναπαρίστανται είτε σε δεκαεξαδική μορφή είτε σε συμβολική γλώσσα. Για παράδειγμα η εντολή *ADD C* δηλώνει ότι θα προστεθεί το περιεχόμενο του καταχωρητή C με το περιεχόμενο του συσσωρευτή και το αποτέλεσμα θα αποθηκευτεί στον συσσωρευτή. Η αντίστοιχη δεκαεξαδική αναπαράσταση της εντολής αυτής είναι *81h*, σε αρχιτεκτονικές x86.

### Κύκλος εντολής
Κύκλος εντολής είναι το διάστημα που απαιτείται για την ολοκλήρωση μιας εντολής και την έναρξη της επόμενης. Υπάρχουν τέσσερα στάδια για την ολοκλήρωση ενός κύκλου: η ανάκληση (*fetch*), η αποκωδικοποίηση (*decode*), η εκτέλεση (*execute*) και αποθήκευση του αποτελέσματος (store/writeback). 

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

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

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

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

## Σχεδιασμός και υλοποίηση
[thumb|left|[MOS Technology 6502|MOS 6502 μικροεπεξεργαστής των 8 bit.]]

Η ΚΜΕ είναι το βασικό τμήμα ενός υπολογιστικού συστήματος και γι' αυτό ο σχεδιασμός και η λειτουργία της επηρεάζει το σύστημα στο σύνολό του.

### Παράσταση δεδομένων
Ένα από τα σημαντικότερα ζητήματα που αφορούν τα υπολογιστικά συστήματα είναι ο τρόπος με τον οποίο αναπαρίστανται τα δεδομένα. Οι πρώτοι ψηφιακοί υπολογιστές χρησιμοποιούσαν το δεκαδικό σύστημα για την αναπαράσταση αριθμών, ενώ μερικοί άλλοι υπολογιστές χρησιμοποιούσαν το τριαδικό σύστημα. Σχεδόν όλοι οι σύγχρονοι επεξεργαστές χρησιμοποιούν το δυαδικό σύστημα, όπου τα δύο ψηφία, το μηδέν (0) και το ένα (1), αντιστοιχούν σε δύο αντίθετες φυσικές καταστάσεις, όπως η "υψηλή" και η "χαμηλή" τάση. Επομένως οι υπολογιστές αντιλαμβάνονται μόνο τα δύο αυτά ψηφία και έτσι πρέπει να χρησιμοποιείται κάποιος κώδικας που να αποδίδει σημασία σε αυτά τα bit. Η κωδικοποίηση και η αποκωδικοποίηση των δυαδικών ψηφίων ώστε να παριστάνουν έναν αριθμό ή έναν χαρακτήρα, κατανοητό από τους χρήστες, συμβαίνει στην μονάδα Εισόδου/Εξόδου. Σε ορισμένες περιπτώσεις, για να μειωθεί το μήκος, τα *byte* και οι λέξεις αναπαριστώνται συμβολικά με δεκαεξαδική μορφοποίηση.

Η ΚΜΕ και κατ' επέκταση οι υπολογιστές χειρίζονται συγκεκριμένες ομάδες δυαδικών ψηφίων. Οι ομάδες μπορεί να έχουν ένα bit, τέσσερα bit που ονομάζεται nibble, οκτώ bit που ονομάζεται byte και 16 bit που ονομάζεται *word* (λέξη). Το byte είναι η πιο κοινή ομάδα από δυαδικά ψηφία που χρησιμοποιείται στους υπολογιστές. Με ένα byte μπορούν να αναπαρασταθούν 28 διαφορετικές τιμές, αφού έχει 8 bit. Η αρίθμηση των bit σε ένα byte αρχίζει από το μηδέν έως το εφτά ενώ βασικό πεδίο εφαρμογής των byte είναι για την κωδικοποίηση χαρακτήρων. Τα bit μιας λέξης (word) αριθμούνται από το μηδέν έως το 15 και μπορούν να αναπαραστήσουν 216, ή 65.536, διαφορετικές τιμές. Κάθε bit ή byte παριστάνει αυτό που εμείς καθορίζουμε να παρασταθεί. Για παράδειγμα ένα bit μπορεί να χρησιμοποιηθεί ως αριθμός ενώ το διπλανό του ως λογική τιμή. Με τον ίδιο τρόπο ένα byte μπορεί να χρησιμοποιηθεί ως αριθμός αλλά και ως χαρακτήρας, αναλόγως την κωδικοποίηση που επιλέξουμε για την ανάγνωσή του. Τα δεδομένα στην ΚΜΕ, στην μνήμη και στον δίαυλο του συστήματος υπάρχουν υπό την ίδια δυαδική μορφή.

### Δίαυλος συστήματος
thumb|κόκκινο: δίαυλος διευθύνσεων<br /> μπλε: δίαυλος δεδομένων<br /> πράσινο: δίαυλος ελέγχου.

Οι δίαυλοι είναι αγωγοί που ομαδοποιούνται σύμφωνα με την λειτουργία τους. Αν για παράδειγμα ένας δίαυλος είναι 32-bit σημαίνει ότι έχει 32 ξεχωριστούς αγωγούς, καθένας από τους οποίους μεταφέρει ένα bit δεδομένου. Υπό αυτήν την έννοια, ο δίαυλος συστήματος αποτελείται από ένα σύνολο ξεχωριστών διαύλων, ταξινομημένους σύμφωνα με την λειτουργία τους. Οι δίαυλοι αυτοί είναι ο δίαυλος διευθύνσεων, ο δίαυλος δεδομένων και ο δίαυλος ελέγχου. Ο δίαυλος δεδομένων μεταφέρει δεδομένα μεταξύ των μονάδων του υπολογιστικού συστήματος. Το μέγεθός του καθορίζει πόσα bit μπορεί να μεταφέρει ταυτόχρονα αλλά και το εύρος των αριθμών που μπορεί να χειριστεί ο επεξεργαστής. Ο επεξεργαστής Intel 8088, με δίαυλο δεδομένων των 8 bit, κατηγοριοποιείται ως οκτάμπιτος επεξεργαστής και μπορεί να χειριστεί 28 = 256 αριθμούς.

Στην περίπτωση εγγραφής δεδομένων στη μνήμη, ο δίαυλος διευθύνσεων περιέχει την διεύθυνση της θέσης μνήμης στην οποία θα αποθηκευτούν τα δεδομένα. Το μέγεθος του διαύλου διευθύνσεων καθορίζει και το μέγεθος της μνήμης που μπορεί να διευθυνσιοδοτήσει ο επεξεργαστής, δηλαδή την μνήμη που μπορεί να αντιληφθεί και να χρησιμοποιήσει. Για παράδειγμα στον 8088, που ο δίαυλος διευθύνσεων ήταν 20 bits, ο επεξεργαστής μπορούσε να προσπελάσει μέχρι 220 = 1.048.576 θέσεις μνήμης (1ΜΒ). Ο δίαυλος ελέγχου αποτελείται από αγωγούς με ξεχωριστή λειτουργία ο καθένας, οι οποίοι ελέγχουν τον τρόπο που επικοινωνεί ο επεξεργαστής με τα υπόλοιπα υποσυστήματα. Για παράδειγμα, όταν ο επεξεργαστής επικοινωνεί με την μνήμη ο δίαυλος ελέγχου προσδιορίζει την κατεύθυνση των δεδομένων με τα σήματα read ή write.

### Χρονισμός ρολογιού
thumb|left|300px|Ο παλμός του ρολογιού συστήματος.

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

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

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

### Σωλήνωση
thumb|left|250px|Σωλήνωση τεσσάρων επιπέδων.

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

Όμως ένα σημαντικό πρόβλημα που προκύπτει από την σωλήνωση είναι αυτό της εξάρτησης των εντολών. Πολλές εντολές προϋποθέτουν για την εκτέλεσή τους να έχει ολοκληρωθεί η προηγούμενη εντολή ώστε να τους επιστρέψει ένα αποτέλεσμα. Αυτό δεν συμβαίνει στην σωλήνωση αφού όλες οι εντολές εκτελούνται σχεδόν παράλληλα. Το πρόβλημα ξεπεράστηκε εν μέρη από τις γλώσσες προγραμματισμού που εξελίχθηκαν ώστε να ανταποκρίνονται σε επεξεργασία σωλήνωσης και εν μέρη από τις ίδιες τις ΚΜΕ που ενσωμάτωσαν διαδικασίες ελέγχου. Έτσι όταν απαιτείται από μια εντολή ο τερματισμός της προηγούμενης, η ΚΜΕ θέτει σε αναμονή την εντολή μέχρι να ολοκληρωθεί η προηγούμενη.

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

## Βιβλιογραφία
* Αθ. Τσουρόπλης & Κ. Κλημόπουλος, Εισαγωγή στην Πληροφορική, Εκδόσεις Νέων Τεχνολογιών, 2005, ISBN 960-8105-84-6.
* William Stallings, Οργάνωση & Αρχιτεκτονική Υπολογιστών, Εκδόσεις Τζίολα, 2003, ISBN 960-418-008-8.
* Andrew S. Tanenbaum, Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος, 2007, ISBN 960-209-586-5.

## Δείτε επίσης
 
* Αρχιτεκτονική ARM
* Διευθυνσιοδότηση
* CISC
* Δίαυλος υπολογιστή
* Μηχανική υπολογιστών
* Ψύξη ΚΜΕ
* Συχνότητα ΚΜΕ
* Σχεδίαση ΚΜΕ
* Socket ΚΜΕ
* Ψηφιακός επεξεργαστής
* Μονάδα κινητής υποδιαστολής
* GPU Graphics Processing Unit
* Σύνολο εντολών
* RISC
* Μικροελεγκτής
* Υπερβαθμωτός επεξεργαστής
* x86


## Εξωτερικοί σύνδεσμοι

;Σχεδιαστές μικροεπεξεργαστών
* Advanced Micro Devices - Advanced Micro Devices, κατασκευαστής επεξεργαστών κυρίως για προσωπικούς υπολογιστές.
* ARM Ltd - μια από τις λίγες εταιρίες που δεν κατασκευάζει επεξεργαστές, αλλά παραχωρεί δικαιώματα κατασκευής επεξεργαστών τις σε τρίτους. Η αρχιτεκτονική ARM είναι από τις πλέον δημοφιλείς στην κατηγορία των μικροελεγκτών για ενσωματωμένα (embedded) συστήματα. 
* Freescale Semiconductor (πρώην τμήμα της Motorola) - σχεδιαστής αρκετών ενσωματωμένων και SoC επεξεργαστών για PowerPC.
* IBM Microelectronics  - Μικροηλεκτρονικό τμήμα της IBM, αναπτύσσει επεξεργαστές που προορίζονται για POWER και PowerPC υπολογιστές, αλλά και πολλών επεξεργαστών που χρησιμοποιούνται σε κονσόλες βιντεοπαιχνιδιών.
* Intel Corp - Intel, κατασκευαστής αξιοσημείωτων μικροελεγκτών και επεξεργαστών, όπως οι 8051, IA-32, IA-64 και XScale.  Επιπλέον παράγει περιφερειακά τσιπ για χρήση με τους επεξεργαστές της.
* MIPS Technologies - ανέπτυξαν την αρχιτεκτονική MIPS, μια πρωτοπόρος σχεδίαση των RISC επεξεργαστών.
* NEC Electronics - ανέπτυξαν την  αρχιτεκτονική 78K0 8-bit, την αρχιτεκτονική 78K0R 16-bit, και την αρχιτεκτονική V850 32-bit.
* Sun Microsystems - Sun Microsystems, ανέπτυξαν την αρχιτεκτονική SPARC, μια σχεδίαση RISC.
* Texas Instruments - Σχεδιαστές και κατασκευαστές αρκετών διαφορετικών χαμηλής κατανάλωσης μικροελεγκτών μεταξύ των άλλων ημιαγωγικών προϊόντων τους.
* Transmeta - Δημιουργοί επεξεργαστών χαμηλής κατανάλωσης, όπως οι Crusoe και Efficeon, που είναι συμβατοί με το σύνολο εντολών x86.
* VIA Technologies - Κατασκευαστής, από την Ταϊβάν, χαμηλής κατανάλωσης επεξεργαστών, συμβατοί με το σύνολο εντολών x86.
* Atmel  - Κατασκευαστής δημοφιλών μικροελεγκτών CISC και RISC χαμηλού κόστους, όπως η σειρά AVR.

;Περαιτέρω ανάγνωση
*  How Microprocessors Work at HowStuffWorks 


Κατηγορία:Ψηφιακή τεχνολογία