Μετάβαση στο περιεχόμενο

x86

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
x86
ΣχεδιαστήςIntel,AMD
Bits16-bit,32-bit,64-bit
Κυκλοφόρησε1978
ΣχεδίασηCISC
ΤύποςΚαταχωρητές-Μνήμη (Register-Memory)
ΚωδικοποίησηΠοικίλλει (1 έως 15 byte)
ΔιακλάδωσηΚαταχωρητής κατάστασης(Status register)
EndiannessLittle
Μέγεθος σελίδας8086i286:κανένα
i386,i486:σελίδες των 4 KB
P5Pentium:πρόσθεσε σελίδες των 4 MB
(LegacyPAE:4 KB→2 MB)
x86-64:πρόσθεσε σελίδες του 1 GB
Επεκτάσειςx87,IA-32,P6,MMX,SSE,SSE2,x86-64,SSE3,SSSE3,SSE4,SSE5,AVX
ΑνοιχτόςΌχι πλήρως. Για συγκεκριμένα προχωρημένα χαρακτηριστικά του x86 χρειάζεται άδεια από την Intel, ενώ αντίστοιχα για τον x86-64 ίσως χρειάζεται άδεια από την AMD. Ο επεξεργαστής 80486 κυκλοφορεί πάνω από 20 χρόνια στην αγορά[1]και δεν τον επηρεάζουν πατέντες. Αυτό το υποσύνολο της αρχιτεκτονικής x86 είναι επομένως ανοιχτό.
Καταχωρητές
Γενικής χρήσης16-bit:6καταχωρητές με ειδικούς ρόλους+ BP και SP;
32-bit:6GPRs+ EBP και ESP;
64-bit:14GPRs+ RBP και RSP.
Κινητής υποδιαστολής16-bit:Επιπλέον ξεχωριστήμονάδα κινητής υποδιαστολήςx87(FPU).
32-bit:Ξεχωριστή ή ενσωματωμένη μονάδα κινητής υποδιαστολήςx87(FPU), ενσωματωμένες μονάδεςSSE2σε μεταγενέστερους επεξεργαστές.
64-bit:Ενσωματωμένες μονάδεςx87καιSSE2.
Ο επεξεργαστής Intel 8086.
Ο επεξεργαστής Intel Core 2 Duo, ένα παράδειγμα x86-συμβατού, πολυπύρηνου επεξεργαστή 64-bit.
Ο επεξεργαστής AMD Athlon (αρχική έκδοση) - διαφορετική τεχνολογία αλλά υλοποίηση πλήρως συμβατή με τους x86.

Ο όροςx86αναφέρεται σε μια οικογένεια απόαρχιτεκτονικές συνόλου εντολών[2]που βασίζονται στηνCPUIntel 8086.Ο επεξεργαστής 8086 κυκλοφόρησε το 1978 σαν μια πλήρως 16-bit επέκταση του8080της Intel που βασιζόταν σε τεχνολογία 8-bit, και εισήγαγε τοsegmentationγια να ξεπεράσει το φράγμα των 16-bit διευθύνσεων της προηγούμενης σχεδίασης. Ο όρος x86 προήλθε από το γεγονός ότι οι πρώτοι απόγονοι του 8086 είχαν και αυτοί ονόματα που τελείωναν σε "86". Με τα χρόνια έχουν γίνει πολλές προσθήκες και επεκτάσεις στοσύνολο εντολώνx86, σχεδόν πάντα με βάση την προς τα πίσω συμβατότητα (backward compatibility).[3]Η αρχιτεκτονική έχει υλοποιηθεί σε επεξεργαστές τηςIntel,τηςCyrix,τηςAMD,τηςVIA,και πολλών άλλων εταιρειών.

Ο όρος δεν είναι συνώνυμος με την συμβατότητα με τον IBM PC: η τελευταία απαιτεί και άλλουλικό.Υπήρξαν και άλλα συστήματα που χρησιμοποίησαν τσιπ x86, όπως ταενσωματωμένα συστήματακαι ο φορητός υπολογιστήςGRID Compass,κάποιες φορές πριν από τον ίδιο τονIBM PC.

Ο όρος διαδόθηκεμετάτην κυκλοφορία του80386,και υπονοεί συνήθως συμβατότητα με τοσύνολο εντολών32-bit του 80386. Αυτό συχνά γράφεται και σανx86-32για να ξεχωρίζει από το αρχικό "x86-16" που ήταν 16-bit ή από τοx86-64που είναι 64-bit.[4]Αν και οι περισσότεροι επεξεργαστές x86 που χρησιμοποιούνται σενέουςπροσωπικούς υπολογιστέςκαιεξυπηρετητέςέχουν δυνατότητες 64-bit, για να αποφεύγονται προβλήματα συμβατότητας με παλαιότερους υπολογιστές ή συστήματα, συχνά χρησιμοποιείται ο όροςx86-64x64) για να υποδηλώνει λογισμικό 64-bit, με τον όροx86να χρησιμοποιείται μόνο για λογισμικό 32-bit.[5][6]

Αν και ο 8086 αναπτύχθηκε αρχικά γιαενσωματωμένα συστήματακαι μικρούς προσωπικούς υπολογιστές (για χρήση δηλαδή από έναν χρήστη), ως απάντηση στον επιτυχημένοZilog Z80που ήταν 8080-συμβατός,[7]σύντομα η γραμμή των x86 απέκτησε περισσότερα χαρακτηριστικά και επεξεργαστική ισχύ. Σήμερα οι x86 είναι πολύ διαδεδομένοι στους σταθερούς και στους φορητούς υπολογιστές και έχουν αντικαταστήσει τους μεσαίου μεγέθους υπολογιστές (midrange computers) και τους επεξεργαστέςRISCσε πολλούς εξυπηρετητές καισταθμούς εργασίας.Το υλικό των x86 υποστηρίζεται από ένα μεγάλο μέρος τουλογισμικού,όπως ταλειτουργικά συστήματαDOS,Windows,Linux,BSD,SolarisκαιMac OS X.

Οι σύγχρονοι x86 δεν απαντώνται συχνά σεενσωματωμένα συστήματακαι σε εφαρμογές με απαιτήσεις χαμηλής κατανάλωσης ενέργειας (όπως αυτές που βασίζονται σε μικρές μπαταρίες), ούτε σε αγορές φτηνών μικροεπεξεργαστών, όπως οιοικιακές συσκευέςκαι τα παιχνίδια.[8]Συνήθως χρησιμοποιούνται απλές αρχιτεκτονικές 8-bit και 16-bit, αν και υπάρχουν οι x86-συμβατοίVIA C7,VIA Nano,AMDGeode,Athlon Neo,καιIntel Atom,που είναι σχεδιάσεις 32-bit και 64-bit με σχετικά μικρή κατανάλωση και κόστος.

Πολλοί έχουν προσπαθήσει, συμπεριλαμβανομένης της ίδιας της Intel, να αντικατασταθεί η "άκομψη" αρχιτεκτονική x86, η οποία είχε προκύψει κατευθείαν από τους πρώτους απλούς μικροεπεξεργαστές 8-bit. Παραδείγματα είναι οiAPX 432(γνωστός και σανIntel 8800), οIntel 960,οIntel 860και η αρχιτεκτονικήItaniumτης Intel και της Hewlett Packard. Παρόλα αυτά, η συνεχής βελτίωση τηςμικροαρχιτεκτονικήςκαι τωνκυκλωμάτωντων x86, καθώς και η ανάπτυξη της βιομηχανίας των ημιαγωγών έχουν εδραιώσει τους x86 σε πολλές περιοχές εφαρμογών. Η επέκταση 64 bit της AMD για τους x86 (στην οποία η Intel τελικά απάντησε με μια συμβατή σχεδίαση)[9]και η δυνατότητα των x86 να κλιμακώνουν τις επιδόσεις τους, όπως ο οκταπύρηνος Intel Xeon και ο 12-πύρηνος AMD Opteron δείχνουν πώς στην περίπτωση του x86 η συνεχής εξέλιξη κλασικών βιομηχανικών προτύπων μπορεί να αντεπεξέλθει στον ανταγωνισμό από νέες και διαφορετικές αρχιτεκτονικές.[10]

Σημείωση: Στο κείμενο που ακολουθεί, κάθε χρήση των προθεμάτων kilo/mega/giga/tera έχει τη δυαδική τους σημασία (δυνάμεις του 1024).

Στον παρακάτω πίνακα φαίνονται τα εμπορικά ονόματα κοινών[11]επεξεργαστών που υλοποιούν το σύνολο εντολών x86, ομαδοποιημένα ανά γενιές που δείχνουν κάποια σημαντικά σημεία στην ιστορία του x86. Να σημειωθεί ότι οι γενιές αυτές δεν είναι ακριβείς: κάθε μια ορίζει ένα γενικό πλαίσιο με βάση κάποια βελτιωμένη ή εμπορικά πετυχημένημικροαρχιτεκτονικήεπεξεργαστών.

