X86-64

Η x86-64 είναι επέκταση του συνόλου εντολών x86. Υποστηρίζει σημαντικά μεγαλύτερους χώρους εικονικών και φυσικών διευθύνσεων μνήμης σε σχέση με το x86, επιτρέποντας στον προγραμματιστή να εργάζεται με μεγαλύτερους όγκους δεδομένων. Επίσης η x86-64 έχει καταχωρητές γενικής χρήσης 64-bit και πολλές άλλες βελτιώσεις. Η αρχική προδιαγραφή δημιουργήθηκε από την AMD και έχει υλοποιηθεί από την AMD, την Intel, τη VIA και άλλες εταιρείες. Διατηρεί πλήρη συμβατότητα προς τα πίσω με κώδικα 32-bit. Επειδή το πλήρες σύνολο εντολών 32-bit εξακολουθεί να υλοποιείται σε υλικό χωρίς προσομοίωση, τα εκτελέσιμα 32-bit για x86 εκτελούνται χωρίς προβλήματα συμβατότητας ή ταχύτητας,
αν και οι εφαρμογές μπορούν να μετατραπούν ώστε να εκμεταλλευτούν τις δυνατότητες της νέας σχεδίασης και να εκτελεστούν γρηγορότερα.
Αφού κυκλοφόρησε την αρχιτεκτονική με το όνομα "x86-64", η AMD τη μετονόμασε σε AMD64 το 2003 ενώ η Intel αρχικά χρησιμοποίησε τα ονόματα IA-32e και EM64T, καταλήγοντας τελικά στο Intel 64 για τη δική της υλοποίηση. Το όνομα x86-64 χρησιμοποιείται ακόμα από σημαντικό μέρος της βιομηχανίας ως όρος που δεν εξαρτάται από τον κάθε κατασκευαστή, ενώ κάποιες άλλες εταιρείες, όπως η Sun Microsystems (που τώρα ανήκει στην Oracle Corporation) και η Microsoft, χρησιμοποιούν το όνομα x64.
Ο πυρήνας AMD K8 ήταν ο πρώτος που υλοποίησε την αρχιτεκτονική - αυτό υπήρξε και η πρώτη σημαντική προσθήκη στην αρχιτεκτονική x86 που σχεδιάστηκε από άλλη εταιρεία και όχι από την Intel. Η Intel αναγκάστηκε να ακολουθήσει και κυκλοφόρησε μια τροποποιημένη οικογένεια NetBurst που ήταν πλήρως συμβατή από την πλευρά του λογισμικού με τη σχεδίαση και τις προδιαγραφές της AMD. Η VIA Technologies κυκλοφόρησε το x86-64 με την αρχιτεκτονική VIA Isaiah, στον επεξεργαστή VIA Nano.
Η προδιαγραφή x86-64 είναι διαφορετική από την αρχιτεκτονική Itanium (πρώην IA-64) της Intel, η οποία δεν είναι συμβατή με το σύνολο εντολών της αρχιτεκτονικής x86.

AMD64

Το σύνολο εντολών 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

Η AMD64 υλοποιήθηκε σαν εναλλακτική έναντι της ριζικά διαφορετικής αρχιτεκτονικής IA-64, η οποία σχεδιάστηκε από την Intel και τη Hewlett Packard.  Η αρχιτεκτονική AMD64 ανακοινώθηκε το 1999 με πλήρη προδιαγραφή να δημοσιεύεται τον Αύγουστο του 2000, και από την αρχή θεωρήθηκε από την AMD σαν μια εξέλιξη που θα έδινε υπολογιστικές δυνατότητες 64-bit στην υπάρχουσα αρχιτεκτονική x86, σε αντίθεση με την προσέγγιση της Intel, η οποία είχε δημιουργήσει μια εντελώς νέα αρχιτεκτονική 64-bit, την IA-64.
Ο πρώτος επεξεργαστής που βασίστηκε στην AMD64, ο Opteron, κυκλοφόρησε τον Απρίλιο του 2003.

Κανονική μορφή διευθύνσεων

