Η x86-64 είναι επέκταση του συνόλου εντολών x86. Υποστηρίζει σημαντικά μεγαλύτερους χώρους εικονικών και φυσικών διευθύνσεων μνήμης σε σχέση με το x86, επιτρέποντας στον προγραμματιστή να εργάζεται με μεγαλύτερους όγκους δεδομένων. Επίσης η x86-64 έχει καταχωρητές γενικής χρήσης 64-bit και πολλές άλλες βελτιώσεις. Η αρχική προδιαγραφή δημιουργήθηκε από την AMD και έχει υλοποιηθεί από την AMD, την Intel, τη VIA και άλλες εταιρείες. Διατηρεί πλήρη συμβατότητα προς τα πίσω με κώδικα 32-bit.[1](p13) Επειδή το πλήρες σύνολο εντολών 32-bit εξακολουθεί να υλοποιείται σε υλικό χωρίς προσομοίωση, τα εκτελέσιμα 32-bit για x86 εκτελούνται χωρίς προβλήματα συμβατότητας ή ταχύτητας,[2] αν και οι εφαρμογές μπορούν να μετατραπούν ώστε να εκμεταλλευτούν τις δυνατότητες της νέας σχεδίασης και να εκτελεστούν γρηγορότερα.
Αφού κυκλοφόρησε την αρχιτεκτονική με το όνομα "x86-64", η AMD τη μετονόμασε σε AMD64 το 2003[3] ενώ η Intel αρχικά χρησιμοποίησε τα ονόματα IA-32e και EM64T, καταλήγοντας τελικά στο Intel 64 για τη δική της υλοποίηση. Το όνομα x86-64 χρησιμοποιείται ακόμα από σημαντικό μέρος της βιομηχανίας ως όρος που δεν εξαρτάται από τον κάθε κατασκευαστή, ενώ κάποιες άλλες εταιρείες, όπως η Sun Microsystems[4] (που τώρα ανήκει στην Oracle Corporation) και η Microsoft,[5] χρησιμοποιούν το όνομα x64.
Ο πυρήνας AMD K8 ήταν ο πρώτος που υλοποίησε την αρχιτεκτονική - αυτό υπήρξε και η πρώτη σημαντική προσθήκη στην αρχιτεκτονική x86 που σχεδιάστηκε από άλλη εταιρεία και όχι από την Intel. Η Intel αναγκάστηκε να ακολουθήσει και κυκλοφόρησε μια τροποποιημένη οικογένεια NetBurst που ήταν πλήρως συμβατή από την πλευρά του λογισμικού με τη σχεδίαση και τις προδιαγραφές της AMD. Η VIA Technologies κυκλοφόρησε το x86-64 με την αρχιτεκτονική VIA Isaiah, στον επεξεργαστή VIA Nano.
Η προδιαγραφή x86-64 είναι διαφορετική από την αρχιτεκτονική Itanium (πρώην IA-64) της Intel, η οποία δεν είναι συμβατή με το σύνολο εντολών της αρχιτεκτονικής x86.
Το σύνολο εντολών AMD64 υλοποιείται από τους εξής επεξεργαστές της AMD: Athlon 64, Athlon 64 FX, Athlon 64 X2, Athlon II, Athlon X2, Opteron, Phenom, Phenom II, Turion 64, Turion 64 X2, και μεταγενέστερα μοντέλα των επεξεργαστών Sempron.
Η AMD64 υλοποιήθηκε σαν εναλλακτική έναντι της ριζικά διαφορετικής αρχιτεκτονικής IA-64, η οποία σχεδιάστηκε από την Intel και τη Hewlett Packard. Η αρχιτεκτονική AMD64 ανακοινώθηκε το 1999[6] με πλήρη προδιαγραφή να δημοσιεύεται τον Αύγουστο του 2000,[7] και από την αρχή θεωρήθηκε από την AMD σαν μια εξέλιξη που θα έδινε υπολογιστικές δυνατότητες 64-bit στην υπάρχουσα αρχιτεκτονική x86, σε αντίθεση με την προσέγγιση της Intel, η οποία είχε δημιουργήσει μια εντελώς νέα αρχιτεκτονική 64-bit, την IA-64.
Ο πρώτος επεξεργαστής που βασίστηκε στην AMD64, ο Opteron, κυκλοφόρησε τον Απρίλιο του 2003.
Το βασικό χαρακτηριστικό της αρχιτεκτονικής AMD64 είναι ότι υποστηρίζονται καταχωρητές γενικής χρήσης 64-bit (όπως ο rax και ο rbx), αριθμητικές ακεραίων και λογικές λειτουργίες 64-bit και εικονικές διευθύνσεις μνήμης 64-bit. Οι σχεδιαστές εισήγαγαν επίσης και άλλες βελτιώσεις, με τις σημαντικότερες να είναι οι εξής:
Αν και οι εικονικές διευθύνσεις έχουν μήκος 64 bit στην κατάσταση 64-bit, οι τρέχουσες υλοποιήσεις δεν επιτρέπουν χρήση του πλήρους χώρου εικονικών διευθύνσεων των 264 byte (16 EB). Τα περισσότερα λειτουργικά συστήματα και εφαρμογές δεν χρειάζονται τόσο μεγάλο χώρο διευθύνσεων στο άμεσο μέλλον (για παράδειγμα η υλοποίηση των Windows για AMD64 χρησιμοποιούν μόνο 16 TB, που αντιστοιχούν σε 44 bit), επομένως η υλοποίηση τόσο μεγάλων εικονικών διευθύνσεων απλά θα αυξήσει την πολυπλοκότητα και το κόστος της μετάφρασης διευθύνσεων χωρίς πραγματικό όφελος. Η AMD αποφάσισε να χρησιμοποιήσει μόνο τα λιγότερο σημαντικά 48 bit για μετάφραση διευθύνσεων στις πρώτες υλοποιήσεις της αρχιτεκτονικής (αναζήτηση στον πίνακα σελίδων, page table lookup).[1](p120) Επιπλέον, τα bit 48-63 κάθε εικονικής διεύθυνσης πρέπει να είναι αντίγραφα του bit 47, αλλιώς ο επεξεργαστής θα προκαλέσει σφάλμα εξαίρεσης (exception).[1](p131) Οι διευθύνσεις που συμφωνούν με αυτόν τον κανόνα λέγεται ότι είναι σαν «κανονική μορφή» («canonical form»).[1](p130) Οι διευθύνσεις σε κανονικής μορφή καταλαμβάνουν τους χώρους 0 έως 00007FFF'FFFFFFFF και FFFF8000'00000000 έως FFFFFFFF'FFFFFFFF, αντιστοιχώντας συνολικά σε 256 TB χώρου εικονικών διευθύνσεων.
Αυτή η λεπτομέρεια επιτρέπει την ομαλή μετάβαση αργότερα σε σχηματισμό πλήρως 64-bit διευθύνσεων: πολλά λειτουργικά συστήματα (όπως η οικογένεια των Windows NT) κρατούν για δική τους χρήση το μισό του χώρου διευθύνσεων που είναι σε υψηλότερες διευθύνσεις (που ονομάζεται χώρος πυρήνα, kernel space) και αφήνουν το άλλο μισό σε χαμηλότερες διευθύνσεις (χώρος χρήστη, user space) για κώδικα εφαρμογών, χώρο για στοίβα του χρήστη, σωρό, και άλλες περιοχές για δεδομένα. Η σχεδίαση «κανονικών διευθύνσεων» έχει σαν αποτέλεσμα κάθε υλοποίηση που είναι συμβατή με την αρχιτεκτονική AMD64 να έχει στην πράξη δύο μισά μνήμης: το χαμηλότερο μισό αρχίζει στη διεύθυνση 00000000'00000000 και μεγαλώνει προς τα πάνω με την αύξηση των διαθέσιμων bit διευθύνσεων και το υψηλότερο μισό βρίσκεται στην κορυφή της μνήμης και μεγαλώνει προς τα κάτω. Επιπλέον, ο ορισμός του περιεχομένου των επιπλέον bit απαγορεύει τη χρήση τους από το λειτουργικό σύστημα σαν σημαίες (flags), σήμανση δικαιωμάτων (privilege markers), κλπ., χαρακτηριστικά που θα δυσκόλευαν την επέκταση της αρχιτεκτονικής σε περισσότερα bit εικονικών διευθύνσεων.
Ο σχηματισμός διευθύνσεων 64-bit (κατάσταση long, «long mode») είναι υπερσύνολο της Physical Address Extensions (PAE) και τα μεγέθη των σελίδων μπορούν να είναι 4 KB (212 byte) ή 2 MB (221 byte).[1](p120) Η κατάσταση αυτή υποστηρίζει επίσης μεγέθη σελίδων του 1 GB (230 byte).[1](p120) Αντί για το σύστημα πινάκων σελίδων τριών επιπέδων που χρησιμοποιείται σε συστήματα σε κατάσταση PAE, χρησιμοποιούνται τέσσερα επίπεδα πίνακα σελίδων: ο πίνακας Page-Directory Pointer Table του PAE επεκτείνεται από 4 εγγραφές σε 512, και προστίθεται ένας επιπλέον πίνακας (Page-Map Level 4 (PML4) Table), που περιλαμβάνει 512 εγγραφές στις υλοποιήσεις 48-bit.[1](p131) Στις υλοποιήσεις που έχουν μεγαλύτερες εικονικές διευθύνσεις, ο τελευταίος πίνακας μπορεί να μεγαλώσει για να χωρέσει αρκετές εγγραφές που να περιγράφουν ολόκληρο το εύρος διευθύνσεων, μέχρι το θεωρητικό μέγιστο των 33,554,432 εγγραφών μιας υλοποίησης 64-bit, ή να αντιστοιχηθεί σε κάποιο νέο επίπεδο, όπως το PML5. Μια πλήρης ιεραρχία σελίδων των 4 KB για τον πλήρη χώρο των 48-bit θα καταλάμβανε λίγο περισσότερο χώρο από 512 GB μνήμης RAM (το 0.196% του εικονικού χώρου των 256 TB).
Το λειτουργικό σύστημα μπορεί επίσης να περιορίσει τον χώρο εικονικών διευθύνσεων. Λεπτομέρειες δίνονται στην υποενότητα «Συμβατότητα και χαρακτηριστικά λειτουργικών συστημάτων».
Οι τρέχουσες υλοποιήσεις της AMD64 υποστηρίζουν έναν χώρο φυσικών διευθύνσεων μέχρι 248 byte μνήμης RAM, ή 256 TB.[9] Το μεγάλο μέγεθος εγκατεστημένης μνήμης RAM επιτρέπει στο λειτουργικό σύστημα να κρατά μεγαλύτερο μέρος από τα δεδομένα και τον κώδικα του προγράμματος στη RAM, με πιθανή βελτίωση της ταχύτητας,[12] αν και αυτό εξαρτάται από την κάθε εφαρμογή.[13][14]
Το άνω όριο στο μέγεθος της μνήμης RAM που μπορεί να χρησιμοποιηθεί σε ένα σύστημα x86-64 εξαρτάται από πολλούς παράγοντες και μπορεί να είναι λιγότερη από αυτήν που υλοποιεί ο επεξεργαστής. Το λειτουργικό σύστημα μπορεί να περιορίζει επιπλέον το μέγεθος της RAM που μπορεί να χρησιμοποιηθεί. Λεπτομέρειες δίνονται στην υποενότητα «Συμβατότητα και χαρακτηριστικά λειτουργικών συστημάτων».
Κατάσταση λειτουργίας | Απαιτούμενο λειτουργικό σύστημα | Απαιτείται επαναμεταγλώττιση της εφαρμογής | Μήκος διεύθυνσης | Μέγεθος τελεστέων | Επεκτάσεις καταχωρητών | Μήκος καταχωρητών γενικής χρήσης (General Purpose Register, GPR) | |
---|---|---|---|---|---|---|---|
Long mode | κατάσταση 64-bit | Λειτουργικό σύστημα με υποστήριξη 64-bit ή λογισμικό εκκίνησης (bootloader) για λειτουργικό σύστημα 64-bit | Ναι | 64 | 32 | Ναι | 64 |
Κατάσταση συμβατότητας | Όχι | 32 | 32 | Όχι | 32 | ||
16 | 16 | 16 | |||||
Κατάσταση συμβατότητας με παλιό κώδικα (Legacy mode) | Προστατευμένη κατάσταση (Protected mode) | Παλιό λειτουργικό σύστημα 16-bit ή 32-bit, ή λογισμικό εκκίνησης για λειτουργικό σύστημα 16, 32, ή 64-bit | Όχι | 32 | 32 | Όχι | 32 |
16 | 16 | 16 | |||||
Εικονική κατάσταση 8086 (Virtual 8086) | Παλιό λειτουργικό σύστημα 16-bit ή 32-bit | 16 | 16 | 16 | |||
Πραγματική κατάσταση (Real mode) | Παλιό λειτουργικό σύστημα 16-bit ή λογισμικό εκκίνησης για λειτουργικό σύστημα 16, 32, ή 64 bit |
Η αρχιτεκτονική έχει δύο βασικές καταστάσεις λειτουργίας:
Η βασική κατάσταση της αρχιτεκτονικής συνδυάζει την κανονική κατάσταση 64-bit του επεξεργαστή με ένα μείγμα των καταστάσεων συμβατότητας 32-bit και 16-bit. Χρησιμοποιείται από λειτουργικά συστήματα 64-bit. Σε ένα λειτουργικό σύστημα 64-bit τα προγράμματα 64-bit εκτελούνται σε κατάσταση 64-bit και οι εφαρμογές προστατευμένης κατάστασης 32-bit και 16-bit (που δεν χρειάζονται την πραγματική κατάσταση ή την εικονική κατάσταση 8086). Τα προγράμματα πραγματικής κατάστασης και όσα χρησιμοποιούν την εικονική κατάσταση 8086 δεν μπορούν να εκτελεστούν σε long mode, εκτός και αν εκτελεστούν μέσα σε κάποιον εξομοιωτή.
Επειδή το βασικό σύνολο εντολών είναι το ίδιο, δεν υπάρχει σχεδόν καμία διαφορά στην ταχύτητα στην εκτέλεση κώδικα x86 προστατευόμενης κατάστασης. Αυτό είναι αντίθετο με την αρχιτεκτονική IA-64 της Intel, όπου οι διαφορές στο σύνολο εντολών σημαίνει ότι η εκτέλεση κώδικα 32-bit πρέπει είτε να εξομοιωθεί (κάνοντας τον επεξεργαστή πιο αργό) ή με κάποιον εξειδικευμένο πυρήνα x86. Στην πλατφόρμα x86-64 όμως, πολλές εφαρμογές x86 θα μπορούσαν να ωφεληθούν από μια επαναμεταγλώττιση στα 64 bit, λόγω των επιπλέον καταχωρητών στον κώδικα 64-bit και την εγγυημένη υποστήριξη FPU βασισμένης στο SSE2, το οποίο ένας μεταγλωττιστής μπορεί να χρησιμοποιήσει για βελτιστοποίηση. Οι εφαρμογές όμως που χειρίζονται συχνά ακεραίους μεγαλύτερους από 32 bit, όπως οι αλγόριθμοι κρυπτογραφίας, θα χρειαστούν διορθώσεις τον κώδικα που χειρίζεται τους μεγάλους ακεραίους για να χρησιμοποιήσουν τους καταχωρητές των 64 bit.
Η κατάσταση αυτή χρησιμοποιείται από τα λειτουργικά συστήματα 16-bit (προστατευμένης ή πραγματικής κατάστασης) και 32-bit. Σε αυτήν την κατάσταση ο επεξεργαστής συμπεριφέρεται ως ένας επεξεργαστής x86 32-bit, και μπορεί να εκτελέσει μόνο κώδικα 16-bit και 32-bit. Η κατάσταση αυτή επιτρέπει μέγιστο μήκος εικονικών διευθύνσεων τα 32 bit, περιορίζοντας τον χώρο εικονικών διευθύνσεων στα 4 GB.[1](p14)(p24)(p118) Τα προγράμματα 64-bit δε μπορούν να εκτελεστούν σε αυτήν την κατάσταση.
Οι ακόλουθοι επεξεργαστές υλοποιούν την αρχιτεκτονική AMD64:
Η Intel 64 είναι η υλοποίηση της Intel της αρχιτεκτονικής x86-64. Χρησιμοποιείται σε νεότερες εκδόσεις των επεξεργαστών Pentium 4, Celeron D, Xeon και Pentium Dual-Core, στους Atom D510, N450, και N550, και σε όλες τις εκδόσεις των επεξεργαστών Pentium Extreme Edition, Core 2, Core i7, Core i5, και Core i3.
Η AMD παραδοσιακά ανέπτυσσε και κατασκεύαζε επεξεργαστές ακολουθώντας τις αρχικές σχεδιάσεις της Intel, αλλά οι ρόλοι αντιστράφηκαν με την x86-64: η Intel βρέθηκε να υιοθετεί την αρχιτεκτονική που κατασκεύασε η AMD ως επέκταση στην ίδια σειρά κατασκευαστών x86 της Intel.
Αρχικά η κωδική ονομασία του εγχειρήματος της Intel ήταν Yamhill (από τον ομώνυμο ποταμό του Όρεγκον). Αν και διέψευδε την ύπαρξή του για αρκετά χρόνια, η Intel ανακοίνωσε τον Φεβρουάριο του 2004 στο Intel Developer Forum (IDF) ότι το εγχείρημα ήταν ενεργό. Ο τότε πρόεδρος της Intel, Craig Barrett, παραδέχτηκε ότι το μυστικό δεν το είχαν φυλάξει καλά.[15][16]
Η Intel άλλαξε όνομα για αυτό το σύνολο εντολών αρκετές φορές. Το όνομα που χρησιμοποίησε στο IDF ήταν CT (μάλλον Clackamas Technology, όπου Clackamas ένας άλλος ποταμός του Όρεγκον), ενώ μετά από κάποιες εβδομάδες άρχισαν να το αποκαλούν IA-32e (IA-32 extensions, επεκτάσεις) και τον Μάρτιο του 2004 δόθηκε στη δημοσιότητα το «επίσημο» όνομα EM64T (Extended Memory 64 Technology). Στα τέλη του 2006 η Intel άρχισε να χρησιμοποιεί το όνομα Intel 64 για την υλοποίησή της, όπως ήδη έκανε η AMD με το αντίστοιχο όνομα AMD64.[17]
Ο πρώτος επεξεργαστής που υλοποίησε την Intel 64 ήταν ο επεξεργαστής πολλών υποδοχών (multi-socket) Xeon με την κωδική ονομασία Nocona τον Ιούνιο του 2004. Αντίθετα, τα πρώτα τσιπ Prescott (Φεβρουάριος 2004) δεν είχαν ενεργοποιημένο το χαρακτηριστικό αυτό. Η Intel στη συνέχεια άρχισε να πουλά επεξεργαστές Pentium 4 που είχαν ενεργοποιημένη την Intel 64 χρησιμοποιώντας την έκδοση E0 του πυρήνα Prescott, που στην αγορά των OEM έγιναν γνωστοί σαν Pentium 4, μοντέλο F. Η έκδοση E0 πρόσθεσε επίσης το χαρακτηριστικό eXecute Disable (XD) (το όνομα της Intel για το NX bit) στην Intel 64, το οποίο και από τότε περιλαμβάνεται στην έκδοση Irwindale του Xeon. Επίσημα, η Intel διέθεσε πρώτη φορά την Intel 64 (τότε με το όνομα EM64T) για εμπορικούς επεξεργαστές σταθερών υπολογιστών με τον N0 Stepping Prescott-2M. Όλοι οι επεξεργαστές των σειρών 9xx, 8xx, 6xx, 5x9, 5x6, 5x1, 3x6, και 3x1 υποστηρίζουν την Intel 64 - το ίδιο συμβαίνει και με τους επεξεργαστές Core 2, και τοτς μελλοντικούς επεξεργαστές της Intel CPU για σταθμούς εργασίας ή εξυπηρετητές. Η Intel 64 περιλαμβάνεται επίσης στα τελευταία μέλη της σειράς Celeron D.
Ο πρώτος επεξεργαστής της Intel για κινητές πλατφόρμες (mobile processor) που υλοποίησε την Intel 64 ήταν η έκδοση Merom του επεξεργαστή Core 2, που κυκλοφόρησε στις 27 Ιουλίου 2006. Οι προηγούμενοι επεξεργαστές της Intel για κινητά (Core Duo, Pentium M, Celeron M, Mobile Pentium 4) δεν υλοποιούν την Intel 64.
Οι ακόλουθοι επεξεργαστές υλοποιούν την αρχιτεκτονική Intel 64:
Ο VIA Nano (πρώην κωδική ονομασία: VIA Isaiah) είναι επεξεργαστής 64-bit για προσωπικούς υπολογιστές. Κυκλοφόρησε από τη VIA Technologies το 2008 μετά από πέντε χρόνια ανάπτυξης[18] από τη μονάδα επεξεργαστών της, την Centaur Technology. Η νέα αρχιτεκτονική Isaiah των 64-bit σχεδιάστηκε από την αρχή και παρουσιάστηκε στις 24 Ιανουαρίου 2008,[19][20][21][22] και κυκλοφόρησε στις 29 Μαΐου, περιλαμβάνοντας εκδόσεις χαμηλής τάσης (low-voltage) και την εμπορική ονομασία Nano.[23] Ο επεξεργαστής υποστηρίζει κάποιες επεκτάσεις της x86 που οφείλονται στη VIA και έχουν σχεδιαστεί για να αυξάνουν την απόδοση του επεξεργαστή σε συσκευές χαμηλής κατανάλωσης. Ο VIA Isaiah αναμένεται να είναι δύο φορές πιο γρήγορος σε αριθμητικές πράξεις με ακεραίους και τέσσερις φορές πιο γρήγορος σε πράξεις με αριθμούς κινητής υποδιαστολής σε σχέση με την προηγούμενη γενιά VIA Esther, στην ίδια συχνότητα ρολογιού. Η κατανάλωση ενέργειας αναμένεται επίσης να είναι αντίστοιχη με αυτήν των προηγούμενων γενιών επεξεργαστών της VIA, μεταξύ 5 W και 25 W (thermal design power).[24] Επειδή είναι εντελώς νέα σχεδίαση, η αρχιτεκτονική Isaiah κατασκευάστηκε με υποστήριξη για χαρακτηριστικά όπως το σύνολο εντολών x86-64 και η δυνατότητα εικονικής εκτέλεσης κώδικα για x86 (x86 virtualization), που δεν ήταν διαθέσιμα στους προηγούμενους επεξεργαστές, τη σειρά VIA C7, ενώ διατηρεί τις επεκτάσεις κρυπτογραφίας.
Αν και τα δύο σύνολα εντολών είναι σχεδόν ίδια, υπάρχουν κάποιες διαφορές στη σημασία ορισμένων εντολών μηχανής που χρησιμοποιούνται σπάνια, κυρίως στον προγραμματισμό συστημάτων.[25] Οι μεταγλωττιστές γενικά παράγουν εκτελέσιμα (κώδικα μηχανής) αποφεύγοντας τέτοιες διαφορές, τουλάχιστον στα συνηθισμένα προγράμματα. Επομένως αυτές οι διαφορές αφορούν κυρίως τους προγραμματιστές μεταγλωττιστών, λειτουργικών συστημάτων και παρόμοιου λογισμικού, που πρέπει να χειριστούν εξειδικευμένες εντολές του συστήματος.
Figures 5, 6 and 7 also show the 32-bit version of WAS runs applications at full native hardware performance on the POWER and x86-64 platforms. Unlike some 64-bit processor architectures, the POWER and x86-64 hardware does not emulate 32-bit mode. Therefore applications that do not benefit from 64-bit features can run with full performance on the 32-bit version of WebSphere running on the above mentioned 64-bit platforms.
Physical address space increased to 48 bits.
Physical address space increased to 48 bits
The read/write speed of a hard drive is much slower than RAM, and the technology of a hard drive is not geared toward accessing small pieces of data at a time. If your system has to rely too heavily on virtual memory, you will notice a significant performance drop. The key is to have enough RAM to handle everything you tend to work on simultaneously.
There's a point of diminishing returns where adding more RAM won't give you better system performance.
There is, however, a point of diminishing returns at which adding memory to the server may not be justifiable based on price and performance.