Γενιά Πρώτηκυκλοφορία Γνωστά εμπορικά ονόματα Γραμμικός/φυσικός χώρος διευθύνσεων Ιδιαίτερα χαρακτηριστικά
1 1978 Intel 8086,Intel 8088και οι κλώνοι τους 16-bit/ 20-bit (segmented) οι πρώτοι μικροεπεξεργαστές x86
1982 Intel 80186,Intel 80188και οι κλώνοι τους,NEC V20/V30 υλικό για γρήγορους υπολογισμούςδιευθύνσεων,γρήγορο πολλαπλασιασμό/διαίρεση, κ.α.
2 Intel 80286και οι κλώνοι του 16-bit(30-bitvirtual) / 24-bit (segmented) μονάδα διαχείρισης μνήμης(memory management unit, MMU), γιαπροστατευμένη κατάσταση(protected mode) και μεγαλύτεροχώρο διευθύνσεων(address space)
3 (IA-32) 1985 Intel 80386και οι κλώνοι του,AMD Am386 32-bit(46-bitvirtual) / 32-bit σύνολο εντολών32-bit,MMU με σελίδες (paging)
4 (FPU) 1989 Intel486και οι κλώνοι του,AMD Am486/Am5x86 διοχέτευση (pipelining) τύπου RISC, ενσωματωμένημονάδα κινητής υποδιαστολήςx87(80-bit), κρυφή μνήμη στο τσιπ (on-chip cache)
4/5 1997 IDT/Centaur-C6,Cyrix III-Samuel,VIA C3-Samuel2 / VIA C3-Ezra (2001),VIA C7(2005) ενσωματωμένη FPU εντός σειράς (in-order), κάποια μοντέλα με κρυφή μνήμη L2 στο τσιπ (on-chip L2 cache), επεκτάσεις MMX, SSE
5 1993 Pentium,Pentium MMX,Cyrix 5x86,RisemP6 υπερβαθμωτοί(superscalar), δίαυλος δεδομένων (databus)64-bit,γρηγορότερη FPU,MMX(2x 32-bit)
5/6 1996 AMD K5,Nx586 (1994) μετάφραση μ-op
6 1995 Pentium Pro,Cyrix 6x86,Cyrix MII,Cyrix III-Joshua (2000) όπως παραπάνω/36-bitφυσική(PAE) μετάφραση μ-op, εντολές μεταφοράς υπό συνθήκη, εκτέλεση εκτός σειράς (out-of-order execution), μετονομασία καταχωρητών (register renaming),υποθετική εκτέλεση(speculative execution), φυσική επέκταση μνήμης (Physical Address Extension, PAE) (Pentium Pro), κρυφή μνήμη L2 στον επεξεργαστή (in-package L2 cache) (Pentium Pro)
1997 AMD K6/-2/3,Pentium II/III υποστήριξη κρυφής μνήμης L3,3DNow!,SSE(2x 64-bit)
2003 Pentium M,Intel Core(2006) βελτιστοποιημένοι για χαμηλή κατανάλωση ενέργειας (Thermal Design Power)
7 1999 Athlon,Athlon XP υπερβαθμωτές FPU, ευρεία σχεδίαση (μέχρι τρεις εντολές x86 ανά παλμό ρολογιού)
2000 Pentium 4 βαθιά διοχέτευση, υψηλή συχνότητα,SSE2,hyper-threading
7/8 2000 Transmeta Crusoe,Efficeon σχεδίαση VLIW μεπροσομοιωτήx86, ελεγκτής μνήμης στο τσιπ
2004 Pentium 4Prescott 64-bit/φυσικός 40-bit στην πρώτη υλοποίηση της AMD. πολύ βαθιά διοχέτευση, πολύ υψηλή συχνότητα,SSE3,δυνατότητα 64-bit (ΚΜΕακεραίων) στιςυποδοχές LGA 775
2006 Intel Core 2 64-bit (ΚΜΕ ακεραίων), χαμηλή κατανάλωση,πολλοί πυρήνες(multi-core), χαμηλότερη συχνότητα ρολογιού,SSE4(Penryn)
2008 VIA Nano εκτέλεση εκτός σειράς (Out-of-order execution), υπερβαθμωτοί, 64-bit (ΚΜΕ ακεραίων), κρυπτογράφηση στο υλικό, πολύ χαμηλή κατανάλωση ενέργειας, προσαρμοζόμενη διαχείριση ενέργειας (adaptive power management)
8 (x86-64) 2003 Athlon 64,Opteron σύνολο εντολών x86-64(βασικός πυρήνας ακεραίωνΚΜΕ), ελεγκτής μνήμης στο τσιπ,hypertransport
8/9 2007 AMDPhenom όπως παραπάνω / φυσικός 48-bit για τον AMD Phenom μονολιθικοί τετραπύρηνοι,SSE4a,HyperTransport 3 ή QuickPath, εγγενής ελεγκτής μνήμης, κρυφή μνήμη L3 στο τσιπ, αρθρωτή σχεδίαση, κάποια μοντέλα Core i3/i5 περιλαμβάνουν GPU
2008 Intel Core i3,Intel Core i5,Intel Core i7,AMD Phenom II
Intel Atom εντός σειράς (in-order) αλλά με υψηλό βαθμό διοχέτευσης, πολύ χαμηλή κατανάλωση ενέργειας, σε κάποια μοντέλα: 64-bit (ΚΜΕ ακεραίων), ενσωματωμένη GPU
2011 AMDBobcat,Llano εκτέλεση εκτός σειράς(Out-of-order execution), ΚΜΕ ακεραίων 64-bit, ενσωματωμένη GPU, χαμηλή κατανάλωση (Bobcat)
9 (GPU) 2011 IntelSandy Bridge,AMDBulldozer και Trinity SSE5/AVX(4x 64-bit), αρθρωτή σχεδίαση, ενσωματωμένη GPU στο τσιπ
2012 IntelIvy Bridge βαθμός σμίκρυνσης τσιπ 22 nm (Sandy Bridge). Θα κατασκευαστεί χρησιμοποιώντας την τεχνολογίαςτρανζίστορτριών πυλών της Intel (tri-gate)
2013 IntelLarrabee πολύ ευρείαμονάδα διανυσμάτων(vector unit), εντολές LRBni (8x 64-bit)
2014 IntelHaswell εντολές FMA3,DDR4

Η αρχιτεκτονική x86 κυκλοφόρησε για πρώτη φορά το 1978 με τηνΚΜΕIntel 8086,που ήταν μια πλήρως 16-bit σχεδίαση, η οποία είχε βασιστεί στους παλιότερους επεξεργαστές 8-bit8008και8080.Αν και δεν ήταν συμβατή στο επίπεδο του δυαδικού κώδικα (binary compatible), σχεδιάστηκε έτσι ώστε να επιτρέπει σε προγράμματασυμβολικής γλώσσαςπου είχαν γραφτεί για αυτούς τους επεξεργαστές (και για τον σύγχρονό τους8085) να μεταφράζονται μηχανικά σε αντίστοιχησυμβολική γλώσσα 8086.Αυτό είχε σαν συνέπεια ο νέος επεξεργαστής να αποτελέσει ελκυστική λύση για πολλούς καταναλωτές. Ο εξωτερικός δίαυλος όμως του 8086 ήταν 16-bit και αυτό οδήγησε σε σημαντική επανασχεδίαση του υλικού, καθώς επίσης και σε άλλες επιπλοκές και σημεία που το κόστος αυξανόταν. Για να αντιμετωπίσει αυτό το εμπόδιο, η Intel εισήγαγε τον σχεδόν πανομοιότυπο8088,ο οποίος στην πραγματικότητα ήταν ένας 8086 με εξωτερικό δίαυλο 8-bit που επέτρεπε απλούστερεςπλακέτες τυπωμένων κυκλωμάτων(printed circuit boards) και χρειαζόταν λιγότερα τσιπDRAM(του 1-bit) - ήταν επίσης πιο εύκολο να επικοινωνήσει με τα ήδη διαδεδομένα (δηλ. χαμηλού κόστους) συστήματα και περιφερειακά τσιπ που ήταν 8-bit. Αυτό, μαζί με άλλους, μη τεχνικούς λόγους, οδήγησε στην απόφαση της IBM να κατασκευάσει ένανοικιακό/προσωπικό υπολογιστήμε βάση τον 8088, παρά τη διαθεσιμότητα επεξεργαστών 16-bit από την Motorola, την Zilog και την National Semiconductor (ενώ εξέτασε επίσης και άλλους επεξεργαστές 8-bit που ήδη κυκλοφορούσαν). ΟIBM PCπου προέκυψε, επικράτησε των συστημάτωνCP/Mμε βάση τονZ80,των υπολογιστώνApple II,και άλλων διαδεδομένων υπολογιστών, με αποτέλεσμα να γίνει το ντε φάκτο πρότυπο των προσωπικών υπολογιστών και ο 8088 και οι απόγονοί του να επικρατήσουν σε αυτόν τον κλάδο της αγοράς μικροεπεξεργαστών.

Ένας άλλος παράγοντας ήταν ο προχωρημένος αλλά ασύμβατος επεξεργαστής 32-bitIntel 8800(γνωστός και σαν iAPX 432) που απέτυχε στην αγορά περίπου την ίδια εποχή που κυκλοφόρησε ο IBM-PC: ο 8800 απογοήτευσε από πλευράς ταχύτητας σε σχέση με τον καινούριο και γρήγορο80286στις αρχές του 1982. (Ο80186,που κυκλοφόρησε παράλληλα με τον 80286, προοριζόταν γιαενσωματωμένα συστήματα,και στόχευε ήδη σε μια μεγάλη αγορά.) Η εμπορική αποτυχία του 32-bit 8800 ήταν ένας βασικός λόγος που η Intel συνέχισε να αναπτύσσει πιο προχωρημένους επεξεργαστές συμβατούς με τον 8086, όπως ο80386(επέκταση στα 32-bit του γρήγορου 80286).

Άλλοι κατασκευαστές

[Επεξεργασία|επεξεργασία κώδικα]

Διάφορες εταιρείες, όπως ηIBMNEC,[12]ηAMDTISTMFujitsuOKISiemensCyrixIntersilC&TNexGenκαι ηUMC,άρχισαν να σχεδιάζουν και να κατασκευάζουνεπεξεργαστέςγια προσωπικούς υπολογιστές και ενσωματωμένα συστήματα. Αυτά οι υλοποιήσεις του x86 συνήθως δεν ήταν απλές αντιγραφές αλλά είχαν διαφορετική εσωτερικήμικροαρχιτεκτονικήκαι παρείχαν διαφορετικές λύσεις σε ηλεκτρονικά και φυσικά προβλήματα υλοποίησης. Τα πρώτα συμβατά τσιπ ήταν 16-bit, ενώ σχεδιάσεις 32-bit ακολούθησαν πολύ αργότερα. Στην αγορά τωνπροσωπικών υπολογιστών,οι πρώτες σημαντικές ποσότητες εμφανίστηκαν γύρω στο 1990 με τους επεξεργαστές που ήταν συμβατοί με τονi386και τονi486,συχνά χρησιμοποιώντας το ίδιο όνομα με τα πρωτότυπα τσιπ της Intel. Άλλες εταιρείες που σχεδίασαν ή κατασκεύασαν επεξεργαστές x86 ήx87ήταν η ITT Corporation, ηNational Semiconductor,η ULSI System Technology και η Weitek.

Μετά τονi486που είχε πλήρη διοχέτευση (pipelining), ηIntelκυκλοφόρησε την εμπορική ονομασίαPentium(η οποία, σε αντίθεση με τους κωδικούς αριθμούς, μπορούσε να κατοχυρωθεί σαν εμπορικό σήμα) για τη νέα της γραμμήυπερβαθμωτών(superscalar) σχεδιάσεων x86. Λόγω της εξαφάνισης των ονομασιών x86 για νομικούς λόγους, ηIBMσυνεργάστηκε με τηνCyrixγια την κατασκευή του5x86και στη συνέχεια των γρήγορων σχεδιάσεων6x86(M1) και6x86MX (MII) της Cyrix, που ήταν τα πρώτα τσιπ x86 που υλοποίησαν μετονομασία καταχωρητών (register renaming) ώστε να είναι δυνατή ηυποθετική εκτέλεση(speculative execution). Παράλληλα, η AMD σχεδίασε και κατασκεύασε (αλλά κυκλοφόρησε με καθυστέρηση) τον προχωρημένο5k86(K5), ο οποίος,εσωτερικά,ήταν βασισμένος σε σημαντικό βαθμό στις παλιότερες σχεδιάσεις29KRISCτης AMD - παρόμοια με τονNx586τηςNexGen,χρησιμοποιούσε μια στρατηγική όπου αφιερωμένες βαθμίδες της διοχέτευσης αποκωδικοποιούν εντολές x86 σε εύκολα διαχειρίσιμες μικρολειτουργίες (micro-operations), μια μέθοδος που από τότε έγινε ο κανόνας για τις περισσότερες σχεδιάσεις του x86 μέχρι σήμερα.

