ΑΡΧΙΤΕΚΤΟΝΙΚΗ Η/Υ Ι Διάλεξη 2 ΟΡΓΑΝΩΣΗ ΚΕΝΤΡΙΚΗΣ ΜΟΝΑΔΑΣ ΕΠΕΞΕΡΓΑΣΙΑΣ Οι διαφάνειες έχουν καθαρά επικουρικό χαρακτήρα στην παρουσίαση των διαλέξεων του μαθήματος. Δεν αντικαθιστούν σε καμία περίπτωση την παρακάτω βιβλιογραφία που αποτελεί και το βασικό εγχειρίδιο αναφοράς. Βιβλιογραφία: Οργάνωση & Αρχιτεκτονική Υπολογιστών, W. Stallings, 8 η έκδ., Τζιόλα, 2012.
Στόχοι Η διάλεξη αυτή έχει ως στόχο να εισάγει τον σπουδαστή στις βασικές έννοιες της οργάνωσης της κεντρικής μονάδας επεξεργασίας ενός υπολογιστικού συστήματος, και ειδικότερα: να γνωρίσει τις βασικές εσωτερικές υπομονάδες του επεξεργαστή και να είναι σε θέση να εξηγήσει την λειτουργία τους να κατανοήσει τη λειτουργία και το ρόλο τους στο σύνολό τους να γνωρίσει τον τρόπο εκτέλεσης των εντολών και να είναι σε θέση να περιγράψει τον κύκλο ανάκλησης και εκτέλεσης εντολών να γνωρίσει τις αρχές σχεδιασμού μικροεπεξεργαστών 2
Βασικές έννοιες Λογισμικό (software) - Λειτουργικά συστήματα - Εφαρμογές Υλικό (hardware) Πληροφοριακά Δεδομένα Ανθρώπινο Πρόβλημα Λογισμικό (Software) Υλικό (Hardware) Μεθοδολογίες επεξεργασίας/επίλυσης - Αλγόριθμοι - Τεχνητή νοημοσύνη - Έμπειρα συστήματα Χειρισμοί Βάση των Κανόνων Λειτουργίας 3
Βασικές μονάδες Βασικές δομικές μονάδες του Η/Υ: Η Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ): επεξεργάζεται τα δεδομένα και εκτελεί τις εντολές που δίνουμε στον υπολογιστή. Η Κεντρική Μνήμη (RAM): καταχωρεί και διατηρεί προσωρινά εντολές και δεδομένα. Οι Μονάδες Εισόδου/Εξόδου: μέσω των οποίων εισάγονται οι πληροφορίες στον υπολογιστή και λαμβάνονται τα αποτελέσματα. Μονάδες δευτερεύουσας αποθήκευσης Άλλες μονάδες 4
Τυπική οργάνωση Υπολογιστικού Συστήματος Eπεξεργαστ ής ΚΜΕ Βοηθητι κή Μν ήμη Οθόνη Πληκτρολόγι ο Προσαρμογέας Δι κτύου Ελεγκτής Ελεγκτής Ελεγκτής Ελεγκτής ΜΔ Μ Κύρι α Μν ήμη Κρυφή Μν ήμη Αρτ ηρί α Ει σό δου /Εξ όδου Μον άδα Δι ασύνδεσης Αρτηρί ας Μον άδα Δι ασύνδεσης Επεκτ άσει ς Αρτ ηρί α Συστήματος 5
Δίαυλος συστήματος (system bus) Συνδέει τον μικροεπεξεργαστή με τη μνήμη και τις συσκευές εισόδου/εξόδου. A D D R E S S B U S CPU (KME) Control Unit (Μονάδα ελέγχου) ALU (ΑΛΜ) Registers Καταχωρητές Main Memory (ΚεντρικήΜνήμη) Input Output Units (Μονάδες Εισόδου Εξόδου) CONTROL BUS D A T A B U S Τυπικές αρτηρίες: διευθύνσεων, δεδομένων και ελέγχου 6
7
Εύρος διαύλου (bus width) Το εύρος του διαύλου διευθύνσεων καθορίζει τη μέγιστη δυνατή ποσότητα μνήμης του συστήματος που μπορεί να προσπελαστεί. Όσο περισσότερες γραμμές διευθύνσεων (bits) έχει ένας δίαυλος, τόσο περισσότερη μνήμη μπορεί να προσπελάζει άμεσα ο μικροεπεξεργαστής, δηλ. για n γραμμές διευθύνσεων έχουμε 2 n διαφορετικές διευθύνσεις μνήμης. Το εύρος του διαύλου δεδομένων καθορίζει πόσα bit μπορούν να μεταφερθούν κάθε φορά μεταξύ των υπομονάδων του συστήματος, όπως μεταξύ της κύριας μνήμης και του επεξεργαστή (το εύρος αυτό είναι καθοριστικός παράγοντας για την συνολική απόδοση του συστήματος καθώς καθορίζει τον αριθμό των κύκλων ή το χρόνο που θα κάνει ο επεξεργαστής για να απευθυνθεί στην κύρια μνήμη για δεδομένα). Το ίδιο ισχύει, από άποψη αύξησης του μήκους (αλλά και του πλήθους) εντολών για το εύρος του διαύλου ελέγχου. Πολυπλεγμένος δίαυλος (multiplexed bus): οι γραμμές διευθύνσεων και δεδομένων είναι μαζί και εναλλάσσονται τα δεδομένα με τις διευθύνσεις. 8
1 st 32-bit CPU: Intel 32bit 80386 CPU (1986-2007) Η Intel ήταν η εταιρία που δημιούργησε τις προδιαγραφές 32-bit επεξεργαστών το 1985 (i386, x86, ΙΑ-32). Οι 32-bit επεξεργαστές, διαθέτουν 32-bit καταχωρητές που υποστηρίζουν αντίστοιχα σύνολα εντολών, και δυνατότητα προσπέλασης μέγιστης χωρητικότητας (εικονικής) μνήμης 2 32 => 4GBs. Kilo k 1 x 10 3 1,000 Mega M 1 x 10 6 1,000,000 Giga G 1 x 10 9 1,000,000,000 Tera T 1 x 10 12 1,000,000,000,000 Peta P 1 x 10 15 1,000,000,000,000,000 80386 DX, the first 32-bit CPU rated at 16 MHz, 1986-2007. Exa E 1 x 10 18 1,000,000,000,000,000,000 Σήμερα 64-bit CPUs
Παράδειγμα μικροαρχιτεκτονικής: Intel 32bit 80386 CPU (1986) 10
11
Αρχιτεκτονική υπολογιστών με μονοπύρηνους επεξεργαστές (single core computers) Single core CPU single core 12
Παράδειγμα: παραδοσιακοί δίαυλοι 16/32-bit ISA/EISA bus (1988) και PCI bus (1993) PCI Εύρος διαύλου: 64bit Συχνότητα: 66MHz 8 Bytes/κύκλο Εύρος ζώνης: 533MB/sec 13 EISA Εύρος διαύλου: 32bit Συχνότητα: 8.33MHz 4 Bytes/κύκλο Εύρος ζώνης: 33,32MB/sec
Τυπικοί δίαυλοι Ο δίαυλος συστήματος (system bus) συνδέει τη CPU με τη μνήμη RAM μέσω ενός διαύλου και ελεγκτή μνήμης αρχικά γνωστός ως Front-Side Bus (FSB)* (Intel CPUs). Ένας τυπικός υπολογιστής έχει τουλάχιστον δύο κύριους διαύλους: το δίαυλο του συστήματος (system bus), συνδέει τη CPU και τη μνήμη RAM, ένα πιο αργό δίαυλο, ο οποίος συνδέει συσκευές όπως οι σκληροί δίσκοι, κ.α., π.χ. ο PCI bus, ο οποίος συνδέεται με το σύστημα μέσω ενός ελεγκτή (controller) ή μιας γέφυρας (bridge) η οποία αποτελεί τμήμα του chipset του υπολογιστή, και λειτουργεί ως ρυθμιστής της ροής των δεδομένων από άλλους διαύλους στο δίαυλο του συστήματος. PCI Express * Αργότερα αντικαταστάθηκε από το DMI (Direct Media Interface) ή το QPI (Quick Path Interconnect), καθώς ο ελεγκτής μνήμης (Northbridge) καταργήθηκε και ενσωματώθηκε στις Intel CPUs, όπως παρομοίως έγινε και σε AMD CPUs (memory controller), κ.α..
Τυπικό chipset σύνδεσης Intel CPUs με τις μονάδες του Η/Υ Northbridge: Ελεγκτής μνήμης (MCH memory controller hub) Southbridge*: Ελεγκτής Ι/Ο (ICH I/O controller hub) *HyperTransport (HT) (AMD CPUs) Τα τελευταία χρόνια οι λειτουργίες του ελεγκτή μνήμης και γραφικών ενσωματώθηκαν στον επεξεργαστή, με απευθείας σύνδεση σε Platform Controller Hub (PCH) με DMI (Direct Media Interface), ή FDI (Flexible Display Interface) ή QPI (Quick Path Interconnect). Chipset στη μητρική Το κύκλωμα Northbridge έχει πλέον ενσωματωθεί στη CPU, ενώ το Southbridge στο PCH chipset. Super I/O**: εμπεριέχει ελεγκτές για low-bandwidth συσκευές (π.χ. πληκτρολόγιο, ποντίκι, κλπ.). **Σε αρκετές περιπτώσεις είναι ενσωματωμένο σε ένα chip με το chipset.
Παράδειγμα μητρικής Intel D850MD με Intel 850 chipset (2000) Source: Intel Desktop Board D850MD/D850MV Technical Product Specification Chipset: Intel 850 Northbridge: Intel 82850 MCH Southbridge: Intel 82801BA ICH2 PCI Connectors (slots) Video mouse, keyboard, parallel, serial, and USB connectors AGP slot Memory Controller Hub 400MHz Pentium 4 socket 478 I/O Controller Hub Firmware Hub including BIOS PCI bus RDRAM interface RAMBUS RDRAM 2 banks (4 slots), 600,800Mhz, Max 2GB Power connector Speaker Diskette connector Battery IDE drive connectors 16
Παράδειγμα: αρχιτεκτονική πλατφόρμας με Intel 32bit Pentium4 single core CPU (2003) RAM interface Εύρος ζώνης: 3.2GB/sec System bus (Frontside bus) Εύρος ζώνης: 6.4GB/sec High speed graphics bus (AGP) Εύρος ζώνης: 2.1GB/sec 17 PCI bus Εύρος ζώνης: 132MB/sec
Παράδειγμα: αρχιτεκτονική πλατφόρμας με Intel 32bit Pentium4 single core CPU (2003) 18
Παράδειγμα: αρχιτεκτονική πλατφόρμας με Intel 32bit Pentium Extreme single core CPU 2004 SPI = serial flash chip using the SPI bus (Serial Peripheral Interface) LPC: low pin count interface (basically replaced the legacy ISA bus stuff), e.g. the PS/2 type keyboard & mouse ports are connected to an LPC-type 19 chip which connects to the LPC port on the ICH.
Εύρος ζώνης (bandwidth) Το εύρος ζώνης αποτελεί το μέγιστο θεωρητικά πλήθος δεδομένων που μεταφέρονται στη μονάδα του χρόνου, π.χ. το εύρος ζώνης (6.4GB/sec) του FSB (800MHz) του προηγούμενου παραδείγματος του Pentium4, καθορίζεται από το γινόμενο των κάτωθι: του εύρους του διαύλου (data path width) 64bit (8byte), της συχνότητας λειτουργίας του (clock frequency) 200MHz τον αριθμό των μεταφορών δεδομένων σε κάθε κύκλο (transfers/cycle) 4. 8 B 200 MHz 4/cycle = 8 B 800 MHz = 6400 MB/s => 6.4GB/s Στο προηγούμενο παράδειγμα η συχνότητα είναι στα 200MHz και πραγματοποιεί 4 μεταφορές ανά κύκλο, οπότε το FSB υπολογίζεται στα 800 MT/s (megatransfers per second) το οποίο αποτελεί τον αριθμό των λειτουργιών μεταφοράς δεδομένων το δευτερόλεπτο σε ένα δίαυλο μεταφοράς δεδομένων. (MT/s) - megatransfers per second 1 MT/s = 10 6 transfers per second (GB/s) - gigabytes per second 20
1 st 64-bit CPU: AMD 64bit Opteron CPU (2003) Η AMD ήταν η εταιρία που δημιούργησε τις προδιαγραφές 64-bit επεξεργαστών το 2000 (AMD64), και αργότερα και άλλες εταιρείες όπως η Intel (Intel64). Με βάση τις προδιαγραφές (x86-64) των 64- bit επεξεργαστών, διαθέτουν 64-bit καταχωρητές που υποστηρίζουν αντίστοιχα σύνολα εντολών, με πλήθος άλλες βελτιώσεις, και υποστηρίζουν θεωρητικά τεράστιες χωρητικότητες (εικονικής) μνήμης (2 64 => 16 Exabytes). Kilo k 1 x 10 3 1,000 Mega M 1 x 10 6 1,000,000 Opteron, the first CPU to introduce the x86-64 extensions in 2003. Giga G 1 x 10 9 1,000,000,000 Tera T 1 x 10 12 1,000,000,000,000 Peta P 1 x 10 15 1,000,000,000,000,000 Exa E 1 x 10 18 1,000,000,000,000,000,000
Δομή της αρχιτεκτονικής του 64-bit AMD Opteron CPU AMD64 core: Υποστηρίζει 32-bit και 64- bit πράξεις και εξαλείφει τον περιορισμό των 4GB της μνήμης. Ενσωματώνει τον ελεγκτή μνήμης (DDR memory controller). HyperTransport: Παρέχει δυνατότητα σύνδεσης με άλλες συσκευές I/O με μέγιστο εύρος ζώνης 19.2GBs (at peak bandwidth 3 x 6.4Gbytes/s), χωρίς την υποστήριξη κάποιου chip. AMD64 core 22 Ξεχωριστές κρυφές μνήμες L1 Instruction και Data caches, η καθεμία 64 Kbytes, 2-way set associative, 64- byte cache line. L2 (Instructions & Data): 1 Mbyte, 16- way set associative.
Μικροαρχιτεκτονική του 64-bit AMD Opteron CPU (2003) 23
Αρχιτεκτονική πολυπύρηνων επεξεργαστών (multicore CPUs) Από το 2006 (Intel Core Duo, AMD Athlon 64 X2) η ανάπτυξη και οι δυνατότητες των πολυπύρηνων επεξεργαστών ξεπέρασαν αυτές των μονοπύρηνων (σήμερα οι μονοπύρηνοι επεξεργαστές χρησιμοποιούνται ακόμα σε μικροελεγκτές στα ενσωματωμένα συστήματα). Ένας πολυπύρηνος επεξεργαστής έχει δυο ή περισσότερες μονάδες επεξεργασίας (cores) οι οποίες μπορούν να εκτελέσουν παράλληλα πολλαπλές εντολές (threads) στη μονάδα του χρόνου (parallelism), δηλ. διαφορετικοί πυρήνες εκτελούν διαφορετικά νήματα (multiple instructions) σε διαφορετικά ή τα ίδια δεδομένα (multiple data) στη μνήμη (MIMD processors). 24
Τυπικοί δίαυλοι σε πολυπύρηνο επεξεργαστή Dual CPU core chip (AMD) Dual CPU core chip (Intel) Τα τελευταία χρόνια οι λειτουργίες του ελεγκτή μνήμης και γραφικών ενσωματώθηκαν στη CPU. BSB Back side bus Σύνδεση του πυρήνα με τις κρυφές μνήμες στη CPU. FSB Front side bus Σύνδεση της CPU με το σύστημα μνήμης. 25 Σε Intel CPUs το FSB αντικαταστάθηκε από το DMI (Direct Media Interface) ή το QPI (Quick Path Interconnect).
Παράδειγμα: αρχιτεκτονική πλατφόρμας με Intel 64bit Core 2 duo/quad CPU (2008) 26
Παράδειγμα: αρχιτεκτονική πλατφόρμας με Intel 64bit Core i7 CPU (2013) 27
Κυκλώματα μικροεπεξεργαστών Ακροδέκτες ελέγχου: έλεγχου διαύλου διακοπών διαιτησίας διαύλου κατάστασης λειτουργίας σημάτων συνεπεξεργαστή διάφορα Λογική διάταξη ακροδεκτών τυπικού μικροεπεξεργαστή 28
Ο επεξεργαστής Ο επεξεργαστής είναι η βασικότερη μονάδα σε ένα υπολογιστικό σύστημα, και αυτό διότι είναι η μονάδα η οποία επεξεργάζεται άμεσα ή έμμεσα σχεδόν όλα τα δεδομένα που εισάγονται ή εξάγονται από/προς το υπολογιστικό σύστημα. Αυτό που χαρακτηρίζει αυτή την μονάδα είναι η μεγάλη ταχύτητα (συχνότητα), ακρίβεια και πιστότητα με την οποία επεξεργάζεται τα δεδομένα και εκτελεί τις εντολές. Π.χ., ένας επεξεργαστής με συχνότητα λειτουργίας στα 3GHz (3000MHz, 3εκ. κύκλους το δευτερόλεπτο), σημαίνει ότι μπορεί να εκτελεί περίπου 3.000.000.000 λειτουργίες το δευτερόλεπτο (πάντα υπολείπεται αυτής της τιμής).
Βασικές μονάδες μιας τυπικής μονάδας επεξεργασίας Καταχωρητές ΑΛΜ Μονάδα Ελέγχου Μονάδες Ι/Ο Κρυφές μνήμες 30
Καταχωρητές (Registers): μονάδες ταχείας αποθήκευσης δεδομένων Αριθμητική Λογική Μονάδα (Arithmetic Logic Unit ALU): εκτελεί τις βασικές αριθμητικές και λογικές πράξεις Μονάδα ελέγχου (Control Unit CU): πραγματοποιεί τον έλεγχο και συντονισμό της λειτουργίας των εσωτερικών μονάδων της ΚΜΕ, αποκωδικοποίησης των εντολών, κλπ. Μονάδα εισόδου/εξόδου (Input/Output Unit): πραγματοποιεί την μεταφορά δεδομένων/εντολών και αποτελεσμάτων μεταξύ των μονάδων της ΚΜΕ και της μνήμης Κρυφές μνήμες (Cache): μονάδες αποθήκευσης δεδομένων και εντολών 31
Καταχωρητές Καταχωρητές γενικής χρήσης (general purpose registers): μπορούν να χρησιμοποιηθούν ως συσσωρευτές, καταχωρητές δείκτη, κλπ. π.χ. (Intel 32bit single core CPU) EDX data register Συσσωρευτές (Accumulators): μονάδες μνήμης για την αποθήκευση δεδομένων και ενδιάμεσων αποτελεσμάτων π.χ. (Intel 32bit single core CPU) EAX accumulator Απαριθμητής Προγράμματος (Program Counter ή Instruction Pointer): δείκτης στη διεύθυνση της επόμενης εντολής του προγράμματος προς εκτέλεση π.χ. (Intel 32bit single core CPU) EIP Καταχωρητής (τρέχουσας) εντολής (Instruction Register): περιέχει την τρέχουσα εντολή που εκτελείται τη δεδομένη χρονική στιγμή π.χ. (Intel 32bit single core CPU) IR 32
Καταχωρητής διεύθυνσης μνήμης (Memory address register - MAR): περιέχει τη διεύθυνση δεδομένου ή εντολής στη μνήμη Καταχωρητής δεδομένων μνήμης (Memory data register - MDR/Latch): περιέχει τα δεδομένα ή εντολές από και προς τη μνήμη Ο υπολογισμός των διευθύνσεων μνήμης μπορεί να γίνει από περισσότερες από μια μονάδες όπως είναι π.χ. (Intel 32bit single core CPU) η AGU ή ACU - address generation/computation unit, οπότε ο υπολογισμός των διευθύνσεων μπορεί να γίνεται παράλληλα με άλλες λειτουργίες της CPU). 33
MAR - δείχνει τη διεύθυνση η οποία θα προσπελαστεί για ανάγνωση/εγγραφή MDR περιέχει τα δεδομένα ή εντολές από/προς τη μνήμη 34
Καταχωρητές δείκτη (index registers): χρησιμοποιούνται στον έλεγχο των βρόχων των προγραμμάτων και στις μεθόδους προσπέλασης της μνήμης π.χ. (Intel 32bit single core CPU) ESI source index register, EDI destination index register Καταχωρητές βάσης και τμήματος (base, segment και stack registers): χρησιμοποιούνται στις μεθόδους προσπέλασης της μνήμης π.χ. (Intel 32bit single core CPU) EBX base register, EBP base pointer, CS code segment register, ESP stack pointer Καταχωρητής κατάστασης (status register ή program status word): το κάθε bit (flag) περιγράφει κάποια κατάσταση που έχει προκύψει. Status register. Negative Sign Zero Overflow Carry π.χ. (Intel 32bit single core CPU) EFLAGS eflags register 35
Παράδειγμα: οργάνωση καταχωρητών (16bit, 32bit) των επεξεργαστών x86 της Intel 36
Καταχωρητής κατάστασης FLAGS & EFLAGS (16bit & 32bit) 37
Βασικά στοιχεία σε single core επεξεργαστή Processor IP Κρυφή μνήμη εντολών Address Instruction Instruction memory Data Register # Registers Register # Register # ALU Address Κρυφή μνήμη δεδομένων Data memory Data Instruction Pointer Καταχωρητές Απαριθμητής εντολών προγράμματος Arithmetic Logic Unit Αριθμητική Λογική Μονάδα Επεξεργασίας 38
Παράδειγμα: Intel 64bit Pentium4 (Prescott) single core CPU (2004) TLB: Translation Look-aside Buffer BTB: Branch Target Buffer Χρησιμοποιείται στα predictions Trace Cache: Διατηρεί εντολές που έγιναν fetched και decoded για την αύξηση του εύρους προσκόμισης εντολών. ALU AGU: address generation unit L1 Data cache μops μικρολειτουργία (micro-operation): μια αλληλουχία εντολών σύγκρισης & διακλάδωσης 4 transfers/cycle L1 Instruction cache Instruction TLB: αποτελεί κρυφή μνήμη που διατηρεί καταχωρήσεις από τον πίνακα σελίδων στην κύρια μνήμη. Instruction Decoder: Προσκομίζει τις εντολές από την L2 cache, τις αποκωδικοποιεί σε μικρολειτουργίες (μops), για την υλοποίηση της διασωλήνωσης, και τις αποθηκεύει στην L1 μops instruction cache. Συνήθως προσκομίζει το ζητούμενο μπλοκ εντολών και το επόμενο από πριν (prefetching) γεμίζοντας μια ενδιάμεση μνήμη, για την υλοποίηση της διασωλήνωσης.
Βασικά στοιχεία σε multi core επεξεργαστή 40
Παράδειγμα: Intel 64bit Core 2 Duo CPU (2008) Προσκομίζει, αποκωδικοποιεί και αποθηκεύει Instruction cache units Instruction cache units Προσκομίζει, αποκωδικοποιεί και αποθηκεύει Μνήμη ROM με τον μικροκώδικα Μνήμη ROM με τον μικροκώδικα Σχετικά με το pipelining Σχετικά με το pipelining Data cache and Translation Look-aside Buffer units Data cache and Translation Look-aside Buffer units 41
Παράδειγμα: Intel 64bit Quad Core i7 CPU (2010) Κρυφές μνήμες εντολών και δεδομένων L1 caches Κρυφές μνήμες 2 ου επιπέδου L2 caches Κρυφή μνήμη 3 ου επιπέδου L3 cache ή last level cache (LLC). Σύνδεση με τη μνήμη 42 Σύνδεση με το IO Hub
Παράδειγμα: Απλοποιημένη οργάνωση ARM επεξεργαστή ARM: Advanced RISC Machine 43
Π.χ. το Raspberry Pi3 εμπεριέχει σε ένα SoC Broadcom BCM2837 ένα 1.2 GHz 64-bit quad-core ARM Cortex-A53 επεξεργαστή. Παράδειγμα: ARM Cortex-A53 quad core CPU (2014) ARMv8-A instruction set RISC CPU structure
45
46
Out-of-order: υλοποιεί τεχνική κατά το pipelining η οποία όταν μια εντολή περιμένει για τα δεδομένα της από τη RAM, μετά από αποτυχία της cache, προσπαθεί να εκτελεί τις ανεξάρτητες εντολές που ακολουθούν, ώστε να διατηρείται η CPU busy. Εξαρτάται από: The order in which instructions are fetched The order in which instructions are executed The order in which instructions update the contents of register and memory locations
Κύκλος προσκόμισης & εκτέλεσης εντολών (fetch-decode-execute cycle) Συνοπτική απεικόνιση: Σύνοψη: Προσκόμιση της εντολής (FETCH). Προσδιορισμός της εντολής (DECODE). Εκτέλεση της εντολής (EXECUTE). Έλεγχος για διακοπές (interrupts check) 48
Περιγραφή του κύκλου προσκόμισης & εκτέλεσης εντολών Υπολογισμός της διεύθυνσης εντολής (instruction address calculation) Καθορίζει τη διεύθυνση της επόμενης εντολής που πρόκειται να εκτελεστεί. Προσκόμιση εντολής (instruction fetch) Διαβάζει την εντολή από τη θέση μνήμης και την προσκομίζει στους καταχωρητές. Αύξηση του μετρητής προγράμματος (program counter increment) Μεταβάλλεται ο μετρητής προγράμματος ώστε να δείχνει στην επόμενη εντολή. Αποκωδικοποίηση της πράξης της εντολής (instruction decoding) Αναλύει την εντολή για να καθοριστεί ο τύπος της πράξης που θα γίνει. Υπολογισμός της διεύθυνσης του τελεστή (operand address calculation) Εάν η πράξη περιλαμβάνει αναφορά σε τελεστή προσδιορίζει τη διεύθυνσή του (indirect addressing). Προσκόμιση τελεστή (operand fetch) Προσκομίζει τον τελεστή από τη μνήμη (έμμεση προσκόμιση δεδομένων - indirection). Εκτέλεση της πράξης με τα δεδομένα (data operation/instruction execution) Εκτελεί την πράξη που υποδεικνύεται από την εντολή. Αποθήκευση τελεστή (operand store) Γράφει το αποτέλεσμα που προκύπτει στη μνήμη. Έλεγχος για διακοπή (interrupt check) Εάν δεν έχουν υπάρξει διακοπές προχωρεί στην προσκόμιση της επόμενης εντολής. Ειδάλλως, αναστέλλει την εκτέλεση του τρέχοντος προγράμματος, αποθηκεύει την κατάστασή του και ξεκινά τη ρουτίνα εξυπηρέτησης της διακοπής. 49
Σχηματική αναπαράσταση του κύκλου προσκόμισης & εκτέλεσης εντολών 50
Παραλληλισμός στην εκτέλεση εντολών Διασωλήνωση (pipelining): εκτέλεση εντολών σε επιμέρους στάδια τα οποία μπορούν να εκτελεστούν παράλληλα. Παραλληλισμός σε επίπεδο εντολής (Instruction Level Parallelism, ILP): αναφέρεται στο βαθμό στον οποίο οι εντολές ενός προγράμματος σε επίπεδο γλώσσας μηχανής (at machine instruction level) είναι δυνατόν να εκτελεστούν παράλληλα. Παραλληλισμός σε επίπεδο νήματος (Thread Level Parallelism, TLP): αναφέρεται στην κατανομή της εκτέλεσης διεργασιών και νημάτων σε διαφορετικούς πυρήνες επεξεργασίας ή επεξεργαστές. Παραλληλισμός σε επίπεδο δεδομένων (Data Level Parallelism, DLP): αναφέρεται στην κατανομή δεδομένων σε διαφορετικούς πυρήνες επεξεργασίας ή επεξεργαστές. Ταυτόχρονη πολυνημάτωση (Simultaneous MultiThreading, SMT): ταυτόχρονη εκτέλεση πολλαπλών ανεξάρτητων νημάτων στον ίδιο πυρήνα, εκμεταλλευόμενο το καθένα το χρόνο αδράνειας των άλλων. Ορίζεται ως Υπερνημάτωση Hyperthreading σε Intel CPUs, και ως CMT - Clustered Multi Threading σε AMD CPUs.
Διασωλήνωση Εντολών (pipelining) Προσέγγιση: κατά την εκτέλεση μιας εντολής (execute) υπάρχουν στιγμές που δεν προσπελαύνεται η κύρια μνήμη, οπότε ο χρόνος αυτός θα μπορούσε να χρησιμοποιηθεί για να ανακληθεί (fetch) η επόμενη εντολή παράλληλα με την εκτέλεση της τρέχουσας (προανάκληση εντολής - instruction prefetch). Ο χρόνος εκτέλεσης είναι γενικά μεγαλύτερος σε σχέση με το χρόνο ανάκλησης. Για αύξηση της απόδοσης η διασωλήνωση θα πρέπει να αποτελείται από περισσότερα στάδια. Π.χ. διασωλήνωση 5 σταδίων: 52
Παράδειγμα απλής διασωλήνωσης 4 σταδίων 4 εντολών (χωρίς διακλαδώσεις) FI Fetch Instruction Διασωλήνωση 0. Περιμένουν 4 εντολές προς εκτέλεση 1. Fetch: αντλεί την πράσινη εντολή 2. Decode: αποκωδικοποιεί την πράσινη εντολή Fetch: αντλεί την μωβ εντολή 3. Execute: εκτελεί την πράσινη εντολή Decode: αποκωδικοποιεί την μωβ εντολή Fetch: αντλεί τη μπλε εντολή 4. Write-back: γράφει τα αποτελέσματα της πράσινης Execute: εκτελεί τη μωβ εντολή Decode: αποκωδικοποιεί τη μπλε εντολή Fetch: αντλεί την κόκκινη εντολή 7. Write-back: γράφει τα αποτελέσματα της κόκκινης 8. Όλες οι εντολές έχουν τελειώσει την εκτέλεσή τους DI Decode Instruction EI Execute Instruction WO Write Operand
Παράδειγμα: κύκλος εκτέλεσης 6 σταδίων FI Fetch Instruction DI Decode Instruction CO Calculate Operands FO Fetch Operands EI Execute Instruction WO Write Operand 54
Παράδειγμα απλής διασωλήνωσης 6 σταδίων 9 εντολών (χωρίς διακλαδώσεις) FI Fetch Instruction DI Decode Instruction CO Calculate Operands FO Fetch Operands EI Execute Instruction WO Write Operand Η παραπάνω διασωλήνωση των 6 σταδίων μπορεί να μειώσει το χρόνο εκτέλεσης των 9 εντολών από 54 σε 14 χρονικές μονάδες.
Παρατηρήσεις Το διάγραμμα υποθέτει ότι κάθε εντολή περνά από όλα τα στάδια της διασωλήνωσης (αυτό δεν συμβαίνει πάντα). Το διάγραμμα υποθέτει ότι όλα τα στάδια είναι δυνατόν να εκτελεστούν παράλληλα (ούτε αυτό είναι δυνατόν να συμβαίνει πάντα). Το διάγραμμα υποθέτει ότι όλα τα στάδια έχουν την ίδια χρονική διάρκεια (αυτό δεν συμβαίνει καθώς σε διάφορα στάδια θα υπάρξει χρόνος αναμονής). Επιπρόσθετα στις παραπάνω απλουστεύσεις, οι εντολές διακλάδωσης υπό συνθήκη (διακλαδώσεις) είναι δυνατόν να ακυρώσουν ένα πλήθος από ανακλήσεις εντολών. 56
Διπλή διασωλήνωση Εφόσον μια διασωλήνωση είναι αποδοτική είναι ευνόητη η χρησιμότητα της διπλής. Μια τέτοια σχεδίαση (dual five-stage pipeline CPU) με κοινή μονάδα προσκόμισης εντολών (instruction fetch unit) δίνεται ακολούθως: Βέβαια η εκτέλεση παράλληλα δυο εντολών στις διασωληνώσεις προϋποθέτει να μην υπάρχουν conflicts στη χρήση των πόρων (π.χ. καταχωρητές), και να μην είναι εξαρτώμενες μεταξύ τους. Συνήθως επεξεργαστές RISC (Reduced Instruction Set) έχουν δυο διασωληνώσεις, όπως π.χ. ο Pentium, έχει δυο 5-σταδίων διασωληνώσεις. η βασική αναφέρεται ως U-pipeline και μπορεί να εκτελέσει οποιαδήποτε εντολή και με κινητής υποδιαστολής δεδομένα (floating-point instructions), η δεύτερη αναφέρεται ως V-pipeline, και μπορεί να εκτελέσει κυρίως μόνο απλές εντολές με ακεραίους (simple integer instructions).
Παράδειγμα Pentium με δυο 5-σταδίων διασωληνώσεις
Παράδειγμα διασωλήνωσης στον επεξεργαστή Intel 80486 Υλοποιεί μια διασωλήνωση των 5 σταδίων. 1. FETCH - Ανάκληση Από την κρυφή (cache) ή την εξωτερική μνήμη Τοποθέτηση σε buffer προανάκλησης των 16-byte (prefetch buffers) Σε κάθε φόρτωση προσκομίζονται περίπου 5 εντολές Το στάδιο της προανάκλησης λειτουργεί ανεξάρτητα από τα άλλα στάδια 2. DECODE stage1 - Πρώτο στάδιο αποκωδικοποίησης Αποκωδικοποιούνται όλες οι πληροφορίες του κώδικα λειτουργίας και του τρόπου διευθυνσιοδότησης (περιλαμβάνονται στα 3 πρώτα bytes) 3. DECODE stage 2 - Δεύτερο στάδιο αποκωδικοποίησης Μετατρέπει κάθε κώδικα λειτουργίας σε σήματα ελέγχου Υπολογίζει τους πολύπλοκους τρόπους διευθυνσιοδότησης 4. EXECUTE - Εκτέλεση Περιλαμβάνει λειτουργίες του ALU, προσπελάσεις της κρυφής μνήμης, και ενημέρωση καταχωρητών 5. WRITEBACK - Εγγραφή αποτελεσμάτων Ενημερώνει τους καταχωρητές και τις σημαίες κατάστασης που έχουν τροποποιηθεί κατά το προηγούμενο στάδιο εκτέλεσης Τα αποτελέσματα στέλνονται στην cache και στα buffers εγγραφής του διαύλου
Διακοπές (interrupts) Μηχανισμός μέσα από τον οποίο άλλες μονάδες υλικού ή λογισμικού μπορούν να διακόψουν την ομαλή σειρά εκτέλεσης των εντολών ενός προγράμματος. Δυο κατηγορίες γεγονότων μπορούν να συμβούν και να διακόψουν την εκτέλεση μιας τρέχουσας εντολής: Interrupt: δημιουργείται από σήμα του υλικού (στους INTR ακροδέκτες της CPU) Exception: δημιουργείται από το λογισμικό, κατά την εκτέλεση μιας εντολής. Κατηγορίες Προγράμματος Π.χ. από υπερχείλιση (overflow), διαίρεση με το 0 (division by zero), κ.α. Χρονισμού Παράγεται από ένα εσωτερικό χρονιστή (internal processor timer) Χρησιμοποιείται σε πολυεπεξεργασία με διακοπές (pre-emptive multitasking) I/O Από τον ελεγκτή εισόδου/εξόδου (I/O controller) Αποτυχίας υλικού Π.χ. memory parity error
Η διακοπή (interrupt) αποτελεί αλλαγή στη ροή του ελέγχου που δεν προκαλείται από το εκτελούμενο πρόγραμμα, αλλά από κάτι άλλο, συνήθως σχετικό με την είσοδο/έξοδο. Η διακοπή σταματά το εκτελούμενο πρόγραμμα και μεταφέρει τον έλεγχο σε μια διαδικασία (χειριστής διακοπών), η οποία με βάση το διάνυσμα της διακοπής εκτελεί την αντίστοιχη ρουτίνα εξυπηρέτησης της απαίτησης της διακοπής, και όταν τελειώσει, επιστρέφει τον έλεγχο (ενδεχομένως) στο πρόγραμμα που διακόπηκε, και ξεκινά η διεργασία που διακόπηκε από την ίδια ακριβώς κατάσταση (οι εσωτερικοί καταχωρητές επανέρχονται στην κατάσταση που ήταν πριν την διακοπή). Η παγίδα (trap) αποτελεί και πάλι διακοπή η οποία όμως προκαλείται από κάποια συνθήκη που εμφανίζεται στο πρόγραμμα (π.χ. η υπερχείλιση, η διαίρεση με το μηδέν, η υπερχείλιση στοίβας). Ως αποτέλεσμα η ροή ελέγχου μεταφέρεται σε καθορισμένη θέση μνήμης, στην οποία είναι φορτωμένη η διαδικασία εξυπηρέτησης της παγίδας, η οποία και ξεκινά και εκτελείται. Οι παγίδες είναι σύγχρονες με το πρόγραμμα, ενώ οι διακοπές είναι ασύγχρονες.
Διαφάνεια (transparency): όταν συμβαίνει μια διακοπή γίνονται κάποιες ενέργειες και εκτελείται κάποιος κώδικας, αλλά όταν όλα τελειώσουν, ο υπολογιστής θα πρέπει να επανέλθει στην ίδια ακριβώς κατάσταση που ήταν πριν από τη διακοπή. Ένας Η/Υ μπορεί να έχει πολλές συσκευές εισόδου/εξόδου, και πολλές από αυτές μπορεί να λειτουργούν ταυτόχρονα ακόμα και για λογαριασμό διαφορετικών χρηστών. Τότε υπάρχει η πιθανότητα, ενώ εκτελείται μια ρουτίνα διακοπής, μια δεύτερη συσκευή να θέλει να στείλει ένα δικό της σήμα διακοπής. Αυτό μπορεί να αντιμετωπιστεί με δύο τρόπους: - όλες οι ρουτίνες διακοπών να απενεργοποιούν πρώτα τις τυχόν επόμενες διακοπές, πριν ακόμα αποθηκεύσουν τους καταχωρητές (με αυτόν τον τρόπο οι διακοπές αντιμετωπίζονται με τη σειρά, αλλά έχουμε προβλήματα από τις συσκευές που δεν μπορούν να περιμένουν). - να εκχωρηθεί σε κάθε συσκευή εισόδου/εξόδου μια προτεραιότητα, υψηλή για τις συσκευές μεγάλης κρισιμότητας και χαμηλή για τις συσκευές μικρότερης κρισιμότητας.
x86 Exception and Interrupt Vector Table 63
Παράδειγμα διακοπής: Εμφάνιση γραμμής χαρακτήρων Διαδικασία εκτέλεσης: Το λογισμικό του συστήματος συλλέγει πρώτα σε μια περιοχή προσωρινής αποθήκευσης όλους τους χαρακτήρες που πρόκειται να εμφανιστούν σε κάποιο τερματικό π.χ. οθόνη. Δίνει αρχική τιμή σε μια καθολική μεταβλητή ptr ώστε να δείχνει στην αρχή της περιοχής της προσωρινής αποθήκευσης, και αποθηκεύει σε μια δεύτερη καθολική μεταβλητή count τον αριθμό των χαρακτήρων που θα εμφανιστούν. Στη συνέχεια ελέγχει εάν το τερματικό είναι έτοιμο, και εφόσον είναι, στέλνει τον πρώτο χαρακτήρα. Έτσι αφού ξεκινήσει η πράξη εισόδου/εξόδου ο επεξεργαστής είναι πλέον ελεύθερος να εκτελέσει κάποιο άλλο πρόγραμμα. 64
Ενέργειες του υλικού: 1. Ο ελεγκτής της συσκευής κάνει θετική μια γραμμή διακοπών στο δίαυλο του συστήματος για να ξεκινήσει την ακολουθία της διακοπής. 2. Μόλις η CPU είναι έτοιμη να χειριστεί τη διακοπή, κάνει θετικό ένα σήμα επιβεβαίωσης λήψης διακοπής στο δίαυλο. 3. Όταν ο ελεγκτής της συσκευής διαπιστώσει ότι το σήμα διακοπής του επιβεβαιώθηκε, τοποθετεί το διάνυσμα διακοπής (interrupt vector) στις γραμμές δεδομένων ως αναγνωριστικό της συσκευής. 4. Η CPU παίρνει το διάνυσμα διακοπής από το δίαυλο και το αποθηκεύει προσωρινά. 5. Η CPU αποθέτει στη στοίβα τα περιεχόμενα του απαριθμητή προγράμματος και του καταχωρητή κατάστασης. 6. Έπειτα η CPU καθορίζει μια νέα τιμή στον απαριθμητή του προγράμματος χρησιμοποιώντας το διάνυσμα διακοπής ως δείκτη θέσης σε έναν πίνακα στο κατώτερο μέρος της μνήμης. Αυτή η νέα τιμή δείχνει στην αρχή της ρουτίνας εξυπηρέτησης διακοπής που αντιστοιχεί στη συσκευή που προκάλεσε τη διακοπή. 65
Ενέργειες του λογισμικού: 1. Η ρουτίνα εξυπηρέτησης διακοπής αποθηκεύει (στη στοίβα ή σε ένα πίνακα του συστήματος) όλους τους καταχωρητές, ώστε να μπορούν να αποκατασταθούν αργότερα. 2. Κάθε διάνυσμα διακοπής είναι μεριζόμενο για όλες τις συσκευές ενός συγκεκριμένου τύπου, οπότε δεν είναι ακόμη γνωστό ποιο τερματικό προκάλεσε τη διακοπή. Ο αριθμός του τερματικού μπορεί να βρεθεί με την ανάγνωση κάποιου καταχωρητή συσκευής. 3. Οποιεσδήποτε άλλες πληροφορίες σχετικές με τη διακοπή (π.χ. οι κωδικοί πληροφοριών κατάστασης) μπορούν τώρα να διαβαστούν, και αν συνέβη κάποιο σφάλμα εισόδου/εξόδου, τώρα μπορεί να αντιμετωπιστεί. 4. Ενημερώνονται οι καθολικές μεταβλητές ptr (αυξάνεται κατά ένα ώστε να δείχνει στο επόμενο byte) και count (μειώνεται κατά ένα ώστε να δηλώνει ότι τα byte για έξοδο λιγόστεψαν κατά ένα). Αν η count εξακολουθεί να είναι μεγαλύτερη από 0, υπάρχουν και άλλοι χαρακτήρες για έξοδο. Ο χαρακτήρας στον οποίο δείχνει τώρα η ptr αντιγράφεται στον καταχωρητή περιοχής προσωρινής αποθήκευσης εξόδου. 5. Αν χρειάζεται, στέλνεται στην έξοδο ένας ειδικός κωδικός που ενημερώνει τη συσκευή ή τον ελεγκτή διακοπών ότι η διεκπεραίωση της διακοπής ολοκληρώθηκε. 6. Αποκαθίστανται όλοι οι αποθηκευμένοι καταχωρητές. 7. Εκτελείται η εντολή Return From Interrupt (επιστροφή από διακοπή), επαναφέροντας τη CPU στον τρόπο λειτουργίας και την κατάσταση που ήταν πριν συμβεί η διακοπή. 66
Παράδειγμα σχηματικής αναπαράστασης των διακοπών 67
Η εξέλιξη του βαθμού ολοκλήρωσης από τον πρώτο επεξεργαστή της Intel Intel 4004 (1971) Intel Core i7 quad core Skylake (2015) Τεχνολογία: 10μ Συχνότητα: 0.108MHz Έτος: 1971 Τρανζίστορ: 2.300 Δίσκος πυριτίου (wafer), πύλη (gate) και το chip nano n 1 x 10-9 0.000 000 001 micro μ 1 x 10-6 0.000 001 Τεχνολογία: 14nμ Συχνότητα: 4.8GHz Έτος: 2015 Τρανζίστορ: 1.350.000.000 68
Μονάδες μέτρησης Όνομα Σύμβολο Αριθμός atto a 1 x 10-18 0.000 000 000 000 000 001 femto f 1 x 10-15 0.000 000 000 000 001 pico p 1 x 10-12 0.000 000 000 001 nano n 1 x 10-9 0.000 000 001 micro μ 1 x 10-6 0.000 001 milli m 1 x 10-3 0.001 Kilo k 1 x 10 3 1,000 Mega M 1 x 10 6 1,000,000 Giga G 1 x 10 9 1,000,000,000 Tera T 1 x 10 12 1,000,000,000,000 Peta P 1 x 10 15 1,000,000,000,000,000 Exa E 1 x 10 18 1,000,000,000,000,000,000 69