Αρχιτεκτονική Υπολογιστών

Σχετικά έγγραφα
Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών. Αρχιτεκτονική Συνόλου Εντολών (Instruction Set Architecture)

Αρχιτεκτονική Υπολογιστών. Αρχιτεκτονική Συνόλου Εντολών (Instruction Set Architecture)

; Γιατί είναι ταχύτερη η λήψη και αποκωδικοποίηση των εντολών σταθερού μήκους;

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Intel x86 ISA. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΗΥ

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Αρχιτεκτονική υπολογιστών

Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) Τμήματα ΚΜΕ (CPU) Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (Ι)

Οργάνωση Υπολογιστών (Ι)

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Αρχιτεκτονικές Συνόλου Εντολών

Αρχιτεκτονική x86(-64) 32-bit και 64-bit λειτουργία. Αρχιτεκτονική x86(-64) Αρχιτεκτονική επεξεργαστών x86(-64) Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

7. Ροή ελέγχου 8. Μηχανισμοί εισόδου/εξόδου

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 6 ο και 7 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Εντολές γλώσσας μηχανής

ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

; Τι περιέχεται στη συσκευασία ενός μικροεπεξεργαστή σήμερα;

Σύγχρονες Αρχιτεκτονικές Υπολογιστών

Εργαστήριο 3 ΟΡΓΑΝΩΣΗ ΤΗΣ ΚΜΕ. Εισαγωγή

Αρχιτεκτονική υπολογιστών

5. Σχεδιάστε ένα κύκλωμα περιττής ισοτιμίας για το βασικό κώδικα ΑSCII (7 bits).

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Εισαγωγή στην πληροφορική -4

Αρχιτεκτονική Υπολογιστών

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Αρχιτεκτονική Υπολογιστών

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

Αρχιτεκτονική υπολογιστών

Αρχιτεκτονική υπολογιστών

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών ARM και x86

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Φροντιστήριο: MIPS assembly

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Υποστήριξη διαδικασιών στο υλικό των υπολογιστών

6. Επιστροφή ελέγχου στο σημείο εκκίνησης

Στοιχεία από Assembly Γιώργος Μανής

Data-Level Parallelism Linking & Loading

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος

MIPS functions and procedures

Οργάνωση Η/Υ. Γλώσσα Assembly. Τμήμα Εφαρμσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Εργαστήριο ΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Αρχιτεκτονική Υπολογιστών

Δομημένος Προγραμματισμός

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

ΤΕΧΝΙΚΕΣ ΑΥΞΗΣΗΣ ΤΗΣ ΑΠΟΔΟΣΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ I

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομημένος Προγραμματισμός (ΤΛ1006)

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy

Οργάνωση Υπολογιστών (IΙI)

Εντολές του MIPS (2)

ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων

Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Αρχιτεκτονική Υπολογιστών

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Αρχιτεκτονική Υπολογιστών

Ερωτήσεις θεωρίας MY. Μέρος Α. Υλικό.

Κεντρική Μονάδα Επεξεργασίας

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 3 Εντολές του MIPS (2)

Αρχιτεκτονική Υπολογιστών

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Αρχιτεκτονική Υπολογιστών

Δομές Δεδομένων (Data Structures)

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Μικροαρχιτεκτονική του LC3

Οργάνωση Η/Υ. Γιώργος ηµητρίου. Μάθηµα 2 ο. Πανεπιστήµιο Θεσσαλίας - Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Σημειώσεις για τον 80x86

Αρχιτεκτονική Υπολογιστών

Συναρτήσεις-Διαδικασίες

Εικονική Μνήμη (Virtual Μemory)

