ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων 2.1 Αρχιτεκτονική Υπολογιστών 2.1 Αρχιτεκτονική Υπολογιστών 2.2 Γλώσσα Μηχανής 2.3 Εκτέλεση προγράµµατος 2.4 Αριθµητικές και λογικές εντολές 2.5 Επικοινωνία µε άλλες συσκευές 2.6 Άλλες αρχιτεκτονικές H Κεντρική µονάδα επεξεργασίας (CPU) ή επεξεργαστής περιέχει: την αριθµητική και λογική µονάδα (ALU) τη µονάδα ελέγχου τους καταχωρητές (γενικής και ειδικής χρήσης) την «κρυφή» ή λανθάνουσα µνήµη. O δίαυλος (bus), συνδέει την CPU µε την κύρια µνήµη. Η Μητρική κάρτα (motherboard) εµπερικλείει όλα τα παραπάνω, και πολλά άλλα. 1 2 Η έννοια του αποθηκευµένου προγράµµατος Η CPU και η κύρια µνήµη συνδέονταιµέσω ενός διαύλου (Σχήµα 2.1) Ένα πρόγραµµα είναι απλώς ένας ιδιαίτερος τύπος δεδοµένων. Ένα πρόγραµµα µπορεί να αποθηκευτεί στην κύρια µνήµη Μία µηχανή γενικής χρήσεως µπορεί να τρέξει πολλά διαφορετικά προγράµµατα. 3 4
2.2 Γλώσσα µηχανής: ορισµοί Φιλοσοφίες σχεδιασµού της CPU Γλώσσα µηχανής είναι το σύνολο όλων των εντολών µαζί µε το σύστηµα κωδικοποίησης που αναγνωρίζονται από µία υπολογιστική µηχανή. Εντολή µηχανής είναι µία εντολή κωδικοποιηµένη ως σχήµα bit που αναγνωρίζεται απευθείας από τη CPU. Υπολογιστής περιορισµένου συνόλου εντολών (RISC): Εκτέλεση ελάχιστου συνόλου από εντολές µηχανής, γρήγορη και αποδοτική µηχανή. Παραδείγµατα: PowerPC, IBM και Motorola. Υπολογιστής σύνθετου συνόλου εντολών (CISC): Μεγάλο πλήθος σύνθετων εντολών κάνει πιο εύκολο τον προγραµµατισµό. Παραδείγµατα: Pentium της Intel. 5 6 Οµάδες εντολών µηχανής Πρόσθεση τιµών που είναι αποθηκευµένες στη µνήµη (Σχήµα 2.2) Οµάδα µεταφοράς δεδοµένων: αντιγράφει δεδοµένα µεταξύ CPU και κύριας µνήµης. Αριθµητική και λογική οµάδα: χρησιµοποιεί υπάρχουσες τιµές δεδοµένων για να υπολογίσει µία νέα τιµή δεδοµένων. Οµάδα ελέγχου: κατευθύνει την εκτέλεση του προγράµµατος. Βήµα 1. Πάρε από τη µνήµη µία από τις τιµές που πρόκειται να προστεθούν και τοποθέτησέ τη σε έναν καταχωρητή. Βήµα 2. Πάρε από τη µνήµη την άλλη τιµή και τοποθέτησέ τη σε έναν άλλον καταχωρητή. Βήµα 3. Ενεργοποίησε το κύκλωµα της πρόσθεσης µε τους καταχωρητές που χρησιµοποιήθηκαν στα Βήµατα 1 και 2 ως εισόδους και ένα διαφορετικό καταχωρητή για την αποθήκευση του αποτελέσµατος. Βήµα 4. Αποθήκευσε το αποτέλεσµα στη µνήµη. Βήµα 5. Τέλος. 7 8
ιαίρεση τιµών αποθηκευµένων στη µνήµη (Σχήµα 2.2) H αρχιτεκτονική της µηχανής που περιγράφεται στο Παράρτηµα Γ. (Σχήµα 2.4) Βήµα 1. ΦΟΡΤΩΣΕ (LOAD) σε έναν καταχωρητή µία τιµή από τη µνήµη. Βήµα 2. ΦΟΡΤΩΣΕ (LOAD) σε ένα διαφορετικό καταχωρητή µία από άλλη τιµή από τη µνήµη. Βήµα 3. Αν η δεύτερη τιµή είναι µηδέν, ΠΗΓΑΙΝΕ (JUMP) στο Βήµα 6. Βήµα 4. ιαίρεσε το περιεχόµενο του πρώτου καταχωρητή µε το δεύτερο καταχωρητή και τοποθέτησε το αποτέλεσµα σε έναν τρίτο καταχωρητή. Βήµα 5. ΑΠΟΘΗΚΕΥΣΕ (STORE) τα περιεχόµενα του τρίτου καταχωρητή στη µνήµη. Βήµα 6. ΤΕΛΟΣ (STOP). 9 10 Τα µέρη µίας εντολής µηχανής H σύνθεση µίας εντολής για τη µηχανή του Παραρτήµατος Γ. (Σχήµα 2.5) Πεδίο του κωδικού λειτουργίας όπου το σχήµα bit προσδιορίζει ποια από τις στοιχειώδεις λειτουργίες ζητάει η εντολή. Μία λειτουργία ανά εντολή. Πεδίο των τελεστέων όπου το σχήµα bit παρέχει πιο λεπτοµερείς πληροφορίες σχετικά µε τη λειτουργία. Το πλήθος των τελεστέων διαφέρει ανάλογα µε το κωδικό λειτουργίας. STORE E 100 Ονοµαστική µορφή 11 12
Αποκωδικοποίηση της εντολής 35Α7 (Σχήµα 2.6) Μια κωδικοποιηµένη έκδοση των εντολών του Σχήµατος 2.2 (Σχήµα 2.7) Κωδικοποιηµένες Εντολές Ερµηνεία Βήµα 1. Πάρε από τη µνήµη µία από τις τιµές που πρόκειται να προστεθούν και τοποθέτησέ τη σε έναν καταχωρητή. Βήµα 2. Πάρε από τη µνήµη την άλλη τιµή και τοποθέτησέ τη σε έναν άλλον καταχωρητή. Βήµα 3. Ενεργοποίησε το κύκλωµα της πρόσθεσης µε τους καταχωρητές που χρησιµοποιήθηκαν στα Βήµατα 1 και 2 ως εισόδους και ένα διαφορετικό καταχωρητή για την αποθήκευση του αποτελέσµατος. Βήµα 4. Αποθήκευσε το αποτέλεσµα στη µνήµη. Βήµα 5. Τέλος 156C 166D 5056 306E C000 Φόρτωσε στον καταχωρητη 5 το σχήµα bit που βρίσκεται στο κελί µνήµης µε διεύθυνση 6C Φόρτωσε στον καταχωρητη 6 το σχήµα bit που βρίσκεται στο κελί µνήµης µε διεύθυνση 6D Πρόσθεσε τα περιεχόµενα των καταχωρητών 5 και 6 µε δεδοµένο ότι βρίσκονται σε µορφή συµπληρώµατος ως προς δύο, και αποθήκευσε το αποτέλεσµα στον καταχωρητή 0 Αποθήκευσε τα περιεχόµενα του καταχωρητή 0 στο κελί µνήµης µε διεύθυνση 6Ε Τέλος 13 14 Μία «απλούστερη» γλώσσα µηχανής (1/2) Μία «απλούστερη» γλώσσα µηχανής (2/2) Θεωρούµε ότι υπάρχει µόνο ένας καταχωρητής: ο Α (ή ACC) Περιγραφή εντολών: Εντολή Πεδίο του κωδικού λειτουργίας θέση µνήµης LOAD 100 Πεδίο των τελεστέων 4 bits 12 bits 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x διεύθυνση µιας θέσης Μ στην κύρια µνήµη LOAD M M -> ACC STORE M ACC -> M ADD M ACC+M -> ACC SUBTRΑCT M ACC-M -> ACC MULTIPLY M ACC*M -> ACC DIVIDE M ACC/M -> ACC JUMP M πήδα στην θέση Μ JUMPZERO M πήδα στην θέση Μ εάν ACC=0 JUMPSUB M πήδα στην υπορουτίνα στην θέση Μ RETURN M επέστρεψε από υπορουτίνα στη θέση Μ HALT 15 16
Παράδειγµα 2.3 Εκτέλεση προγράµµατος 946 LOAD 959 947 STORE 958 948 LOAD 957 949 JUMPZERO 956 950 SUBTRACT 959 951 STORE 957 952 LOAD 958 953 ADD 958 954 STORE 958 955 JUMP 948 956 HALT 957 45 958 959 1 960 ACC x y σταθερά =1 Υπολογισµός του x y = 2 = 1 2 2 L 2 1ο βήµα 2ο βήµα y:=1 while x!= 0 do { x:=x-1; y:= y+y} Ελέγχεται από δύο καταχωρητές ειδικής χρήσης: Μετρητής προγράµµατος που διευθυνσιοδοτεί την επόµενη εντολή. Καταχωρητής εντολών ο οποίος δείχνει την τρέχουσα εντολή. Βήµατα που ελέγχονται από τη µονάδα ελέγχου: Προσκόµιση. Αποκωδικοποίηση. Εκτέλεση. 17 18 Οκύκλοςµηχανής (Σχήµα 2.8) Αποκωδικοποίηση της εντολής Β258 (Σχήµα 2.9) 19 20
Το πρόγραµµα του Σχήµατος 2.7 αποθηκευµένο στην κύρια µνήµη και έτοιµο προς εκτέλεση (Σχήµα 2.10) Εκτέλεση του βήµατος προσκόµισης του κύκλου µηχανής (Σχήµα 2.11) 156C Φόρτωσε στον καταχωρητη 5 το σχήµα bit που βρίσκεται στο κελί µνήµης µε διεύθυνση 6C. 166D Φόρτωσε στον καταχωρητη 6 το σχήµα bit που βρίσκεται στο κελί µνήµης µε διεύθυνση 6D. 5056 Πρόσθεσε τα περιεχόµενα των καταχωρητών 5 και 6 µε δεδοµένο ότι βρίσκονται σε µορφή συµπληρώµατος ως προς δύο, και αποθήκευσε το αποτέλεσµα στον καταχωρητή 0. 306E Αποθήκευσε τα περιεχόµενα του καταχωρητή 0 στο κελί µνήµης µε διεύθυνση 6Ε. C000 Τέλος. 21 22 Εκτέλεση του βήµατος προσκόµισης του κύκλου µηχανής (Σχήµα 2.11) Εκτέλεση προγράµµατος µε υπορουτίνες (1/2) 306 307 JUMPSUB 945 308 945 946 διεύθ. επιστροφής XXXX 947 XXXX 948 XXXX 959 RETURN 945 Πρόγραµµασε γλώσσα µηχανής: Γράφεται από τον compiler, χρησιµοποιεί Πληροφορία που υπάρχει από την αρχή : στατική (άρα την ξέρει ο compiler όταν µεταφράζει το πρόγραµµα σε γλώσσα µηχανής) Πληροφορία που µπαίνει κατά την διάρκεια του τρεξίµατος του προγράµµατος : δυναµική (ο compiler ξέρει πως να φτιαχτεί at run time) module δυναµική πληροφορία στατική πληροφορία 23 24
Εκτέλεση προγράµµατος µε υπορουτίνες (2/2) Πέρασµα παραµέτρων κατά την εκτέλεση προγράµµατος (1/2) 306 307 JUMPSUB 945 308 410 411 JUMPSUB 945 412 χώρος για δυναµική χρήση 945 946 XXXX 947 XXXX 948 XXXX 959 RETURN 945 main program x := 5; y := 6; z := f(x,y); r := 12; d := 3; z := f(r,d); module f(a,b); {t1:= a+b; t2:= 2*t1; return t2 } πραγµατικές παράµετροι τυπικές παράµετροι τιµήπου επιστρέφεται 25 26 Πέρασµα παραµέτρων κατά την εκτέλεση προγράµµατος (2/2) 2.4 Αριθµητικές και λογικές πράξεις module 2 module 1 βασικό πρόγραµµα µνήµη κώδικας µεταβλητές κώδικας µεταβλητές κώδικας µεταβλητές 945 activation record ενός module return value b a return address κώδικας της f µεταβλητές main program x := 5; y := 6; z := f(x,y); r := 12; d := 3; z := f(r,d); module f(a,b); {t1:= a+b; t2:= 2*t1; return t2 } κώδικας µηχανής. x -> 945 1 y -> 945 2 jumpsub 945 z <- 945 3... r -> 945 1 d -> 945 2 jumpsub 945 z <- 945 3.. t1 <- (945-1)+(945-2) t2 <- t1 * 2 t2 -> 945 3 return 945 Λογικές πράξεις : AND, OR, XOR. Πράξεις περιστροφής και ολίσθησης: κυκλική ολίσθηση, λογική ολίσθηση και αριθµητική ολίσθηση. Αριθµητικές πράξεις: πρόσθεση, αφαίρεση, πολλαπλασιασµός και διαίρεση. Συνήθως διαχωρίζουν τις εντολές για διαφορετικού τύπου δεδοµένα. 27 28
Περιστροφή του σχήµατος bit Α3 ένα bit προς τα δεξιά (Σχήµα 2.12) Επικοινωνία µε άλλες συσκευές (1/2) Η επικοινωνία µεταξύ ενός υπολογιστή και άλλων συσκευών συνήθως διεκπεραιώνεται µέσω µίας ενδιάµεσης συσκευής του ελεγκτή (controller). Θύρα (port) είναι το σύνολο των διευθύνσεων που αντιστοιχίζεται σε µία συσκευή. Αντιστοιχισµένη στη µνήµη Ε/Ε: η CPU διαβάζει από ή γράφει στις διευθύνσεις της θύρας του ελεγκτή. 29 30 Επικοινωνία µε άλλες συσκευές (2/2) Ελεγκτές συνδεδεµένοι στο δίαυλο µίας µηχανής (Σχήµα 2.13) Άµεση προσπέλαση µνήµης (DMA) είναι η δυνατότητα του ελεγκτή να συνδέεται, µέσω του διαύλου, µε την κύρια µνήµη του υπολογιστή. Στενωπός µποτιλιάρισµα (bottleneck) von Neumann: η ανεπαρκής ταχύτητα του διαύλου παρεµποδίζει τη λειτουργία του υπολογιστή. Χειραψία (handshake) είναι η διαδικασία ελέγχου της µεταφοράς δεδοµένων µεταξύ συσκευών διαφορετικών ταχυτήτων. 31 32
Μια σχηµατική αναπαράσταση της αντιστοίχισης στη µνήµη Ε/Ε (Σχήµα 2.14) 2.5 Ρυθµοί επικοινωνίας δεδοµένων Μονάδες µέτρησης: bps: bits ανά δευτερόλεπτο Kbps: kilo-bps ή 1.000 bps Mbps: mega-bps ή 1.000.000 bps Gbps: giga-bps ή 1.000.000.000 bps Εύρος ζώνης (bandwidth) της διαδροµής επικοινωνίας είναι ο µέγιστος διαθέσιµος ρυθµός ροής δεδοµένων. 33 34 Τύποι διαδροµών επικοινωνίας δεδοµένων 2.6 Άλλες αρχιτεκτονικές Στην παράλληλη επικοινωνία µεταφέρονται την ίδια στιγµή πολλά bits, ένα σε κάθε γραµµή. Γρήγορη αλλά πολύπλοκη διαδικασία. Π.χ. εσωτερικός δίαυλος, συστήµατα µαζικής αποθήκευσης. Στη σειριακή επικοινωνία µεταφέρεται ένα µόνο bit τη φορά. Αργή αλλά απλούστερη διαδικασία. Π.χ. επικοινωνία µεταξύ διαφορετικών υπολογιστών. Το µόντεµ (διαµορφωτής αποδιαµορφωτής) µετατρέπει σχήµατα bits από ψηφιακά σε αναλογικά και αντιστρόφως. ιεκπεραιωτική ικανότητα: συνολική εργασία προς συνολικό χρόνο. ιοχέτευση, η οποία επιτρέπει την επικάλυψη των βηµάτων του κύκλου µηχανής. Παράλληλη επεξεργασία, που κάνει ταυτόχρονη χρήση πολλών επεξεργαστών. SISD: µη παράλληλη επεξεργασία. MIMD: διαφορετικά προγράµµατα, διαφορετικά δεδοµένα. SIMD: ίδια προγράµµατα, διαφορετικά δεδοµένα. 35 36