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

x86-64

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Η 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: Όλοι οι καταχωρητές γενικής χρήσης επεκτείνονται από τα 32 bit στα 64 bit και όλες οι αριθμητικές και λογικές λειτουργίες και οι λειτουργίες μεταξύ καταχωρητών και μνήμης μπορούν να χρησιμοποιούν ακεραίους 64-bit. Η τοποθέτηση και η αφαίρεση δεδομένων από τη στοίβα γίνεται με την μείωση ή αύξηση του καταχωρητή στοίβας σε πολλαπλάσια των 8 byte και οι δείκτες έχουν πλάτος 8 byte.
  • Επιπλέον καταχωρητές: Εκτός από την αύξηση του μεγέθους των καταχωρητών γενικής χρήσης, ο αριθμός των καταχωρητών γενικής χρήσης αυξάνεται από τους 8 (eax, ebx, ecx, edx, ebp, esp, esi, edi) του x86 σε 16 (rax, rbx, rcx, rdx, rbp, rsp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15). Με αυτόν τον τρόπο είναι δυνατή η αποθήκευση περισσότερων τοπικών μεταβλητών στους καταχωρητές σε σχέση με τη στοίβα και η τοποθέτηση συχνά χρησιμοποιούμενων σταθερών στους καταχωρητές, ενώ μπορούν να δίνονται σε καταχωρητές τα ορίσματα των μικρών και γρήγορων υπορουτινών. Το AMD64 όμως εξακολουθεί να έχει λιγότερους καταχωρητές σε σχέση με πολλές κοινές αρχιτεκτονικές συνόλου εντολών RISC (που συνήθως έχουν 32–64 καταχωρητές) ή υπολογιστές τύπου VLIW όπως ο IA-64 (που έχει 128 καταχωρητές), αν και λόγω της τεχνικής της μετονομασίας καταχωρητών (register renaming) ο αριθμός των φυσικών καταχωρητών είναι συχνά μεγαλύτερος από τον αριθμό που φαίνεται στο σύνολο εντολών.
  • Επιπλέον καταχωρητές XMM (SSE): Ο αριθμός των καταχωρητών XMM 128-bit (που χρησιμοποιείται για εντολές Streaming SIMD) αυξάνεται επίσης από 8 σε 16.
  • Μεγαλύτερος χώρος εικονικών διευθύνσεων: Η αρχιτεκτονική AMD64 ορίζει έναν τύπο εικονικών διευθύνσεων 64-bit, τα 48 bit χαμηλότερης τάξης του οποίου χρησιμοποιούνται στις περισσότερες υλοποιήσεις.[1](p120) Αυτό επιτρέπει εικονικό χώρο διευθύνσεων μέχρι 256 TB (248 byte). Ο ορισμός της αρχιτεκτονικής επιτρέπει την αύξηση αυτού του ορίου σε μελλοντικές υλοποιήσεις πλήρως στα 64 bit,[1](p2)(p3)(p13)(p117)(p120) επεκτείνοντας τον εικονικό χώρο διευθύνσεων στα 16 EB (264 byte). Αντίθετα, στην αρχιτεκτονική x86 ο αριθμός αυτός είναι μόνο 4 GB (232 byte).[8] Αυτό σημαίνει ότι μπορεί να γίνει επεξεργασία πολύ μεγάλων αρχείων με απευθείας αντιστοίχιση κάθε αρχείου στη μνήμη (memory-mapped file) για γρηγορότερη επεξεργασία του, σε αντίθεση με την παλαιότερη πρακτική της τμηματικής φόρτωσης και επεξεργασίας του αρχείου.
  • Μεγαλύτερος φυσικός χώρος διευθύνσεων: Η αρχική υλοποίηση της αρχιτεκτονικής AMD64 υλοποίησε φυσικές διευθύνσεις 40-bit και μπορούσε να χρησιμοποιήσει μέχρι και 1 TB (240 byte) μνήμης RAM.[1](p24) Οι νεότερες υλοποιήσεις της αρχιτεκτονικής AMD64 (από τη μικροαρχιτεκτονική AMD 10h) επέκτειναν τις φυσικές διευθύνσεις στα 48-bit[9] και μπορούν να χρησιμοποιήσουν διευθύνσεις για μέχρι 256 TB μνήμης RAM. Η αρχιτεκτονική επιτρέπει τη μελλοντική αύξηση των διευθύνσεων στα 52 bit[1](p24)[10] (με όριο τον τύπο του πίνακα των σελίδων μνήμης);[1](p131) που μπορεί να δώσει διευθύνσεις μέχρι 4 PB μνήμης RAM. Συγκριτικά, οι επεξεργαστές x86 32-bit περιορίζονται σε 64 GB RAM την κατάσταση Physical Address Extension (PAE),[11] ή σε 4 GB RAM χωρίς την κατάσταση PAE.[1](p4)
  • Μεγαλύτερος χώρος φυσικών διευθύνσεων στην κατάσταση συμβατότητας: Όταν λειτουργεί σε κατάσταη συμβατότητας με παλαιότερο κώδικα (legacy mode), η αρχιτεκτονική AMD64 υποστηρίζει την κατάσταση Physical Address Extension (PAE), όπως οι περισσότεροι σύγχρονοι επεξεργαστές x86, αλλά την επεκτείνει από τα 36 bit σε ένα αρχιτεκτονικό όριο των 52 bit για φυσικές διευθύνσεις. Κάθε υλοποίηση επομένως επιτρέπει το ίδιο όριο στις φυσικές διευθύνσεις σε σχέση με την κατάσταση long (long mode).[1](p24)
  • Πρόσβαση σε δεδομένα με βάση τον δείκτη εντολής: Οι εντολές μπορούν να χρησιμοποιήσουν δεδομένα που βρίσκονται σε θέση που σχετίζεται με τον δείκτη εντολής (καταχωρητής RIP). Αυτό κάνει πιο γρήγορο τον κώδικα που δεν εξαρτάται από τη διεύθυνση φόρτωσης (position independent code), ο οποίος συχνά χρησιμοποιείται σε διαμοιραζόμενες βιβλιοθήκες και στον κώδικα που φορτώνεται στον χρόνο εκτέλεσης.
  • Εντολές SSE: Η αρχική αρχιτεκτονική AMD64 υιοθέτησε τα σύνολα εντολών SSE και SSE2 της Intel σαν βασικές εντολές. Οι εντολές SSE3 προστέθηκαν τον Απρίλιο του 2005. Η SSE2 είναι εναλλακτική της ακρίβειας 80-bit IEEE του συνόλου εντολών του x87 με δυνατότητα επιλογής μεταξύ μαθηματικών κινητής υποδιαστολής IEEE 32-bit ή 64-bit. Αυτό παρέχει λειτουργίες κινητής υποδιαστολής που είναι συμβατές με πολλούς άλλους σύγχρονους επεξεργαστές. Οι εντολές SSE και SSE2 έχουν επίσης επεκταθεί ώστε να χρησιμοποιούν τους οχτώ νέους επεξεργαστές XMM. Οι SSE και SSE2 διατίθενται στην κατάσταση 32-bit στους σύγχρονου επεξεργαστές x86 αλλά αν χρησιμοποιηθούν σε προγράμματα 32-bit, αυτά μπορούν να εκτελεστούν μόνο σε συστήματα που υποστηρίζουν τις εντολές αυτές. Αυτό δεν είναι πρόβλημα για τα προγράμματα 64-bit επειδή όλοι οι επεξεργαστές AMD64 έχουν SSE και SSE2, επομένως η χρήση εντολών SSE και SSE2 αντί των εντολών του x87 δεν επηρεάζει το σύνολο των υπολογιστών που μπορούν να εκτελέσουν τα προγράμματα x86-64. Οι SSE και SSE2 είναι γενικά γρηγορότερες και περιλαμβάνουν τα περισσότερα χαρακτηριστικά των κλασικών εντολών x87, MMX και 3DNow!.
  • No-Execute bit (bit απαγόρευσης εκτέλεσης): Το bit "NX" (bit 63 στον πίνακα σελίδων) επιτρέπει στο λειτουργικό σύστημα να ορίσει ποιες σελίδες εικονικής μνήμης μπορούν να επιτρέπουν εκτελέσιμο κώδικα και ποιες όχι. Η προσπάθεια εκτέλεσης κώδικα από μια σελίδα που έχει χαρακτηριστεί «no execute» θα προκαλέσει σφάλμα πρόσβασης μνήμης, σαν την απόπειρα εγγραφής σε μια σελίδα μόνο για ανάγνωση. Αυτό κάνει πιο δύσκολο τον έλεγχο του συστήματος από κακόβουλο λογισμικό μέσω επιθέσεων υποχείλισης («buffer overrun») ή μη ελεγχόμενης ενδιάμεσης μνήμης («unchecked buffer»). Οι επεξεργαστές x86 έχουν ένα παρόμοιο χαρακτηριστικό από τον 80286 σαν ιδιότητα των περιγραφέων τμήματος (segment descriptors) αλλά αυτό αφορά μόνο ολόκληρα τμήματα. Οι διευθύνσεις με βάση τμήματα (segmented addressing) είναι πια ξεπερασμένος τρόπος λειτουργίας και όλα τα λειτουργικά συστήματα για PC στην πράξη τον αγνοούν, θέτοντας όλα τα τμήματα να έχουν βασική διεύθυνση 0 και μέγεθος 4 GB (στην υλοποίηση 32 bit). Η AMD ήταν ο πρώτος κατασκευαστής της οικογένειας x86 που υλοποίησε το χαρακτηριστικό της απαγόρευσης εκτέλεσης στη χρήση γραμμικών διευθύνσεων. Το χαρακτηριστικό αυτό επίσης είναι διαθέσιμο στην κατάσταση συμβατότητας των επεξεργαστών AMD64 και στους σύγχρονους επεξεργαστές, όταν χρησιμοποιείται PAE.
  • Αφαίρεση παλαιότερων χαρακτηριστικών: Κάποια χαρακτηριστικά «προγραμματισμού συστημάτων» της αρχιτεκτονικής x86 δεν χρησιμοποιούνται στα σύγχρονα λειτουργικά συστήματα και δεν είναι διαθέσιμα στην AMD64 στις καταστάσεις long (64-bit και συμβατότητας). Αυτά τα χαρακτηριστικά περιλαμβάνουν τις διευθύνσεις με χρήση τμημάτων (αν και διατηρούνται τα τμήματα FS και GS για χρήση από το λειτουργικό σύστημα)[1](p70), ο μηχανισμός εναλλαγής κατάστασης εργασιών και η κατάσταση Virtual 8086. Αυτά τα χαρακτηριστικά εξακολουθούν να υλοποιούνται πλήρως στην κατάσταση συμβατότητας (legacy mode), επιτρέποντας σε αυτούς τους επεξεργαστές να εκτελούν λειτουργικά συστήματα 32-bit και 16-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.

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

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

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