Αρχιτεκτονική υπολογιστών

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. Τρίτη (3 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Δομημένος Προγραμματισμός (ΤΛ1006)

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy. Chapter 5. Ο επεξεργαστής: διαδρομή δεδομένων και μονάδα ελέγχου

Βασικές συσκευές Ε/Ε. Είσοδος Έξοδος στον υπολογιστή. Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (IΙI) Μ.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή Βασικές εντολές Εκτέλεση βήµα-βήµα Εξέταση/Ανάθεση GDB-101. Νίκος Ντάρµος Τµήµα Πληροφορικής Πανεπιστήµιο Ιωαννίνων

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

1. Οργάνωση της CPU 2. Εκτέλεση εντολών 3. Παραλληλία στο επίπεδο των εντολών 4. Γραμμές διοχέτευσης 5. Παραλληλία στο επίπεδο των επεξεργαστών

i Όλες οι σύγχρονες ΚΜΕ είναι πολυπλοκότερες!

Chapter 5. Ο επεξεργαστής: διαδρομή δεδομένων και μονάδα ελέγχου. Ενδέκατη (11 η ) δίωρη διάλεξη.

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5

Transcript:

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Βασικές Πηγές: Αρχιτεκτονική Υπολογιστών: μια Δομημένη Προσέγγιση, Α. Tanenbaum, Vrije Universiteit, Amsterdam. Computer Organization, W. Robinson, CS-231, Vanderbildt Univesrity. Computer Systems: a Programmers Perspective, R. Bryant, D. O' Hallaron, Carnegie-Mellon University. Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός, Π. Ευριπίδου, Πανεπιστήμιο Κύπρου Αρχιτεκτονική Υπολογιστών, Ν. Στεφανιδάκης, Ιόνιο Πανεπιστήμιο. Λειτουργικά Συστήματα, Κ. Διαμαντάρας, ΤΕΙΘ Σύνθεση: Κ.Γ. Μαργαρίτης, Πανεπιστήμιο Μακεδονίας, Τμήμα Εφαρμοσμένης Πληροφορικής.

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις Pentium 4 Ενδεικτικά Προγράμματα

Αρχιτεκτονική Συνόλου Εντολών Instruction Set Architecture (ISA)... bytecode compiler interpreter Java program JVM ` bytecode hardware (μικροκώδικας ή ευθεία υλοποίηση) Το επίπεδο ISA είναι η διεπαφή μεταξύ των μεταγλωττιστών και του υλικού. Το χαμηλότερο επίπεδο συμβατικού προγραμματισμού. Εκεί όλες οι γλώσσες είναι ίδιες (dis-assembly). Η Java αποτελεί μια ειδική περίπτωση.

Παραδείγματα ISA ΙΑ-32 και Ιntel 64: ISA της Intel http://www.intel.com/products/processor/manuals/index.htm Εισαγωγικό εγχειρίδιο: Software Developers Manual: Basic Architecture Πολύ πληροφοριακό υλικό αλλά όχι πλήρεις προδιαγραφές. Kλειστή αρχιτεκτονική JVM: εικονικό ISA της Sun JAVA http://java.sun.com/docs/books/jvms/second_edition/html/vmspectoc.doc.html Υπερσύνολο της IJVM. Πλήρεις προδιαγραφές γιά τη κατασκευή μεταγλωττιστή ή διερμηνευτή ή επεξεργαστή. Aνοικτή αρχιτεκτονική Άλλες ανοικτές αρχιτεκτονικές: SPARC, MIPS..

Γιατί είναι σημαντικό το Σύνολο Εντολών * Πρέπει να είναι αρκετά απλό/λεπτομερές ώστε να υλοποιείται αποτελεσματικά από το υλικό και αρκετά αφαιρετικό/κανονικό ώστε να αποτελεί το 'στόχο' των μεταγλωττιστών. * Πρέπει να έχει χρονική διάρκεια/προοπτική, να μην μεταβάλλεται συχνά (επαύξηση μόνο). * Πρέπει να λαμβάνει υπ' όψη του θέματα υλοποίησης, δηλαδή να συμβάλλει στην αποδοτική υλοποίηση του * Δεν μπορεί να κάνει τα πάντα: ειδικές αρχιτεκτονικές και σύνολα εντολών για ειδικές εφαρμογές (λαμβάνεται υπ' όψη το κόστος / απόδοση / εύρος εφαρμογής). πχ ενσωματωμένα και κινητά συστήματα, μικροελεγκτές, επεξεργαστές γραφικών.

Αρχιτεκτονική Συνόλου Εντολών Γλώσσα Μηχανής: τι ορίζει; (1) * Πού βρίσκονται οι εντολές και τα δεδομένα; Ποιό είναι το μοντέλο μνήμης; Πώς βλέπει το Σύνολο Εντολών τη κύρια μνήμη; * Που κρατά ο επεξεργαστής τα εσωτερικά του δεδομένα; Ποιοί είναι ο καταχωρητές που βλέπει το Σύνολο Εντολών; Ποιές είναι οι λειτουργίες τους (ειδικοί - γενικοί). * Ποιούς βασικούς τύπους δεδομένων αναγνωρίζει το Σύνολο Εντολών; * Ποιές βασικές πράξεις και λειτουργίες υποστηρίζει - ποιό είναι το ρεπερτόριο του Συνόλου Εντολών; Ορισμός πράξεων μόνο σε λειτουργικό επίπεδο (τι κάνουν όχι πώς το κάνουν).

Αρχιτεκτονική Συνόλου Εντολών Γλώσσα Μηχανής: τι ορίζει; (2) * Πώς κωδικοποιείται μια εντολή; Πως ορίζονται τα opcodes; * Πώς ορίζονται οι τελεστέοι (operads); Πόσοι μπορεί να είναι οι τελεστέοι ανά τύπο εντολής; Πού βρίσκονται (μνήμη ή καταχωρητές) και πώς προσκομίζονται οι τελεστέοι (διευθυνσιοδότηση, addressing modes); * Πώς γίνεται η επικοινωνία με τις βασικές περιφερειακές συσκευές; * Πώς ελέγχεται η ροή του προγράμματος (διακλαδώσεις, υπορουτίνες κλπ); * Πώς ελέγχεται η επικοινωνία μεταξύ προγράμματος και υλικού ή άλλων προγραμμάτων; (διακοπές, παγίδες).

Μεταγλωττιστές και Σύνολο Εντολών (1) Ορθογωνιότητα Όσο το δυνατό λιγότεροι 'ειδικοί' καταχωρητές, περιορισμένη 'ειδική' σύνταξη εντολών, οι ίδια μορφή σύνταξης και διευθυνσιοδότησης για όλες σχεδόν τις εντολές. Πληρότητα Κάλυψη όλων των βασικών πράξεων, λειτουργιών, μεθόδων διευθυνσιοδότησης και τύπων δεδομένων. Κανονικότητα Κανονικοί, πλήρεις ορισμοί της σημασίας (semantics) των εντολών. Λειτουργικότητα Λιτή χρήση πόρων του συστήματος (μνήμη, καταχωρητές..)

Μεταγλωττιστές και Σύνολο Εντολών (2) Καταχωρητές Γενικού Σκοπού (Register Files) Οι σύγχρονες αρχιτεκτονικές προσφέρουν ένα μεγάλο αριθμό καταχωρητών γενικού σκοπού (πχ 64, 128, 256..), ανεξάρτητα από το αν οι καταχωρητές αυτοί είναι ορατοί στο Σύνολο Εντολών με ένα ή περισσότερα ονόματα. Ο μεταγλωττιστής γνωρίζει οτι η μικροαρχιτεκτονική κάνει χρήση τεχνικών όπως το Scoreboarding και αλγορίθμων όπως Graph Coloring ώστε να βελτιστοποιεί τη χρήση του Register File. Οι πολλοί γενικοί καταχωρητές προσφέρουν ταχύτητα, γενικότητα στη μεταγλώττιση, υποκαθιστούν το stack και το local variable frame. Όμως.. τα ανώτερα επίπεδα μπορούν να κάνουν οτι δεν ξέρουν..

Αρχές Σχεδιασμού Υπολογιστών Όλες οι βασικές εντολές εκτελούνται απ' ευθείας στο υλικό (οι σύνθετες εντολές ίσως υλοποιούνται με μικροκώδικα). Μεγιστοποίηση του ρυθμού υποβολής εντολών στη CPU (τεχνικές Παραλληλίας Επιπέδου Εντολής, ILP). Εύκολη αποκωδικοποίηση εντολών (μικρό σχετικά σύνολο από σχετικά απλές εντολές). Ελαχιστοποίηση προσπέλασης στη μνήμη, με ειδικές εντολές Load, Store μιας διεύθυνσης. Αφθονία όμοιων καταχωρητών (μεγάλο register file).

Τελικά ποιά εντολή εκτελείται; (1) Αυτό που τελικά συμβαίνει στη πραγματικότητα είναι μόνο το φυσικό επίπεδο (ψηφιακή λογική). Το επίπεδο Συνόλου Εντολών ή Γλώσσα Μηχανής είναι το τελευταίο καθαρά λογισμικό επίπεδο. Προσφέρει τη πλησιέστερη δυνατή προσέγγιση προς την πραγματική μηχανή, αλλά... Δεν είναι η πραγματική μηχανή: μεσολαβεί η Μικροαρχιτεκτονική που διερμηνεύει διαφανώς τις εντολές Γλώσσας Μηχανής στο υλικό. Έτσι το υλικό και η Μικροαρχιτεκτονική αλλάζουν, όμως το Σύνόλο Εντολών παραμένει ίδιο ή επαυξάνεται (backward compatiblity). Έτσι εντελώς διαφορετικά φυσικά επίπεδα εκτελούν τα ίδια προγράμματα Γλώσσας Μηχανής.

Τελικά ποιά εντολή εκτελείται; (2) Ο Pentium σε επίπεδο Συνόλου Εντολών παρέχει εντολές SISC ADD mem, reg // mem = mem + reg Η Mικροαρχιτεκτονική τις διερμηνεύει σε εντολές RISC LOAD tempreg1, mem ADD tempreg1, reg STORE mem, tempreg1 για να εκτελεστούν στο σύγχρονο υλικό τύπου RISC. Ο SPARC ή ο MIPS έχουν Σύνολο Εντολών RISC και το εκτελούν απ ευθείας σε υλικό τύπου RISC.

Τελικά ποιά εντολή εκτελείται; (3) Η JVM σε επίπεδο Συνόλου Εντολών παρέχει εντολές bytecode τύπου Stack LOAD mem1 LOAD mem2 ADD STORE mem2 O Java compiler ή το JRE αναλαμβάνει να μεταγλωττίσει ή να διερμηνεύσει το bytecode στο Σύνολο Εντολών του συστήματος που θα εκτελέση το bytecode. Αυτός στη συνέχεια μεταγλωττίζει σε CISC LOAD tempreg1, mem1 ADD mem2, tempreg1

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις Pentium 4

Μοντέλο Μνήμης (1) byte/word addressable Πόσα bytes μεταφέρονται; aligned ή non-aligned Όταν μεταφέρουμε λέξη (word = 4 bytes) ξεκινούμε από συγκεκριμένο offset (0, 4, 8, 12,...) στη διεύθυνση μνήμης ή όχι (στοίχιση ή όχι); little endian big endian Για τα δεδομένα που καταλαμβάνουν πολλά bytes ή αντιμετωπίζονται ως ομάδες, με ποιά σειρά είναι αποθηκευμένα τα δεδομένα στα bytes (μικρό ή μεγάλο άκρο);

Λογική Οργάνωση Bytes (a) Big endian (b) Little endian

Στοίχιση bytes Μια λέξη των 8 bytes αποθηκευμένη σε μνήμη little-endian. (a) Με στοίχιση. (b) Χωρίς στοίχιση.

Μοντέλο Μνήμης (2) Pentium: Aποθήκευση μικρού άκρου (little-endian) JVM: Αποθήκευση μεγάλου άκρου (big-endian) Pentium: Λέξεις των 8 bytes (64 bits), αλλά και επεξεργασία στα 32 ή και 8 bits λόγω backward compatibility (x86). Μηστοιχισμένη (non-aligned) προσπέλαση. Διαχωρισμός Instruction / Data στη L1 Cache. JVM: Byte/Word Addressable μνήμη (Πρόγραμμα 8 bits / Δεδομένα 32 bits). Στοιχισμένη (aligned) προσπέλαση. Pentium: Αντιμετώπιση Κινδύνων Δεδομένων σχετικών με την προσπέλαση Μνήμης λόγω πιθανής αλλαγής της σειράς εκτέλεσης από τη Retirement Unit.

0xffffffff 0xc0000000 0x40000000 Kernel virtual memory User stack (created at runtime) Memory mapped region for shared libraries Run-time heap (created at runtime by malloc) Read/write data Read-only code and data 0x08048000 0 Unused Memory invisible to user code Χώρος μνήμης προγράμματος σε Pentium printf() function O stack κατεβαίνει Ο heap ανεβαίνει Loaded from the hello executable file

Καταστάσεις (Modes) Pentium Real mode: Ο Pentium φέρεται σαν 8086 (16 bit, απλές εντολές). Virtual 8086 mode: Tο λειτουργικό σύστημα ελέγχει ένα sandbox για εικονική λειτουργία 8086 (παράθυρο MS-DOS στα Windows) Protected mode: Η κανονική λειτουργία 32 bit (IA-32). Ιntel-64 mode: Επεκταμένη λειτουργία 64 bit. Kernel mode: Πλήρης πρόσβαση σε ειδικές εντολές (διαχείριση διακοπών) από το πυρήνα (kernel) του λειτουργικού συστήματος. User mode: Τυπική λειτουργία χρήστη και λοιπών διεργασιών.

Το μοντέλο μνήμης της JVM Σωρός Δυναμικών Δεδομένων Heap newarray int Δεξαμενή Σταθερών Πλαίσιο Τοπικών Μεταβλητών Περιοχή Μεθόδων Στοίβα Τρεχόντων Τελεστέων Τα διάφορα μέρη του μοντέλου μνήμης της JVM. Heap με garbage collection.

Ονομασίες Βασικών Καταχωρητών Μετρητής Προγράμματος (Program Counter, PC) Καταχωρητής Εντολών (Instruction Register, IR) Καταχωρητής Διευθύνσεων Μνήμης (Memory Address Register, MAR) Καταχωρητής Δεδομένων Μνήμης (Memory Data Register, MDR) Δείκτης Στοίβας (Stack Pointer, SP) Δείκτης Βάσης (Base Pointer, BP) και Offset, Index κλπ Registers Συσσωρευτής (Accumulator, AC) ή Α, Β, C... (Register Bank) Καταχωρητής Κατάστασης (Status Register, SR)

Γνωστοί Καταχωρητές Προσοχή στη διαφορά Μικροαρχιτεκτονικής και Αρχιτεκτονικής Συνόλου Εντολών: Ξέρουμε την ύπαρξη των καταχωρητών λόγω της γνώσης μας της Μικροαρχιτεκτονικής (δηλαδή του ΠΩΣ εκτελούνται οι εντολές) αλλά ποιούς καταχωρητές βλέπει το Σύνολο Εντολών; Πχ είναι γνωστοί οι PC, IR, MAR, MDR; Το Σύνολο Εντολών γνωρίζει μόνον τους καταχωρητές που χρησιμοποιεί ρητά στις εντολές Γλώσσας Μηχανής ή έμμεσα, μέσω της σημασιολογίας των εντολών Γλώσσας Μηχανής. Οι υπόλοιπες λεπτομέρειες αναγνωρίζονται μέσω της απόδοσης του συστήματος.

Καταχωρητές Pentium (1) Γενικοί καταχωρητές, αλλά με κατά περίπτωση ειδικές χρήσεις (mul, div, strings) Δείκτες Τοπικών Μεταβλητών, Στοίβας, κλπ Παλιοί Δείκτες Τμημάτων (Segments) Μετρητής Προγράμματος Καταχωρητής Κατάστασης

Καταχωρητές Pentium (2) EFLAGS ~ Processor Status Word N Negative Z Zero V Overflow C- Carry A Auxiliary Carry P Parity Interrupt Mask (βλ. Διακοπές) Mode of Opeation (βλ. Καταστάσεις Λειτουργίας) Trace bit (για debugging)

Καταχωρητές JVM Μόνον δείκτες σε περιοχές μνήμης (έμμεση χρήση) PC Μετρητής Προγράμματος SP Δείκτης Στοίβας LV Δείκτης Πλαισίου Τοπικών Μεταβλητών CPP Δείκτης Σταθερών και Μεθόδων Ο Σωρός επιστρέφει δείκτες για χρήση με Δυναμική Διαχείριση Μνήμης μέσω ειδικής εντολής (newarray). Διαχείριση μέσω ειδικών εντολών (aload, astore). Αυτόματη Συλλογή Απορριμάτων (Garbage Collection).

Βασικοί Τύποι Δεδομένων (1) bit, byte (8 bits), word (4 bytes) char ASCII (7 ή 8 bits) Unicode (16 bits) συνήθως αντιμετωπίζονται σε ομάδες (πχ μια λέξη) int Unsigned ή Signed (συπλήρωμα του 2) 2 ή 4 bytes Short και Long float (4 bytes), double (8 bytes) IEEE Floating Point Standard 754 Υποστήριξη του Συνόλου Εντολών για διαφορετικούς τύπους δεδομένων (πχ integer add, integer long add, float add)

Βασικοί Τύποι Δεδομένων (2) Aπόσπασμα από μια περιοχή μνήμης (ή ένα αρχείο) σε hex. Τι μπορεί να είναι: εντολές γλώσσας μηχανής, ASCII χαρακτήρες προγράμματος, ακέραιοι, πραγματικοί, τιμές pixel από εικόνα; 0000100 0000120 0000140 0000160 0000200 0000220 0000240 0000260 0000300 0000320 51e5 83ff 2c6f 4e47 7574 2933 6174 6c65 7373 6e65 ec83 04c4 7720 2955 3420 0000 0062 742e 2e00 0074 c704 5d59 726f 3420 322e 732e 732e 7865 6f72 6e2e 2404 618d 646c 322e 342e 6d79 7368 0074 6164 746f 0000 c3fc 0000 342e 312d 6174 7274 642e 6174 2e65 0000 0000 4347 2820 6275 0062 6174 7461 2e00 4e47 fce8 6568 3a43 6255 6e75 732e 0062 0061 6f63 2d55 ffff 6c6c 2820 6e75 7574 7274 722e 622e 6d6d 7473 Οτιδήποτε από αυτά! Το νόημα των bits εξαρτάται από τα συμφραζόμενά μας, δηλαδή από τη δική μας αντίληψη για τα δεδομένα.

Τύποι Δεδομένων Pentium

Τύποι Δεδομένων JVM

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις Pentium 4

Βασικές Πράξεις και Λειτουργίες (1) Μετακινήσεις Δεδομένων Load (Καταχωρητής = Μνήμη) Store (Μνήμη = Καταχωρητής) Καταχωρητής Καταχωρητής Μνήμη Μνήμη Λειτουργίες Στοίβας (ως αδιαίρετη πράξη μετακίνησης) Λειτουργίες Εισόδου / Εξόδου (ως μετακίνηση σε ειδική θέση) Αριθμητικές Πράξεις Πρόσθεση, Αφαίρεση, Αντίθετο, Σύγκριση, Πολ/σμός, Διαίρεση Ακέραιοι και Πραγματικοί (Κινητή Υποδιαστολή) Ολίσθηση Αριθμητική / Λογική, Δεξιά / Αριστερά

Βασικές Πράξεις και Λειτουργίες (2) Λογικές Πράξεις AND, OR, XOR, NOT, Set, Clear Έλεγχος Ροής Προγράμματος Διακλάδωση χωρίς / με συνθήκη Κλήση / Επιστροφή υπορουτίνας Είσοδος / Έξοδος (ως ξεχωριστές λειτουργίες) Ανάγνωση, Εγγραφή Διακοπές και Παγίδες Έλεγχος, Εξυπηρέτηση, Επιστροφή Επιπλέον: Συγχρονισμός και Νήματα Strings, Γραφικά, Streaming..

Ορισμός Operands Μοντέλο Συσσωρευτή (1-address/-operand) Μόνο ένας καταχωρητής γενικού σκοπού. Απλό μοντέλο αλλά πολλές μεταφορές από-προς μνήμη και πολλές εντολές. Πρώτοι υπολογιστές (ο διερμηνέας που είδαμε). Μοντέλο Στοίβας (0-address/-operand) Οι καταχωρητές (ή η μνήμη) προσπελαύνονται μόνο μέσω εντολών διαχείρισης μιας στοίβας (Push, Pop). Απλή στη σύλληψη αλλά δύσκολη στη προσπέλαση, πολλές μετακινήσεις δεδομένων στη στοίβα. JVM. Μοντέλο Καταχωρητών (2,3-address/-opernad) Σύγχρονοι υπολογιστές. Πολλοί όμοιοι (όχι πάντα) καταχωρητές. Δύο υποκατηγορίες: Με προσπέλαση στη μνήμη (CISC) ή χωρίς (RISC). Στη κατηγορία RISC μπορεί να έχουμε μοντέλο με 2 ή 3 καταχωρητές.

Παράδειγμα Συσσωρευτή

Παράδειγμα Στοίβας

Παράδειγμα Καταχωρητών CISC καταχωρητές add R1, X R1 = R1 + Χ Οι περισσότερες εντολές περιλαμβάνουν και μια προσπέλαση στη μνήμη 2 CISC Γλώσσα assembly Pentium Διαφέρει από το μοντέλο Συσσωρευτή λόγω πολλών καταχωρητών. Σε παλαιότερα συστήματα υπήρχαν και πολλαπλές προσπελάσεις στη μνήμη.

Παράδειγμα Καταχωρητών RISC Μπορεί να οριστεί και με 2-address/- operands: add R1, R2 δηλαδή R1 = R1+R2

Ενδεικτικά αποσπάσματα κώδικα int x, y, z; Γλώσσα C/Java load 0xA2 add 0xA4 store 0xA0 // AC = mem(0xa2) // AC = AC + mem(0xa4) // mem(0xa0) = AC 3 3 load 0xA2 load 0xA4 add store 0xA0 // push mem(0xa2) // push mem(0xa4) // pop, pop, add, push // pop mem(0xa0) 4 9 load A, 0xA2 add A, 0xA4 store A, 0xA0 // A = mem(0xa2) // A = A + mem(0xa4) // mem(0xa0) = A 3 3 load A, 0xA2 load B, 0xA4 add C, A, B store C, 0xA0 // A = mem(0xa2) // B = mem(0xa4) // C = A + B // mem(0xa0) = C 4 3 load A, 0xA2 load B, 0xA4 add B, A, B store B, 0xA0 // A = mem(0xa2) // B = mem(0xa4) // B = A + B // mem(0xa0) = B 4 3 x = y + z; #cmd #mem refs

Μορφές Εντολών (1) Τέσσερις συνηθισμένεςς μορφές εντολών: (a) Zero-address/-operand (b) One-address/-operand (c) Two-address/-opernad (d) Three-address/-operand

Μορφές Εντολών (2) Μερικές πιθανές διευθετήσεις εντολών ανάλογα με το μήκος τους και τι μέγεθος λέξης. (a) Σταθερού μήκους, ίσου με μια λέξη. (b) Σταθερού μήκους, ίσου με μισή λέξη. (c) Μεταβλητού μήκους, ίσου με ακέραιο πολλαπλάσιο λέξης.

Κριτήρια Σχεδιασμού Εντολών (1) Σταθερό μήκος: ταχεία αποκωδικοποίηση, μικρή πυκνότητα. Μεταβλητό μήκος: μεγάλη πυκνότητα, σύνθετη αποκωδικοποίηση. * Αν η πυκνότητα του κώδικα είναι σημαντικό: μεταβλητό ή υβριδικό μήκος εντολής. * Αν η απόδοση είναι πιο σημαντική: σταθερό μήκος. * Ορισμένες αρχιτεκτονικές (ARM, MIPS) διαθέτουν ειδικό υποσύνολο εντολών σταθερού μήκους 16-bit για καλύτερη απόδοση. Η χρήση του κατάλληλου συνόλου αποφασίζεται από το μεταγλωττιστή σε επίπεδο ρουτίνας, ανάλογα με το αν απαιτείται απόδοση ή πυκνότητα. * Μερικές αρχιτεκτονικές εφαρμόζουν και αποσυμπίεσηon-the-fly για να συνδιάσουν πυκνότητα και απόδοση.

Κριτήρια Σχεδιασμού Εντολών (2) * Οι μικρές (σύντομες) εντολές είναι καλύτερες από τις μεγάλες (σύνθετες) εντολές. * Απαιτείται αρκετός χώρος για τη κωδικοποίηση όλων των πράξεων και λειτουργιών καθώς και πρόβλεψη για μελλοντικές επεκτάσεις (μήκος και κωδικοποίηση opcodes). * Απαιτείται αρκετός χώρος για τη τη κωδικοποίηση των operands και των συνδυασμών τους ανάλογα με τις μεθόδους διευθυνσιοδότησης που επιλέγονται 0, 1, 2 ή 3 operands ονόματα καταχωρητών διεθύνσεις μνήμης offset ή πλήρης διεύθυνση

Μορφή Εντολών Pentium 4

Μορφή Εντολών JVM

Επεκτεινόμενοι Κωδικοί Εντολών (1) Εντολή με 4-bit opcode και τρείς διευθύνσεις 4-bit. Σε συγκεκριμένο αριθμό bits πρέπει να οργανώσουμε εντολές με διαφορετικό αριθμό/τύπο operands.

Επεκτεινόμενοι Κωδικοί Εντολών (2) Σύνολο εντολών με 15 εντολές τριών διευθύνσεων, 14 εντολές δύο διευθύνσεων, 31 εντολές μιας διεύθυνσης και 16 εντολές μηδενικής διεύθνσης. Τα πεδία xxxx, yyyy, και zzzz aείναι πεδία διευθύνσεων των 4 bit.

Μορφή Εντολών: Σύνοψη Εντολές Pentium: Πολύ μεγάλες, πολύ σύνθετες, διάχυτες προσπελάσεις στη μνήμη (σε πολλές εντολές), μικρός κώδικας. Εντολές JVM: πολύ μικρές, πολύ απλές, πολλές προσπελάσεις στη μνήμη, μεγάλος κώδικας. Εντολές RISC (πχ SPARC, MIPS ή και Mic-4): κανονικές, ορθογώνιες, συγκεντρωμένες προσπελάσεις στη μνήμη (load, store), κώδικας μέσου μεγέθους.

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις Pentium 4

Διευθυνσιοδότηση: παράδειγμα bits 2 2 XX ΧΧ 6 3 3 opernad1 operand1 Λειτουργία πχ ADD Opcode Addressing Modes ΧΧ Προορισμός Πηγή 00 Καταχωρητής Καταχωρητής Data Type 01 Καταχωρητής Αριθμός XX 10 Καταχωρητής Διεύθυνση που βρίσκεται σε Καταχωρητή 11 Διεύθυνση που βρίσκεται σε Καταχωρητή Καταχωρητής 00 01 10 11 char int flotat double

Μέθοδοι Διευθυνσιοδότησης Όνομα Παράδειγμα Σημασία Καταχωρητή ADD R1, R2 R1=R1+R2 Άμεση (Immediate) ADD R1, #3 R1=R1+3 Έμμεση Καταχωρητή (Register Indirect) ADD R1, (R2) R1=R1+mem(R2) Μετατόπιση (Offset) ή Δεικτοδότηση (Indexed) ADD R1, 4(R2) R1=R1+mem(R2+4) Βάση-Δείκτης (Base-Index) ADD R1, (R2,R3) R1=R1+mem(R2+R3) Απόλυτη (Absolute) ADD R1, 1000 R1=R1+mem(1000) Έμμεση Μνήμης (Memory Indirect) ADD R1, (@R2) R1=R1+mem(mem(R2)) Post-increment ADD R1, R2+ R1=R1+mem(R2);R2++ Pre-decrement ADD R1, R2- Κλιμακούμενη (Scaled) ADD R1, 4(R2)(R3) ` R2--; R1=R1+mem(R2) R1=R1+mem(4+R2+R3*d)

Άμεση και Έμμεση Διευθυνσιοδότηση Άμεση διευθυνσιοδότηση: φόρτωσε το 4 στο καταχωρητή 1. Έμμεση Καταχωρητή (Register Indirect): άθροιση στοιχείων ενός πίανακα.

Δεικτοδότηση - Indexed Addressing (1) Ενδιεκτικό πρόγραμμα assembly για τον υπολογισμό του OR των Ai AND Bi για δύο πίνακες 1024 στοιχείων.

Δεικτοδότηση - Indexed Addressing (2) Πιθανή διευθέτηση της εντολής MOV R4,A(R2).

Ορθογωνιότητα Opcodes και Addressing Modes (1) Απλή σχεδίαση μορφών εντολής σε μια μηχανή τριών διευθύνσεων.

Ορθογωνιότητα Opcodes και Addressing Modes (2) Απλή σχεδίαση μορφών εντολής σε μια μηχανή δύο διευθύνσεων.

Μέθοδοι Διευθυνσιοδότησης Pentium (1) Οι μέθοδοι διευθυνσιοδότησης σε κατάσταση ΙΑ-32. M[x] σημαίνει λέξη μνήμης στη διεύθυνση x.

Μέθοδοι Διευθυνσιοδότησης Pentium (2) Παράδειγμα προσπέλασης του στοιχείου a[i] με τη μέθοδο διευθυνσιοδότησης Scaled Index Base.

Σύγκριση Μεθόδων Διευθυνσιοδότησης (1)

Σύγκριση Μεθόδων Διευθυνσιοδότησης (2)

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις Pentium 4

Εντολές Pentium 4 (1)

Εντολές Pentium 4 (2)

Εντολές Pentium 4 (3)

Εντολές Pentium 4 (4)

Εντολές JVM (1)

Εντολές JVM (2)

$gedit test.c & main () { int x; } x=10; Ανάθεση Pentium Χρήση ebp ως Local Variable Frame Pointer (LV) Ανάπτυξη User Stack από High Address προς Low Address. $gcc S test.c > test.s $cat test.c Κράτηση πρώτων 8 bytes θέσεων του User Stack....... Διεθυνσιοδότηση: Απόλυτη και Μετατόπιση movl $10, 8(%ebp)......

$gedit j1.java Ανάθεση JVM class j1 { public static void main () { int x; x=10; }... }... 0: bipush 10 $javac j1.java 2: istore_0 $javap c j1 > j1.s 3: return $cat j1.s...... Η istore_0 συντόμευση της istore 0. Διεθυνσιοδότηση: Απόλυτη και Μετατόπιση.

Πράξη Pentium main () { int i, j, n; } i=3; j=4; n=i+j;... movl movl movl addl movl... $3, 8(%ebp) $4, 12(%ebp) 12(%ebp), %eax 8(%ebp), %eax %eax, 16(%ebp) 2-address/-opernad code, η μια διεύθυνση προπέλαση στη μνήμη. Διευθυνσιοδοτήσεις : Απόλυτη, Άμεση, Μετατόπιση (Βάση-Δείκτης). 4 bytes ανα ακέραιο, ο eax καταχωρητής γενικής χρήσης.

class j2 { public static void main () { int i, j, n; } } i=3; j=4; n=i+j; Πράξη JVM... 0: iconst_3 1: istore_0 2: iconst_4 3: istore_1 4: iload_0 5: iload_1 6: iadd 7: istore_2 8: return... iconst_x = σύντομο bipush X, iload_x, istore_x = σύντομα iload X, istore X Διευθυνσιοδοτήσεις: Απόλυτη, Μετατόπιση, Stack.

main () { int i, k; } i=3; if (i!= 3) k=0; If then Pentium... movl $3, 8(%ebp) cmpl $3, 8(%ebp) je.l5 movl $0, 12(%ebp).L5:... Αντιστροφή Συνθήκης: αντί!= θέτουμε == για αποφυγή goto.

If then JVM class j3 { public static void main () { int i, k;... i=3; 0: iconst_3 if (i!= 3) 1: istore_0 k=0; 2: iload_0 } 3: iconst_3 } 4: if_icmpeq 7: iconst_0 8: istore_1 9: return... 9 Αντιστροφή Συνθήκης: αντί!= θέτουμε == για αποφυγή goto.

If then else Pentium main () { int i, k; } i=3; if (i == 3) k=0; else k=1;... movl cmpl jne movl jmp.l2: movl.l6:... $3, 8(%ebp) $3, 8(%ebp).L2 $0, 12(%ebp).L6 $1, 12(%ebp)

class j4 { public static void main () { int i, k;... i=3; 0: if (i == 3) 1: k=0; 2: else 3: k=1; 4: } 7: } 8: 9: 12: 13: 14:... If then else JVM iconst_3 istore_0 iload_0 iconst_3 if_icmpne iconst_0 istore_1 goto 14 iconst_1 istore_1 return 12

main () { int x, n; } n=10; x=0; while (x < n) x=x+1; while Pentium... movl $10, 12(%ebp) movl $0, 8(%ebp) jmp.l2.l3: addl $1, 8(%ebp).L2: movl 8(%ebp), %eax cmpl 12(%ebp), %eax jl.l3... Σύγκριση < στο τέλος του κώδικα επανάληψης.

{ public static void main () {... int x, n; 0: 2: n=10; 3: x=0; 4: while (x < n) 5: x=x+1; 6: } 7: } 10: 11: 12: 13: Σύγκριση >= στη αρχή του 14: κώδικα επανάληψης. 17:... while JVM bipush 10 istore_1 iconst_0 istore_0 iload_0 iload_1 if_icmpge 17 iload_0 iconst_1 iadd istore_0 goto 5 return

Έλεγχος Βρόχων (a) Σύγκριση στο Τέλος (Test-at-the-end loop). (b) Σύγκριση στην Αρχή (Test-at-the-beginning loop).

main () { int x[5], i; } for (i=0; i<5; i++) x[i]=i+3;... movl jmp.l3: movl movl addl movl addl.l2: cmpl jle... Πίνακας, for Pentium $0, 8(%ebp).L2 8(%ebp), %edx 8(%ebp), %eax $3, %eax %eax, 28(%ebp,%edx,4) $1, 8(%ebp) $4, 8(%ebp).L3. Χρήση ebp 28 ως βάση και edx * 4 σαν index (οffset). Scaled Base Index (SIB). Μείωση ορίου τερματισμού κατά ένα.

class j6 { public static void main ()... { 0: int[] x=new int[5]; 1: int i; Πίνακας, for JVM iconst_5 newarray int astore_0 iconst_0 istore_1 iload_1 iconst_5 if_icmpge 23 aload_0 iload_1 iload_1 iconst_3 iadd iastore iinc 1, 1 goto 6 return 3: 4: for (i=0; i<5; i++) 5: x[i]=i+3; 6: } 7: } 8: 11: 12: Χρήση newarray για λήψη δείκτη από 13: heap και αποθήκευση, φόρτωση με 14: astore, aload. 15: 16: Χρήση iastore + iload για 17: δεικτοδοτημένη προσπέλαση. 20: 23:...

function Pentium int f(int x) { int temp; } temp = x+3; return temp; main () { int y; } y = 7; y = f(y) 4; Κλήση συνάρτησης και επιστροφή από συνάρτηση. Χρήση leave πριν απο ret. Το main είναι συνάρτηση. f:... pushl movl subl movl addl movl movl leave ret... main: leal andl pushl pushl movl pushl subl movl movl movl call subl movl addl popl popl leal ret %ebp %esp, %ebp $16, %esp 8(%ebp), %eax $3, %eax %eax, 4(%ebp) 4(%ebp), %eax 4(%esp), %ecx $ 16, %esp 4(%ecx) %ebp %esp, %ebp %ecx $20, %esp $7, 8(%ebp) 8(%ebp), %eax %eax, (%esp) f $4, %eax %eax, 8(%ebp) $20, %esp %ecx %ebp 4(%ecx), %esp

Static method JVM class j7 { public static int f(int x) { int temp; temp = x; return temp; } public static void main () { int y; y = 7; y = f(y) 4; } } j7(); Code: 0: aload_0 1: invokespecial 4: return #1; public static int f(int); Code: 0: iload_0 1: istore_1 2: iload_1 3: ireturn public static void main(); Code: 0: bipush 7 2: istore_0 3: iload_0 4: invokestatic #2; 7: iconst_4 8: isub 9: istore_0 10: return }

#include <stdlib.h> main () { int* x; int* y; x = malloc(sizeof(int)); y = malloc(sizeof(int)); *x = 1; *y = 2; } x = y; Register Indirect: o eax περιέχει τη πλήρη διεύθυνση των x, y. Pointers Pentium... movl call movl movl call movl movl movl movl movl movl movl... $4, (%esp) malloc %eax, 8(%ebp) $4, (%esp) malloc %eax, 12(%ebp) 8(%ebp), %eax $1, (%eax) 12(%ebp), %eax $2, (%eax) 12(%ebp), %eax %eax, 8(%ebp)

class IntObj { public int value; } class j7 { public static void main () { IntObj x; IntObj y; x = new IntObj(); y = new IntObj(); x.value = 1; y.value = 2; } x = y; } Χρήση aload και putfield. Pointers JVM... 0: new #2; 3: dup 4: invokespecial#3; 7: astore_0 8: new #2; 11: dup 12: invokespecial#3; 15: astore_1 16: aload_0 17: iconst_1 18: putfield #4; 21: aload_1 22: iconst_2 23: putfield #4; 26: aload_1 27: astore_0 28: return...

Pointer arguments Pentium (1) void swap (int *x, int *y) { int temp; } temp = *x; *x = *y; *y = temp; main () { int x; int y; x = 5; y = 6; } swap (&x, &y);

Pointer arguments Pentium (2) swap: pushl movl subl movl movl movl movl movl movl movl movl movl movl leave ret %ebp %esp, %ebp $16, %esp 8(%ebp), %eax (%eax), %eax %eax, 4(%ebp) 12(%ebp), %eax (%eax), %edx 8(%ebp), %eax %edx, (%eax) 12(%ebp), %edx 4(%ebp), %eax %eax, (%edx) main: leal andl pushl pushl movl pushl subl movl movl leal movl leal movl call addl popl popl leal ret 4(%esp), %ecx $ 16, %esp 4(%ecx) %ebp %esp, %ebp %ecx $24, %esp $5, 8(%ebp) $6, 12(%ebp) 12(%ebp), %eax %eax, 4(%esp) 8(%ebp), %eax %eax, (%esp) swap $24, %esp %ecx %ebp 4(%ecx), %esp

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις Pentium 4

Ακολουθιακή Ροή Ελέγχου και Διακλαδώσεις Ο Μετρητής Προγράμματος ως συνάρτηση του χρόνου. (a) Χωρίς διακλαδώσεις. (b) Με διακλαδώσεις.

Ρουτίνες Όταν καλείται μια ρουτίνα η εκτέλεσή της ξεικνά από την πρώτη της εντολή. Η επιστροφή γίνεται στην εντολή που ακολουθεί τη κλήση.

Συ-Ρουτίνες Όταν μια συ-ρουτίνα συνεχίζεται (resume) τότε η εκτέλεση συνεχίζει από εκεί που είχε σταματήσει, όχι από την αρχή.

Είσοδος/Έξοδος (1) Ενταμιευτές (Buffers) ελέχου απλών συσκευών. Συνήθωςmemory-mapped (χαρτογραφημένοι στη μνήμη).

Εόσοδος/Έξοδος (2) Παράδειγμα προγραμματιζόμενης Ε/Ε.

Είσοδος/Έξοδος (3) Σύστημα με ελεγκτή DMA (Direct Memory Access).

Είσοδος/Έξοδος (4) Οι λειτουργίες I/O και οι λειτουργίες της CPU μπορούν να εκτελούνται ταυτόχρονα (σύγχρονη αρχιτεκτονική). Κάθε ελεγκτής συσκευής (device controller) επιφορτίζεται με τον έλεγχο ενός τύπου συσκευής. Κάθε ελεγκτής συσκευής διαθέτει ένα τοπικό buffer (ενταμιευτή μνήμης) συνήθως memory mapped. Η CPU μετακινεί δεδομένα από / προς την κύρια μνήμη προς /από τα τοπικά buffers. Οι λειτουργίες I/O γίνονται από τη συσκευή προς το τοπικό buffer του ελεγκτή. Ο ελεγκτής συσκευής πληροφορεί την CPU ότι έχει ολοκληρώσει τη λειτουργία του προκαλώντας μια διακοπή (interrupt). 94

Διακοπές (Interrupts) - 1 CPU Δίαυλος Μνήμη Ενώ ένα πρόγραμμα εκτελείται, μια άλλη ρουτίνα θέλει να εκτελεστεί (π.χ. Είσοδος / Έξοδος, Clock, πρόβλημα υλικού, επικοινωνία με το Λειτουργικό Σύστημα, κλπ). Προσθέτουμε ένα έλεγχο διακοπών στον κύκλο ΑνάκλησηςΕκτέλεσης (fetch-execute). 95

Διακοπές (Interrupts) - 2 CPU Δίαυλος Μνήμη Fetch 96

Διακοπές (Interrupts) - 3 CPU Δίαυλος Μνήμη Execute 97

Διακοπές (Interrupts) - 4 CPU Δίαυλος Μνήμη Έλεγξε για Διακοπές Ο επεξεργαστής έχει ειδικές γραμμές υποδοχής για συγκεκριμένες διακοπές π.χ. RESET. Επίσης έχει γραμμές υποδοχής γενικών διακοπών. Αυτές ελέγχονται είτε με polling ή από ειδικό υλικό, τον Ελεγκτή Διακοπών που ενημερώνει τόσο οτι υπάρχει αίτηση διακοπή όσο και για το τύπο της (βλέπε Άνυσμα Διακοπής). 98

Διακοπές (Interrupts) - 5 CPU Δίαυλος Μνήμη Processor Context Αν υπάρχει έγκυρη αίτηση διακοπής (1): Προσωρινή ακύρωση όλων των διακοπών, όσο διαρκεί το Context Switching. Σώσε το processor context (program counter + ολοι οι καταχωρητές) στη μνήμη (stack). Context Switching ~ αυτόματη κλήση ρουτίνας και αντίστοιχη 99 επιστροφή, ελεγχόμενη από το σύστημα.

Διακοπές (Interrupts) - 6 CPU PC Δίαυλος Μνήμη Διεύθυνση του ISR Αν υπάρχει έγκυρη αίτηση διακοπής (2): Φόρτωσε τον Program Counter με τη διεύθυνση της Ρουτίνας Εξυπηρέτησης Διακοπής (Interrupt Service routine ISR). Αυτή δίνεται από το Άνυσμα Διακοπής (Interrupt Vector). Κάθε ομάδα διακοπών έχει δικό της, προκαθορισμένο Άνυσμα Διακοπής (δείκτη στη πρώτη εντολή της Ρουτίνας Εξυπηρέτησης). Δεν απαιτείται να σταλεί με τη κλήση της ISR. 100 Επανενεργοποίηση διακοπών.

Διακοπές (Interrupts) - 7 CPU Δίαυλος Μνήμη Η ISR εκτελείται όπως μια κανονική ρουτίνα Ανάκληση (Fetch) Εκτέλεση (Execute) Έλεγχος για ΝΕΕΣ διακοπές: η ISR πριν ξεκινήσει καθορίζει τη Μάσκα Διακοπών (Interrupt Mask), δηλαδή από ποιές διακοπές δέχεται να διακοπεί. Επίσης καθορίζονται η προτεραιότητες μεταξύ των διακοπών που μπορεί να 101 εκτελεστούν.

Διακοπές (Interrupts) - 8 CPU Διασύνδεση Μνήμη Processor Context Μόλις η ISR τελειώσει την εκτέλεση εκτελεί ειδικού τύπου return: Return from Interrupt Αποκατάσταση τού παλιού processor context. Συνέχιση της εκτέλεσης του αρχικού προγράμματος ή άλλης 102 διακοπής που έχει προκύψει.

Ανάκληση - Εκτέλεση 103

Ανάκληση - Εκτέλεση με Διακοπές 104

Προτεραιότητα Διακοπών (1) Προτεραιότητες Διακοπών. Maskable NonMaskable Interrupts.

Προτεραιότητα Διακοπών (2) Ένα σύστημα με προτεραιότητα διακοπών εγκαθιστά προτεραιότητες μεταξύ των διαφόρων πηγών διακοπών για να αποφασίζει ποια θα εξυπηρετεί πρώτη όταν δύο ή περισσότερες απαιτήσεις φθάσουν ταυτόχρονα. Το σύστημα πρέπει επίσης να αποφασίσει ποιες καταστάσεις θα μπορούν να διακόπτουν τον υπολογιστή καθώς αυτός θα εξυπηρετεί μια άλλη διακοπή. Στο υψηλότερο επίπεδο προτεραιοτήτων βρίσκονται εκείνες οι απαιτήσεις για τις οποίες οποιαδήποτε καθυστέρηση ή διακοπή μπορεί να επιφέρει σημαντικές συνέπειες. Οι συσκευές με υψηλές ταχύτητες μεταφοράς, όπως οι δίσκοι έχουν υψηλή προτεραιότητα, ενώ αργές συσκευές, όπως το πληκτρολόγιο λαμβάνουν χαμηλή προτεραιότητα. 106

Περιόδευση (Polling) Η επιβολή προτεραιοτήτων για τις ταυτόχρονες διακοπές μπορεί να γίνει μέσω λογισμικού (σε μικρά συστήματα). Η διαδικασία της περιόδευσης είναι μια τεχνική που διαπιστώνει την κατάσταση του υλικού μέσω, επαναλαμβανόμενου σε τακτά διαστήματα, ελέγχου κάθε συσκευής. Χρησιμοποιείται για να προσδιορίσει την πηγή της διακοπής με την υψηλότερη προτεραιότητα. Η περιόδευση χρησιμοποιεί μια κοινή διεύθυνση εκκίνησης για όλες τις διακοπές. Το πρόγραμμα που διαχειρίζεται τις διακοπές περιοδεύει με τη σειρά κάθε προέλευση διακοπής. Η σειρά με την οποία αυτές ελέγχονται καθορίζει την προτεραιότητα κάθε διακοπής. Η προέλευση της διακοπής με την υψηλότερη προτεραιότητα ελέγχεται πρώτη και αν υπάρχει σήμα διακοπής ο έλεγχος διακλαδίζεται αντίστοιχη ρουτίνα εξυπηρέτησης. Διαφορετικά ελέγχεται η επόμενη κ.ο.κ. Το ίδιο συμβαίνει και κατά την εκτέλεση της ISR. Αργή μέθοδος, ειδικά αν έχουμε πολλές ταυτόχρονες διακοπές. 107

Ελεγκτής Διακοπών - Hardware Priority Δέχεται αιτήσεις διακοπών από διάφορες πηγές, αποφασίζει ποια έχει τη μεγαλύτερη προτεραιότητα και τελικά παρέχει μια απαίτηση διακοπής στο σύστημα. Για την επιτάχυνση της διαδικασίας, κάθε πηγή διακοπής διαθέτει το δικό της διάνυσμα διακοπής για την απευθείας πρόσβαση στη δική της ρουτίνα εξυπηρέτησης. Έτσι δεν απαιτείται περιόδευση μια και όλες οι αποφάσεις λαμβάνονται από τη μονάδα. 108

Διακοπές: Σύνοψη (1)

Διακοπές: Σύνοψη (2)

Κατηγορίες Διακοπών Σήματα (Signals): H τυπική μέθοδος επικοινωνίας του Λειτουργικού Συστήματος με τις διεργασίες, καθώς και των διεργασιών μεταξύ τους. Προγράμματος (Traps): παράγονται από κάποια συνθήκη η οποία προκύπτει ως αποτέλεσμα της εκτέλεσης μιας εντολής, όπως η αριθμητική υπερχείλιση, η διαίρεση με το μηδέν, η απόπειρα εκτέλεσης εσφαλμένης εντολής ή η αναφορά σε τμήμα της μνήμης που βρίσκεται εκτός των ορίων του χρήστη. Χρονισμού (Clock): παράγονται από ένα χρονιστή εσωτερικά στον επεξεργαστή. Αυτό επιτρέπει στο Λ.Σ. να εκτελεί συγκεκριμένες λειτουργίες σε τακτική βάση. Εισόδου Εξόδου (Ι/Ο): παράγονται από έναν ελεγκτή Ι/Ο, για να σηματοδοτήσουν την κανονική ολοκλήρωση μιας πράξης ή μια ποικιλία καταστάσεων σφάλματος Βλάβης υλικού (Η/W Faults): παράγονται από βλάβη, όπως η διακοπή τροφοδοσίας ή το σφάλμα ισοτιμίας (parity) της μνήμης. 111

Intel Pentium Processor Event-Vector Table 112

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις Pentium 4 Ενδεικτικά Προγράμματα

Intel-64: Μείωση Αναφορών στη Μνήμη Επιπλέον καταχωρητές στο Itanium 2.

Ομαδοποίηση Εντολών Μια δέσμη εντολών Intel-64 bundle περιέχει τρείς εντολές.

Μείωση Διακλαδώσεων Υπό Συνθήκη (1) (a) Δήλωση if. (b) Assembly template του if. (c) Εντολή Υπό Συνθήκη.

Μείωση Διακλαδώσεων Υπό Συνθήκη (2) (a) Δήλωση if-else. (b) Αssembly template του if-else. (c) Εντολές υπο συνθήκη.

Μείωση Διακλαδώσεων Υπό Συνθήκη (3) (a) Δήλωση if-else. (b) Αssembly template του if-else. (c) Εντολές με κατηγόρημα.

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις Pentium 4 Ενδεικτικά Προγράμματα

Reverse Polish Notation (1) * Μέθοδος υπολογισμού αριθμητικών εκφράσεων με χρήση στοίβας και χωρίς τη χρήση παρενθέσεων για καθορισμό προτεραιότητας των πράξεων. * Προτάθηκε από τον Jan Lucasiewicz, Πολωνό φιλόσοφο και μαθηματικό σε μορφή Preorder Notation (πρώτα οι τελεστές). Το αντίστροφο (Reverse) λέγεται και Postorder Nοtation, ενώ το συνηθισμένο λέγεται Inorder Notation, (3 + 5) (7 + 2) -+35+72 35+72+- Inorder Preorder ή Polish Postorder ή Reverse Polish * Πληροφορίες http://www-stone.ch.cam.ac.uk/documentation/rrf/rpn.html http://en.wikipedia.org/wiki/reverse_polish_notation

Reverse Polish Notation (2) Πιθανές κινήσεις 1. Είσοδος - Έξοδος 2. Είσοδος - Στοίβα 3. Στοίβα - Έξοδος 4. Διαγραφή Στοίβα, Είσοδος

Reverse Polish Notation (3) o1 o2 Πίνακας καταστάσεων για τη μετατροπή inorder σε posorder.

Reverse Polish Notation (4) Shunting Yard Algorithm (Dijkstra): Μετατροπή Inorder σε Postorder (RPN) * While there are tokens to be read: * Read a token. * If the token is a number, then add it to the output queue. * If the token is an operator, o1, then: * while there is an operator, o2, at the top of the stack, and o1 has lower precedence or equal to that of o2, pop o2 off the stack, onto the output queue (2); * push o1 onto the stack (1). * If the token is a left parenthesis, then push it onto the stack (1). * If the token is a right parenthesis: * Until the token at the top of the stack is a left parenthesis, pop operators off the stack onto the output queue (2). * Pop the left parenthesis from the stack, but not onto the output queue (3). * If the stack runs out without a left parenthesis, then there are mismatched parentheses (5). * When there are no more tokens to read: * While there are still operator tokens in the stack: * If the operator token on the top of the stack is a parenthesis, then there are mismatched parenthesis (5). * Pop the operator onto the output queue (2). * Exit (4).

Reverse Polish Notation (5) Παραδείγματα εκφράσεων infix και οι ισοδύναμες εκφράσεις σε Reverse Polish Notation (postfix)

Reverse Polish Notation (6) Χρήση στοίβας για την εκτίμηση μιάς έκφρασης σε μορφή Reverse Polish Notation (postorder).

Reverse Polish Notation (7) // 3 5 + 7 2 + - (read from left to right) // 3 5 + 7 2 + - (read from left to right) Push 3 onto stack Push 5 onto the stack The stack now contains (3, 5) Use + operator Pop two numbers from stack and push result (8) Push 7 onto the stack Push 2 onto the stack The stack now contains (8, 7, 2) Use + operator Pop two numbers from stack and push result (9) Use - operator Pop two numbers from stack and push result (-1) BIPUSH 3 BIPUSH 5 The stack now contains (3, 5) IADD Pop two numbers from stack and push result (8) BIPUSH 7 BIPUSH 2 The stack now contains (8, 7, 2) IADD Pop two numbers from stack and push result (9) ISUB Pop two numbers from stack and push result (-1)

Reverse Polish Notation (8) main () { int x, a, b, c, d; } a = 1; b = 2; c = 3; d = 4; x = (a + b) * (c - d);... movl movl movl movl movl movl addl movl movl subl imull movl... $1, -12(%ebp) $2, -16(%ebp) $3, -20(%ebp) $4, -24(%ebp) -16(%ebp), %eax -12(%ebp), %ecx %eax, %ecx -24(%ebp), %edx -20(%ebp), %eax %edx, %eax %ecx, %eax %eax, -8(%ebp) Παράδειγμα υπολογισμού έκφρασης σε πρόγραμμα C και το αντίστοιχο απόσπασμα μεταγλώττισης σε Pentium assembly με GCC compiler.

Reverse Polish Notation (9) class rev { public static void main () { int x, a, b, c, d; } } a = 1; b = 2; c = 3; d = 4; x = (a + b) * (c - d); 0: 1: 2: 3: 4: 5: 6: 7: 9: 10: 11: 12: 13: 15: 16: 17: 18: iconst_1 istore_1 iconst_2 istore_2 iconst_3 istore_3 iconst_4 istore 4 iload_1 iload_2 iadd iload_3 iload 4 isub imul istore_0 return Παράδειγμα υπολογισμού έκφρασης σε πρόγραμμα Javs και το αντίστοιχο απόσπασμα μεταγλώττισης σε JVM bytecode με Sun Java compiler.

Αναδρομικές Διαδικασίες (1) Πύργοι του Ανόι με 3 δίσκους: towers (3, 1, 3) = towers (2, 1, 2); towers (1, 1, 3); towers (2, 2, 3)

Αναδρομικές Διαδικασίες (2) Πύργοι του Ανόι με 3 δίσκους: towers (3, 1, 3) = towers (2, 1, 2); towers (1, 1, 3); towers (2, 2, 3)

Αναδρομικές Διαδικασίες (3) Πύργοι του Ανόι με 3 δίσκους: towers (3, 1, 3) = towers (2, 1, 2) = towers (1, 1, 3) towers (1, 1, 2) towers (1, 3, 2) towers (1, 1, 3) towers (2, 2, 3) = towers (1, 2, 1) towers (1, 2, 3) towers (1, 1, 3) 3 δίσκοι από το 1 στο 3 2 δίσκοι από το 1 στο 2 1 δίσκος από το 1 στο 3 1 δίσκος από το 1 στο 2 1 δίσκος από το 3 στο 2 1 δίσκος από το 1 στο 3 2 δίσκοι από το 2 στο 3 1 δίσκος από το 2 στο 1 1 δίσκος από το 2 στο 3 1 δίσκος από το 1 στο 3

Αναδρομικές Διαδικασίες (4) Πύργοι του Ανόι με 5 δίσκους : towers (5, 1, 3)

Αναδρομικές Διαδικασίες (5) Αναδρομική επίλυσης του προβλήματος των Πύργων του Ανόι.

Αναδρομικές Διαδικασίες (6) Η στοίβα σε διάφορα στιγμιότυπα εκτέλεσης.

Αναδρομικές Διαδικασίες (7) Άλλες γνωστές αναδρομικές διαδικασίες: Παραγοντικό fact(n) = Αριθμοί Fibbonacci f(n) = if (n == 1) return 1; else return n * fact(n-1); if (n == 0) return 0; else if (n == 1) return 1; else return f(n-1) + f(n-2); Δυαδική Αναζήτηση (Binary Search) Quick Sort, Bitonic Merge / Sort Διάσχιση Δυαδικού Δένδρου (Prefix, Infix, Postfix Traversal)

Πύργοι του Ανόι σε Γλώσσα Assembly Pentium 4 (1)...

Πύργοι του Ανόι σε Γλώσσα Assembly Pentium 4 (2)......

Πύργοι του Ανόι σε Γλώσσα Assembly Pentium 4 (3)...

Πύργοι του Ανόι σε Γλώσσα Assembly JVM (1)

Πύργοι του Ανόι σε Γλώσσα Assembly JVM (2)

Παραγοντικό σε Γλώσσα Assembly Pentium 4 (1) int fact(int n) { } if (n == 1) return 1; else return n * fact(n-1); fact:.l2: main () { int x; } x=fact(6);.l4: pushl %ebp movl %esp, %ebp subl $8, %esp cmpl $1, 8(%ebp) jne.l2 movl $1, -4(%ebp) jmp.l4 movl subl movl call movl imull movl 8(%ebp), %eax $1, %eax %eax, (%esp) fact %eax, %edx 8(%ebp), %edx %edx, -4(%ebp) movl -4(%ebp), %eax leave ret.size fact,.-fact.globl main.type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $20, %esp movl $6, (%esp) call fact movl %eax, -8(%ebp) addl $20, %esp popl %ecx popl %ebp leal -4(%ecx), %esp ret

Παραγοντικό σε Γλώσσα JVM (1) class fact { public static int myfact (int n) { if (n == 1) return 1; else return n * myfact(n-1); } public static void main () { int x; } } x = myfact(6); public static int myfact(int); Code: 0: iload_0 1: iconst_1 2: if_icmpne 7 5: iconst_1 6: ireturn 7: iload_0 8: iload_0 9: iconst_1 10: isub 11: invokestatic #2 14: imul 15: ireturn public static void main(); Code: 0: bipush 6 2: invokestatic #2 5: istore_0 6: return