Αν και οι εικονικές διευθύνσεις έχουν μήκος 64 bit στην κατάσταση 64-bit, οι τρέχουσες υλοποιήσεις δεν επιτρέπουν χρήση του πλήρους χώρου εικονικών διευθύνσεων των 2⁶⁴ byte (16 EB). Τα περισσότερα λειτουργικά συστήματα και εφαρμογές δεν χρειάζονται τόσο μεγάλο χώρο διευθύνσεων στο άμεσο μέλλον (για παράδειγμα η υλοποίηση των Windows για AMD64 χρησιμοποιούν μόνο 16 TB, που αντιστοιχούν σε 44 bit), επομένως η υλοποίηση τόσο μεγάλων εικονικών διευθύνσεων απλά θα αυξήσει την πολυπλοκότητα και το κόστος της μετάφρασης διευθύνσεων χωρίς πραγματικό όφελος. Η AMD αποφάσισε να χρησιμοποιήσει μόνο τα λιγότερο σημαντικά 48 bit για μετάφραση διευθύνσεων στις πρώτες υλοποιήσεις της αρχιτεκτονικής (αναζήτηση στον πίνακα σελίδων, page table lookup). Επιπλέον, τα bit 48-63 κάθε εικονικής διεύθυνσης πρέπει να είναι αντίγραφα του bit 47, αλλιώς ο επεξεργαστής θα προκαλέσει σφάλμα εξαίρεσης (exception). Οι διευθύνσεις που συμφωνούν με αυτόν τον κανόνα λέγεται ότι είναι σαν «κανονική μορφή» («canonical form»). Οι διευθύνσεις σε κανονικής μορφή καταλαμβάνουν τους χώρους 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 (2¹² byte) ή 2 MB (2²¹ byte). Η κατάσταση αυτή υποστηρίζει επίσης μεγέθη σελίδων του 1 GB (2³⁰ byte). Αντί για το σύστημα πινάκων σελίδων τριών επιπέδων που χρησιμοποιείται σε συστήματα σε κατάσταση PAE, χρησιμοποιούνται τέσσερα επίπεδα πίνακα σελίδων: ο πίνακας Page-Directory Pointer Table του PAE επεκτείνεται από 4 εγγραφές σε 512, και προστίθεται ένας επιπλέον πίνακας (Page-Map Level 4 (PML4) Table), που περιλαμβάνει 512 εγγραφές στις υλοποιήσεις 48-bit. Στις υλοποιήσεις που έχουν μεγαλύτερες εικονικές διευθύνσεις, ο τελευταίος πίνακας μπορεί να μεγαλώσει για να χωρέσει αρκετές εγγραφές που να περιγράφουν ολόκληρο το εύρος διευθύνσεων, μέχρι το θεωρητικό μέγιστο των 33,554,432 εγγραφών μιας υλοποίησης 64-bit, ή να αντιστοιχηθεί σε κάποιο νέο επίπεδο, όπως το PML5. Μια πλήρης ιεραρχία σελίδων των 4 KB για τον πλήρη χώρο των 48-bit θα καταλάμβανε λίγο περισσότερο χώρο από 512 GB μνήμης RAM (το 0.196% του εικονικού χώρου των 256 TB).

Περιορισμοί του λειτουργικού συστήματος

Το λειτουργικό σύστημα μπορεί επίσης να περιορίσει τον χώρο εικονικών διευθύνσεων. Λεπτομέρειες δίνονται στην υποενότητα «Συμβατότητα και χαρακτηριστικά λειτουργικών συστημάτων».

Λεπτομέρειες για τον χώρο φυσικών διευθύνσεων

Οι τρέχουσες υλοποιήσεις της AMD64 υποστηρίζουν έναν χώρο φυσικών διευθύνσεων μέχρι 2⁴⁸ byte μνήμης RAM, ή 256 TB. Το μεγάλο μέγεθος εγκατεστημένης μνήμης RAM επιτρέπει στο λειτουργικό σύστημα να κρατά μεγαλύτερο μέρος από τα δεδομένα και τον κώδικα του προγράμματος στη RAM, με πιθανή βελτίωση της ταχύτητας, αν και αυτό εξαρτάται από την κάθε εφαρμογή.
Το άνω όριο στο μέγεθος της μνήμης RAM που μπορεί να χρησιμοποιηθεί σε ένα σύστημα x86-64 εξαρτάται από πολλούς παράγοντες και μπορεί να είναι λιγότερη από αυτήν που υλοποιεί ο επεξεργαστής. Το λειτουργικό σύστημα μπορεί να περιορίζει επιπλέον το μέγεθος της RAM που μπορεί να χρησιμοποιηθεί. Λεπτομέρειες δίνονται στην υποενότητα «Συμβατότητα και χαρακτηριστικά λειτουργικών συστημάτων».