Κάποιες πρώιμες εκδόσεις αυτών των τσιπ είχαν προβλήματα απαγωγής θερμότητας. Ο 6x86 είχε επίσης κάποια μικρά προβλήματα συμβατότητας και από τονNx586έλειπε ημονάδα κινητής υποδιαστολής(FPU) και η (τότε σημαντική) συμβατότητα σε ακίδες (pin-compatibility), ενώ οK5αποδείχτηκε λιγο αργός, όταν (τελικά) κυκλοφόρησε. Πολλοί καταναλωτές επίσης δεν γνώριζαν για αυτές τις εναλλακτικές έναντι του Pentium. Αυτά τα προβλήματα οδήγησαν σε εμπορική αποτυχία των εναλλακτικών σχεδιάσεων, παρά το γεγονός ότι οK5είχε πολύ καλή συμβατότητα με τον Pentium και ο6x86ήταν σημαντικά πιο γρήγορος από τον Pentium σε πράξεις ακεραίων.[13]ΗAMDαργότερα κατάφερε να εδραιωθεί σαν σημαντικός παίχτης στην αγορά, λόγω των επεξεργαστώνK6,ενώ τελικά ανέπτυξε τους πολύ επιτυχημένουςAthlonκαιOpteron.Υπήρξαν και άλλες εταιρείες που συμμετείχαν στην αγορά, όπως η Centaur Technology (γνωστή παλιότερα σαν IDT), η Rise Technology και ηTransmeta.Η επεξεργαστέςC3καιC7τηςVIA Technologies,που έχουν χαμηλή κατανάλωση ενέργειας, σχεδιάστηκαν από την Centaur και κυκλοφορούν για μεγάλο χρονικό διάστημα. Η τελευταία σχεδίαση της Centaur, οVIA Nano,είναι ο πρώτος επεξεργαστής τους μευπερβαθμωτήκαιυποθετική εκτέλεση.Έχει ενδιαφέρον το ότι κυκλοφόρησε περίπου την ίδια χρονική περίοδο με τον πρώτο επεξεργαστή της Intel με εκτέλεση εντός σειράς ( "in-order" ) μετά τονPentiumP5,τονIntel Atom.

Επεκτάσεις του μεγέθους λέξης

[Επεξεργασία|επεξεργασία κώδικα]

Η αρχιτεκτονική του συνόλου εντολών έχει επεκταθεί δύο φορές για μεγαλύτερα μεγέθη λέξης (word size). Το 1985, η Intel κυκλοφόρησε τον επεξεργαστή 32-bit 80386 (γνωστό και σαν i386), ο οποίος σταδιακά αντικατέστησε τα παλιά τσιπ 16-bit στους υπολογιστές (να και δε συνέβη το ίδιο σταενσωματωμένα συστήματα) κατά τα επόμενα χρόνια: το επαυξημένο αυτό προγραμματιστικό μοντέλο αρχικά ονομάστηκεαρχιτεκτονική του i386("i386 architecture"), λόγω του ονόματος της πρώτης του υλοποίησης, αλλά στη συνέχεια η Intel το ονόμασεIA-32όταν εισήγαγε την (διαφορετική) αρχιτεκτονικήIA-64.Μεταξύ 1999-2003, ηAMDεπέκτεινε αυτήν την αρχιτεκτονική 32-bit στα 64 bits και την ονόμασεx86-64(σε αρχικά της έγγραφα) και στη συνέχειαAMD64.Σύντομα η Intel υιοθέτησε αυτές της επεκτάσεις της AMD κάτω από το όνομα IA-32e, το οποίο στη συνέχεια άλλαξε σε EM64T, και τελικά κατέληξε στο όνομα Intel 64. Ανάμεσα σε αυτά τα πέντε ονόματα, η πιο κοινή ονομασία είναι η αρχική x86-64, αν και ηMicrosoftκαι ηSun Microsystemsακόμα χρησιμοποιούν τον όρο x64.

Βασικά χαρακτηριστικά της αρχιτεκτονικής

[Επεξεργασία|επεξεργασία κώδικα]

Η αρχιτεκτονική x86 έχει εντολές μεταβλητού μήκους και είναι κυρίως σχεδίαση "CISC"δύο διευθύνσεων με έμφαση στην προς τα πίσω συμβατότητα (backward compatibility). Το σύνολο εντολών δεν είναι όμως κλασικό CISC, αλλά επεκτείνει με διακριτό τρόπο τις απλές αρχιτεκτονικές 8-bit του8008και του8080.Υποστηρίζεται η διευθυνσιοδότηση με byte και οι λέξεις αποθηκεύονται στη μνήμη σε σειρά μικρού άκρου (little-endian). Επιτρέπεται η πρόσβαση στη μνήμη σε διευθύνσεις που δεν είναι στοιχισμένες (unaligned) για όλα τα μεγέθη λέξεων που επιτρέπονται. Το μεγαλύτερο μέγεθος που υποστηρίζεται εγγενώς για αριθμητική ακεραίων και διευθύνεσιες μνήμης ή σχετικές διευθύνσεις-offsets) είναι 16, 32, ή 64 bits ανάλογα με τη γενιά της αρχιτεκτονικής (οι νεότεροι επεξεργαστές υποστηρίζουν απευθείας και μικρότερους ακεραίους). Πολλές απλές τιμές μπορούν να επεξεργαστούν ταυτόχρονα μέσω της μονάδας SIMD που περιλαμβάνεται στις μεταγενέστερες γενιές, όπως περιγράφεται στη συνέχεια.[14]Για κοινές καταστάσεις και τιμές που βρίσκονται στο εύρος -128..127, για χρήση σε σχετικές διευθύνσεις ή απλά δεδομένα, μπορούν να χρησιμοποιηθούν κατευθείαν αριθμοί 8-bit. Οι εντολές συνήθως έχουν μήκος 2 ή 3 byte (αν και κάποιες είναι πολύ μεγαλύτερες και άλλες είναι ένα byte).

Για να εξοικονομηθεί και άλλο χώρος για την κωδικοποίηση των εντολών, οι περισσότεροι καταχωρητές (registers) εκφράζονται σαν κώδικες (opcodes) με χρήση 3 bit, και το πολύ ένας τελεστέος μιας εντολής μπορεί να είναι θέση μνήμης (υπάρχουν σχεδιάσεις "CISC", όπως οPDP-11,που χρησιμοποιούν δύο). Αυτός ο τελεστέος όμως μπορεί να είναι ταυτόχρονα και οπροορισμός(destination), ή ταυτόχρονα ηπροέλευση (source) και ο προορισμός,ενώ ο άλλος τελεστέος, η προέλευση, μπορεί να είναι είτεκαταχωρητής(register), είτεαπευθείας τιμή(immediate). Αυτό, μαζί με άλλους παράγοντες, οδηγεί σε μικρό μέγεθος κώδικα που συμπεριφέρεται καλά σε σχέση με τους επεξεργαστές 8-bit και χρησιμοποιεί αποδοτικά την κρυφή μνήμη για τις εντολές (instruction cache memory). Ο σχετικά μικρός αριθμός των καταχωρητών γενικής χρήσης (κληρονομιά των 8-bit επεξεργαστών) έχει οδηγήσει σε συχνή χρήση της διευθυνσιοδότησης με βάση καταχωρητές (register-relative addressing) και μικρές σχετικές διευθύνσεις, ειδικά για πρόσβαση στηνστοίβα.Έχει υπάρξει σημαντική έρευνα για να γίνουν αυτές οι περιπτώσεις πρόσβασης τόσο γρήγορες, όσο η πρόσβαση στους καταχωρητές, δηλ. με μια μόνο εντολή, συνήθως όταν τα δεδομένα υπάρχουν ήδη στην κρυφή μνήμη πρώτου επιπέδου.

Αριθμοί κινητής υποδιαστολής και SIMD

[Επεξεργασία|επεξεργασία κώδικα]

Για τον αρχικό επεξεργαστή8086αναπτύχθηκε ένας ξεχωριστόςεπεξεργαστής κινητής υποδιαστολής,με εσωτερικούς καταχωρητές 80-bit, ο8087.Το τσιπ αυτό τελικά οδήγησε στην ανάπτυξη του80387,ενώ οι μεταγενέστεροι επεξεργαστές ενσωμάτωσαν μια προς τα πίσω συμβατή έκδοση αυτής της λειτουργικότητας στο ίδιο τσιπ με τον κύριο επεξεργαστή. Οι μοντέρνες σχεδιάσεις x86 περιλαμβάνουν επιπλέον μια μονάδαSIMD(βλ. παρακάτω,SSE) όποι οι εντολές μπορούν να εκτελούνται παράλληλα σε (μία ή δύο) λέξεις των 128-bit, με κάθε λέξη να περιέχει 2 ή 4αριθμούς κινητής υποδιαστολής(μήκους 64 ή 32 bit ο καθένας), ή εναλλακτικά 2, 4, 8 ή 16 ακεραίους (μήκους 64, 32, 16 ή 8 bit ο καθένας αντίστοιχα). Το εύρος των καταχωρητών SIMD σημαίνει ότι οι επεξεργαστές x86 που υπάρχουν σήμερα μπορούν να φορτώσουν ή να αποθηκεύσουν μέχρι 128 bit δεδομένων από τη μνήμη με μια μόνο εντολή και να εκτελέσουν λειτουργίες επιπέδου bit (αλλά όχι αριθμητική ακεραίων[15]) σε ποσότητες πλήρως 128-bit παράλληλα. Οι επόμενοι επεξεργαστές x86 έχουν λειτουργίες SIMD 256-bit (με φόρτωση και αποθήκευση στη μνήμη 256-bit).

Σύγχρονες υλοποιήσεις

[Επεξεργασία|επεξεργασία κώδικα]