Υλοποιήσεις της AMD64

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

Οι ακόλουθοι επεξεργαστές υλοποιούν την αρχιτεκτονική AMD64:

  • AMD Athlon 64
  • AMD Athlon 64 X2
  • AMD Athlon 64 FX
  • AMD Athlon II (τα 'X2', 'X3', ή 'X4' δείχνουν τον αριθμό των πυρήνων, και τα μοντέλα XLT)
  • AMD Opteron
  • AMD Turion 64
  • AMD Turion 64 X2
  • AMD Sempron («Palermo» E6 stepping και όλα τα μοντέλα «Manila»)
  • AMD Phenom (τα 'X3' ή 'X4' δείχνουν τον αριθμό των πυρήνων)
  • AMD Phenom II (τα 'X2', 'X3', 'X4' ή 'X6' δείχνουν τον αριθμό των πυρήνων)
  • AMD Bulldozer FX

Η 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

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

Ο πρώτος επεξεργαστής που υλοποίησε την 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:

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

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

Ο 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, ενώ διατηρεί τις επεκτάσεις κρυπτογραφίας.

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

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

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

Πρόσφατες υλοποιήσεις

[Επεξεργασία | επεξεργασία κώδικα]
  • Οι εντολές BSF και BSR της Intel 64 λειτουργούν διαφορετικά όταν η πηγή (source) είναι 0 και το μέγεθος κάθε τελεστή είναι 32 bit. Ο επεξεργαστής θέτει τη σημαία μηδέν και τα ανώτερα 32 bit του προορισμού (destination) θεωρούνται μη ορισμένα (undefined).
  • Η AMD64 απαιτεί διαφορετική μορφή για την ενημέρωση του μικροκώδικα και για τους εξειδικευμένους καταχωρητές κάθε μοντέλου (MSRs, model-specific registers) ενώ η Intel 64 υλοποιεί την ενημέρωση του μικροκώδικα όπως και τους επεξεργαστές 32-bit.
  • Η Intel 64 δεν έχει κάποιους MSRs που θεωρούνται μέρος της αρχιτεκτονικής στην AMD64. Τέτοιο καταχωρητές είναι ο SYSCFG, ο TOP_MEM και ο TOP_MEM2.
  • Η Intel 64 επιτρέπει τις SYSCALL και SYSRET μόνο σε κατάσταση 64-bit (όχι σε κατάσταση συμβατότητας). Επιτρέπει τις SYSENTER και SYSEXIT και στις δύο καταστάσεις.
  • Η AMD64 δεν έχει SYSENTER και SYSEXIT και στις δύο υποκαταστάσεις της long mode.
  • Τα κοντινά άλματα (near branches) με το πρόθεμα 66H (operand size override) συμπεριφέρονται διαφορετικά. Η Intel 64 καθαρίζει μόνο τα άνω 32 bit, ενώ η AMD64 καθαρίζει τα άνω 48 bit.
  • Οι επεξεργαστές της AMD προκαλούν μια εξαίρεση κινητής υποδιαστολής Invalid Exception όταν εκτελούν μια FLD ή FSTP σε μια ποσότητα 80-bit που είναι τιμή NaN (Not a Number, όχι αριθμός), ενώ οι επεξεργαστές της Intel δεν κάνουν κάτι τέτοιο.
  • Η Intel 64 δε μπορεί να σώζει και να επαναφέρει μια μερική έκδοση (και άρα γρηγορότερη) της κατάστασης κινητής υποδιαστολής (που περιλαμβάνει τις εντολές FXSAVE and FXRSTOR).
  • Οι πρόσφατοι επεξεργαστές AMD64 έχουν προσθέσει πάλι δυνατότητες τμημάτων μνήμης (segmentation) για ευκολότερη εκτέλεση κώδικα (virtualization) συστημάτων 64-bit.[26][27]