Long mode

Η βασική κατάσταση της αρχιτεκτονικής συνδυάζει την κανονική κατάσταση 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.

Κατάσταση συμβατότητας με παλιό κώδικα (Legacy mode)

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

Intel 64

Η 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.

Ιστορία της Intel 64

Η AMD παραδοσιακά ανέπτυσσε και κατασκεύαζε επεξεργαστές ακολουθώντας τις αρχικές σχεδιάσεις της Intel, αλλά οι ρόλοι αντιστράφηκαν με την x86-64: η Intel βρέθηκε να υιοθετεί την αρχιτεκτονική που κατασκεύασε η AMD ως επέκταση στην ίδια σειρά κατασκευαστών x86 της Intel.
Αρχικά η κωδική ονομασία του εγχειρήματος της Intel ήταν Yamhill (από τον ομώνυμο ποταμό του Όρεγκον). Αν και διέψευδε την ύπαρξή του για αρκετά χρόνια, η Intel ανακοίνωσε τον Φεβρουάριο του 2004 στο Intel Developer Forum (IDF) ότι το εγχείρημα ήταν ενεργό. Ο τότε πρόεδρος της Intel, Craig Barrett, παραδέχτηκε ότι το μυστικό δεν το είχαν φυλάξει καλά.
Η Intel άλλαξε όνομα για αυτό το σύνολο εντολών αρκετές φορές. Το όνομα που χρησιμοποίησε στο IDF ήταν CT (μάλλον Clackamas Technology, όπου Clackamas ένας άλλος ποταμός του Όρεγκον), ενώ μετά από κάποιες εβδομάδες άρχισαν να το αποκαλούν IA-32e (IA-32 extensions, επεκτάσεις) και τον Μάρτιο του 2004 δόθηκε στη δημοσιότητα το «επίσημο» όνομα EM64T (Extended Memory 64 Technology). Στα τέλη του 2006 η Intel άρχισε να χρησιμοποιεί το όνομα Intel 64 για την υλοποίησή της, όπως ήδη έκανε η AMD με το αντίστοιχο όνομα AMD64.

Υλοποίηση της x86-64 από τη VIA

Ο VIA Nano (πρώην κωδική ονομασία: VIA Isaiah) είναι επεξεργαστής 64-bit για προσωπικούς υπολογιστές. Κυκλοφόρησε από τη VIA Technologies το 2008 μετά από πέντε χρόνια ανάπτυξης από τη μονάδα επεξεργαστών της, την Centaur Technology. Η νέα αρχιτεκτονική Isaiah των 64-bit σχεδιάστηκε από την αρχή και παρουσιάστηκε στις 24 Ιανουαρίου 2008, και κυκλοφόρησε στις 29 Μαΐου, περιλαμβάνοντας εκδόσεις χαμηλής τάσης (low-voltage) και την εμπορική ονομασία Nano. Ο επεξεργαστής υποστηρίζει κάποιες επεκτάσεις της x86 που οφείλονται στη VIA και έχουν σχεδιαστεί για να αυξάνουν την απόδοση του επεξεργαστή σε συσκευές χαμηλής κατανάλωσης. Ο VIA Isaiah αναμένεται να είναι δύο φορές πιο γρήγορος σε αριθμητικές πράξεις με ακεραίους και τέσσερις φορές πιο γρήγορος σε πράξεις με αριθμούς κινητής υποδιαστολής σε σχέση με την προηγούμενη γενιά VIA Esther, στην ίδια συχνότητα ρολογιού. Η κατανάλωση ενέργειας αναμένεται επίσης να είναι αντίστοιχη με αυτήν των προηγούμενων γενιών επεξεργαστών της VIA, μεταξύ 5 W και 25 W (thermal design power). Επειδή είναι εντελώς νέα σχεδίαση, η αρχιτεκτονική Isaiah κατασκευάστηκε με υποστήριξη για χαρακτηριστικά όπως το σύνολο εντολών x86-64 και η δυνατότητα εικονικής εκτέλεσης κώδικα για x86 (x86 virtualization), που δεν ήταν διαθέσιμα στους προηγούμενους επεξεργαστές, τη σειρά VIA C7, ενώ διατηρεί τις επεκτάσεις κρυπτογραφίας.

Διαφορές μεταξύ AMD64 και Intel 64

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