Κατά τη διάρκεια της εκτέλεσης, οι σύγχρονοι επεξεργαστές x86 χρησιμοποιούν κάποιων επιπλέον σταδίων αποκωδικοποίησης για να σπάσουν τις περισσότερες εντολές σε μικρότερα κομμάτια, τις μικρο-εντολές (micro-operations). Αυτές δίνονται σε μια μονάδα ελέγχου που τις κρατά και κατανέμει χρονικά την εκτέλεσή τους, διατηρώντας πάντα τη συμβατότητα με τη σημασιολογία του x86, ώστε να μπορούν να εκτελεστούν παράλληλα (εν μέρει), από μια εξειδικευμένημονάδα εκτέλεσης(ο επεξεργαστής έχει αρκετές τέτοιες μονάδες διαθέσιμες). Αυτές οι σύγχρονες σχεδιάσεις x86 είναι επομένωςυπερβαθμωτές(superscalar), και μπορούν να εκτελούν εντολές εκτός σειράς (out of order execution) καιυποθετικά(μέσω μετονομασίας καταχωρητών), το οποίο σημαίνει ότι μπορούν να εκτελούν ταυτόχρονα πολλές εντολές x86 (κατά τμήματα ή ολόκληρες), και όχι απαραίτητα με την ίδια σειρά με την οποία δόθηκαν από το πρόγραμμα που εκτελείται.

Όταν πρωτοκυκλοφόρησε αυτή η τεχνολογία ονομάστηκε "πυρήνας RISC" ( "RISC core" ) ή "μετάφραση RISC" ( "RISC translation" ), για εμπορικούς λόγους, αλλά και γιατί αυτές οι μικρο-εντολές έχουν κάποιες ιδιότητες που έχουν κάποια είδη των εντολών RISC. Παρόλα αυτά, ο παραδοσιακός μικροκώδικας (microcode) που χρησιμοποιείται από τη δεκαετία του 1950 έχει επίσης αυτές τις ιδιότητες και η μόνη διαφορά της νέας αυτής προσέγγισης ήταν ότι η μετάφραση σε μικρο-λειτουργίες τώρα γινόταν με ασύγχρονο τρόπο. Οι μονάδες εκτέλεσης δε χρειαζόταν να συγχρονίζονται με τα στάδια αποκωδικοποίησης, κάτι που πρόσφερε νέες δυνατότητες για την ανάλυση της (αποθηκευμένης) ροής των εντολών, και τον εντοπισμό λειτουργιών που μπορούν να εκτελεστούν παράλληλα, τροφοδοτώντας παραπάνω από μια μονάδα εκτέλεσης.

Νεότεροι επεξεργαστές κάνουν και το αντίστροφο: συνδυάζουν κάποιες ακολουθίες από εντολές του x86 (όπως μια εντολής σύγκρισης που ακολουθείται από ένα άλμα υπό συνθήκη) σε πολυπλοκότερες μικρο-εντολές που ταιριάζουν καλύτερα στο μοντέλο εκτέλεσης και μπορούν να εκτελεστούν γρηγορότερα ή με χρήση λιγότερων πόρων.

Μια άλλη τεχνική προς την κατεύθυνση της αύξησης της ταχύτητας είναι η προσωρινή αποθήκευση αποκωδικοποιημένων μικρο-εντολών, ώστε ο επεξεργαστής να μπορεί άμεσα να τις χρησιμοποιήσει ξανά, αντί να πρέπει να αποκωδικοποιήσει πάλι κάποιες εντολές. Το πιο γνωστό παράδειγμα τέτοιας μνήμης βρίσκεται στημικροαρχιτεκτονική NetBurstτης Intel (οι επεξεργαστές Pentium 4) και ονομάζεται Execution Trace Cache.

ΗTransmetaχρησιμοποιεί μια τελείως διαφορετική μέθοδο στους επεξεργαστές της που είναι συμβατοί με τους x86. Χρησιμοποιούν μια μετάφραση της τελευταίας στιγμής (just-in-time translation) για να μετατρέπουν εντολές x86 σε εντολές που καταλαβαίνει ο ίδιος ο επεξεργαστής. Η Transmeta υποστηρίζει ότι αυτή προσέγγιση οδηγεί σε σχεδίαση με χαμηλότερη κατανάλωση ενέργειας επειδή ο επεξεργαστής μπορεί να αγνοήσει το πολύπλοκο στάδιο αποκωδικοποίησης των κλασικών υλοποιήσεων x86.

Στα τέλη της δεκαετίας του 1970, λόγω του χαμηλού κόστους της μνήμης, οι μικροϋπολογιστές έφτασαν το όριο διευθύνσεων στα 16-bit που ήταν 64-KB.Κάποιοι μικροϋπολογιστές όπως οPDP-11χρησιμοποιούσαν κάποιες πολύπλοκες τεχνικές εναλλαγής πινάκων μνήμης (bank-switching), ενώ άλλοι, όπως οVAXτης Digital, σχεδίασαν ακριβότερους επεξεργαστές που μπορούσαν να χειριστούν απευθείας διευθύνσεις και δεδομένα των 32-bit. Ο αρχικός 8086, ο οποίος είχε προκύψει από τον απλό μικροεπεξεργαστή8080και στόχευε σε χρήση σε μικρούς και φτηνούς υπολογιστές, έκανε χρήση απλών καταχωρητών τμήματος (segment registers), οι οποίοι αύξησαν το εύρος των διευθύνσεων μνήμης μόνο κατά 4 bit. Πολλαπλασιάζοντας μια διεύθυνση 64-KB με το 16, η διεύθυνση 20-bit που προέκυπτε μπορούσε να διευθυνσιοδοτήσει συνολικά έναmegabyte(1,048,576 byte), ένα αρκετά μεγάλο μέγεθος για τους μικρούς υπολογιστές της εποχής. Η ιδέα των καταχωρητών τμήματος δεν ήταν νέα, πολλοί από τους παλαιότερους μεγαλύτερους υπολογιστές χρησιμοποιούσαν καταχωρητές τμήματος για να κάνουν την εναλλαγή μεταξύ διαφορετικών εργασιών. Στην πράξη, η τεχνική αυτή, όπως υλοποιήθηκε στον x86 δέχτηκε σημαντική κριτική γιατί έκανε πιο πολύπλοκο τον προγραμματισμό και τη συγγραφήμεταγλωττιστών.Αν και η αρχιτεκτονική σύντομα επέτρεψε τις γραμμικές διευθύνσεις 32-bit (αρχίζοντας από τον 80386 του 1985), σημαντικές εταιρείες (όπως ηMicrosoft) άργησαν πολλά χρόνια να μετατρέψουν τα 16-bit συστήματά τους. Ο 80386 (και ο 80486) για πολλά χρόνια χρησιμοποιήθηκε σαν ένας γρηγορότερος 8086, συμβατός με τα 16-bit.

Τα δεδομένα και ο κώδικας μπορούσαν να χρησιμοποιηθούν σε "κοντινά" ( "near" ) τμήματα 16-bit μέσα σε αυτόν τον χώρο διευθύνσεων του 1MB,ενώ ένας μεταγλωττιστής μπορούσε να λειτουργεί με "μακρινό" ( "far" ) τρόπο χρησιμοποιώντας ζεύγη 32-bitτμήμα:μετατόπισηπου να φτάνουν μέχρι το 1 MB. Αν και αυτό στη συνέχεια της δεκαετίας του 1980 αποδείχτηκε εξίσου περιοριστικό, λειτούργησε για την αγορά των PC που τότε εμφανιζόταν και διευκόλυνε πολύ την μετάφραση λογισμικού από τους παλιούς8008,8080,8085,καιZ80για τον νέο επεξεργαστή. Το 1985, το μοντέλο διευθύνσεων με τμήματα 16-bit πρακτικά απομακρύνθηκε, με την χρήση καταχωρητών μετατόπισης 32-bit, στη σχεδίαση του386.

Στηνπραγματική κατάσταση(real mode), η διευθυνσιοδότηση μνήμης με τμήματα γίνεται με την ολίσθηση της διεύθυνσης τμήματος κατά 4 bit αριστερά και την προσθήκη της μετατόπισης ώστε να προκύψει η τελική διεύθυνση 20-bit. Για παράδειγμα, αν ο DS είναι A000h και ο SI είναι 5677h, το DS:SI δείχνει στην απόλυτη διεύθυνση DS × 10h + SI = A5677h. Ο συνολικός χώρος διευθύνσεων στην πραγματική κατάσταση είναι επομένως 220byte, ή 1MB,ένα εντυπωσιακό μέγεθος για την εποχή (1978). Όλες οι διευθύνσεις μνήμης αποτελούνται από ένα τμήμα και μια μετατόπιση και κάθε τύπος πρόσβασης (κώδικας, δεδομένα, στοίβα) είχε δικό του καταχωρητή (για δεδομένα ήταν ο DS, για κώδικα ο CS, για στοίβα ο SS). Σε περίπτωση πρόσβασης για δεδομένα, ο καταχωρητής τμήματος μπορεί να είναι οποιοσδήποτε από τους τέσσερις καταχωρητές τμήματος, με χρήση του κατάλληλου προθέματος (segment override prefix).

Σύμφωνα με την τεχνική των τμημάτων, δύο διαφορετικά ζεύγη από τμήματα και μετατοπίσεις μπορούν να δείχνουν στην ίδια απόλυτη διεύθυνση. Δηλαδή, αν ο DS είναι A111h και ο SI είναι 4567h, το DS:SI δείχνει στην ίδια διεύθυνση A5677h όπως και το παράδειγμα παραπάνω. Επίσης η τεχνική κάνει αδύνατη την χρήση παραπάνω από τεσσάρων τμημάτων ταυτόχρονα. Ο CS και ο SS είναι πολύ σημαντικοί για την σωστή λειτουργία του προγράμματος, επομένως μόνο ο DS και ο ES μπορούν να χρησιμοποιηθούν για να δείχνουν σε τμήματα με δεδομένα εκτός του προγράμματος (ή, πιο σωστά, εκτός του τμήματος του προγράμματος που εκτελείται αυτήν τη στιγμή) ή εκτός της στοίβας.

Στηνπροστατευμένη κατάσταση(protected mode), ένας καταχωρητής τμήματος δεν περιλαμβάνει πια την φυσική διεύθυνση της αρχής ενός τμήματος, αλλά δείχνει σε μια δομή του συστήματος που ονομάζεταιπεριγραφέας τμήματος(segment descriptor). Ο περιγραφέας τμήματος περιέχει τη φυσική διεύθυνση της αρχής του τμήματος, το μήκος του τμήματος και τα δικαιώματα πρόσβασης στο τμήμα. Η μετατόπιση ελέγχεται αν είναι μέσα στο μήκος του τμήματος, αν είναι εκτός προκαλείται εξαίρεση (exception). Οι μετατοπίσεις που αναφέρονται σε θέσεις μέσα στο τμήμα συνδυάζονται με τις φυσικές διευθύνσεις στην αρχή του τμήματος για να προκύψει η τελική διεύθυνση που αντιστοιχεί σε αυτήν την μετατόπιση.

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

