Πύλη αποκλειστικής διάζευξης (XOR)
A * B = Y
- - -
0 0 0
0 1 1
1 0 1
1 1 0
Αθροιστές
Αριθμητική και λογική μονάδα
Η αριθμητική και λογική μονάδα (arithmetic and logical unit (ALU))
εκτελεί αριθμητικές και λογικές πράξεις ανάμεσα σε δύο τελεστέους.
- Τελεστές
- Πράξη π.χ. 74ALS381:
- A - B
- B - A
- A + B
- A ^ B
- A | B
- A & B
Πράξεις που εκτελεί η ALU 74AS181
Υλοποίηση της ALU 74AS181
Δισταθή κυκλώματα
Τεχνολογία ημιαγωγών
- Το πυρίτιο (silicon) (Si)
- Si n (περίσσεια e) με προσθήκη P, As, Sb
- Si p (έλλειμμα e) με προσθήκη B, Al, Ga
- SiO2 (κακός αγωγός)
- Τεχνολογία N-MOS
- Βασικά στοιχεία κατασκευής ολoκληρωμένων κυκλωμάτων
- Ανάπτυξη κρυστάλων Si με τη μέθοδο Czochralski
- Κοπή δίσκων
- Κατασκευή με φωτολιθογραφία
- Διάχυση p
- Οξείδωση SiO2
- Επίστρωση πολυπυριτίου
- Φωτολιθογραφία και απόξεση για εμφάνιση του Si p
- Διάχυση n
- Απόθεση SiO2 για μόνωση
- Φωτολιθογραφία και απόξεση
- Απόθεση Al για δημιουργία συνδέσεων
- Φωτολιθογραφία και απόξεση Al
- Κοπή και συσκευασία
Τεχνολογία CMOS 7S και έξι επιστρώματα χαλκού
Ο επεξεργαστής 750 της αρχιτεκτονικής IBM Power PC
υλοποιημένος με την τεχνολογία χαλκού CMOS 7S
Πυρίτιο σε γερμάνιο (τομή)
Κύκλωμα κατασκευασμένο με την τεχνολογία
πυριτίου σε μονωτικό υλικό (silicon on insulator (SOI))
σε ηλεκτρονικό μικροσκόπιο
Οι εικόνες προέρχονται από τον τόπο
IBM Microelectronics Gallery (http://www.chips.ibm.com/gallery/index.html).
Τεχνολογία μνημών
- RAM (Random Access Memory)
- Στατική (βασισμένη σε δισταθή κυκλώματα)
- Γρήγορη (π.χ. 10ns)
- Υψηλή κατανάλωση
- Χαμηλή πυκνότητα (π.χ. 512 Κbit)
- Δυναμική (βασισμένη σε πυκνωτές (capacitors))
- Πολλαπλών θυρών
- ROM (Read Only Memory)
- PROM (Programmable Read Only Memory)
- EPROM (Erasable Programmable Read Only Memory)
- EEPROM (Electrically Erasable Programmable Read Only Memory)
Ακροδέκτες δυναμικής μνήμης 64M bit (16 M word * 4 bit)
Εσωτερική διάταξη της μνήμης
Κύκλος ανάγνωσης
Σύνδεση λογικών πυλών
Διαφορετικοί τρόποι σύνδεσης ανάλογα με την έξοδο του λογικού κυκλώματος:
- Κανονικοί λογικοί έξοδοι τύπου totem pole (π.χ. 7400)
Παρέχουν λογική τιμή 0 ή 1, δε μπορούν να ενωθούν μεταξύ τους.
Χρησιμοποιούνται ως βάση για τη δημιουργία σύνθετων λογικών κυκλωμάτων.
Πύλη NAND από το ολοκληρωμένο κύκλωμα 7400.
- Ανοικτού συλλέκτη (Open collector) (π.χ. 7401)
Επιτρέπουν την άμεση σύνδεση εξόδων σε λογική διάζευξη αρνητικής λογικής με
τη χρήση αντίστασης στην τροφοδοσία.
Χρησιμοποιούνται για σύνδεση πολλαπλών εξόδων στο δίαυλο (π.χ. διακοπών)
όταν η μεταξύ τους διάζευξη δεν δημιουργεί πρόβλημα.
Πύλη NAND με έξοδο ανοικτού συλλέκτη από το ολοκληρωμένο κύκλωμα 7401.
- Τρισταθής έξοδης (tri-state output) (π.χ. 74LS244)
Μπορεί να έχει λογική τιμή 0, 1, ή
υψηλής αντίστασης (high impedance (Z)).
Η τιμή υψηλής αντίστασης της εξόδου εξαρτάται από την κατάσταση λειτουργίας
του κυκλώματος (π.χ. ανάγνωση ή εγγραφή στις μνήμες) και μια ξεχωριστή είσοδο
που έχει τυπικά το όνομα EN (enable).
Μπορούν να ενωθούν μεταξύ τους, αλλά μόνο μια έξοδος μπορεί να έχει λογική τιμή
κάθε φορά.
Χρησιμοποιούνται για τη σύνδεση πολλαπλών εξαρτημάτων μεταξύ τους
(π.χ. στο δίαυλο ή παράλληλη σύνδεση μνημών).
Σχήμα και λογική δομή από το ολοκληρωμένο κύκλωμα 74LS244.
Η είσοδος 1G μπορεί να θέσει τις εξόδους σε κατάσταση υψηλής αντίστασης.
Ο δίαυλος PCI
Ο δίαυλος PCI
Required Pins Optional Pins
------------- -------------
----------------
| |
<===AD[31:0]=====>| |<===AD[63:32]====>
<===C/BE[3:0]#===>| PCI |<===C/BE[7:4]#===>
<---PAR---------->| Compliant |<---PAR64-------->
| Device |<---REQ64#------->
<---FRAME#------->| |<---ACK64#------->
<---TRDY#-------->| |
<---IRDY#-------->| |<---LOCK#-------->
<---STOP#-------->| |
<---DEVSEL#------>| |----INTA#-------->
----IDSEL-------->| |----INTB#-------->
| |----INTC#-------->
<---PERR#-------->| |----INTD#-------->
<---SERR#-------->| |
| |<---SBO#--------->
<---REQ#----------| |<---SDONE-------->
----GNT#--------->| |
| |<---TDI-----------
----CLK---------->| |----TDO---------->
----RST#--------->| |<---TCK-----------
| |<---TMS-----------
| |<---TRST#---------
----------------
Ακροδέκτες του διαύλου PCI
Μικροεπεξεργαστές
Διάγραμμα εσωτερικής δομής και εξωτερικής επικοινωνίας του επεξεργαστή
16 bit (υψηλής ολοκλήρωσης για ενσωματωμένες εφαρμογές) 80186.
Προδιαγραφές και πηγές στο Internet
Βιβλιογραφία
- Andrew S. Tanenbaum
Η αρχιτεκτονική των υπολογιστών: μια δομημένη προσέγγιση.
Τρίτη αμερικάνικη έκδοση. σ. 103-191. Κλειδάριθμος 1995.
- Peter Rechenberg.
Εισαγωγή στην Πληροφορική. σ. 55-79
Κλειδάριθμος, 1992.
- Doug Burger.
Memory systems.
ACM Computing Surveys, 28(1):63–65, March 1996.
- Toshiba Corporation.
CMOS Integrated Circuits Technical Data.
1978.
- Daniel
Dobberpuhl and Kevin Fielding.
Design of EV-4.
Communications of the ACM, 36(2):82, February 1993.
- Richard Hollingsworth.
Advanced semiconductor technology.
Communications of the ACM, 36(2):83, February 1993.
- Texas Instruments.
The TTL Data Book.
1984.
- Gene McWhorter.
Understanding Digital Electronics.
Texas Instruments, 1978.
Ασκήσεις
Θέματα για σκέψη
- Σχεδιάστε με τη χρήση πυλών NAND τις παρακάτω πύλες:
- Σχεδιάστε έναν αθροιστή 2 bit.
- Σχεδιάστε με τη βοήθεια δισταθών κυκλωμάτων έναν μετρητή 3 bit.
- Ο επεξεργαστής Alpha DECchip 21064 περιέχει 1.680.000 τρανζίστορ
σε chip διαστάσεων 1.4 x 1.7 cm.
Υπολογίστε κατά προσέγγιση τις διαστάσεις ενός τρανζίστορ.
Υποχρεωτική άσκηση
-
Πόσα και ποιά εξαρτήματα απλής λογικής (πχ 74LS00) χρειάζονται για
να φτιαχτεί η ALU που παρουσιάσαμε;
Πόσα mA θα μπορεί να στείλει στο δίαυλο;
Με ποιό τρόπο μπορεί να ενισχυθεί η έξοδος της ALU στα 14mA;
-
Διαβάστε (από τις πηγές στο Internet) και εξηγήστε με δικά σας λόγια
τον τρόπο πρόσβασης στη μνήμη RAM EDO.
Να υπολογίσετε πόσο χρόνο θα χρειαστεί η ανάγνωση 1ΜΒ με και χωρίς υποστήριξη
EDO για τη δυναμική μνήμη της Hitachi HM5164405FJ;
Επίπεδο μικροπρογραμματισμού
Στοιχεία στο ψηφιακό επίπεδο
Εσωτερική δομή επεξεργαστή
Δομικά στοιχεία της μικροαρχιτεκτονικής ενός επεξεργαστή της Intel P6
Λειτουργικό διάγραμμα της μικροαρχιτεκτονικής ενός επεξεργαστή της Intel P6
Προγραμματισμός με μικροεντολές
Πιθανά πεδία για μια μικροεντολή (microcode):
- Πηγή 1
- Πηγή 2
- Προορισμός
- Σταθερή ποσότητα
- Λειτουργία ALU
- Συνθήκη
- Επόμενη εντολή
Η αντιστοίχιση μεταξύ εντολών μηχανής και μικροεντολών μπορεί να γίνει
με τη χρήση πίνακα που που περιέχει τη διεύθυνση της μικροεντολής για κάθε
ομάδα εντολών μηχανής.
Σχεδίαση μικροπρογραμματισμού
- Ορίζοντιος μικροπρογραμματισμός:
τα (πολλα) πεδία κάθε εντολής αντιστοιχούν στα αντίστοιχα σήματα ελέγχου.
- Κατακόρυφος μικροπρογραμματισμός:
τα (λίγα) πεδία κάθε εντολής αντιστοιχούν σε κωδικοποιημένα σήματα ελέγχου.
- Νανοπρογραμματισμός (nanoprogramming):
Οι (λίγες σχετικά) μικροεντολές που χρησιμοποιούνται αποθηκεύονται κωδικοποιημένες.
Βελτίωση απόδοσης
- Διοχέτευση (pipelining) με παράλληλη επεξεργασία
σταδίων των εντολών.
- Χρήση πολλαπλών λειτουργικών μονάδων
- Χρήση κρυφής μνήμης
Κρυφή μνήμη
Διάκριση ανάλογα με την οργάνωση αποθήκευσης των δεδομένων:
Πολιτικές αντικατάστασης στοιχείων από την κρυφή μνήμη:
Χειρισμός εγγραφών:
Διάγραμμα ολοκληρωμένου κυκλώματος κρυφής μνήμης δευτέρου επιπέδου για επεξεργαστές
PowerPC (MPC2605).
Προβλήματα διοχέτευσης
Η υλοποίηση επεξεργαστών με τη χρήση διοχέτεσης πρέπει να αντιμετωπίσει
μια σειρά από πιθανούς κινδύνους (hazards).
Προδιαγραφές στο Internet
Βιβλιογραφία
- Andrew S. Tanenbaum
Η αρχιτεκτονική των υπολογιστών: μια δομημένη προσέγγιση.
Τρίτη αμερικάνικη έκδοση. σ. 197-272. Κλειδάριθμος 1995.
- Doug Burger.
Memory systems.
ACM Computing Surveys, 28(1):63–65, March 1996.
- Carole Dulong.
The IA-64 architecture at work.
IEEE Computer, 31(7):24–32, July 1998.
- John L. Hennessy
and David A. Patterson.
Computer Architecture: A Quantitative Approach, pages 199–214, 251–255,
408–425.
Morgan Kaufmann Publishers, 1990.
- Bruce Shriver and
Bennett Smith.
The
Anatomy of a High-Performance Microprocessor.
IEEE Computer Society Press, 1998.
- Richard L. Sites.
Alpha AXP architecture.
Communications of the ACM, 36(2):33–44, February 1993.
Ασκήσεις
Θέματα για σκέψη
-
Μεταγλωττίστε μια συνάρτηση της C που να εκτελεί κάποιους υπολογισμούς
(χωρίς πολλές κλήσεις σε άλλες συναρτήσεις) σε συμβολική γλώσσα
(διακόπτης /Fa σε μεταγλωττιστές της Microsoft, -S σε μεταγλωττιστές
στο Unix).
Τυπώστε τις εντολές και βάλτε σε κύκλο κάθε ομάδα εντολών που θα μπορούσαν
να εκτελεστούν παράλληλα.
Εντοπίστε και διαχωρίστε κινδύνους δεδομένων και ελέγχου στη διοχέτευση των
εντολών.
Προτείνετε συγκεκριμένο αριθμό και είδος από δομικές μονάδες που μπορούν να
εξυπηρετήσουν τη διοχέτευση χωρίς τη δημιουργία δομικών κινδύνων.
-
Υλοποιήστε μια κλάση σε C++ για προσομοίωση πίνακα μιας διάστασης με
την υποστήριξη κρυφής μνήμης.
Η συνάρτηση κατασκευής ορίζει το μέγεθος του πίνακα και τον τύπο και
τα χαρακτηριστική της κρυφής μνήμης.
Η κλάση περιέχει μεθόδους για πρόσβαση στα στοιχεία του πίνακα
(ανάγνωση και γράψιμο) καθώς και μέθοδο που επιστρέφει το χρόνο
που έχει καταναλωθεί από την ανάγνωση και το γράψιμο (με βάση τη
λειτουργία της κρυφής μνήμης).
Με τη χρήση της κλάσης αυτής υλοποιήστε μια συνάρτηση πολλαπλασιασμού
πινακών .
Μετρήστε και συγκρίνετε την απόδοση διαφορετικών τύπων κρυφής μνήμης.
Υποχρεωτική άσκηση
Να γράψετε ένα πρόγραμμα σε C για να μετρήσετε την ταχύτητα του
υπολογιστή ανάλογα με την ύπαρξη κρυφής μνήμης και του τρόπου πρόσβασης
σε στοιχεία στη μνήμη.
Δηλώστε έναν πίνακα Ν στοιχείων της παρακάτω μορφής:
volatile int array[N];
(Ο προσδιορισμός volatile επιβάλλει στο μεταγλωττιστή να μη βελτιστοποιήσει
την πρόσβαση στον πίνακα αυτό).
Στη συνέχεια με τη χρήση της συνάρτησης time() χρονομετρήστε την απόδοση του
προγράμματος:
- Όταν προσθέτει μεταξύ τους K στοιχεία από τις ίδιες θέσεις του πίνακα.
- Όταν προσθέτει μεταξύ τους K στοιχεία από τυχαίες θέσεις του πίνακα
(επιλεγμένες με τη χρήση της συνάρτησης rand()).
- Όταν προσθέτει μεταξύ τους K στοιχεία με άλλο τρόπο πρόσβασης που θα
επιλέξετε εσείς (μπορείτε να δοκιμάσετε να αλλάζετε και τις τιμές των στοιχείων).
Δοκιμάστε το πρόγραμμα με διάφορες τιμές του Ν και με ενεργοποιημένη ή
απενεργοποιημένη την κρυφή μνήμη (πρώτου ή/και δεύτερου επιπέδου)
του επεξεργαστή.
Καταγράψτε με ακρίβεια τα αποτελέσματα σε πίνακες και ερμηνεύστε τα ως
προς το είδος και την οργάνωση της κρυφής μνήμης που θα μπορούσε
(με βάση τα αποτελέσματα) να έχει ο υπολογιστής.
Σημείωση
Για να έχετε συγκρίσιμα και χρήσιμα αποτελέσματα:
- Το πρόγραμμα πρέπει να είναι έτσι γραμμένο ώστε οι διαφορετικές μορφές
(π.χ. με πρόσβαση στις ίδιες θέσεις και πρόσβαση σε τυχαίες θέσεις)
να ακολουθούν τις ίδιες ακριβώς εντολές
(μπορείτε να διαβάσετε τις εντολές σε επίπεδο συμβολικής
γλώσσας με το διακόπτη του μεταγλωττιστή /Fa).
- Το Κ πρέπει να είναι αρκετά μεγάλο έτσι ώστε ο χρόνος να μπορεί να
μετρηθεί σε δευτερόλεπτα.
Η απενεργοποίηση της κρυφής μνήμης γίνεται σε πολλούς υπολογιστές
μέσω της επιλογής BIOS features setup (όταν ανάβει ο υπολογιστής).
Μετά την άσκηση μην παραλείψετε να επαναφέρετε τις ρυθμίσεις στην αρχική
τους κατάσταση.
Η άσκηση μπορεί να γίνει από ομάδες των τριών ατόμων το πολύ.
Συμβατική μηχανή και συμβολική γλώσσα
Άξονες σχεδιασμού αρχιτεκτονικής εντολών
Η αρχιτεκτονική εντολών ενός επεξεργαστή σχεδιάζεται γύρω από τους
παρακάτω άξονες:
- Που φυλάσσονται στον επεξεργαστή οι τελεστέοι όταν δεν προέρχονται
από τη μνήμη;
- Αριθμός ρητών τελεστέων (explicit operands) ανά εντολή
(0-3)
- Πόσοι από τους τελεστέους μπορεί να βρίσκονται στη μνήμη;
- Τι εντολές παρέχονται;
- Είδος και μέγεθος τελεστέων
Η οικογένεια επεξεργαστών iAPX86
- 8080 (8 bit, ο πρόγονος)
- 8086/8088 (16 bit)
- 80286 (24 bit, προστατευμένος ρυθμός)
- 80386 (32 bit, ιδεατή μνήμη)
- 80486 (απόδοση, μαθηματικός επεξεργαστής)
- Pentium (παράλληλη εκτέλεση εντολών)
- Pentium MMX (εκτέλεση πολλαπλών ακέραιων δεδομένων)
- Pentium II (δυναμική εκτέλεση εντολών, διπλός δίαυλος)
- Pentium III (εκτέλεση πολλαπλών δεδομένων κινητής υποδιαστολής)
Καταχωρητές
- Το μοντέλο καταχωρητών ειδικής χρήσης
- Καταχωρητές δεδομένων
- EAX (AX (AH/AL)): Συσσωρευτής (Accumulator)
- EBX (BX (BH/BL)): Βάση μνήμης
- ECX (DX (CH/CL)): Μετρητής
- EDX (DX (DH/DL)): Πολλαπλασιασμός, διαίρεση
- Καταχωρητές διευθύνσεων
- SP: (stack pointer) Δείκτης στοίβας (Stack pointer)
- BP: (base pointer) Βάση μνήμης
- SI: (source index) Δείκτης προέλευσης
- DI: (desination index) Δείκτης προορισμού
- Καταχωρητές τμημάτων μνήμης
- CS: (code segment) Τμήμα εντολών
- DS: (data segment) Τμήμα δεδομένων
- SS: (stack segment) Τμήμα στοίβας
- ES: (extra segment) Πρόσθετο τμήμα
- FS: (extra segment) Πρόσθετο τμήμα
- GS: (extra segment) Πρόσθετο τμήμα
- Καταχωρητές ελέγχου
Προσδιορισμός τελεστέων
Σημείωση
Η σύνταξη που χρησιμοποιούμε είναι αυτή των συμβολομεταφραστών της
AT&T που υποστηρίζονται στο λειτουργικό σύστημα Unix (π.χ. GNU as).
Η σύνταξη αυτή διαφέρει σημαντικά από αυτή που χρησιμοποιεί η Intel.
Το μέγεθος του τελεστή ορίζεται από το τελευταίο γράμμα της εντολής:
- l
- long (4 byte, long ή int)
- w
- word (2 byte, short)
- b
- byte (1 byte, char)
Συνδιασμοί τελεστών:
- Καταχωρητής, Καταχωρητής (π.χ. addl %eax, %eax)
- 'Αμεσος, Καταχωρητής (π.χ. subl $3, %ecx)
- Μνήμη, Καταχωρητής (π.χ. addl 54(%esi), %ax)
- 'Αμεσος, Μνήμη (π.χ. movl $45, 12(%ebp, %esi))
Απόδοση εντολών με στοίβα
- Σε αρχιτεκτονικές που βασίζονται σε στοίβα οι εντολές επιδρούν στα
περιεχόμενα της στοίβας.
- Εντολές δύο διευθύνσεων διαβάζουν και αφαιρούν τα δύο στοιχεία από την
κορυφή της στοίβας και γράφουν πίσω το αποτέλεσμα.
- Εντολές μιας διεύθυνσης διαβάζουν και αφαιρούν το στοιχείο από την
κορυφή της στοίβας και γράφουν πίσω το αποτέλεσμα.
- Επίσης είναι δυνατό οι εντολές να περιέχουν ενσωματωμένα έναν αριθμό
που να ορίζει την απόσταση του στοιχείου από την κορυφή της στοίβας.
- Οι εντολές κινητής υποδιαστολής της Intel χρησιμοποιούν τον τρόπο αυτό
για την απόδοση διευθύνσεων.
Παράδειγμα
Συνάρτηση σε C (μια ρίζα δευτεροβάθμιας εξίσωσης):
#include <math.h>
double
root1(double a, double b, double c)
{
double d;
d = b * b - 4.0 * a * c;
return (-b + sqrt(d)) / (2.0 * a);
}
Αντίστοιχος κώδικας σε συμβολική γλώσσα.
Η πρόσβαση στη στοίβα γίνεται με τη ST(Ν) όπου Ν ο αριθμός του στοιχείου
στη στοίβα.
CONST SEGMENT
$FOUR DQ 04010000000000000r ; 4
CONST ENDS
_TEXT SEGMENT
_a$ = 8
_b$ = 16
_c$ = 24
_root1 PROC NEAR
fld QWORD PTR _c$[esp-4]
fmul QWORD PTR _a$[esp-4]
fld QWORD PTR _b$[esp-4]
fmul ST(0), ST(0)
fld QWORD PTR _a$[esp-4]
fxch ST(2)
fmul QWORD PTR $FOUR
fxch ST(2)
fadd ST(0), ST(0)
fxch ST(2)
fsubp ST(1), ST(0)
fsqrt
fsub QWORD PTR _b$[esp-4]
fxch ST(1)
fdivp ST(1), ST(0)
ret 0
_root1 ENDP
_TEXT ENDS
END
Παράσταση εντολών
Κωδικοποίηση εντολών σε επεξεργαστές της Intel
Βασική κωδικοποίηση εντολών
Κωδικοποίηση εντολών ενός byte
Το byte ModR/M προσδιορίζει τις διευθύνσεις των
εντολών
Το byte SIB (scale, index, base) επιτρέπει
τον ορθόγωνο προσδιορισμό κλίμακας, δείκτη και βάσης.
Ενδείκτης διακλάδωσης
- CF:
- (Carry flag)
Κρατούμενο (Carry):
1 αν η πράξη δημιούργησε κρατούμενο.
- ZF:
- (Zero flag)
Μηδέν:
1 αν το αποτέλεσμα της πράξης είναι 0.
- SF:
- (Sign flag)
Πρόσημο (sign)
1 αν το αποτέλεσμα είναι αρνητικός αριθμός.
- PF:
- (Parity flag)
Ισοτιμία
1 αν το αποτέλεσμα έχει μονό αριθμό από bit που είναι 1.
- OF:
- (Overflow flag)
Υπερχείλιση:
1 αν το αποτέλεσμα δε μπορεί να παρασταθεί ως θετικός η αρνητικός αριθμός.
Εντολές μεταφοράς δεδομένων
- mov πηγή, προορισμός
- (Move)
Μεταφορά
πηγή -> προορισμό
- push πηγή
- Μεταφορά στη στοίβα
%esp <- %esp - $4
(%esp) <- πηγή
- pop προορισμός
- Μεταφορά από τη στοίβα
προορισμός <- (%esp)
%esp <- %esp + $4
- xchg προορισμός, πηγή
- (Exchange)
Εναλλαγή
προορισμός <- πηγή
πηγή <- προορισμός
(ταυτόχρονα)
Αριθμητικές εντολές
- add πηγή, προορισμός
- (Add)
Πρόσθεση
προορισμός <- προορισμός + πηγή
- inc προορισμός
- (Increment)
Αύξηση κατά ένα
προορισμός <- προορισμός + 1
- sub πηγή, προορισμός
- (Subtract)
Αφαίρεση
προορισμός <- προορισμός - πηγή
- dec προορισμός
- (Decrement)
Μείωση κατά ένα
προορισμός <- προορισμός - 1
- neg προορισμός
- (Negate)
Αλλαγή προσήμου
προορισμός <- - προορισμός
- cmp πηγή, προορισμός
- (Compare)
Σύγκριση
Εκτελείται η πράξη προορισμός - πηγή και ενημερώνονται οι ενδείκτες
διακλάδωσης.
- mul πηγή
- (Multiply)
Πολλαπλασιασμός
%edx:%eax <- %eax * πηγή
- div πηγή
- (Divide)
Διαίρεση
%eax <- %edx:%eax / πηγή
%edx <- %edx:%eax mod πηγή
Για να μετατρέψουμε τον ακέραιο 32 bit στον καταχωρητή %eax σε
ακέραιο διαιρετέο 64 bit στο ζευγάρι καταχωρητών %edx:%eax
(όπως απαιτεί η div) χρησιμοποιούμε την εντολή cltd (χωρίς παραμέτρους)
(convert long to double long).
Εντολές δυαδικών ψηφίων
- and πηγή, προορισμός
- Σύζευξη
προορισμός <- προορισμός & πηγή
- or πηγή, προορισμός
- Διάζευξη
προορισμός <- προορισμός | πηγή
- xor πηγή, προορισμός
- Αποκλειστική διάζευξη
προορισμός <- προορισμός ^ πηγή
- not προορισμός
- Αντιστροφή
προορισμός <- ~ προορισμός
- test πηγή, προορισμός
- Έλεγχος
- shl αριθμός, προορισμός
- (Shift left)
Ολίσθηση (Shift) αριστερά
προορισμός <- προορισμός << πηγή
- shr αριθμός, προορισμός
- (Shift right)
Ολίσθηση δεξιά
προορισμός <- προορισμός >> πηγή
- sar αριθμός, προορισμός
- (Shift arithmetic right)
Αριθμητική ολίσθηση δεξιά
προορισμός <- προορισμός >> πηγή
- rol αριθμός, προορισμός
- (Rotate left)
Περιστροφή αριστερά
- ror αριθμός, προορισμός
- (Rotate right)
Περιστροφή δεξιά
- bsf προορισμός, πηγή
- (Bit scan forward)
Εύρεση πρώτου bit με τιμή 1 στην πηγή
- bsr προορισμός, πηγή
- (Bit scan reverse)
Αντίστροφη εύρεση πρώτου bit με τιμή 1 στην πηγή
- bt πηγή, αριθμός
- (Bit test)
Έλεγχος bit σε σειρά από bit
- btc προορισμός, αριθμός
- (Bit test and complement)
Αντιστροφή bit σε σειρά από bit
- btr προορισμός, αριθμός
- (Bit test and reset)
Μηδενισμός bit σε σειρά από bit
- bts προορισμός, αριθμός
- (Bit test and set)
Θέτει σε 1 bit σε σειρά από bit
Εντολές άλματος
- JMP προορισμός
- Άλμα
- CALL προορισμός
- Κλήση
- RET
- (Return)
Επιστροφή
- JA/JNBE προορισμός
- (Jump above)
Άλμα αν μεγαλύτερο (χωρίς πρόσημο)
- JAE/JNB προορισμός
- (Jump above or equal)
Άλμα αν μεγαλύτερο ή ίσο (χωρίς πρόσημο)
- JB/JNAE προορισμός
- (Jump bellow)
Άλμα αν μικρότερο (χωρίς πρόσημο)
- JBE/JNA προορισμός
- (Jump below or equal)
Άλμα αν μικρότερο ή ίσο (χωρίς πρόσημο)
- JC προορισμός
- (Jump carry)
Άλμα αν κρατούμενο
- JNC προορισμός
- (Jump no carry)
Άλμα αν όχι κρατούμενο
- JE/JZ προορισμός
- (Jump equal)
Άλμα αν ίσο
- JNE/JNZ προορισμός
- (Jump not equal)
Άλμα αν όχι ίσο
- JG/JNLE προορισμός
- (Jump greater)
Άλμα αν μεγαλύτερο (με πρόσημο)
- JGE/JNL προορισμός
- (Jump greater or equal)
Άλμα αν μεγαλύτερο ή ίσο (με πρόσημο)
- JL/JNGE προορισμός
- (Jump less)
Άλμα αν μικρότερο (με πρόσημο)
- JLE/JNG προορισμός
- (Jump less or equal)
Άλμα αν μικρότερο ή ίσο (με πρόσημο)
- JO προορισμός
- (Jump overflow)
Άλμα αν υπερχείλιση
- JNO προορισμός
- (Jump no overflow)
Άλμα αν όχι υπερχείλιση
- JS προορισμός
- (Jump sign)
Άλμα αν πρόσημο
- JNS προορισμός
- (Jump no sign)
Άλμα αν όχι πρόσημο
Παγίδες
- Η παγίδα (trap) εξασφαλίζει την αυτόματη κλήση κώδικα
μόλις ικανοποιηθεί κάποια (μη κανονική) συνθήκη.
- Παραδείγματα :
- Υπερχείλιση (overflow) πράξεων
- Απώλεια ακρίβειας
- Υποχείλιση στοίβας
- Αντικανονική πρόσβαση στη μνήμη
- Παραβίαση προστασίας
- Διαίρεση με το 0
- Είναι ακόμα δυνατή η κλήση παγίδας μέσω λογισμικού (software trap).
Ο τρόπος αυτός χρησιμοποιείται συχνά για κλήση συναρτήσεων του λειτουργικού
συστήματος μια και εξασφαλίζει την αλλαγή κατάστασης του επεξεργαστή σε
προστατευμένο ρυθμό.
Διακοπές
- Η διακοπή (interrupt) εξασφαλίζει την αυτόματη κλήση
κώδικα μόλις ικανοποιηθεί κάποια εξωτερική συνθήκη.
- Παραδείγματα :
- Τέλος Ε/Ε από περιφερειακό
- Σήμα από το ρολόι πραγματικού χρόνου
- Λάθος μνήμης
- Στους επεξεργαστές τις Intel οι παγίδες και οι διακοπές έχουν τον
ίδιο χειρισμό.
Αποσφαλμάτωση
Οι σύγχρονοι επεξεργαστές έχουν λειτουργικότητα για την αποσφαλμάτωση
προγραμμάτων.
Μερικά στοιχεία της λειτουργικότητας αυτής είναι:
Παράλληλα εντολές επιτρέπουν τον καθαρισμό της κρυφής μνήμης για την
υλοποίηση προγραμμάτων που μετατρέπουν τον εαυτό τους.
Λειτουργίες του συμβολομεταφραστή
- Χρήση συμβολικών εντολών
- Χρήση συμβολικών τελεστέων
- Αυτόματη ανάθεση διευθύνσεων
- Δημιουργία αρχείων συνδέτη
- Σχόλια
- Υπολογισμός σταθερών
- Μακροεντολές
Δομή του πηγαίου κώδικα
- Ο πηγαίος κώδικας της συμβολικής γλώσσας είναι δομημένος με βάση ξεχωριστές
γραμμές κώδικα.
- Κάθε γραμμή μπορεί να περιέχει μία και μόνο μία εντολή.
- Οι εντολές δεν απαιτείται να τερματίζονται με κάποιον ειδικό χαρακτήρα.
- Τα σχόλια γράφονται με τη μορφή της C++:
// This is a comment
- Ο συμβολομεταφραστής δέχεται και ειδικές εντολές. Αυτές αρχίζουν
πάντα με μια τελεία:
.text
- Οι εντολές χωρίζονται από τις παραμέτρους και τους τελεστέους με κενά.
- Οι τελεστέοι χωρίζονται μεταξύ τους με κόμμα.
Παράδειγμα:
cmp $10,%ebx
je end
push %ebx
mov %ebx, %esi
inc %esi
push $intform
Προσδιορισμός σταθερών
Στη συμβολική γλώσσα εκτός από εντολές του επεξεργαστή χρειάζεται
να παραστήσουμε και σταθερές.
Μπορούμε να εισάγουμε:
- ακέραιους στο δεκαδικό σύστημα (π.χ. 10, 454, 23)
- ακέραιους στο δεκαεξαδικό (hexadecimal)
σύστημα αρχίζοντάς τους με 0x (π.χ. 0x5e, 0x34, 0xa23f)
- χαρακτήρες αρχίζοντάς τους με ένα μονό εισαγωγικό (π.χ. 'a, '4, '\n)
Μπορούμε να συνδυάσουμε σταθερές με τελεστές με σημασιολογία ίδια με
αυτή της C.
Μοναδιαίοι (unary) τελεστές:
Δυαδικοί (binary) τελεστές:
- Μέγιστη προτεραιότητα
- Ενδιάμεση προτεραιότητα
- Ελάχιστη προτεραιότητα
Η εισαγωγή των σταθερών στη μνήμη γίνεται με εντολές του συμβολομεταφραστή:
-
Στο συμβολομεταφραστή gas οι σταθερές εισάγονται με τις παρακάτω
εντολές:
- .byte
- Εισαγωγή σταθερών με μήκος 1 byte
- .short
- Εισαγωγή σταθερών με μήκος 2 byte
- .word
- Εισαγωγή σταθερών με μήκος 4 byte
- .string
- Εισαγωγή συμβολοσειρών
- Μετά από κάθε εντολή μπορούν να γραφούν μια ή περισσότερες σταθερές
χωρισμένες με κόμμα.
Παράδειγμα:
.byte 'a', 'b'
.short 578
.word 324234
.string "hello, world\n"
Χρήση συμβόλων
- Σε αρχεία πηγαίου κώδικα του συμβολομεταφραστή μπορούμε να αναφερθούμε με
συμβολικό τρόπο σε διευθύνσεις μνήμης (memory addresses)
δεδομένων ή κώδικα.
- Ο κώδικας και τα δεδομένα που γράφουμε καταχωρούνται σε αυξανόμενες
διευθύνσεις μνήμης.
- Μπορούμε να αποδώσουμε την τρέχουσα διεύθυνση μνήμης σε μια συμβολική
σταθερά (ετικέτα (label)))
γράφοντας στην αρχή της γραμμής το όνομα της σταθεράς (σύμφωνα με τους
κανόνες ονομασίας μεταβλητών της C) ακολουθούμενο από μια άνω κάτω τελεία:
thisaddress:
Παράδειγμα:
intform: .string "%d\n"
.globl main
main:
mov $0, %ebx
loop:
cmp $10,%ebx
Βιβλιογραφία και πηγές στο Internet
- Andrew S. Tanenbaum
Η αρχιτεκτονική των υπολογιστών: μια δομημένη προσέγγιση.
Τρίτη αμερικάνικη έκδοση. σ. 273-368, 467-502. Κλειδάριθμος 1995.
- Εμμ. Σ. Σκορδαλάκης.
Εισαγωγή στους Μεταγλωττιστές σ. 172-180, 246.
Συμμετρία 1993.
- Alfred V. Aho, Ravi Sethi,
and Jeffrey D. Ullman.
Compilers, Principles, Techniques, and Tools, pages 519–520.
Addison-Wesley, 1985.
- Dawson R. Engler and
Wilson C. Hsieh.
DERIVE: A tool that automatically reverse-engineers instruction encodings.
In Proceedings of the ACM SIGPLAN Workshop on Dynamic and Adaptive
Compilation and Optimization (Dynamo '00), pages 12–22. ACM Press,
July 2000.
ACM SIGPLAN Notices 35(7).
- Free Software Foundation.
Using as, 1999.
http://www.gnu.org/manual/gas-2.9.1/.
- John L. Hennessy
and David A. Patterson.
Computer Architecture: A Quantitative Approach, pages 89–197.
Morgan Kaufmann Publishers, second edition, 1996.
- Intel Corporation.
The
Intel Architecture Software Developer's Manual, Volume 1: Basic
Architecture, 1999.
http://www.intel.com/design/PentiumII/manuals/243190.htm.
- Intel Corporation.
Intel
Architecture Software Developer's Manual, Volume 2: Instruction Set Reference
Manual, 1999.
http://www.intel.com/design/PentiumII/manuals/243190.htm.
- Jr. Philip
J. Koopman.
Stack Computers: the New Wave.
Ellis Horwood, 1989.
Available online http://www.cs.cmu.edu/~koopman/stack_computers/index.html.
Ασκήσεις
- Πως θα κωδικοποιηθεί η παρακάτω ακολουθία εντολών Intel IA32;
movl -140(%ebp),%eax
movl (%edx,%eax,8),%ecx
addl %ecx,%ecx
movl %ecx,(%edx,%eax,8)
movl -140(%ebp),%eax
incl %eax
- Τι εντολές Intel IA32 παριστάνει η παρακάτω ακολουθία;
55
89 E5
81 EC B8 00 00 00
C7 85 74 FF FF FF 00 00 00 00
Στην απάντησή σας να δείξετε πως καταλήξατε σε κάθε αποτέλεσμα.
Ιεραρχίες μνήμης
Εικονική μνήμη
Η εικονική μνήμη (virtual memory)
παρουσιάζει στις διεργασίες παραπάνω μνήμη από αυτή
που διαθέτει το σύστημα.
Αυτό γίνεται χρησιμοποιώντας
εικονικές διευθύνσεις (virtual addresses) οι οποίες
μεταφράζονται σε πραγματικές από τη
μονάδα διαχείρισης μνήμης (memory management unit).
Πρόσβαση σε γραμμική μνήμη με βάση τις σελίδες
στην αρχιτεκτονική του επεξεργαστή Pentium
Πεδία του κατάλογου σελίδων
Αντικατάσταση σελίδων
Η αντικατάσταση των σελίδων μπορεί να γίνει:
Σχεδιασμός σελιδοποίησης
Επανεκκίνηση εντολής
Μια εντολή μηχανής μπορεί να διακοπεί στη μέση της εκτέλεσής της.
Την επανεκκίνηση της εντολής
-
μπορεί να αναλάβει ο επεξεργαστής
από το σημείο στο οποίο σταμάτησε ή
- το λειτουργικό
σύστημα από την αρχική της κατάσταση.
Θέματα υλοποίησης
Κλείδωμα σελίδων
Σε περίπτωση που μια σελίδα χρησιμοποιείται για την καταχώρηση πίνακα
σελίδων, περιγραφέα ή ως ενταμιευτής εισόδου / εξόδου από / προς κάποιο
περιφερειακό τότε αυτή πρέπει να κλειδωθεί στη μνήμη και να μην
επιτρέπεται η αντικατάστασή της.
Σελιδοποίηση κώδικα και δεδομένων
Σε ορισμένα λειτουργικά συστήματα ο κώδικας μιας διεργασίας και τα
δεδομένα της μπορεί να απεικονίζονται σε σελίδες των οποίων η θέση
στο δίσκο να είναι τα αντίστοιχα αρχεία που περιέχουν τον κώδικα
της διεργασίας ή τα δεδομένα της.
Διαμοιραζόμενες σελίδες
Ειδικά τις σελίδες του κώδικα ή στατικών δεδομένων
(π.χ. το κείμενο βοηθείας μιας εφαρμογής) μπορούν να τις μοιράζονται και
περισσότερες από μια διαδικασίες μια και αυτές δεν μεταβάλλονται.
Διεργασία σελιδοποίησης
Η διεργασία σελιδοποίησης (paging daemon) τρέχει στο
περιθώριο με σκοπό να ερευνά τις σελίδας και να καταγράφει σελίδες που
είναι υποψήφιες για αντικατάσταση.
Βελτιστοποίηση
Η πρόσβαση στον κατάλογο σελίδων είναι ακριβή μια και αυτός βρίσκεται στην
κύρια μνήμη.
Για βελτιστοποίηση της ταχύτητας πρόσβασης πολλές αρχιτεκτονικές υλοποιούν
έναν
ενδιάμεσο ενταμιευτή μετάφρασης (translation lookaside buffer).
Αυτός αποτελεί μια κρυφή μνήμη ειδικού τύπου για τους πίνακες των σελίδων
που χρησιμοποιούνται συχνότερα.
Ο τρόπος πρόσβασης στον ενδιάμεσο ενταμιευτή μετάφρασης είναι βελτιστοποιημένος
για τις ανάγκες του συστήματος της σελιδοποίησης.
Έτσι η πρόσβαση στις θέσεις του πίνακα βασίζεται μόνο στο τμήμα τις διεύθυνσης
που απεικονίζει τη βάση της σελίδας.
Τμηματοποίηση
Μια αρχιτεκτονική μπορεί να υποστηρίξει πολλαπλά ανεξάρτητα γραμμικά
τμήματα (segments) διευθύνσεων.
Τα τμήματα αυτά μπορούν να χρησιμοποιηθούν για να ορίσουν ξεχωριστά:
- κώδικα
- στατικά δεδομένα
- δυναμικά δεδομένα
- στοίβα
- βιβλιοθήκες κώδικα
- πυρήνα του λειτουργικού συστήματος
Με τη χρήση τμημάτων επιτρέπεται η ανεξάρτητη προστασία των τμημάτων,
αλλά και η από κοινού χρήση ορισμένων τμημάτων (π.χ. βιβλιοθηκών).
Επιπλέον, η χρήση των τμημάτων μπορεί να διευκολύνει το φόρτωμα του
προγράμματος επιτρέποντας σε κάθε πρόγραμμα να φορτώνεται σε προκαθορισμένο
γραμμικό τμήμα μνήμης.
Η προστασία ενός τμήματος μπορεί στις περισσότερες περιπτώσεις
να ορίσει άδεια για:
- εκτέλεση
- ανάγνωση
- εγγραφή
Ορισμός τμημάτων στην αρχιτεκτονική Pentium
Προστασία
Στενά συνδεδεμένο με την πρόσβαση στη μνήμη είναι το θέμα της προστασίας.
Μερικοί τύποι προστασίας που υλοποιούνται σε αρχιτεκτονικές είναι οι παρακάτω:
Όρια πρόσβασης σε περιοχές της μνήμης
Για προστασία μεταξύ των προγραμμάτων τα τμήματα ορίζουν την αρχή και
το μήκος τους.
Κάθε πρόσβαση έξω από τα όρια αυτά παγιδεύεται.
Πρόσβαση σε τύπους δεδομένων
Η συχνότερος διαχωρισμός είναι μεταξύ κώδικα και δεδομένων, αλλά έχουν
υπάρξει αρχιτεκτονικές που υποστηρίζουν πλήρες σύστημα τύπων δεδομένων
ανάλογο με αυτό των γλωσσών προγραμματισμού υψηλού επιπέδου.
Στις αρχιτεκτονικές αυτές τα δεδομένα περιέχουν και ορισμένα bit
που ορίζουν τον τύπο τους.
Επίπεδα προστασίας
Για την αποδοτική υλοποίηση λειτουργικών συστημάτων ορίζονται επίπεδα προστασίας.
Τυπικά το επίπεδο προστασίας Ν έχει πρόσβαση στα δεδομένα και τον κώδικα των
επιπέδων Μ όπου Μ > Ν αλλά όχι και το αντίστροφο.
Ένα παράδειγμα χρήσης πολλαπλών επιπέδων προστασίας παρουσιάζεται στην παρακάτω
εικόνα:
Η μετάβαση ανάμεσα σε επίπεδα προστασίας γίνεται μέσω παγίδων,
διακοπών, ή ειδικών δομών δεδομένων (π.χ. call gates).
Έλεγχος εντολών
Ορισμένα επίπεδα προστασίας μπορούν να επιτρέπουν ή να απαγορεύουν
την εκτέλεση συγκεκριμένων εντολών.
Μερικές κατηγορίες εντολών είναι οι παρακάτω:
- εντολές εισόδου εξόδου
- εντολες έλεγχου σελιδοποίησης και τμηματοποίησης,
- ελέγχου του επεξεργαστή (π.χ. HALT)
- ελέγχου κρυφής μνήμης
- πρόσβασης σε καταχωρητές αποσφαλματοποίησης
Με την παγίδευση της εκτέλεσης συγκεκριμένων εντολών μπορεί το λειτουργικό
σύστημα να υλοποιήσει
εικονικές μηχανές (virtual machines).
Διαχείριση κρυφής μνήμης
Η κρυφή μνήμη δεν μπορεί πάντα να συγχρονίζεται αυτόματα με τα περιεχόμενα
της πραγματικής μνήμης.
Μερικές περιπτώσεις που η κρυφή χρειάζεται ειδικό χειρισμό είναι οι παρακάτω:
- είσοδος στοιχείων από περιφερειακά με άμεση πρόσβαση στη μνήμη
- κώδικας που αλλάζει τον εαυτό του
(π.χ. υλοποίηση αποσφαλματωτή)
όταν υπάρχει διαφορετική κρυφή μνήμη για κώδικα και δεδομένα.
- πολλαπλοί επεξεργαστές
- βελτιστοποιημένος κώδικας που γνωρίζει τα στοιχεία που θα χρειαστούν
αργότερα
Για όλες τις παραπάνω περιπτώσεις υπάρχουν συχνά ειδικές εντολές
(π.χ. WBINVD στον Pentium) ή τύποι σελίδων ή τμημάτων που επιτρέπουν τον
άμεσο έλεγχο της κρυφής μνήμης.
Βιβλιογραφία
- Andrew S. Tanenbaum
Η αρχιτεκτονική των υπολογιστών: μια δομημένη προσέγγιση.
Τρίτη αμερικάνικη έκδοση. σ. 375-465. Κλειδάριθμος 1995.
- Andrew S. Tanenbaum
Σύγχρονα λειτουργικά συστήματα. σ. 103-198
Εκδόσεις Παπασωτηρίου, 1993.
- Maurice J. Bach.
The
Design of the UNIX Operating System, pages 271–352.
Prentice-Hall, 1986.
- Bruce Javob and Trevor
Mudge.
Virtual memory: Issues of implementation.
Computer, 31(6):33–43, June 1998.
- Samuel J. Leffler,
Marshall Kirk McKusick, Michael J. Karels, and John S. Quarterman.
The
Design and Implementation of the 4.3BSD Unix Operating System,
pages 109–163.
Addison-Wesley, 1988.
- Andrew S. Tanenbaum.
Operating Systems: Design and Implementation, pages 191–247.
Prentice-Hall, 1987.
Μελέτες περίπτωσης: Transmeta Crusoe, Beowulf, DSP
Θέματα
- Μια διαφορετική προσέγγιση στην αρχιτεκτονική συμβατότητα:
ο επεξεργαστής Transmeta Crusoe.
Αρχιτεκτονική, προβλήματα, λύσεις, διδάγματα.
- Παράλληλη επεξεργασία με τη χρήση εμπορικών εξαρτημάτων:
το σύστημα Beowulf.
Αρχιτεκτονική, λειτουργία, υλοποίηση, διδάγματα.
-
Εξειδικευμένες αρχιτεκτονικές:
επεξεργαστές ψηφιακής επεξεργασίας σήματος (digital signal processors).
Χαρακτηριστικά, αρχιτεκτονικές, παραδείγματα, υλοποίηση, εξέλιξη.
Χωρισμός σε ομάδες
- Τυχαίος χωρισμός
- Δύο μεταγραφές ανά ομάδα με αμοιβαία συμφωνία
- Δυνατότητα για αμοιβαία ανταλλαγή θέματος
Παρουσίαση
- Απευθύνεται στους υπόλοιπους φοιτητές
- Συμμετέχουν όλα τα μέλη της ομάδας
- Με χρήση εποπτικών μέσων
Άλλα παραδοτέα
Τα παρακάτω παραδοτέα θα συνεκτιμηθούν, αν υπάρξουν:
- Σελίδες στο Web (μπορούν να ενσωματωθούν στις σελίδες του μαθήματος)
- Γραπτές σημειώσεις
Πηγές
Οι ομάδες
Crusoe | Beowulf | DSP |
cs98048 | cs98019 | cs98035 |
cs98022 | cs98007 | cs98011 |
cs98027 | cs98042 | cs98015 |
cs98004 | cs98029 | cs98003 |
cs98018 | cs98017 | cs98039 |
| cs98020 | cs98006 |
Σημαντικές ημερομηνίες
- 24/11/2000
- Τέλος αμοιβαίων μεταγραφών, ενημέρωση του διδάσκοντα
για τον υπεύθυνο της κάθε ομάδας.
- 12/12/2000
- Παρουσίαση των εργασιών.
Μηχανές RISC, VLIW, παράλληλες αρχιτεκτονικές, προσομοίωση
RISC: Οι δυνάμεις αλλαγής
- Μελέτες πραγματικών προγραμμάτων
- Ταχύτερη μνήμη RAM
- Βελτιώσεις στην τεχνολογία των μεταγλωττιστών
- Μικρότερο κόστος αποθηκευτικού χώρου
Οι παραπάνω δυνάμεις οδήγησαν στη σχεδίαση
Μηχανών Περιορισμένου Συνόλου Εντολών (Reduced Instruction Set Computer)
(RISC).
Σχεδιασμός RISC
Η παρακάτω διαδικασία σχεδίασης ακολουθείται για κάθε είδος πόρου
του επεξεργαστή
(εντολές, κρυφή μνήμη, διαχείριση μνήμης, εντολές κινητής υποδιαστολής).
- Ανάλυση πραγματικών εφαρμογών και εύρεση βασικών λειτουργιών
- Σχεδίαση διαδρομής δεδομένων για τις παραπάνω λειτουργίες
- Σχεδίαση εντολών που εκτελούν τις παραπάνω λειτουργίες με τη χρήση
της συγκεκριμένης διαδρομής δεδομένων
- Προσθήκη νέων εντολών μόνο αν δεν επιβραδύνουν τη μηχανή
Σύγκριση χαρακτηριστικών CISC / RISC
Χαρακτηριστικό |
IBM 370 | Intel 486, P5, P6 | MIPS R4000 | PowerPC 601 |
Έτος | 1973 | 1989-1999 | 1991 | 1993 |
# Εντολές | 208 | 235 | 94 | 206 |
Μέγεθος εντολής (bytes) | 2-6 | 1-11 | 4 | 4 |
Τρόποι διευθυνσιοδότησης | 4 | 11 | 1 | 2 |
Αριθμός καταχωρητών γενικής χρήσης | 16 | 8 | 32 | 32 |
Σύγκριση κώδικα CISC / RISC
Κώδικας C
/*
* Print tabs to indent the following character by indent_level
*/
void
indent(void)
{
int i;
for (i = 0; i < indent_level; i++)
putchar('\t');
}
Κώδικας Pentium
Διακρίνουμε τη χρήση ειδικών καταχωρητών και τις σύνθετες εντολές.
indent:
pushl %ebp
movl %esp,%ebp
pushl %ebx
xorl %ebx,%ebx
cmpl indent_level,%ebx
jge .L18
.p2align 4,,7
.L20:
pushl stdout
pushl $9
call _IO_putc
addl $8,%esp
incl %ebx
cmpl indent_level,%ebx
jl .L20
.L18:
movl -4(%ebp),%ebx
leave
ret
Κώδικας ARM
Διακρίνουμε εντολές με τρεις τελεστέους και την πρόσβαση στη μνήμη μέσω
καταχωρητών.
_indent:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, current_function_anonymous_args = 0
mov ip, sp
stmfd sp!, {r4, r5, r6, r7, fp, ip, lr, pc}
ldr r6, L199
ldr r3, [r6, #0]
sub fp, ip, #4
mov r4, #0
cmp r4, r3
ldmgeea fp, {r4, r5, r6, r7, fp, sp, pc}
mov r7, #9
ldr r5, L199+4
L9:
ldr r3, [r5, #8]
sub r2, r3, #1
str r2, [r5, #8]
cmp r2, #0
bge L10
ldr r3, [r5, #24]
cmp r2, r3
blt L11
L10:
ldr r3, [r5, #0]
strb r7, [r3], #1
str r3, [r5, #0]
b L8
L11:
mov r0, #9
mov r1, r5
bl ___swbuf
L8:
ldr r3, [r6, #0]
add r4, r4, #1
cmp r4, r3
blt L9
ldmea fp, {r4, r5, r6, r7, fp, sp, pc}
L200:
.align 0
L199:
.word _indent_level
.word ___sF+88
Lfe3:
.size _indent,Lfe3-_indent
.align 0
Κώδικας SPARC
Διακρίνουμε τη χρήση παραθύρου καταχωρητών εισερχομένων παραμέτρων (i)
τοπικών μεταβλητών (l) και εξερχομένων παραμέτρων (o).
indent__Fv:
.LLFB4:
!#PROLOGUE# 0
save %sp, -112, %sp
.LLCFI3:
!#PROLOGUE# 1
sethi %hi(indent_level), %o0
ld [%o0+%lo(indent_level)], %o1
mov 0, %l0
cmp %l0, %o1
bge .LL10
mov %o0, %l4
sethi %hi(__iob+16), %l2
or %l2, %lo(__iob+16), %l1
mov 9, %l3
ld [%l2+%lo(__iob+16)], %o0
.LL171:
add %o0, -1, %o0
cmp %o0, 0
bge .LL7
st %o0, [%l2+%lo(__iob+16)]
mov 9, %o0
call __flsbuf, 0
mov %l1, %o1
b .LL170
ld [%l4+%lo(indent_level)], %o0
.LL7:
ld [%l1+4], %o0
stb %l3, [%o0]
add %o0, 1, %o0
st %o0, [%l1+4]
ld [%l4+%lo(indent_level)], %o0
.LL170:
add %l0, 1, %l0
cmp %l0, %o0
bl .LL171
ld [%l2+%lo(__iob+16)], %o0
.LL10:
ret
restore
Παράλληλες αρχιτεκτονικές
Μπορούμε να διακρίνουμε τις παρακάτω κατηγορίες αρχιτεκτονικών ως προς την παραλληλία:
Οι αρχιτεκτονικές SIMD όταν επιδρούν σε διανύσματα επιτυγχάνουν αύξηση της
ταχύτητα διότι
αξιοποιούν τις παρακάτω ιδιότητες για την επεξεργασία
των δεδομένων σε παραγματικά προγράμματα:
- Κάθε αποτέλεσμα δεν εξαρτάται από το προηγούμενο
- Μια εντολή μπορεί να επιδράσει πολλά δεδομένα (δεν καθυστερεί ο επεξεργαστής
από την πρόσβαση στις εντολές
- Η πρόσβαση στη μνήμη είναι γνωστή και μπορεί να βελτιστοποιηθεί
(π.χ. με τη χρήση παράλληλων δομών μνήμης)
- Ελαχιστοποιούνται οι κίνδυνοι ελέγχου αφού πολλοί βρόχοι εκτελούνται ως
μια εντολή.
Οι αρχιτεκτονικές MIMD μπορούν να κατηγοριοποιηθούν ανάλογα με το αν χρησιμοποιούν
ιδιωτική ή κοινόχρηστη μνήμη.
Η σύνδεση των υπολογιστικών στοιχείων σε αρχιτεκτονικές MIMD με χωριστή μνήμη
μπορεί να είναι:
Αρχιτεκτονικές VLIW
Μια άλλη προσέγγιση στην αρχιτεκτονική των υπολογιστών είναι η παρουσίαση
στον προγραμματιστή / μεταγλωττιστή της πλήρους εσωτερικής δομής του
επεξεργαστή.
Οι εντολές πρέπει τότε να περιέχουν στοιχεία ανάλογα σε λεπτομέρεια με αυτά
του μικροπρογράμματος.
Για το λόγο αυτό οι επεξεργαστές χαρακτηρίζονται ως
εξαιρετικά εκτεταμένου μήκους εντολών (very long instruction word).
Το πλεονέκτημα τις προσέγγισης αυτής είναι πως ο μεταγλωττιστής μπορεί να
βελτιστοποιήσει καθολικά τη χρήση των πόρων του επεξεργαστή αφού έχει
την πλήρη εικόνα του προγράμματος και όχι λίγων μόνο εντολών.
Με τον τρόπο αυτό ελαχιτοποιούνται διάφοροι κίνδυνοι (δομικοί, ελέγχου, δεδομένων).
Επιπλέον,
η πρόοδος στην τεχνολογία του μεταγλωττιστή οδηγεί άμεσα σε ταχύτερα
προγράμματα χωρίς να απαιτηθεί αλλαγή στον μικροκώδικα του επεξεργαστή.
Προσομοίωση
Όταν μια αρχιτεκτονική φτάσει στο τέλος της ζωής της παραμένει το πρόβλημα
της χρήσης του λογισμικού που βασίζεται στην αρχιτεκτονική αυτή.
Συχνά η μεταγλώττιση του πηγαίου κώδικα σε άλλη αρχιτεκτονική δεν είναι δυνατή.
Στις περιπτώσεις αυτές η λύση είναι η προσομοίωση της παλιάς αρχιτεκτονικής
στη νέα.
Διακρίνουμε τις παρακάτω προσεγγίσεις:
- Υποστήριξη των εντολών της παλιάς αρχιτεκτονικής από την νέα σε επίπεδο
μικροκώδικα (Vax-PDP11, Pentium-8086).
- Στατική μεταγλώττιση των προγραμμάτων από τις εντολές της παλιάς
αρχιτεκτονικής στις εντολές της νέας (AS400, PowerPC).
- Διερμηνεία των εντολών της παλιάς αρχιτεκτονικής από την νέα
(SoftPC σε επεξεργαστές Motorolla).
- Μικτές προσεγγίσεις με διερμηνεία και δυναμική μεταγλώττιση σημείων
που απαιτούν πολλούς υπολογιστικούς πόρους (JavaVM Just in Time Compilers).
Συχνά η νέα αρχιτεκτονική παρέχει ορισμένα χαρακτηριστικά για να διευκολύνει
τη διαδικασία της μεταγλώττισης ή της διερμηνείας (καταχωρητές, εντολές, παγίδες).
Τεχνικές διερμηνείας είναι ακόμα απαραίτητας κατά το στάδιο σχεδιασμού μιας αρχιτεκτονικής.
Με τη χρήση της προσομοίωσης της νέας αρχιτεκτονικής μπορούμε να εξάγουμε
χαρακτηριστικά της απόδοσης των προγραμμάτων χωρίς να χρειαστεί να κατασκευάσουμε
τον επεξεργαστή.
Πηγές στο Internet
Βιβλιογραφία
- Andrew S. Tanenbaum
Η αρχιτεκτονική των υπολογιστών: μια δομημένη προσέγγιση.
Τρίτη αμερικάνικη έκδοση. σ. 507-627, 467-502. Κλειδάριθμος 1995.
- P.J. Denning.
Computer architecture: Some old ideas that haven't quite made it yet.
CACM, 24(9):553–554, 1981.
- J. Hennessy
and T. Gross.
Postpass code optimization of pipeline constraints.
ACM Transactions on Programming Languages and Systems, 1983.
- John L. Hennessy
and David A. Patterson.
Computer Architecture: A Quantitative Approach, pages 351–397, E1–E24.
Morgan Kaufmann Publishers, 1990.
- J. Hennessy.
Vlsi processor architecture.
IEEE Transactions on Computers, 1984.
- A. Lunde.
Empirical evaluation of some features of instruction set processor
architectures.
CACM, 1972.
- D.A.
Patterson and D.R. Ditzel.
The case for the reduced instruction set computer.
Computer Architecture News, 8(6), 1980.
- D.A.
Patterson and C.H. Sequin.
Risc 1: a reduced instruction set vlsi computer.
8th. Ann. Symp. on Computer Architecture, pages 443–457, 1981.
- D.A.
Patterson and C.H. Sequin.
A vlsi risc.
Computer, 15(9):8–21, 1982.
- D. Patterson.
Reduced instruction set computers.
CACM, 1985.
- A. Tanenbaum.
Implications of structured programming for machine architecture.
CACM, 1978.