Επίλυση προβλημάτων μέσω Η/Υ Πρόβλημα Αλγόριθμοι Γλώσσα Αρχιτεκτονική Συνόλου Εντολών Μικροαρχιτεκτονική Κυκλώματα Στοιχεία 2
Ας σχεδιάσουμε μια πραγματική υπολογιστική μηχανή Ιδέα: Να βασιστούμε σε κάποιο από τα υπολογιστικά μοντέλα της θεωρίας. Γιατί; Συνέπεια θεωρητικής ανάλυσης πράξης Turing machine ή κάποια από τις παραλλαγές της (π.χ. πολλές ταινίες, πολλές κεφαλές) Ταινία που περιλαμβάνει δεδομένα εισόδου και εξόδου Κεφαλή που διαβάζει, γράφει και μετακινείται Καταχωρητής κατάστασης Χώρος για αποθήκευση του προγράμματος https://www.youtube.com/watch?v=e3kelemwfhy 3
Ας σχεδιάσουμε μια πραγματική υπολογιστική μηχανή Register Machine ή κάποια από τις παραλλαγές της (π.χ. RAM, RASP) που είναι υπολογιστικά ισοδύναμες με τις μηχανές Turing Σύνολο καταχωρητών Εντολές Αριθμητικές, ελέγχου, άλματος Καταχωρητής κατάστασης Λίστα εντολών (πρόγραμμα) Οι σύγχρονοι υπολογιστές αποτελούν υλοποιήσεις των register machines RAM model Αρχιτεκτονική Harvard (μικροελεγκτές και επεξεργαστές DSP) RASP model Αρχιτεκτονική Von Neumann (CPUs προσωπικών υπολογιστών, εξυπηρετητών, υπερυπολογιστών, κινητών τηλεφώνων) 4
Υπολογιστικές μηχανές: Σημαντικά ζητήματα Αφαίρεση (abstraction): Μας βοηθά να είμαστε παραγωγικοί Δεν χρειάζεται να γνωρίζω μηχανές εσωτερικής καύσης για να οδηγήσω ένα αυτοκίνητο Δεν χρειάζεται να γνωρίζω πως είναι οργανωμένο το υλικό και το λογισμικό συστήματος για να υλοποιήσω ένα πρόγραμμα που εκτελείται σωστά Μέχρι κάτι να πάει στραβά : Γιατί δεν παίρνει μπροστά το αυτοκίνητο; Πώς ελέγχω τα λάδια; Πού είναι το μπουζί; Γιατί δεν εκτελείται το πρόγραμμά μου για μεγαλύτερη είσοδο; Είναι σημαντικό να κατανοούμε όλα τα μέρη ενός συστήματος και τον τρόπο με τον οποίο αλληλεπιδρούν 5
Υπολογιστικές μηχανές: Σημαντικά ζητήματα Υλικό vs. Λογισμικό Δεν τίθεται ζήτημα επιλογής ανάμεσα στα δύο Και τα δύο είναι συστατικά μέρη ενός υπολογιστικού συστήματος Ακόμα και αν κάποιος επικεντρωθεί στο ένα πρέπει να έχει καλή κατανόηση του άλλου 6
Αρχιτεκτονική Von Neumann Υλοποιεί την έννοια του αποθηκευμένου προγράμματος (stored program) Το πρόγραμμα είναι μια αλληλουχία εντολών που αποθηκεύεται σε μία μονάδα μνήμης Στην ίδια μνήμη αποθηκεύονται και τα δεδομένα του προγράμματος Η κεντρική μονάδα επεξεργασίας και η αριθμητική και λογική μονάδα διαβάζουν εντολές και δεδομένα από τη μνήμη και εκτελούν πράξεις Οι εντολές του προγράμματος μπορούν να αλλάξουν δυναμικά (μία εντολή είναι δυνατόν να αντικατασταθεί κατά την εκτέλεση από μία άλλη) Βασικοί καταχωρητές: PC: Program Counter (δείχνει την εντολή που εκτελείται) IR: Instruction register (αποθηκεύει την εντολή που εκτελείται) MAR: Memory Address Register (δείχνει τη θέση μνήμη που προσπελαύνεται) MDR: Memory Data Register (αποθηκεύει τα δεδομένα που θα εγγραφούν ή θα διαβαστούν από τη μνήμη) 7
Αρχιτεκτονική Von Neumann Διεύθυνση Μνήμη Δεδομένα 200 PC CPU 200 ADD r5,r1,r3 ADD IR r5,r1,r3 8
Αρχιτεκτονική Harvard Διαφοροποίηση από von Neumann: Οι εντολές και τα δεδομένα αποθηκεύονται σε διαφορετικές μονάδες μνήμης Μνήμη δεδομένων (τυπικά read-write) Μνήμη προγράμματος (τυπικά read-only) Το πρόγραμμα δεν μπορεί να αλλάξει κατά την εκτέλεση 9
Αρχιτεκτονική Harvard διεύθυνση Μνήμη δεδομένων δεδομένα διεύθυνση PC CPU Μνήμη προγράμματος δεδομένα 10
Οργάνωση ενός τυπικού υπολογιστικού συστήματος 11
Αρχιτεκτονική Συνόλου Εντολών Instruction Set Architecture - ISA Εντολές (instructions): Το βασικό στοιχείο μιας αρχιτεκτονικής Διεπαφή υλικού λογισμικού «Γλώσσα» του επεξεργαστή Περιλαμβάνουν: Αναγνωριστικό κωδικό (opcode) Τελεστές (operands) Το σύνολο των εντολών χαρακτηρίζει την αρχιτεκτονική του επεξεργαστή: x86 Power, PowerPC RISC: Alpha, MIPS, SPARC, ARM SIMD: CRAY1 VLIW: IA64 12
MIPS ISA 13
ARM ISA 14
LC3 ISA 15
Επιλογές μιας αρχιτεκτονικής συνόλου εντολών Ρεπερτόριο εντολών Μέγεθος λέξης (π.χ. 16 bit, 32bit, 64bit) Εντολές με σταθερό ή μεταβλητό μήκος λέξης x86: μεταβλητό μήκος ARM 32-bit: όλες οι εντολές έχουν μήκος 32 bit Αριθμός τελεστών (διευθύνσεων) στις εντολές: 0: αρχιτεκτονική στοίβας (push, pop, op) 1: αρχιτεκτονική συσσωρευτή (LD X, ST X, ADD X) 2: 2-τελεστές (A = A op B) 3: 3-τελεστές (Α = Β op C) Memory/memory vs. Load/Store x86: 2 διευθύνσεις, memory/memory MIPS: 3 διευθύνσεις, load / store Αριθμός/μέγεθος καταχωρητών που είναι «ορατοί» στον προγραμματιστή 16
Επιλογές μιας αρχιτεκτονικής συνόλου εντολών (συν.) Οργάνωση μνήμης Εύρος φυσικών διευθύνσεων Διευθυνσιοδότηση (byte, 2-byte, 4-byte, 8-byte) Υποστήριξη εικονικής μνήμης Τρόποι διευθυνσιοδότησης (addressing modes) και πρόσβασης στη μνήμη: Άμεση (immediate) Απόλυτη (absolute ή direct) Σχετικά με τον PC (PC relative) Άμεση μέσω καταχωρητή (register direct) Βάση και offset (base + offset) Τύποι δεδομένων που υποστηρίζονται Ακέραιοι Πραγματικοί (κινητής υποδιαστολής) Χαρακτήρες Συμβολοσειρές 17
Μικροαρχιτεκτονική Περιλαμβάνει σχεδιαστικές επιλογές που δεν είναι ορατές στον προγραμματιστή και υλοποιούν εσωτερικά την αρχιτεκτονική συνόλου εντολών, π.χ.: Εσωτερικοί (κρυφοί επεξεργαστές) Οργάνωση της κρυφής μνήμης (cache) Υλοποίηση της μονάδας ελέγχου και των διάφορων αριθμητικών και λογικών μονάδων Π.χ. Δύο επεξεργαστές Α, Β, με την ίδια ISA που υποστηρίζει διαίρεση. Ο Α έχει μονάδα διαίρεσης στο υλικό, ο Β δεν έχει (και την πραγματοποιεί μέσω πολλαπλασιασμών, αθροίσεων, αφαιρέσεων, κλπ) Υποστήριξη σωλήνωσης (pipeline) και υλοποίηση του pipeline (πόσα στάδια;). Βλ. Αρχιτεκτονική Υπολογιστών 5 ο Εξάμηνο 18
Little Computer 3 - LC3 Εκπαιδευτικός υπολογιστής Δεν έχει υλοποιηθεί σε πραγματικό σύστημα Υπάρχουν εξομοιωτής (simulator) και εργαλεία προγραμματισμού (assembler, debugger) http://highered.mheducation.com/sites/0072467509/student_view0/lc-3_simulator.html http://highered.mheducation.com/sites/0072467509/student_view0/lc- 3_simulator_lab_manual.html Σχεδιάστηκε από τους Yale N. Patt (University of Texas at Austin) και Sanjay J. Patel (University of Illinois at Urbana Champaign) Yale Patt: http://users.ece.utexas.edu/~patt/ 19
LC3 ISA 16 bit Σταθερό μήκος εντολών Οργάνωση μνήμης: 2 16 θέσεις Διευθυνσιοδότηση 16 bit (2 byte) Καταχωρητές: 8 16-bit γενικού σκοπού (R0 R7) (για φόρτωση δεδομένων και πραγματοποίηση πράξεων) 3 1-bit για έλεγχο συνθηκών: N = negative, Z = zero, P = positive Ρεπερτόριο εντολών: 15 εντολές (+1 απροσδιόριστη για μελλοντικές επεκτάσεις) Αριθμητικές και λογικές εντολές: ADD, AND, NOT Εντολές φόρτωσης δεδομένων: LD, LDI, LDR, LEA, ST, STR, STI Εντολές ελέγχου ροής (άλματος): BR, JSR/JSRR, JMP, RTI, TRAP Load / Store 3 τελεστές (3 operands): A = B op C 20
LC3 ISA (συν.) Τύποι δεδομένων: 16 bit ακέραιος, συμπλήρωμα ως προς 2 Τρόποι αναφοράς σε δεδομένα (διευθυνσιοδότηση - addressing modes): Σε δεδομένα που δεν είναι στη μνήμη: Άμεση: Η εντολή περιλαμβάνει την τιμή που θέλουμε να χειριστούμε, π.χ. πρόσθεσε στο περιεχόμενο του καταχωρητή R0 το «5» Mέσω καταχωρητή: π.χ. πρόσθεσε στο περιεχόμενο του καταχωρητή R0 το περιεχόμενο του καταχωρητή R1 Σε δεδομένα που βρίσκονται στη μνήμη: Σχετικά με τον Program Counter (PC): Π.χ. φόρτωσε το περιεχόμενο της θέσης μνήμης που βρίσκεται 5 θέσεις μπροστά από τον PC, R0 = [PC + 5] Έμμεση: Π.χ. Βρες τη θέση μνήμης από το περιεχόμενο της θέσης μνήμης Χ. Φόρτωσε το περιεχόμενη της θέσης μνήμης που βρήκες, R0 = [[X]] Βάση και offset: Π.χ. υπολόγισε τη θέση μνήμης προσθέτοντας στο περιεχόμενο του καταχωρητή R0 ένα offset, R1 = [R0 + offset] 21
Flashback: αναπαράσταση ακέραιων αριθμών Πρόσημο μέτρο 1 bit για πρόσημο, τα υπόλοιπα bits μέτρο Συμπλήρωμα ως προς 1 (1 s complement) 1 bit πρόσημο, ο αντίθετος προκύπτει με αντιστροφή (ΝΟΤ) όλων των bit Άθροιση: πλήρης αθροιστής, αν προκύψει κρατούμενο, προστίθεται στο αποτέλεσμα Συμπλήρωμα ως προς 2 (2 s complement) 1 bit πρόσημο, ο αντίθετος προκύπτει με αντιστροφή (ΝΟΤ) όλων των bit και στη συνέχεια πρόσθεση της μονάδας Άθροιση: πλήρης αθροιστής, στην πράξη συμμετέχει και στο πρόσημο Η υπεροχή της αναπαράστασης του συμπληρώματος ως προς 2 στην ταχύτητα της πρόσθεσης την καθιστά ως τη δημοφιλέστερη αναπαράσταση ακέραιων αριθμών στους επεξεργαστές 22
LC3 datapath 23
Εντολές LC3 Αποτελούν τη «γλώσσα» του επεξεργαστή Μπορούν να χρησιμοποιηθούν για απευθείας προγραμματισμό (assembly programming): [LABEL] <OP> <OPERANDS> π.χ. ; this is a comment VALUE.BLKW 1 ; variable definition LOOP ADD R2, R3, R4 ADD R2, R3, #10 BRn LOOP JMP R2 LD R4, VALUE Μπορεί να είναι ο τελικός ή ο ενδιάμεσος κώδικας μιας γλώσσας υψηλότερου επιπέδου (π.χ. C to LC3) 24
Κωδικοί εντολών (opcodes) 4 bits 25
SR = Source Register, DR = Destination Register (3 bits) 26
Άμεση διευθυνσιοδότηση (immediate) αν το bit5 = 1 27
Πρόσβαση (άλμα ή ανάγνωση/εγγραφή) σχετική με τον PC 28
Πρόσβαση (άλμα ή ανάγνωση/εγγραφή) ανάλογα με το περιεχόμενο καταχωρητή βάσης (BaseR) και πρόσθεση offset 29
Αριθμητικές και λογικές εντολές: ADD, AND, NOT Μόνο 3 εντολές Οι τελεσταίοι είναι καταχωρητές Δεν πραγματοποιούν πρόσβαση στη μνήμη Οι εντολές ADD και AND έχουν και άμεση λειτουργία (ο τελεσταίος είναι «καλωδιωμένος» στην εντολή) Ο καταχωρητής προορισμού και πηγής μπορεί να είναι ο ίδιος 30
ADD Σύνταξη εντολής: ADD Dst, Src1, Src2 ADD Dst, Src1, imm5 π.χ. ADD R2, R3, R4 ; R2 R3 + R4 ADD R2, R3, #7 ; R2 R3 + 7 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0001 Dst Src1 0 00 Src2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0001 Dst Src1 1 imm5 Λειτουργία: if (bit[5] == 0) Dst = Src1 + Src2; else Dst = Src1 + SEXT(imm5); setcc(); Ενημερώνει τους καταχωρητές Ν, Ζ, P 31
Flashback: επέκταση προσήμου (SEXT) short x = -112; (16 bits) int y; (32 bits) y = (int)x; Πρόσημο-μέτρο 1 s complement 2 s complement Στο παράδειγμα της προηγούμενης διαφάνειας: ADD R2, R3, #7 ; R2 R3 + 7 imm5 = 00111, SEXT(imm5) = 0000000000000111 1000000001110000 10000000000000000000000001110000 1111111110001111 11111111111111111111111110001111 1111111110010000 11111111111111111111111110010000 32
AND Ομοίως με ADD αντί για άθροιση, γίνεται λογικό AND 33
ΝΟΤ Σύνταξη εντολής: NOT Dst, SR π.χ. NOT R4, R2 ;R4 NOT(R2) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1001 Dst Src 1 11111 Λειτουργία: Dst = NOT(Src); setcc(); 34
Εντολές πρόσβασης στη μνήμη Ανάγνωσης / φόρτωσης (read / load) LD: Φόρτωση σχετική με τον PC LDR: Φόρτωση με βάση και offset LDI: Έμμεση φόρτωση Εγγραφής / αποθήκευσης (write / store) ST: Αποθήκευση σχετική με τον PC STR: Αποθήκευση με βάση και offset STI: Έμμεση αποθήκευση Υπολογισμού διεύθυνσης LEA: Υπολογισμός διεύθυνσης και αποθήκευση σε καταχωρητή 35
Προσδιορισμός διεύθυνσης σχετικής με τον PC Αφορά τις εντολές LD και ST Σκοπός είναι να περιγράψουμε μια διεύθυνση μέσα σε μία εντολή. Όμως τόσο οι διευθύνσεις όσο και οι εντολές είναι 16bit Αφού αφαιρέσουμε 4 bit για κωδικό εντολής και 3 bit για να περιγράψουμε τον καταχωρητή που συμμετέχει (Src ή Dst) απομένουν 9 bits για τον καθορισμό διεύθυνσης Χρησιμοποιούμε αυτά τα 9 bit για να περιγράψουμε ένα offset από την τρέχουσα τιμή του PC Με αυτές τις δύο εντολές μπορούμε να έχουμε πρόσβαση σε θέσεις μνήμης «κοντά» στην εντολή που εκτελείται. 9 bits: -256 offset 255 Πρόσβαση σε διεύθυνση Χ: PC - 256 offset PC + 255 Για πρόσβαση οπουδήποτε στη μνήμη χρησιμοποιούνται οι LDR, LDI, STR, STI 36
Προσδιορισμός διεύθυνσης σχετικής με τον PC (συν.) Στο προγραμματιστικό επίπεδο χρησιμοποιούνται κανονικά με τη βοήθεια ετικετών. Αν η πρόσβαση παραβιάζει τον παραπάνω κανόνα, o assembler θα επισημάνει λάθος. Π.χ. VALUE.BLKW 1 ; variable definition LD R4, VALUE Αν οι θέσεις μνήμης που μεσολαβούν (εντολές ή δεδομένα) από τον ορισμό της μεταβλητής VALUE ως την ανάγνωση της μέσω της LD είναι 255, τότε μεταγλωττίζεται το πρόγραμμα. Αλλιώς, ο assembler εντοπίζει λάθος. 37
LD 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Σύνταξη εντολής: LD Dst, LABEL π.χ. LD R4, VALUE ; R4 mem[value] 0010 Dst PCoffset9 Λειτουργία: Dst = mem[pc + SEXT(PCoffset9)]; setcc(); : Η τιμή του PC έχει αυξηθεί αμέσως μετά τη φόρτωση της εντολής 38
LD 39
ST 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Σύνταξη εντολής: ST Src, LABEL π.χ. ST R4, VALUE ; mem[value] R4 0011 Src PCoffset9 Λειτουργία: mem[pc + SEXT(PCoffset9)] = Src; : Η τιμή του PC έχει αυξηθεί αμέσως μετά τη φόρτωση της εντολής 40
ST 41
Πρόσβαση σε ολόκληρη τη μνήμη Οι LD και ST μπορούν να προσπελάσουν θέσεις μνήμης «κοντά» στον PC: +: Με μία εντολή έχω άμεση πρόσβαση στη μνήμη χωρίς να χάνω κύκλους σε υπολογισμό διευθύνσεων -: Περιορίζομαι στο εύρος [PC 256, PC + 255] Για να προσπελάσουμε οποιαδήποτε θέση μνήμης χρειαζόμαστε διεύθυνση που να μπορεί να λάβει τιμή από 0 έως 2 16, άρα χρειάζoνται 16 bit. Μπορούμε να χρησιμοποιήσουμε για τη διεύθυνση: Κάποιον από τους 16 bit καταχωρητές (εντολές LDR, STR) Οποιαδήποτε θέση μνήμης (LDI, STI) 42
LDR 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Σύνταξη εντολής: LDR Dst, BaseR, offset6 π.χ. LDR R4, R2, # 5 ; R4 mem[r2 5] 0110 Dst BaseR offset6 Λειτουργία: Dst = mem[baser + SEXT(offset6)]; setcc(); 43
LDR Η LDR κατά κύριο λόγο χρησιμοποιείται με μηδενικό offset 4 bit κωδικός, 3 bit Dst, 3 bit καταχωρητής βάσης, μένουν 6 bit που μπορούν να αξιοποιηθούν για offset Μπορεί να υποστηρίξει σύνθετους τύπους δομών COORDS.BLKW 3 ; X, Y, Z coordinates ; a lot of code / data here ; > 256 memory locations ADDR.BLKW COORDS ; initialized to the address ; (memory location) of COORDS ; LD COORDS does not work! ; (memory distance > 256) LD R0, ADDR LDR R1, R0, #0 ; R1 stores X coordinate LDR R2, R0, #1 ; R2 stores Y coordinate LDR R3, R0, #2 ; R3 stores Z coordinate 44
LDR 45
STR 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Σύνταξη εντολής: STR Src, BaseR, offset6 π.χ. STR R4, R2, #5 ; mem[r2 + 5] R4 0111 Src BaseR offset6 Λειτουργία: mem[baser + SEXT(offset6)] = Src; 46
STR 47
LDΙ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Σύνταξη εντολής: LDI Dst, LABEL π.χ. 1010 Dst PCoffset9 LDI R4, ONEMORE ; R4 mem[mem[onemore]] Λειτουργία: Dst = mem[mem[pc + SEXT(PCoffset9)]]; setcc(); Λογική: Αποθηκεύω «κοντά» τη διεύθυνση μιας θέσης μνήμης που είναι «μακρυά» και χρησιμοποιώ την κοντινή διεύθυνση για τη μακρυνή προσπέλαση. Διαβάζει απευθείας το περιεχόμενο της θέσης μνήμης στην οποία δείχνει ένας δείκτης (εδώ ο ONEMORE) 48
LDΙ 49
STΙ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Σύνταξη εντολής: STI Src, LABEL π.χ. 1011 Src PCoffset9 STI R4, NOT_HERE ; mem[mem[not_here]] R4 Λειτουργία: mem[mem[pc + SEXT(PCoffset9)]] = Src; 50
STΙ 51
LEA 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Σύνταξη εντολής: LEA Dst, LABEL π.χ. LEA R4, TARGET ; R4 address of TARGET. 1110 Dst PCoffset9 Λειτουργία: Dst = PC + SEXT(PCoffset9); setcc(); Λογική: Χρησιμοποιείται για την πρόσβαση δεδομένων σε πίνακα που βρίσκεται «κοντά» στην εντολή εκτέλεσης 52
Εντολές ελέγχου ροής: JMP, BR JMP: Άλμα (JuMP) χωρίς συνθήκη (συμβαίνει πάντα) BR: Άλμα (BRanch) υπό συνθήκη (συμβαίνει αν ικανοποιείται η συνθήκη) Καταχωρητές συνθήκης Condition Codes (CC - 1bit) N, Negative Z, Zero P, Positive Λαμβάνουν τιμή από τις εντολές που γράφουν σε καταχωρητές (ADD, AND, NOT, LD, LDR, LDI, LEA) Θυμηθείτε setcc() στην περιγραφή λειτουργίας των εντολών Μόνο ένας από τους καταχωρητές μπορεί να έχει την τιμή «1», ανάλογα με το τι συνέβη στην τελευταία από τις παραπάνω εντολές που εκτελέστηκε 53
JMP Σύνταξη εντολής: JMP BaseR π.χ. JMP R2 ; PC R2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1100 000 BaseR 000000 Λειτουργία: PC = BaseR; 54
BR 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Σύνταξη εντολής: BRn LABEL BRzp LABEL BRz LABEL BRnp LABEL BRp LABEL BRnz LABEL BRnzp LABEL BR LABEL π.χ. 0000 n z p PCoffset9 BRzp LOOP ; Branch to LOOP if the last result was zero or positive. BR NEXT ; Unconditionally branch to NEXT. Λειτουργία: if ((n AND N) OR (z AND Z) OR (p AND P)) PC = PC + SEXT(PCoffset9); 55
Εντολές υπορουτινών: Εντολές για την υποστήριξη υπορουτινών: Άλμα σε υπορουτίνα (JSR, JSRR) Επιστροφή από υπορουτίνα (RET) Παρέχουν: Προγραμματιστική ευκολία Επίδοση Βοήθεια για αποφυγή σφαλμάτων Κλασσικό παράδειγμα υποστήριξης του υλικού στις προγραμματιστικές πρακτικές 56
JSR, JSRR 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0100 1 PCoffset11 Σύνταξη εντολής: JSR LABEL JSRR BaseR π.χ. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0100 0 00 BaseR 000000 JSR QUEUE ; Jump to memory location with label QUEUE ; Save current memory location (PC) in R7 JSRR R3 ; Jump to memory location contained in R3 ; Save current memory location (PC) in R7 Λειτουργία: R7 = PC ; JSR: Άλμα σε ρουτίνα «κοντά» if (bit[11] == 0) JSRR: Άλμα σε ρουτίνα «μακριά» PC = BaseR; else PC = PC + SEXT(PCoffset11); 57
RET Σύνταξη εντολής: RET π.χ. RET 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1100 000 111 000000 Λειτουργία: PC = R7; Πρόκειται για την JMP με BaseR = 111 (7) 58
Αλληλεπίδραση με το Λειτουργικό Σύστημα (ΛΣ) Τι είναι το ΛΣ; Λογισμικό που αναλαμβάνει να διεκπεραιώσει συγκεκριμένες λειτουργίες διαχείρισης Ρόλος ΛΣ γενικά: Έλεγχος πρόσβασης στο υλικό (μνήμη, περιφερειακές συσκευές Ε/Ε) Υποστήριξη εκτέλεσης πολλών προγραμμάτων (multitasking) Διαχείριση μνήμης εικονική μνήμη Προστασία / ασφάλεια Πολιτικές διαχείρισης πόρων 59
Επίλυση προβλημάτων μέσω Η/Υ Πρόβλημα Λειτουργικό Σύστημα Αλγόριθμοι Γλώσσα Αρχιτεκτονική Συνόλου Εντολών Μικροαρχιτεκτονική Κυκλώματα Στοιχεία 60
Πού βρίσκεται το ΛΣ; Πρόγραμμα και δεδομένα φορτωμένα στη μνήμη τους συστήματος 61
Πώς εμπλέκεται το ΛΣ; A: TRAP Ζητά τη συνδρομή του ένα πρόγραμμα. Γίνεται ρητά με εντολή στον κώδικα του προγράμματος (trap) που αντιστοιχεί σε άλμα σε προκαθορισμένη θέση μνήμης (trap vector table) Π.χ. «Δώσε μου ένα χαρακτήρα από το πληκτρολόγιο» 2 3 1 62
Πώς εμπλέκεται το ΛΣ; Β: Exception Ανταποκρινόμενο σε σφάλμα του υπό εκτέλεση προγράμματος (exception). Π.χ. Διαίρεση με το «0» (x86), λάθος κωδικός εντολής (LC3) Γίνεται άλμα σε προκαθορισμένη θέση μνήμης (ανάλογα με το είδος του σφάλματος) όταν εντοπιστεί το σφάλμα από το υλικό του επεξεργαστή 2 3 1 63
Πώς εμπλέκεται το ΛΣ; Γ: Interrupt Ανταποκρινόμενο σε αίτημα διακοπής από κάποια περιφερειακή συσκευή Π.χ. ο χρήστης πάτησε ένα πλήκτρο, η κάρτα δικτύου έχει λάβει δεδομένα Γίνεται άλμα σε προκαθορισμένη θέση μνήμης ανάλογα με τη συσκευή που ζητά τη διακοπή όταν αυτή αναγνωριστεί από το υλικό 2 3 1 64
TRAP Σύνταξη εντολής: TRAP trapvector8 π.χ. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1111 0000 trapvect8 TRAP x23 ; Directs the operating system to execute the IN system ; call. The starting address of this system call is contained ; in memory location x0023. Λειτουργία: R7 = PC ; PC = mem[zext(trapvect8)]; 65
Είσοδος/Έξοδος (Ε/Ε) Input/Output (I/O) Γενικά υπάρχουν 2 στρατηγικές: Memory-mapped I/O: Ο επεξεργαστής επικοινωνεί με τις περιφερειακές συσκευές μέσω εντολών προσπέλασης στη μνήμη (δεν χρειάζονται ειδικές εντολές για Ι/Ο) Ένα μέρος των διευθύνσεων της μνήμης απεικονίζεται στις περιφερειακές συσκευές I/O (port) mapped I/O: Ο επεξεργαστής διαθέτει ρητές εντολές για είσοδο / έξοδο (π.χ. IN, OUT στον x86) Οι διευθύνσεις για τη μνήμη και τις συσκευές είναι διακριτές Ο LC3 υποστηρίζει memory-mapped I/O 66
Είσοδος/Έξοδος (Ε/Ε) Input/Output (I/O) Image taken from: http://me-lrt.de/memory-map-port-isolated-input 67
E/E στον LC3 Διαθέτει 2 περιφερειακές συσκευές: Πληκτρολόγιο Κονσόλα (οθόνη) Trap vector Assembler name Description x20 GETC Διαβάζει ένα χαρακτήρα από το πληκτρολόγιο και τον γράφει στον καταχωρητή R0 x21 OUT Γράφει το χαρακτήρα που βρίσκεται στον R0 στην οθόνη x22 PUTS Γράφει ένα string στην οθόνη (ξεκινώντας από τη διεύθυνση που δείχνει ο R0 και μέχρι να βρει x0000) x23 IN Διαβάζει ένα χαρακτήρα από το πληκτρολόγιο και τον γράφει στον καταχωρητή R0. Τυπώνει μήνυμα στην οθόνη (π.χ. Give a character) και γράφει το χαρακτήρα που πάτησε ο χρήστης στην οθόνη. x24 PUTSP Παραλλαγή της PUTS (2 χαρακτήρες ανά θέση μνήμης) x25 HALT Σταματά την εκτέλεση και τυπώνει ένα μήνυμα στην οθόνη 68
E/E στον LC3 Η επικοινωνία με κάθε περιφερειακή συσκευή αναλαμβάνεται από το ΛΣ μέσω κάποιου οδηγού (driver) Ο οδηγός γνωρίζει τις λεπτομέρειες υλοποίησης κάθε συσκευής (π.χ. πόσους καταχωρητές διαθέτει η συσκευή, που είναι απεικονισμένοι, με ποιες εντολές/πρωτόκολλο πρέπει να επικοινωνήσει Διεύθυνση Όνομα καταχωρητή Ε/Ε Λειτουργία xfe00 Keyboard status register Το bit15 δείχνει αν υπάρχει νέος χαρακτήρας στο πληκτρολόγιο xfe02 Keyboard data register Περιλαμβάνει τον τελευταίο χαρακτήρα που πατήθηκε xfe04 Display status register Το bit15 δείχνει αν η οθόνη είναι έτοιμη να δεχτεί νέο χαρακτήρα xfe06 Display data register Ο χαρακτήρας που γράφεται σε αυτό τον καταχωρητή εμφανίζεται στην οθόνη xfffe Machine control register Αν το bit15 γίνει 0, το επεξεργαστής σταματά 69
E/E στον LC3 70
Παράδειγμα: ανάγνωση χαρακτήρα GETC JMP OS_GETC ; at memory location x0020 OS_KBSR.FILL xfe00 ; OS_KBDR.FILL xfe02 ; OS_GETC LDI R0, OS_KBSR BRZP OS_GETC LDI R0, OS_KBDR RET TRAP GETC ; user code ; memory location > x3000 71
Παράδειγμα: ανάγνωση χαρακτήρα GETC JMP OS_GETC ; at memory location x0020 OS_KBSR.FILL xfe00 ; OS_KBDR.FILL xfe02 ; OS_GETC LDI R0, OS_KBSR BRZP OS_GETC Κώδικας χρήστη (user code) LDI R0, OS_KBDR RET TRAP GETC ; user code ; memory location > x3000 72
Παράδειγμα: ανάγνωση χαρακτήρα GETC JMP OS_GETC ; at memory location x0020 OS_KBSR.FILL xfe00 ; OS_KBDR.FILL xfe02 ; OS_GETC LDI R0, OS_KBSR BRZP OS_GETC Κώδικας ΛΣ (OS/ kernel code) LDI R0, OS_KBDR RET TRAP GETC ; user code ; memory location > x3000 73
Exceptions και Interrupts Όταν συμβεί διακοπή (interrupt) ή σφάλμα (exception) τότε ο επεξεργαστής αυτόματα προχωρά στις παρακάτω ενέργειες: Εισέρχεται σε Supervisor mode θέτοντας το bit15 του PSR καταχωρητή Σώζεται η τρέχουσα τιμή του PC και του PSR Γίνεται άλμα στην κατάλληλη θέση του Interrupt Vector Table Εκτελείται η ρουτίνα εξυπηρέτησης διακοπής Τελευταία εντολή της ρουτίνας εξυπηρέτησης διακοπής είναι η RTI (βλ. συνέχεια) 74
RTI Σύνταξη εντολής: RTI 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1000 000000000000 Λειτουργία: if (PSR[15] == 0) PC = mem[r6] ; R6 is the SSP R6 = R6+1; TEMP = mem[r6]; R6 = R6+1; PSR = TEMP ; the privilege mode and condition codes of ; the interrupted process are restored else Initiate a privilege mode exception; 75
Επιπλέον διάβασμα: Introduction to Computing Systems: From Bits and Gates to C and Beyond, 2/e, Yale N. Patt, University of Texas at Austin, Sanjay J. Patel, University, of Illinois at Urbana/Champaign, Appendix A: The LC3 ISA: http://highered.mheducation.com/sites/dl/free/0072467509/104653/p attpatelappa.pdf 76