Τρόποι διευθυνσιοδότησης

[Επεξεργασία|επεξεργασία κώδικα]

Οι τρόποι διευθυνσιοδότησης των επεξεργαστών x86 στα 16-bit μπορούν να περιγραφούν περιληπτικά ως εξής:

Οι τρόποι διευθυνσιοδότησης για διευθύνσεις μήκους 32-bit σε επεξεργαστές x86 των 32-bit ή των 64-bit μπορούν να περιγραφούν από τον τύπο:

Οι τρόποι διευθυνσιοδότησης για κώδικα 64-bit για επεξεργαστές x86 στα 64-bit μπορούν να περιγραφούν από τους εξής τύπους:

και

Ο δεύτερος τύπος διευθυνσιοδότησης για κώδικα 64-bit (σε σχέση με τον καταχωρητή RIP, που είναι ο δείκτης εντολής, instruction pointer) διευκολύνει την υλοποίηση κώδικα που δεν εξαρτάται από τις θέσεις μνήμης (όπως οι κοινέςβιβλιοθήκεςσε κάποια λειτουργικά συστήματα).

Ο 8086 είχε 64 KB από χώρο 8-bit (ή εναλλακτικά 32 K-λέξεις των 16-bit) για είσοδο/έξοδο και 64 KB (ένα τμήμα)στοίβαςμνήμης με υποστήριξηυλικού.Στη στοίβα μπορούσαν να τοποθετηθούν μόνο λέξεις (2 byte). Η στοίβα μεγάλωνε προς τα κάτω (προς αριθμητικά μικρότερες διευθύνσεις), με το SS:SP να δείχνει στο κάτω άκρο της. Υπήρχαν 256 διακοπές (interrupts), οι οποίες μπορούσαν να κληθούν από το υλικό ή το λογισμικό. Οι διακοπές αυτές μπορούσαν να είναι διαδοχικές, χρησιμοποιώντας την στοίβα για να αποθηκεύουν την διεύθυνση επιστροφής τους.

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

Ο αρχικός8086και ο8088έχουν δεκατέσσερις καταχωρητές των 16-bit.Από αυτούς οι τέσσερις (AX, BX, CX, DX) είναι γενικής χρήσης (αν και ο καθένας μπορεί να έχει επιπλέον ρόλους, για παράδειγμα μόνο ο CX μπορεί να χρησιμοποιηθεί ως μετρητής στην εντολή επανάληψηςloop). Καθένας τους μπορεί να διαβαστεί σαν δύο ξεχωριστά byte (για παράδειγμα, το υψηλότερο byte του BX ονομάζεται BH και το χαμηλότερο byte BL). Υπάρχουν δύο καταχωρητές δεικτών: ο SP που δείχνει στην κορυφή της στοίβας (Stack Pointer) και ο BP που δείχνει σε κάποιο άλλο σημείο της στοίβας (Base Pointer), συνήθως πιο πάνω από τις τοπικές μεταβλητές. Δύο καταχωρητές, ο SI και ο DI, χρησιμοποιούνται ως δείκτες σε πίνακες.

Για τον σχηματισμό διευθύνσεων μνήμης χρησιμοποιούνται τέσσερις καταχωρητές (CS, DS, SS και ES). Οκαταχωρητής FLAGSπεριέχει σημαίες (flags), όπως το υπόλοιπο (carry), η υπερχείλιση (overflow) και ο έλεγχος για μηδέν. Τέλος, ο δείκτης εντολής (instruction pointer, IP) δείχνει στην επόμενη εντολή που θα διαβαστεί από τη μνήμη και θα εκτελεστεί.

ΣτονIntel 80286υπάρχουν τρεις επιπλέον καταχωρητές που κρατούν διευθύνσεις πινάκων από περιγραφείς (GDTR, LDTR,IDTR) και ένας τέταρτος καταχωρητής εργασιών (task register, TR).

Με την εμφάνιση του επεξεργαστή 32-bit 80386, οι καταχωρητές γενικής χρήσης, οι καταχωρητές βάσης, οι καταχωρητές δεικτών, ο δείκτης εντολής και ο καταχωρητής FLAGS, που ήταν 16-bit, επεκτάθηκαν στα 32 bit (αυτό όμως δεν συνέβη και για τους καταχωρητές τμήματος). Αυτό αναπαριστάται με ένα πρόθεμα "E"(από την αγγλική λέξηExtendedπου δείχνει την επέκταση) μπροστά από τα ονόματα των καταχωρητών στη συμβολική γλώσσα του x86. Επομένως, ο καταχωρητής AX αντιστοιχεί στα κατώτερα 16 bit του νέου καταχωρητή EAX που είναι 32-bit, ο SI αντιστοιχεί στα κατώτερα 16 bit του ESI, κοκ. Οι καταχωρητές γενικής χρήσης, οι καταχωρητές βάσης και οι καταχωρητές δείκτη μπορούν να χρησιμοποιηθούν σαν βάση στους διάφορους τρόπους διευθυνσιοδότησης, ενώ όλοι οι καταχωρητές εκτός από τον καταχωρητή στοίβας μπορούν να χρησιμοποιηθούν σαν δείκτες στο σχημαστισμό διευθύνσεων.

Προστέθηκαν επίσης δύο νέοι καταχωρητές τμήματος (FS και GS). Λόγω του αυξημένου αριθμού των καταχωρητών, των εντολών και των τελεστέων, χρειάστηκε επέκταση της μορφής τουκώδικα μηχανής.Για να διατηρηθεί η συμβατότητα, τα τμήματα με εκτελέσιμο κώδικα μπορούν να σημειωθούν ανάλογα με το αν περιέχουν εντολές 16-bit ή 32-bit. Ειδικά προθέματα επιτρέπουν σε εντολές 32-bit να υπάρχουν σε ένα τμήμα 16-bit και αντίστροφα.

Στον 80486 προστέθηκεΜονάδα Κινητής Υποδιαστολής(FPU), με οχτώ καταχωρητές 80-bit.[16]

Στον Pentium II προστέθηκαν οχτώ καταχωρητές ακεραίων MMX 64-bit (MMX0..MMX7, που μοιράζονται τα κατώτερα bit με τη στοίβα της μονάδας κινητής υποδιαστολής που είναι 80-bit (st(0)..st(7))).[16]Στον Pentium III προστέθηκαν ένας καταχωρητής ελέγχου κατάστασης των 32-bit (control/status register, MXCSR) για το σύνολο εντολώνStreaming SIMD Extension (SSE)και οχτώ καταχωρητές SSE των 128-bit για αριθμούς κινητής υποδιαστολής (XMM0..XMM7).[16]

Από τον επεξεργαστήAMD Opteronκαι μετά, η αρχιτεκτονική x86 επέκτεινε τους καταχωρητές από 32 bit σε 64 bit με παρόμοιο τρόπο με την επέκταση από τα 16 στα 32-bit προστατευμένης κατάστασης (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP), ενώ προστέθηκαν οχτώ επιπλέον γενικοί καταχωρητές 64-bit (R8, R9..R15) με την δημιουργία τουx86-64.Οι επεκτάσεις αυτές όμως μπορούν να χρησιμοποιηθούν μόνο στην κατάσταση 64-bit, που είναι η μια από τις δύο καταστάσεις που είναι διαθέσιμες σε μακρά κατάσταση (long mode). Οι τρόποι σχηματισμού διευθύνσεων δεν άλλαξαν σημαντικά σε σχέση με την κατάσταση 32-bit, μόνο οι διευθύνσεις επεκτάθηκαν στα 64 bit, ενώ οι εικονικές διευθύνσεις επεκτείνονται (μαζί με το πρόσημό τους) στα 64 bit. Επιπλέον προστέθηκε μια κατάσταση σχηματισμού διευθύνσεων για αναφορές στη μνήμη σε σχέση με τον καταχωρητή RIP (τονδείκτη εντολής), για τη διευκόλυνση της υλοποίησης κώδικα που να είναι ανεξάρτητος από την τοποθέτησή του (position-independent code), ο οποίος χρησιμοποιείται σε διαμοιραζόμενεςβιβλιοθήκεςσε κάποια λειτουργικά συστήματα.

Άλλοι/ειδικοί καταχωρητές

[Επεξεργασία|επεξεργασία κώδικα]

Οι επεξεργαστές x86 (αρχίζοντας από τον 80386) περιλαμβάνουν επίσης κάποιους ειδικούς καταχωρητές όπως οικαταχωρητές ελέγχου(CR0 έως 4, CR8 μόνο στα 64-bit), καταχωρητές αποσφαλμάτωσης (DR0 έως 3, επιπλέον 6 και 7), οι καταχωρητές δοκιμών (TR3 έως 7, μόνο στον 80486), οι καταχωρητές περιγραφέων (GDTR, LDTR,IDTR), ο καταχωρητής εργασιών (TR) και οι διάφοροι ειδικοί καταχωρητές κάθε μοντέλου (model-specific registers ή MSRs, αρχίζοντας από τον Pentium).

Αν και οι βασικοί καταχωρητές (εκτός του δείκτη εντολής) είναι "γενικής χρήσης" και μπορούν να χρησιμοποιηθούν για οτιδήποτε, αρχικά προτάθηκε η εξής χρήση τους:

  • AX/EAX/RAX: συσσωρευτής (Accumulator)
  • BX/EBX/RBX: δείκτης βάσης (Base index), για παράδειγμα σε πίνακες
  • CX/ECX/RCX: μετρητής (Counter)
  • DX/EDX/RDX: δεδομένα (Data)/γενική χρήση
  • SI/ESI/RSI: δείκτης πηγής (SourceIndex) για λειτουργίες μεσυμβολοσειρές
  • DI/EDI/RDI: δείκτης προορισμού (DestinationIndex) για λειτουργίες με συμβολοσειρές
  • SP/ESP/RSP: δίκτης στοίβας (StackPointer) που δείχνει στο πάνω μέρος της στοίβας
  • BP/EBP/RBP: δείκτης βάση στοίβας (StackBasePointer) που δείχνει στη διεύθυνση του τρέχοντοςπλαισίου στοίβας
  • IP/EIP/RIP: δείκτης εντολής (InstructionPointer) - κρατάει το μετρητή προγράμματος (program counter), που δείχνει στην τρέχουσα εντολή.

Δεν προτάθηκαν κάποιες ιδιαίτερες χρήσεις για τους άλλους 8 καταχωρητές που είναι διαθέσιμοι στην κατάσταση 64-bit.