Παλιότερες υλοποιήσεις

[Επεξεργασία | επεξεργασία κώδικα]
  • Οι πρώτοι επεξεργαστές AMD64 δεν είχαν την εντολή CMPXCHG16B, η οποία είναι επέκταση της εντολής CMPXCHG8B που υπάρχει στους περισσότερους επεξεργαστές x86 μετά τον 80486. Όπως και η CMPXCHG8B, η CMPXCHG16B επιτρέπει ατομικές λειτουργίες (atomic operations) σε οκταδικές λέξεις. Αυτό χρησιμοποιείται στους παράλληλους αλγόριθμους που χρησιμοποιούν σύγκριση και αντιμετάθεση (compare and swap) σε δεδομένα μεγαλύτερα από το μέγεθος ενός δείκτη, κάτι που συνηθίζεται στους αλγόριθμους χωρίς κλείδωμα ή αναμονή (lock-free & wait-free). Αν δεν υπάρχει η CMPXCHG16B πρέπει να χρησιμοποιηθούν άλλοι, πλάγιοι τρόποι, όπως τα κρίσιμα τμήματα (critical sections) ή εναλλακτικές προσεγγίσεις χωρίς κλειδώματα.[1] Αυτό δεν επιτρέπει στα Windows 64-bit να έχουν χώρο διευθύνσεων στην κατάσταση χρήστη μεγαλύτερο από 8 TB.[28]
  • Οι πρώτοι επεξεργαστές AMD64 και Intel 64 δεν είχαν τις εντολές LAHF και SAHF. Η AMD εισήγαγε τις εντολές στους επεξεργαστές Athlon 64, Opteron και Turion 64 τον Μάρτιο του 2005[29][30][31] ενώ η Intel παρουσίασε τις εντολές στον Pentium 4 G1 τον Δεκέμβριο του 2005.
  • Οι πρώτοι επεξεργαστές της Intel 64 δεν είχαν επίσης το NX bit της αρχιτεκτονικής AMD64.
  • Οι πρώτες υλοποιήσεις της Intel 64 επέτρεπαν την πρόσβαση μόνο σε 64 GB φυσικής μνήμης ενώ οι αυθεντικές υλοποιήσεις της AMD64 επέτρεπαν την πρόσβαση σε 1 TB πραγματικής μνήμης. Οι πρόσφατες υλοποιήσεις της AMD64 και της Intel 64 παρέχουν πρόσβαση μέχρι και σε 256 TB φυσικού χώρου διευθύνσεων (και η AMD σχεδιάζει την επέκτασή του στα 4 PB.) Τέτοια μεγέθη μνήμης είναι κατάλληλα για εφαρμογές μεγάλης κλίμακας (όπως οι μεγάλες σε μέγεθος βάσεις δεδομένων), οι υπολογισμοί υψηλής ταχύτητας και οι επιστημονικοί υπολογισμοί.
  • Η AMD64 αρχικά δεν είχε τις εντολές MONITOR και MWAIT.
  1. 1,00 1,01 1,02 1,03 1,04 1,05 1,06 1,07 1,08 1,09 1,10 1,11 1,12 1,13 1,14 1,15 AMD Corporation (2011). «Volume 2: System Programming» (PDF). AMD64 Architecture Programmer's Manual. AMD Corporation. Ανακτήθηκε στις 29 Οκτωβρίου 2011. 
  2. IBM Corporation (6 Σεπτεμβρίου 2007). «IBM WebSphere Application Server 64-bit Performance Demystified» (PDF). σελ. 14. Αρχειοθετήθηκε από το πρωτότυπο (PDF) στις 25 Ιανουαρίου 2022. Ανακτήθηκε στις 9 Απριλίου 2010. 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. 
  3. Rust, Adamson (24 Απριλίου 2003). «AMD bans use of Hammer word, X86-64». The Inquirer. Αρχειοθετήθηκε από το πρωτότυπο στις 12 Οκτωβρίου 2009. Ανακτήθηκε στις 30 Οκτωβρίου 2010. 
  4. «Solaris 10 on AMD Opteron». Oracle. Ανακτήθηκε στις 9 Δεκεμβρίου 2010. 
  5. «Microsoft 64-Bit Computing». Microsoft. Ανακτήθηκε στις 9 Δεκεμβρίου 2010. 
  6. AMD (1999-10-05). AMD Discloses New Technologies At Microporcessor Forum. Δελτίο τύπου. Ανακτήθηκε στις 2010-11-09.
  7. AMD (2000-08-10). AMD Releases x86-64 Architectural Specification; Enables Market Driven Migration to 64-Bit Computing. Δελτίο τύπου. Ανακτήθηκε στις 2010-11-09.
  8. «Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3A: System Programming Guide, Part 1» (PDF). σελίδες 4–10. Ανακτήθηκε στις 29 Μαΐου 2010. 
  9. 9,0 9,1 «BIOS and Kernel Developer's Guide (BKDG) For AMD Family 10h Processors» (PDF). σελ. 24. Αρχειοθετήθηκε από το πρωτότυπο (PDF) στις 9 Ιουνίου 2011. Ανακτήθηκε στις 29 Μαΐου 2010. Physical address space increased to 48 bits. 
  10. «Myth and facts about 64-bit Linux» (PDF). 2 Μαρτίου 2008. σελ. 7. Αρχειοθετήθηκε από το πρωτότυπο (PDF) στις 5 Ιανουαρίου 2009. Ανακτήθηκε στις 30 Μαΐου 2010. Physical address space increased to 48 bits 
  11. Shanley, Tom (1998). Pentium Pro and Pentium II System Architecture. PC System Architecture Series (Second έκδοση). Addison-Wesley. σελ. 445. ISBN 0-201-30973-4. 
  12. Jeff Tyson (15 Ιανουαρίου 2004). «How Virtual Memory Works». howstuffworks. Ανακτήθηκε στις 7 Ιουνίου 2010. 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. 
  13. Jason Dunn (3 Σεπτεμβρίου 2003). «Computer RAM: A Crucial Component in Video Editing». Microsoft Corporation. Ανακτήθηκε στις 9 Ιουνίου 2010. There's a point of diminishing returns where adding more RAM won't give you better system performance. 
  14. «Understanding Memory Configurations and Exchange Performance». Microsoft Corporation. 3 Σεπτεμβρίου 2003. Ανακτήθηκε στις 27 Φεβρουαρίου 2019. There is, however, a point of diminishing returns at which adding memory to the server may not be justifiable based on price and performance. 
  15. «"Craig Barrett confirms 64 bit address extensions for Xeon. And Prescott", from The Inquirer». Αρχειοθετήθηκε από το πρωτότυπο στις 26 Σεπτεμβρίου 2006. Ανακτήθηκε στις 27 Απριλίου 2012. 
  16. «"A Roundup of 64-Bit Computing", from internetnews.com». Αρχειοθετήθηκε από το πρωτότυπο στις 25 Σεπτεμβρίου 2012. Ανακτήθηκε στις 27 Απριλίου 2012. 
  17. «Intel 64 Architecture». Intel. Ανακτήθηκε στις 29 Ιουνίου 2007. 
  18. «VIA to launch new processor architecture in 1Q08» (subscription required). DigiTimes. Ανακτήθηκε στις 25 Ιουλίου 2007. 
  19. Stokes, Jon (23 Ιανουαρίου 2008). «Isaiah revealed: VIA's new low-power architecture». Ars Technica. Ανακτήθηκε στις 24 Ιανουαρίου 2008. 
  20. Bennett, Kyle (24 Ιανουαρίου 2008). «VIA's New Centaur Designed Isaiah CPU Architecture». [H]ard|OCP. Αρχειοθετήθηκε από το πρωτότυπο στις 19 Ιουλίου 2011. Ανακτήθηκε στις 24 Ιανουαρίου 2008. 
  21. «Via launches 64-bit architecture». LinuxDevices.com. 23 Ιανουαρίου 2008. Αρχειοθετήθηκε από το πρωτότυπο στις 3 Ιανουαρίου 2013. Ανακτήθηκε στις 24 Ιανουαρίου 2008. 
  22. Wasson, Scott (24 Ιανουαρίου 2008). «A look at VIA's next-gen Isaiah x86 CPU architecture». The Tech Report. Ανακτήθηκε στις 24 Ιανουαρίου 2008. 
  23. VIA (2008-05-29). VIA Launches VIA Nano Processor Family. Δελτίο τύπου. Ανακτήθηκε στις 2008-05-29. Αρχειοθετήθηκε 2008-05-30 στο Wayback Machine. «Αρχειοθετημένο αντίγραφο». Αρχειοθετήθηκε από το πρωτότυπο στις 30 Μαΐου 2008. Ανακτήθηκε στις 23 Μαΐου 2012. 
  24. «VIA Isaiah Architecture Introduction» (PDF). VIA. 23 Ιανουαρίου 2008. Αρχειοθετήθηκε από το πρωτότυπο (PDF) στις 14 Ιουνίου 2011. Ανακτήθηκε στις 28 Μαΐου 2008. 
  25. Wasson, Scott. «64-bit computing in theory and practice». The Tech Report. The Tech Report. Ανακτήθηκε στις 22 Μαρτίου 2011. 
  26. «How retiring segmentation in AMD64 long mode broke VMware «». Pagetable.com. 9 Νοεμβρίου 2006. Ανακτήθηκε στις 2 Μαΐου 2010. 
  27. «VMware and CPU Virtualization Technology» (PDF). VMWare. Αρχειοθετήθηκε από το πρωτότυπο (PDF) στις 17 Ιουλίου 2011. Ανακτήθηκε στις 8 Σεπτεμβρίου 2010. 
  28. "http://blogs.msdn.com/b/oldnewthing/archive/2006/11/22/1122581.aspx" The Old New Thing, by Raymond Chen (see bottom paragraph of blog post)
  29. "Revision Guide for AMD Athlon 64 and AMD Opteron Processors", from AMD
  30. «"AMD Turion 64 pictured up and running", from The Inquirer». Αρχειοθετήθηκε από το πρωτότυπο στις 22 Φεβρουαρίου 2013. Ανακτήθηκε στις 23 Μαΐου 2012. 
  31. «"Athlon 64 revision E won't work on ome Nforce 3/4 boards", from The Inquirer». Αρχειοθετήθηκε από το πρωτότυπο στις 14 Σεπτεμβρίου 2012. Ανακτήθηκε στις 23 Μαΐου 2012. 

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

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