ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΜΑΤΙΚΗΣ Σύγχρονες Αρχιτεκτονικές Υπολογιστών ΑΚΑ ΗΜΑΪΚΟ ΕΤΟΣ 2014-2015 Αρχιτεκτονική Συνόλου Εντολών (Instruction Set Architecture-ISA) 1
Ένας υπολογιστής εκτελεί προγράµµατα: Προσκοµίζει την επόµενη εντολή από τη µνήµη Την αποκωδικοποιεί γα να δει τη λειτουργία της Προσκοµίζει τα δεδοµένα-τελεστές Εκτελεί την απαιτούµενη πράξη (πρόσθεση, πολλαπλασιασµό κλπ) Αποθηκεύει τα αποτελέσµατα (εάν απαιτείται) Καθορίζει την επόµενη εντολή (µέσω του απαριθµητή προγράµµατος) 2
Αρχιτεκτονική συνόλου εντολών (Instruction Set Architecture ISA) Η διασύνδεση µεταξύ λογισµικού και υλικού Ένα σύνολο εντολών που εκτελούνται απευθείας στο υλικό Ένα σύνολο εντολών που µπορεί να εκτελέσει ένας υπολογιστής Όλα τα προγράµµατα είναι συνδυασµοί αυτών των εντολών ιαφορετικοί υπολογιστές έχουν διαφορετικά ISA Η εικόνα µε την οποία εµφανίζεται ένα υπολογιστικό σύστηµα στον προγραµµατιστή/µεταγλωττιστή. Η εικόνα αυτή περιλαµβάνει: Το µοντέλο µνήµης Τους καταχωρητές Τις εντολές Τους τύπους δεδοµένων 3
Κατηγορίες Αρχιτεκτονικών Συνόλου Εντολών (1) Απλοποιηµένες Αρχιτεκτονικές Συνόλου Εντολών (RISC (Reduced Instruction Set Computer) ISAs ) π.χ. MIPS, ARM, DEC Alpha, SUN Sparc, IBM 801 Απλές και σταθερού µήκους εντολές Λίγοι κύκλοι ρολογιού ανά εντολή Αρκετές εντολές ανά µεταφρασµένο πρόγραµµα Μπορεί να αντιµετωπιστεί από τις βελτιστοποιηµένες εκδόσεις των µεταγλωττιστών Μεγάλη απόδοση ταχύτερη εκτέλεση εντολών 4
Κατηγορίες Αρχιτεκτονικών Συνόλου Εντολών (2) Πολύπλοκες Αρχιτεκτονικές Συνόλου Εντολών (CISC (Complex Instruction Set Computer) ISAs) π.χ. Intel x86, VAX, IBM 360/370 Πολύπλοκες και µεταβλητού µήκους εντολές Λίγες εντολές ανά µεταφρασµένο πρόγραµµα Πολλοί κύκλοι ρολογιού ανά εντολή Μπορεί να αντιµετωπιστεί µε την εξέλιξη της τεχνολογίας Πλέον το υλικό µεταφράζει τις CISC εντολές σε απλούστερες τύπου RISC µικρολειτουργίες 5
Χαρακτηριστικά Αρχιτεκτονικής Συνόλου Εντολών Εντολές Τύποι εδοµένων Μοντέλα Μνήµης Καταχωρητές ιευθυνσιοδότηση Λειτουργίες 6
Εντολές: Μορφή Εντολών Οι εντολές αποτελούν µέρος της συµβολικής (assembly) γλώσσας και της γλώσσας µηχανής Κώδικας λειτουργίας (Opcode) Τελεστέος 1 (Operand 1) Τελεστέος 2 (Operand 2) Μια εντολή αποτελείται από: Τελεστέος 3 (Operand 3) το πεδίο του κώδικα λειτουργίας (opcode) καθορίζει την πράξη που θα εκτελεστεί (π.χ. πρόσθεση) ένα ή περισσότερα πεδία τελεστέων (operands) η εντολή ενεργεί στους τελεστέους. Τελεστέος Ν (Operand N) 7
Εντολές: Μήκος Εντολών Σταθερό (π.χ. Alpha, ARM, MIPS, Power PC, SPARC) Συνήθως είναι 32 bits ιευκολύνει τη διοχέτευση(pipelining) superscalar Σπατάλη χώρου µνήµης (π.χ. 4 bytes για µια NOP εντολή) Μεγαλύτερα προγράµµατα Μεταβλητό (π.χ. Intel x86, VAX) Πιο συµπαγή προγράµµατα Πολύπλοκη ανάκτηση εντολής Από πού αρχίζει η επόµενη εντολή; ύσκολο (αλλά γίνεται) σε superscalarize/pipeline Υβριδικό: Συµβιβασµός σταθερού-µεταβλητού(32 bit+?) (π.χ. ARM Thumb) 8
Εντολές: Κωδικοποίηση (Encoding) Εντολών(1) Οι εντολές κωδικοποιούνται στο δυαδικό σύστηµα Κωδικοποίηση κώδικα λειτουργίας (opcode) 2 n λειτουργίες απαιτούν τουλάχιστον n bits Κωδικοποίηση τελεστέων Εξαρτάται από τους τρόπους διευθυνσιοδότησης που χρησιµοποιεί η συγκεκριµένη ISA Σε εντολές µε σταθερό µήκος, περισσότερη κωδικοποίηση σε κώδικες λειτουργίας περιορίζει την κωδικοποίηση των τελεστέων 9
Εντολές: Κωδικοποίηση (Encoding) Εντολών(2) Παράδειγµα: MIPS: Σταθερό µήκος: 32 bits, 3 µορφές, απλή κωδικοποίηση Μορφή-R: Μορφή -Ι: Μορφή -J: 10
Εντολές: Κωδικοποίηση (Encoding) Εντολών(3) Παράδειγµα: Intel x86: µεταβλητό µήκος κωδικοποίησης (1 µέχρι 17 bytes) 11
Τύποι εδοµένων Ορισµός: Αναπαράσταση των πληροφοριών σε συγκεκριµένες µορφές, τις οποίες χρησιµοποιούν οι εντολές Αριθµητικοί τύποι: Ακέραιοι (8, 16, 32, 64 bits), προσηµασµένοι ή απρόσηµοι Κινητής υποδιαστολής (32 ή 64 bits) απλής ή διπλής ακρίβειας BCD (Binary Coded Decimal) Μη αριθµητικοί τύποι: Χαρακτήρες (ascii, Unicode) Λογικές τιµές (Boolean) είκτες (διευθύνσεις µνήµης) ιαφορετικοί υπολογιστές υποστηρίζουν διαφορετικούς τύπους δεδοµένων στο επίπεδο του υλικού 12
Μοντέλο Μνήµης Το µοντέλο µνήµης σχετίζεται µε τον τρόπο που χρησιµοποιείται η µνήµη για να αποθηκεύσει δεδοµένα Συνηθισµένο µέγεθος µιας θέσης µνήµης: 1 byte Κάθε byte είναι µια ξεχωριστή διεύθυνση Τα bytes συνήθως οµαδοποιούνται σε λέξεις των 4 ή των 8 bytes Ευθυγράµµιση (alignment): Λέξεις των 4 bytes ξεκινάνε πάντα σε διεύθυνση πολλαπλάσια του 4 Λέξεις των 8 bytes ξεκινάνε πάντα σε διεύθυνση πολλαπλάσια του 8 Προσπέλαση σε µη ευθυγραµµισµένα δεδοµένα σηµαίνει διπλή προσπέλαση µνήµης (λέξεις των 4 byte): 0 1 2 3 4 5 6 7 8 9 10 11 13
Big Endian Little Endian Big Endian: Το περισσότερο σηµαντικό byte της λέξης αποθηκεύεται στη µικρότερη διεύθυνση (π.χ. MIPS) Little Endian: Το λιγότερο σηµαντικό byte της λέξης αποθηκεύεται στη µικρότερη διεύθυνση (π.χ. Intel x86, MIPS) Π.χ..word 0x12345678, 0x9abcdef2 Little-Endian ιευθύνσεις byte. Μνήµη.. Big-Endian ιευθύνσει ς byte. 1000 0x78 1000 1001 0x56 1001 1002 0x34 1002 1003 0x12 1003 1004 0xf2 1004 1005 0xde 1005 1006 0xbc 1006 1007 0x9a 1007. Μνήµη.... 0x12 0x34 0x56 0x78 0x9a 0xbc 0xde 0xf2 14
Καταχωρητές εν είναι όλοι οι καταχωρητές του επιπέδου της µικροαρχιτεκτονικής ορατοί στο επίπεδο ISA Καταχωρητές ειδικής χρήσης Απαριθµητής Προγράµµατος (Program Counter) Καταχωρητής Κατάστασης (Status Register) είκτης Στοίβας (Stack Pointer) Καταχωρητές Εισόδου/Εξόδου Καταχωρητές γενικής χρήσης Οι καταχωρητές αυτοί διαρθρώνονται (σε πλήθος και σε µέγεθος) ανάλογα µε τον επεξεργαστή που τους χρησιµοποιεί 15
Τρόποι ιευθυνσιοδότησης (Addressing Modes) Είναι οι τρόποι προσδιορισµού των διευθύνσεων των τελεστέων µιας εντολής. Οι τελεστέοι µπορεί να είναι σταθερές, καταχωρητές ή θέσεις µνήµης. π.χ.: Απ ευθείας διευθυνσιοδότηση (immediate addressing) Τα δεδοµένα αποτελούν µέρος της ίδιας της εντολής. Π.χ. opcode Καταχωρητής σταθερά Load R1 17 Φόρτωσε στον R1 τη σταθερά 17 16
ιευθυνσιοδότηση µέσω καταχωρητή (Register addressing) Τα δεδοµένα βρίσκονται σε κάποιον καταχωρητή Το όνοµα του καταχωρητή αποτελεί µέρος της ίδιας της εντολής. Π.χ.: opcode Καταχωρητής_3 Καταχωρητής_2 Καταχωρητής_1 Add R3 R2 R1 Πρόσθεσε τα περιεχόµενα των R2 και R1 και το αποτέλεσµα αποθήκευσέ το στον R3 17
ιευθυνσιοδότηση µνήµης (Memory addressing)(1) Τα δεδοµένα βρίσκονται στη µνήµη Η διεύθυνση της µνήµης αποτελεί µέρος της ίδιας της εντολής (άµεση διευθυνσιοδότηση µνήµης direct memory addressing). Π.χ. opcode Καταχωρητής Διεύθυνση μνήμης Load R1 4502 Φόρτωσε στον καταχωρητή R1 το δεδοµένο που βρίσκεται στη διεύθυνση µνήµης 4502 18
ιευθυνσιοδότηση µνήµης (Memory addressing)(2) Τα δεδοµένα βρίσκονται στη µνήµη Η διεύθυνση της µνήµης περιέχεται σε έναν καταχωρητή (έµµεση διευθυνσιοδότησης µνήµης µε χρήση καταχωρητή register indirect memory addressing) Το όνοµα του καταχωρητή αποτελεί µέρος της ίδιας της εντολής. Π.χ. opcode Καταχωρητής_3 Καταχωρητής_2 Καταχωρητής_1 Add R3 R2 (R1) Πρόσθεσε τα περιεχόµενα του καταχωρητή R2 µε το δεδοµένο της µνήµης η διεύθυνση του οποίου προσδιορίζεται από το περιεχόµενο του καταχωρητή R1. Το αποτέλεσµα αποθήκευσέ το στον R3 19
ιευθυνσιοδότηση µνήµης (Memory addressing)(3) Τα δεδοµένα βρίσκονται στη µνήµη Η διεύθυνση της µνήµης προκύπτει από το περιεχόµενο κάποιου καταχωρητή µε την προσθήκη µιας µετατόπισης (offset) Το όνοµα του καταχωρητή αποτελεί µέρος της ίδιας της εντολής Η µετατόπιση βρίσκεται στην εντολή (ή σε έναν καταχωρητή). Π.χ. opcode Καταχωρητής_3 Καταχωρητής_2 Καταχωρητής_1 Add R3 R2 (R1+14) Πρόσθεσε τα περιεχόµενα του καταχωρητή R2 µε το δεδοµένο της µνήµης η διεύθυνση του οποίου προσδιορίζεται από το περιεχόµενο του καταχωρητή R1 σύν 14. Το αποτέλεσµα αποθήκευσέ το στον R3 20
Λειτουργίες στην Αρχιτεκτονική Συνόλου Εντολών Αριθµητικές και Λογικές πράξεις ADD, SUB, DIV, SHIFT, AND, OR, XOR, NOR, κλπ Μεταφορά δεδοµένων Από-προς καταχωρητές και µνήµη (Load, Store.) Έλεγχος ροής προγράµµατος ιακλάδωση µε ή χωρίς συνθήκη (branch, jump). Κλήση ρουτινών (call) -Επιστροφή (return) Λειτουργίες συστήµατος Κλήση συστήµατος. ιαχείριση µνήµης (memory management) Άλλες λειτουργίες Γραφικά, Strings, Εισόδου/Εξόδου 21
Παράδειγµα χρήσης εντολών: Intelx86 Load : 22% Conditional branch : 20% Compare : 16% Store : 12% Add : 8% And : 6% Sub : 5% Move register-register : 4% Call : 1% Σύνολο = 96% των εντολών που εκτελούνται Συµπεράσµατα: Οι εντολές που εκτελούνται πιο συχνά είναι οι πλέον απλές λειτουργίες ενός ISA. Τις λειτουργίες αυτές ας τις κάνουµε γρήγορες, καθώς αποτελούν τη συνήθη περίπτωση Πηγή: D. Patterson & J. Hennessy: Computer Architecture, 5 th Edition 22
Αρχιτεκτονική Συνόλου Εντολών: MIPS Ανακοινώθηκε το 1985: MIPS I,II,III,IV,V, MIPS32, MIPS64 (στη συνέχεια όπου MIPS θα αναφερόµαστε στον MIPS32) Παρέχει αποτελεσµατική διοχέτευση µε σταθερό µήκος κωδικοποιηµένης εντολής Στους compilers παρέχει τη δυνατότητα παραγωγής γρήγορου κώδικα Αρχιτεκτονική που γίνεται εύκολα κατανοητή Μεγάλο µερίδιο της αγοράς των πυρήνων ενσωµατωµένων επεξεργαστών Εφαρµογές σε ηλεκτρονικά ευρείας κατανάλωσης, εξοπλισµό δικτύων και αποθήκευσης, φωτογραφικές µηχανές, εκτυπωτές, σε κονσόλες παιχνιδιών, σε συστήµατα ελέγχου αυτοκινήτων 23
MIPS: Καταχωρητές Όνομα Αρίθμηση Χρήση $0 0 Ως η σταθερά τιμή 0 $at 1 Από τον assembler $v0-$v1 2-3 Για επιστρεφόμενες τιμές από διαδικασίες $a0-$a3 4-7 Ορίσματα διαδικασιών $t0-$t7 8-15 Για προσωρινές τιμές $s0-$s7 16-23 Για αποθηκευμένες μεταβλητές $t8-$t9 24-25 Για προσωρινές τιμές $k0-$k1 26-27 Για προσωρινές τιμές από το λειτουργικό σύστημα $gp 28 Καθολικός δείκτης $sp 29 Δείκτης στοίβας $fp 30 Δείκτης πλαισίου $ra 31 Για τη διεύθυνση επιστροφής 24
MIPS: Τύποι δεδοµένων 32- bit ακέραιοι (απρόσηµοι ή συµπληρώµατος ως προς 2) 32- bit πραγµατικοί αριθµοί (κινητής υποδιαστολής απλής ακρίβειας) 32- bit λέξεις, bytes και µισές λέξεις µπορούν να φορτωθούν στους καταχωρητές Μετά τη φόρτωση byte και µισών λέξεων, τα υπόλοιπα bit στον καταχωρητή παίρνουν ή την τιµή µηδέν ή το πρόσηµο της ποσότητας που αποθηκεύτηκε 25
MIPS: Οργάνωση µνήµης Η µνήµη διευθυνσιοδοτείται ανά byte Οι λέξεις είναι ευθυγραµµισµένες στη µνήµη (1 λέξη=32-bit): Λέξεις των 32-bit πρέπει να αρχίζουν από διεύθυνση που είναι πολλαπλάσιο του 4 Μισές λέξεις των 16-bit πρέπει να αρχίζουν από διεύθυνση που είναι πολλαπλάσιο του 2 26
MIPS: Εντολές Μορφής - Ι (1) 6 bit 5 bit 5 bit 16 bit opcode rs rt immediate Κωδικοποιεί: Εντολές φόρτωσης (Load) και αποθήκευσης (Store) λέξεων, µισών λέξεων και bytes Άµεσες αριθµητικές εντολές ιακλαδώσεις υπό συνθήκη opcode: κωδικός λειτουργίας rt: αριθµός καταχωρητή προορισµού ή προέλευσης rs: αριθµός καταχωρητή που περιέχει τη διεύθυνση βάσης immediate: (α) offset που προστίθεται στη διεύθυνση βάσης (για εντολές Load/Store), (β) µια σταθερά, (γ) offset, το οποίο αφού πολλαπλασιαστεί µε το 4, προστίθεται στον PC (για εντολές διακλάδωσης υπό συνθήκη) 27
MIPS: Εντολές Μορφής - Ι (2) Παράδειγµα εντολής διακλάδωσης υπό συνθήκη bne $t0, $s5, Exit Λειτουργία: Σύγκρινε τα περιεχόµενα των $t0 και $s5 και εάν δεν είναι ίσα διακλάδωσε στο Exit, διαφορετικά συνέχισε µε την επόµενη εντολή 6 5 5 16 opcode rs rt Immediate 5 8 21 100 Γλώσσα μηχανής bne $t0, $s5, Exit: PC = PC+(4*100) Exit Συμβολική γλώσσα ιευθυνσιοδότηση: Σχετική ως προς PC 28
MIPS: Εντολές Μορφής - Ι (3) Παράδειγµα άµεσης αριθµητικής εντολής addi $s1, $s2, 2 Λειτουργία: Πρόσθεσε τα περιεχόµενα του $s2 µε το 2 και το αποτέλεσµα αποθήκευσέ το στον $s1 6 5 5 16 opcode rs rt Immediate 8 18 17 2 Γλώσσα μηχανής addi $s1, $s2, 2 Συμβολική γλώσσα ιευθυνσιοδότηση: Άµεση 29
MIPS: Εντολές Μορφής - Ι (4) Παράδειγµα εντολής φόρτωσης lw $t0, 24($t1) Λειτουργία: Φόρτωσε στον $t0 το περιεχόµενο της θέσης µνήµης µε διεύθυνση το περιεχόµενο του $t1 συν το 24 6 5 5 16 opcode rs rt Immediate 35 9 8 24 Γλώσσα μηχανής lw $t0, 24($t1) Συμβολική γλώσσα ιευθυνσιοδότηση: Βάσης 30
MIPS: Εντολές Μορφής - Ι (5) Παράδειγµα εντολής αποθήκευσης sw $t0, 1200($t1) Λειτουργία: Αποθήκευσε τον $t0 στη θέση µνήµης µε διεύθυνση το περιεχόµενο του $t1 συν το 1200 6 5 5 16 opcode rs rt Immediate 43 9 8 1200 Γλώσσα μηχανής sw $t0, 1200($t1) Συμβολική γλώσσα ιευθυνσιοδότηση: Βάσης 31
MIPS: Εντολές Μορφής - R (1) 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit opcode rs rt rd shamt funct Κωδικοποιεί: Πράξεις της αριθµητικής και λογικής µονάδας µεταξύ καταχωρητών opcode: κωδικός λειτουργίας rs: αριθµός πρώτου καταχωρητή προέλευσης rt: αριθµός δεύτερου καταχωρητή προέλευσης rd: αριθµός καταχωρητή προορισµού shamt: ποσότητα ολίσθησης funct: κωδικός συνάρτησης (επεκτείνει τον κωδικό λειτουργίας) 32
MIPS: Εντολές Μορφής - R (2) Παράδειγµα εντολής πρόσθεσης add $s1, $s2, $s3 Λειτουργία: πρόσθεσε τους $s2 και $s3 και το αποτέλεσµα αποθήκευσέ το στον $s1 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit opcode rs rt rd shamt Funct 0 18 19 17 0 32 Γλώσσα μηχανής add $s1, $s2, $s3 Συμβολική γλώσσα ιευθυνσιοδότηση: µέσω καταχωρητή 33
MIPS: Εντολές Μορφής - R (3) Παράδειγµα εντολής AND and $s1, $s2, $s3 Λειτουργία: Κάνε τη λογική πράξη AND, bit προς bit, µεταξύ των καταχωρητών $s2 και $s3 και το αποτέλεσµα αποθήκευσέ το στον $s1 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit opcode rs rt rd shamt Funct 0 18 19 17 0 36 Γλώσσα μηχανής and $s1, $s2, $s3 Συμβολική γλώσσα ιευθυνσιοδότηση: µέσω καταχωρητή 34
MIPS: Εντολές Μορφής - R (4) Παράδειγµα εντολής ολίσθησης (Shift) sll $t2, $s0, 4 Λειτουργία: Ολίσθησε αριστερά τα περιεχόµενα του $s0 κατά 4 δυαδικές θέσεις και το αποτέλεσµα αποθήκευσέ το στον $t2. Στις θέσεις που ολισθαίνουν εισάγονται µηδενικά. 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit opcode rs rt rd shamt Funct 0 0 16 10 4 0 Γλώσσα μηχανής sll $t2, $s0, 4 0: γιατί δε χρησιμοποιείται Συμβολική γλώσσα ιευθυνσιοδότηση: µέσω καταχωρητή 35
MIPS: Εντολές Μορφής - J(1) 6 bit 26 bit opcode Διεύθυνση Κωδικοποιεί: Εντολές διακλάδωσης χωρίς συνθήκη εντολές διακλάδωσης σε διαδικασίες εντολές επιστροφής από διαδικασίες opcode: κωδικός λειτουργίας ιεύθυνση διακλάδωσης (προορισµού) = PC 31.28 : ( ιεύθυνση x 4) 36
MIPS: Εντολές Μορφής - J(2) Παράδειγµα εντολής διακλάδωσης χωρίς συνθήκη J Label 6 bit 26 bit opcode Διεύθυνση 2 4000 Γλώσσα μηχανής J Label Συμβολική γλώσσα Label = 4000 x 4 = 16000 37