Κάποιες εντολές μεταγλωττίζονταν και εκτελούνταν γρηγορότερα όταν χρησιμοποιούσαν τους καταχωρητές ανάλογα με τις παραπάνω χρήσεις. Για παράδειγμα, αν χρησιμοποιηθεί ο AL σανσυσσωρευτήςγια να προστεθεί μια απευθείας τιμή τύπου byte σε αυτόν, προκύπτει η γρήγορη εντολή 04h (πρόσθεση στον AL), ενώ αν χρησιμοποιηθεί ο καταχωρητής BL προκύπτει η γενική (δηλ. όχι εξειδικευμένη) εντολή 80C3h. Άλλο παράδειγμα είναι η διαίρεση διπλής ακρίβειας και ο πολλαπλασιασμός που λειτουργούν με τους καταχωρητές AX και DX.

Οι σύγχρονοι μεταγλωττιστές εκμεταλλεύονται το bytesib( "scaled index byte" ) που επιτρέπει τον ομοιόμορφο χειρισμό των καταχωρητών. Κάποιες ειδικές εντολές έχασαν την προτεραιότητά τους στη σχεδίαση υλικού και έγιναν πιο αργές σε σχέση με ισοδύναμες σύντομες ακολουθίες εντολών, όπως η εντολή LODSW.

Καταχωρητές Γενικής Χρήσης (A, B, C και D)

64 56 48 40 32 24 16 8
R?X
E?X
?X
?H ?L

Καταχωρητές Τμημάτων (C, D, S, E, F και G)

16 8
?S

Καταχωρητές Δείκτη (S και B)

64 56 48 40 32 24 16 8
R?P
E?P
?P
?PL

Σημείωση: Οι καταχωρητές?PL είναι διαθέσιμοι μόνο στην κατάσταση 64-bit.

Καταχωρητές Σχετικού Δείκτη (S και D)

64 56 48 40 32 24 16 8
R?I
E?I
?I
?IL

Σημείωση: Οι καταχωρητές?IL είναι διαθέσιμοι μόνο στην κατάσταση 64-bit.

Καταχωρητής Δείκτη Εντολής (I)

64 56 48 40 32 24 16 8
R?P
E?P
?P

Καταχωρητές Γενικής Χρήσης κατάστασης 64-bit (R8, R9, R10, R11, R12, R13, R14, R15)

64 56 48 40 32 24 16 8
?
?D
?W
?B

Καταστάσεις λειτουργίας

[Επεξεργασία|επεξεργασία κώδικα]

Πραγματική κατάσταση

[Επεξεργασία|επεξεργασία κώδικα]

Η πραγματική κατάσταση (real mode) είναι κατάσταση λειτουργίας του8086και των μεταγενέστερων επεξεργαστών που είναι συμβατοί με τον x86. Η πραγματική κατάσταση έχει χώρο διευθύνσεων μνήμης χωρισμένο σε τμήματα 20 bit (επομένως οι διευθύνσεις μπορούν να αναφέρονται μόνο σε 1MBμνήμης), η πρόσβαση του λογισμικού τις ρουτίνες τουBIOSκαι στα περιφερειακά του υλικού είναι απευθείας και δεν υπάρχουν οι έννοιες της προστασίας μνήμης ή τηςπολυεπεξεργασίαςστο επίπεδο του υλικού. Όλοι οι επεξεργαστές x86 της σειράς80286και έπειτα εκκινούν σε πραγματική κατάσταση, ενώ οι80186και οι προηγούμενοι επεξεργαστές είχαν μόνο μια κατάσταση, που αντιστοιχούσε στην πραγματική κατάσταση των μεταγενέστερν τσιπ.

Για να γίνει χρήση περισσότερων από 64 KB μνήμης, πρέπει να χρησιμοποιηθούν οι καταχωρητές τμήματος. Αυτό περιέπλεξε την κατάσταση για την υλοποίηση μεταγλωττιστών, όπου χρειάστηκε να χρησιμοποιηθούν ειδικές καταστάσεις δεικτών, όπως η "κοντινή" ( "near" ), η "μακρινή" ( "far" ) και η "μεγάλη" ( "huge" ), ώστε να προσαρμοστούν στο μοντέλο της αρχιτεκτονικής με τμήματα, με κάποιους δείκτες να περιέχουν μετατοπίσεις 16-bit σε έμμεσα δηλωμένα τμήματα, ενώ άλλοι περιείχαν διευθύνσεις τμημάτων και μετατοπίσεις μέσα σε τμήματα.

Προστατευμένη κατάσταση

[Επεξεργασία|επεξεργασία κώδικα]

Εκτός από την πραγματική κατάσταση ο Intel 80286 υποστήριζε την προστατευμένη κατάσταση (protected mode), που επέκτεινε την φυσική μνήμη που μπορούσε να αναφερθεί μέσω διευθύνσεων σε 16MBκαι την εικονική μνήμη (virtual memory) σε 1GB,ενώ παρείχε προστατευμένη μνήμη (protected memory), η οποία εμπόδιζε ένα πρόγραμμα να επηρεάζει τα υπόλοιπα. Αυτό ήταν δυνατό επειδή οι καταχωρητές τμημάτων χρησιμοποιούνταν μόνο σαν δείκτες σε έναν πίνακα από τμήματα. Υπήρχαν δύο τέτοιοι πίνακες, ο Καθολικός Πίνακας Περιγραφέων (Global Descriptor Table, GDT) και ο Τοπικός Πίνακας Περιγραφέων (Local Descriptor Table, LDT), ο καθένας από τους οποίους μπορούσε να έχει μέχρι 8192 περιγραφείς τμημάτων, με κάθε τμήμα να παρέχει πρόσβαση σε μνήμη μεγέθους 64 KB. Ο πίνακας τμημάτων έδινε μια διεύθυνση βάσης (base address) των 24-bit, η οποία μπορούσε να προστεθεί σε κάποια μετατόπιση για να προκύψει μια απόλυτη διεύθυνση. Σε κάθε τμήμα μπορούσε να δοθεί ένα επίπεδο ασφάλειας (ring level), από ένα σύνολο τεσσάρων τέτοιων επιπέδων, για ασφάλεια σε επίπεδο υλικού.

ΟIntel 80386υποστήριξε πρώτος τις σελίδες (paging) στην προστατευμένη κατάσταση, που επέτρεπαν τη χρήση εικονικής μνήμης με σελίδες.

Οι σελίδες χρησιμοποιούνται εκτενώς στα σύγχρονα λειτουργικά συστήματα με δυνατότητες πολυδιεργασίας. Τα λειτουργικά συστήματαLinux,386BSDκαιWindows NTαναπτύχθηκαν στον 386 γιατί ήταν η πρώτη αρχιτεκτονική επεξεργαστή της Intel που υποστήριζε σελίδες και μετατοπίσεις τμημάτων 32-bit. Η αρχιτεκτονική του 386 έγινε η βάση για την περαιτέρω ανάπτυξη της σειράς x86.

Οι επεξεργαστές x86 που υποστηρίζουν προστατευμένη κατάσταση εκκινούν σε πραγματική κατάσταση για να είναι συμβατοί με τους προηγούμενους επεξεργαστές τύπου 8086. Όταν ο επεξεργαστής αρχίζει να λειτουργεί (booting), αρχικοποιεί την πραγματική κατάσταση και αρχίζει να εκτελεί εντολές. Ο κώδικας εκκίνησης του λειτουργικού συστήματος, ο οποίος μπορεί να βρίσκεται σε μνήμη ανάγνωσης (ROM), μπορεί να βάλει τον επεξεργαστή σε προστατευμένη κατάσταση για να είναι διαθέσιμες οι σελίδες και τα άλλα επιπλέον χαρακτηριστικά. Το σύνολο εντολών της προστατευμένης κατάστασης είναι συμβατό με αυτό της πραγματικής κατάστασης.

Εικονική κατάσταση 8086

[Επεξεργασία|επεξεργασία κώδικα]

Υπάρχει επίσης μια ειδική κατάσταση της προστατευμένης κατάστασης 32-bit, που ονομάζεταιεικονική κατάσταση 8086(virtual 8086 mode). Πρόκειται για μια ειδική υβριδική κατάσταση λειτουργίας που επιτρέπει σε προγράμματα και λειτουργικά συστήματα πραγματικής κατάστασης να εκτελούνται κάτω από τον έλεγχο ενός λειτουργικού συστήματος προστατευμένης μνήμης που έχει το ρόλο του επόπτη (supervisor). Αυτό επιτρέπει την ταυτόχρονη εκτέλεση προγραμμάτων προστατευμένης κατάστασης και πραγματικής κατάστασης. Η κατάσταση αυτή είναι διαθέσιμη μόνο στις εκδόσεις 32-bit της προστατευμένης κατάστασης - η εικονική κατάσταση 8086 δεν υπάρχει στην έκδοση 16-bit της προστατευμένης κατάστασης, ή στην μακρά κατάσταση.

Κύριο λήμμα:Μακρά κατάσταση

Το 2002 ήταν πια προφανές ότο ο χώρος διευθύνσεων 32-bit της αρχιτεκτονικής x86 περιόριζε την ταχύτητά της σε εφαρμογές που χειρίζονταν μεγάλους όγκους δεδομένων. Ένας χώρος διευθύνσεων 32-bit επέτρεπε στον επεξεργαστή να αναφερθεί απευθείας μέσω διευθύνσεων μόνο σε 4 GB δεδομένων, που ήταν μικρό μέγεθος για τις ανάγκες τηςεπεξεργασίας βίντεοκαι τωνβάσεων δεδομένων,ενώ η χρήση διευθύνσεων 64-bit επέτρεπε την αναφορά σε 16,777,216TB(ή 16 δισεκατομμύρια GB) δεδομένων, αν και οι περισσότερες αρχιτεκτονικές 64-bit δεν υποστηρίζουν πρόσβαση σε όλον τον χώρο διευθύνσεων των 64-bit (η AMD64, για παράδειγμα, υποστηρίζει μόνο 48 bit, χωρισμένα σε 4 επίπεδα σελίδων, μιας διεύθυνσης 64-bit).

ΗAMDανέπτυξε την επέκταση της αρχιτεκτονικής x86 από 32-bit σε64-bit,η οποία χρησιμοποιείται σήμερα στους επεξεργαστές x86, αρχικά με το όνομαx86-64,και αργότερα σανAMD64.Η αρχιτεκτονική αυτή χρησιμοποιείται από τις οικογένειες επεξεργαστώνOpteron,Athlon 64,Turion 64και τα μεταγενέστερα μοντέλα τωνSempron.Η επιτυχία των επεξεργαστών AMD64, σε συνδυασμό με την πειρορισμένη αποδοχή της αρχιτεκτονικής IA-64 έκανε την Intel να κυκλοφορήσει την δική της υλοποίηση του συνόλου εντολών AMD64. Η Intel είχε ήδη υλοποιήσει υποστήριξη για AMD64[17]αλλά είχε επιλέξει να μην την ενεργοποιήσει, ελπίζοντας ότι η AMD δεν θα προλάβαινε να κυκλοφορήσει τους AMD64 πριν εδραιωθεί το νέο σύνολο εντολών IA-64 του Itanium. Αρχικά αποκαλούσε την υλοποίηση της επέκτασης AMD64 σανEM64T,και στη συνέχεια σανIntel 64.

Στα έγγραφά τους και στα ονόματα των προϊόντων τους, η Microsoft και η Sun αναφέρονται στους AMD64/Intel 64 συνολικά σανx64,όσον αφορά τα λειτουργικά συστήματα Windows andSolarisαντίστοιχα. Οι διανομές τουLinuxτους αποκαλούν είτε σαν "x86-64" (ή "x86_64" ), είτε σαν "amd64". Τα συστήματαBSDχρησιμοποιούν τον όρο "amd64" ενώ τοMac OS Xχρησιμοποιεί τον όρο "x86_64".

Η μακρά κατάσταση είναι κυρίως μια επέκταση του συνόλου εντολών 32-bit, αλλά σε αντίθεση με τη μετάβαση από τα 16 στα 32 bit, πολλές εντολές αφαιρέθηκαν από την κατάσταση 64 bit. Αυτό δεν επηρεάζει την πραγματική δυαδική συμβατότητα των προγραμμάτων (τα παλιά προγράμματα μπορούν να εκτελεστούν σε άλλες καταστάσεις, που ακόμα υποστηρίζουν τις παλιές εντολές) αλλά αλλάζει τον τρόπο που πρέπει να λειτουργούν οισυμβολομεταφραστέςκαι οιμεταγλωττιστέςτου νέου κώδικα.

Αυτή ήταν η πρώτη φορά που μιασημαντικήεπέκταση της αρχιτεκτονικής x86 ξεκίνησε από άλλη εταιρεία από την Intel. Ήταν επίσης η πρώτη φορά που η Intel υιοθέτησε τεχνολογία τέτοιου τύπου από εξωτερική πηγή.

Μονάδα κινητής υποδιαστολής

[Επεξεργασία|επεξεργασία κώδικα]
Κύριο λήμμα:x87
Δείτε επίσης:Μονάδα Κινητής Υποδιαστολής

Οι πρώτοι επεξεργαστές x86 μπορούσαν να επεκταθούν με υλικό για αριθμητική κινητής υποδιαστολής (floating-point), το οποίο ήταν μια σειρά από αριθμητικούςσυνεπεξεργαστέςμε ονόματα του τύπου8087,80287 και 80387. Με λίγες εξαιρέσεις, από τον 80486 και έπειτα, οι επεξεργαστές x86 ενσωμάτωσαν αυτήν την λειτουργικότητα x87 στο ίδιο το τσιπ, κάτι που έκανε τις εντολές του x87 ντε φάκτο μέρος του συνόλου εντολών x86.

Οι καταχωρητές του x87, έχουν ονόματα ST(0) έως ST(7), είναι 80 bit και αποθηκεύουν αριθμούς σύμφωνα με το πρότυπο κινητής υποδιαστολής διπλής εκτεταμένης ακρίβειας του IEEE. Οι καταχωρητές αυτοί οργανώνονται σανστοίβαμε τον ST(0) στην κορυφή της στοίβας. Αυτό έγινε ώστε να εξοικονομηθεί χώρος εντολών και έτσι οι καταχωρητές είναι άμεσα προσβάσιμοι μόνο στις αριθμητικές εντολές που χειρίζονται αποκλειστικά καταχωρητές: ο ST0 πρέπει πάντα να είναι το ένας από τους δύο τελεστέους, είτε η πηγή, είτε ο προορισμός, ανεξάρτητα από τον άλλο τελεστέο, που μπορεί να είναι ένας καταχωρητής ST(x) ή μια αναφορά στην μνήμη.

Κύριο λήμμα:MMX (σύνολο εντολών)

Το MMX είναι σύνολο εντολώνSIMDπου σχεδιάστηκε από την Intel και κυκλοφόρησε πρώτη φορά το 1997 για τον μικροεπεξεργαστήPentium MMX.Το σύνολο εντολών MMX αναπτύχθηκε με βάση μια παρόμοια ιδέα που ήδη είχε χρησιμοποιηθεί στονIntel i860.Υποστηρίζεται στους περισσότερους επεξεργαστές IA-32 που ακολούθησαν, από την Intel και από άλλες εταιρείες. Το MMX συνήθως χρησιμοποιείται για εφαρμογές πολυμέσων, όπως η επεξεργασία βίντεο.

Το MMX πρόσθεσε 8 νέους "καταχωρητές" στην αρχιτεκτονική, γνωστούς με τα ονόματα από MM0 έως MM7 (στο εξής θα αποκαλούνταιMMn). Στην πραγματικότητα, αυτοί οι νέοι "καταχωρητές" ήταν απλά ονόματα που έδειχναν στους υπάρχοντες καταχωρητές της στοίβας της μονάδας κινητής υποδιαστολής x87. Έτσι, οτιδήποτε γινόταν στην στοίβα κινητής υποδιαστολής επηρέαζε τους καταχωρητές MMX. Σε αντίθεση με την στοίβα αυτή όμως, οι καταχωρητές MMn δεν ήταν σχετικοί αλλά απόλυτοι και άρα μπορούσαν να χρησιμοποιηθούν ανεξάρτητα. Το σύνολο εντολών δεν είχε σημασιολογία στοίβας και με αυτόν τον τρόπο τα υπάρχοντα λειτουργικά συστήματα μπορούσαν να αποθηκεύουν και να επαναφέρουν τους επεξεργαστές όταν εκτελούσαν παραπάνω από ένα προγράμματα, χωρίς αλλαγές.

Κάθε καταχωρητής MMn είναι ένας ακέραιος 64-bit. Μια από τις βασικές ιδέες όμως του συνόλου εντολών MMX ήταν οιτύποι πακεταρισμένων δεδομένων(packed data types), που σήμαινε ότι αντί να χρησιμοποιείται ολόκληρος ο καταχωρητής για έναν ακέραιο των 64-bit (quadword), μπορούσε να χρησιμοποιηθεί για δύο ακεραίους των 32-bit (doubleword), τέσσερις ακεραίους των 16-bit (word) ή οχτώ ακεραίους των 8-bit (byte). Οι καταχωρητές MMn των 64-bit του συνόλου εντολών MMX αποτελούσαν επίσης εναλλακτικά ονόματα για τη στοίβα της μονάδας κινητής υποδιαστολής και κάθε καταχωρητής κινητής υποδιαστολής είχε εύρος 80 bit - αυτό σήμαινε ότι τα ανώτερα 16 bit των καταχωρητών κινητής υποδιαστολής δεν χρησιμοποιούνται από τις εντολές MMX. Σε αυτά τα bit δινόταν πάντα η τιμή ένα από κάθε εντολή MMX, που αντιστοιχούσε στην αναπαράσταση σε κινητή υποδιαστολή της έννοιαςδεν-είναι-αριθμός(Not-A-Number,NaN) ήάπειρο.

Κύριο λήμμα:3DNow!

Το 1997 η AMD κυκλοφόρησε την τεχνολογία 3DNow! Χρονικά εμφανίστηκε την ίδια εποχή που άρχισαν να είναι δημοφιλείς οι εφαρμογές γραφικών τριών διαστάσεων (3D) και είχε σχεδιαστεί ώστε να βελτιώσει την ταχύτητα επεξεργασίας διανυσμάτων (vector processing) του επεξεργαστή σε εφαρμογές που έκαναν σημαντική χρήση γραφικών. Οι προγραμματιστές ηλεκτρονικών παιχνιδιών 3D και οι εταιρείες που σχεδίαζαν κάρτες γραφικών και άλλο υλικό για γραφικά 3D χρησιμοποίησαν το 3DNow! για να έχουν καλύτερη απόδοση στους επεξεργαστέςK6καιAthlonτης AMD.

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

Κύρια λήμματα:Streaming SIMD Extensions,SSE2,SSE3,SSSE3,SSE4καιSSE5

Το 1999 η Intel κυκλοφόρησε τοσύνολο εντολώνStreaming SIMD Extensions (SSE) και στη συνέχεια, το 2000, το SSE2. Η πρώτη προσθήκη επέτρεψε σε βασικές λειτουργίες κινητής υποδιαστολής να μην επιβαρύνουν πια την στοίβα του x87 και η δεύτερη έκανε το MMX σχεδόν περιττό αφού επέτρεπε στις εντολές να χρησιμοποιούνται στην πράξη από τους κλασικούς μεταγλωττιστές. Το SSE3 κυκλοφόρησε το 2004 με την έκδοσηPrescottτων επεξεργαστώνPentium 4και πρόσθεσε ειδικές εντολές μνήμης και χειρισμούνημάτωνώστε να αυξηθεί η ταχύτητα της τεχνολογίαςHyperThreadingτης Intel. Η AMD αγόρασε δικαιώματα χρήσης του συνόλου εντολών SSE3 και υλοποίησε τις περισσότερες από τις εντολές από την έκδοση E και μετά, στους επεξεργαστές Athlon 64. Ο Athlon 64 δεν υποστηρίζει HyperThreading και άρα δεν έχει τις εντολές SSE3 που χρησιμοποιούνται μόνο για αυτό.

Το SSE σταμάτησε να συνδέεται με την στοίβα της μονάδας κινητής υποδιαστολής (FPU), με αποτέλεσμα να μην είναι συμβατό με παλιότερες γενιές συνόλων εντολών SIMD όπως το MMX. Απελευθέρωσε ομως τους σχεδιαστές από τους περιορισμούς των καταχωρητών της FPU, επιτρέποντάς τους να χρησιμοποιούν οχτώ μεγαλύτερους καταχωρητές των 128-bit, με ονόματα XMM0 έως XMM7. (Σημείωση:ο αριθμός τους στονAMD64έχει αυξηθεί από 8 σε 16.) Το μειονέκτημα αυτής της προσέγγισης ήταν ότι τα λειτουργικά συστήματα έπρεπε να γνωρίζουν για την ύπαρξη του SSE ώστε να μπορούν να σώζουν την κατάσταση των καταχωρητών τους. Έτσι η Intel δημιούργησε μια ελαφρώς τροποποιημένη έκδοση της προστατευμένης κατάστασης, που την ονόμασε enhanced mode, η οποία επιτρέπει την χρήση εντολών SSE, ενώ αυτές είναι απενεργοποιημένες στην κανονική προστατευμένη κατάσταση. Ένα λειτουργικό σύστημα που γνωρίζει για την ύπαρξη του SSE θα μπει σε αυτήν την νέα κατάσταση, ενώ ένα λειτουργικό που δεν την αναγνωρίζει θα μπει μόνο σε προστατευμένη κατάσταση.

Το SSE είναι ένα σύνολο εντολών SIMD που λειτουργεί μόνο με τιμές κινητής υποδιαστολής, όπως το 3DNow! αλλά σε αντίθεση με αυτό, δεν είναι συμβατό με τις παλιές χρήσεις της στοίβας της FPU. Έχοντας μεγαλύτερους καταχωρητές από το 3DNow!, το SSE μπορεί να περιέχει διπλάσιο αριθμό από αριθμούς κινητής υποδιαστολής στους καταχωρητές του. Το αρχικό SSE περιοριζόταν σε αριθμούς απλής ακρίβειας, όπως το 3DNow!, ενώ το SSE2 εισήγαγε τη δυνατότητα να πακετάρονται και αριθμοί διπλής ακρίβειας, κάτι που το 3DNow! δε μπορούσε να υποστηρίξει, γιατί ένας αριθμός διπλής ακρίβειας έχει μέγεθος 64-bit και θα χρειαζόταν έναν ολόκληρο καταχωρητή 3DNow! MMn από μόνος του. Με μέγεθος 128 bit, οι καταχωρητές XMMn του SSE μπορούσαν να χωρέσουν δύο αριθμούς κινητής υποδιαστολής διπλής ακρίβειας σε έναν καταχωρητή με αποτέλεσμα το SSE2 να είναι πιο κατάλληλο για επιστημονικούς υπολογισμούς σε σχέση με το SSE1 ή το 3DNow!, τα οποία περιορίζονταν σε αριθμούς απλής ακρίβειας. Το SSE3 δε πρόσθεσε επιπλέον καταχωρητές.

Επέκταση Φυσικής Διεύθυνσης (PAE)

[Επεξεργασία|επεξεργασία κώδικα]

Η Επέκταση Φυσικής Διεύθυνσης (Physical Address Extension, PAE) προστέθηκε αρχικά στονPentium Proτης Intel, για να επιτρέψει επιπλέον 4 bit φυσικών διευθύνσεων στην προστατευμένη κατάσταση 32-bit. Το μέγεθος της μνήμης στην προστατευμένη κατάσταση περιορίζεται συνήθως σε 4GB.Μέσω κάποιων τεχνικών των συστημάτων διαχείρισης της μνήμης (όσον αφορά τις σελίδες και τα τμήματα), τα λειτουργικά συστήματα για x86 μπορούν να έχουν πρόσβαση σε περισσότερα από 32-bit χώρου διευθύνσεων, ακόμα και χωρίς χρήση της κατάστασης 64-bit. Το μήκος των μετατοπίσεων στα τμήματα και των γραμμικών διευθύνσεων μένει ίδιο, στα 32 bit.

Κύριο λήμμα:x86-64
δείτε επίσης:Itanium

Τον Απρίλιο του 2003, η AMD κυκλοφόρησε τον πρώτο επεξεργαστή x86 με καταχωρητές φυσικών διευθύνσεων μνήμης 64-bit, οι οποίοι μπορούσαν να αναφερθούν σε πολύ περισσότερη μνήμη από 4GBχρησιμοποιώντας την νέα επέκτασηx86-64(γνωστή και σαν x64). Η Intel εμφάνισε τον πρώτο της επεξεργαστή x86-64 τον Ιούλιο του 2004.

Πριν από τους x86-64 είχε προηγηθεί μια άλλη αρχιτεκτονική που χρησιμοποιούσε διευθύνσεις μνήμης 64-bit: η Intel είχε κυκλοφορήσει τονItaniumτο 2001, στοχεύοντας στην αγορά υπολογιστών υψηλών επιδόσεων. Ο Itanium όμως ήταν ασύμβατος με τον x86 και χρησιμοποιείται λιγότερο σήμερα. Οι x86-64 επίσης είχαν τοNX bit,το οποίο πρόσφερε κάποια προστασία από σφάλματα ασφάλειας που προκαλούνταν απόbuffer overruns.

Μέχρι πρόσφατα η αρχιτεκτονική x86 δεν ικανοποιούσε τις απαιτήσεις των Popek και Goldberg, οι οποίοι το 1974 είχαν δώσει τις προδιαγραφές της εικονικής εκτέλεσης πολλών λειτουργικών σε μια πλατφόρμα (virtualization). Παρόλα αυτά υπήρξαν διάφορα εμπορικά προϊόντα για "x86 virtualization", όπως τοVMwarevSphere, τοParallels,το Microsoft Hyper-V Server και τοMicrosoft Virtual PC.Στην κοινότητα τουανοιχτού κώδικατα πιο σημαντικά εγχειρήματα virtualization ήταν οQEMU/KQEMU,τοVirtualBoxκαι τοXen.

Η Intel και η AMD έχουν κυκλοφορήσει επεξεργαστές x86 με επεκτάσεις virtualization στο υλικό τους, οι οποίες αντιμετωπίζουν τους περιορισμούς της αρχιτεκτονικής x86. Αυτές οι επεκτάσεις είναι γνωστές σανIntel VT(κωδικό όνομα "Vanderpool" ) καιAMD-V(κωδικό όνομα "Pacifica" ). Αν και οι περισσότεροι σύγχρονοι επεξεργαστές x86 περιλαμβάνουν αυτές τις επεκτάσεις, η τεχνολογία θεωρείται ότι ακόμα εξελίσσεται, με πολλές λύσεις σε λογισμικό να είναι γρηγορότερες από αυτές τις λύσεις σε υλικό.[18]This is expected to change as the technology matures


  1. 80486 32-bit CPU breaks new ground in chip density and operating performance. (Intel Corp.) (product announcement) EDN | May 11, 1989 | Pryce, Dave
  2. Σε αντίθεση με τημικροαρχιτεκτονική(microarchitecture) και τη συγκεκριμένη ηλεκτρονική και φυσική υλοποίηση που χρησιμοποιείται στη σχεδίαση ενόςτσιπ.
  3. Η Intel σταμάτησε να ονομάζει τους επεξεργαστές σαν "x86" από τονP5Pentiumτου 1993 (επειδή οιαριθμοίδε μπορούν να αποτελούν κατοχυρωμένες εμπορικές ονομασίες). Παρόλα αυτά, ο όρος x86 ήταν πια εδραιωμένος όσον αφορά τις τεχνικές συζητήσεις, την συγγραφή μεταγλωττιστών, κλπ.
  4. Η Intel χρησιμοποιεί τους όρουςIA-32καιIntel 64(παλαιότερα EM64T ή IA-32e) για το x86 και τοx86-64αντίστοιχα. Η AMD σήμερα προτιμά την ονομασίαAMD64έναντι τηςx86-64που εισήγαγε παλαιότερα.
  5. «Linux* Kernel Compiling».Intel.Αρχειοθετήθηκεαπό το πρωτότυπο στις 6 Ιουνίου 2007.Ανακτήθηκε στις 4 Σεπτεμβρίου 2007.
  6. «Intel Web page search result for "x64"».Αρχειοθετήθηκεαπό το πρωτότυποστις 24 Οκτωβρίου 2007.Ανακτήθηκε στις 4 Σεπτεμβρίου 2007.
  7. «Birth of a Standard: The Intel 8086 Microprocessor».Αρχειοθετήθηκεαπό το πρωτότυποστις 26 Σεπτεμβρίου 2010.Ανακτήθηκε στις 13 Ιουλίου 2011.
  8. Η αγορά των ενσωματωμένων συστημάτων περιλαμβάνει πάνω από 25 διαφορετικέςαρχιτεκτονικές,οι οποίες, λόγω κόστους, κατανάλωσης ενέργειας και απλούστερης υλοποίησης, υπερέχουν των x86.
  9. «"Time and again, processor architects have looked at the inelegant x86 architecture and declared it cannot be stretched to accommodate the latest innovations, "said Nathan Brookwood, principal analyst, Insight 64».Αρχειοθετήθηκεαπό το πρωτότυποστις 7 Μαρτίου 2012.Ανακτήθηκε στις 13 Ιουλίου 2011.
  10. Microsoft to End Intel Itanium Support[νεκρός σύνδεσμος]
  11. «Microprocessor Hall of Fame».Intel.Αρχειοθετήθηκεαπό το πρωτότυπο στις 6 Ιουλίου 2007.Ανακτήθηκε στις 11 Αυγούστου 2007.
  12. Οι V20 και V30 της NEC περιλαμβάνουν και το παλιότερο σύνολο εντολών του 8080, για να μπορούν να εκτελούν εφαρμογές του CP/M σε πλήρη ταχύτητα (δηλ. χωρίς να χρειάζεται προσομοίωση του 8080 με λογισμικό).
  13. Είχε όμως πιο αργή FPU, παρά το γεγονός ότι η Cyrix ξεκίνησε σαν σχεδιαστής γρήγορων FPU για επεξεργαστές x86.
  14. Τα τσιπ 16-bit και 32-bit κυκλοφόρησαν το 1978 και το 1985 αντίστοιχα. Η σχεδίαση για υποστήριξη 64-bit ανακοινώθηκε το 1999 και κυκλοφόρησε σταδιακά από το 2003 και έπειτα.
  15. Αυτό συμβαίνει γιατί η αριθμητική ακεραίων δημιουργεί υπόλοιπο (carry) ανάμεσα σε διπλανά bit (σε αντίθεση με τις απλές λειτουργίες σε επίπεδο bit).
  16. 16,016,116,2Intel 64 and IA-32 Architectures Software Developer's Manual, Vol. 1Αρχειοθετήθηκε2011-06-28 στοWayback Machine., p. 2-33 (2009)
  17. «Intel's Yamhill Technology: x86-64 compatible | Geek.com».Αρχειοθετήθηκεαπό το πρωτότυποστις 5 Σεπτεμβρίου 2012.Ανακτήθηκε στις 24 Ιουλίου 2011.
  18. Adams, Keith (2006-21-2006).«A Comparison of Software and Hardware Techniques for x86 Virtualization».Proceedings of the International Conference on Architectural Support for Programming Languages and Operating Systems, San Jose, CA, USA, 2006.ACM 1-59593-451-0/06/0010. Αρχειοθετήθηκε απότο πρωτότυποστις 2010-08-20.https://web.archive.org/web/20100820201944/http://www.vmware.com/pdf/asplos235_adams.pdf.Ανακτήθηκε στις 2006-12-22.

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

[Επεξεργασία|επεξεργασία κώδικα]