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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Data-Level Parallelism Linking & Loading

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MIPS functions and procedures

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΟΜΑΔΕΣ ΕΝΤΟΛΩΝ: ΙΔΙΟΤΗΤΕΣ ΚΑΙ ΛΕΙΤΟΥΡΓΙΕΣ

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

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

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

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

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

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

Θέµατα Φεβρουαρίου

Τέτοιες λειτουργίες γίνονται διαμέσου του

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

Τεχνολογίες ημιαγωγών. Chapter 2 Instructions: Language of the Computer 1

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

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

Προχωρηµένα Θέµατα Αρχιτεκτονικής

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

Παραλληλισμός σε επίπεδο εντολών

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

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

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

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

MIPS Interactive Learning Environment. MILE Simulator. Version 1.0. User's Manual

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

Λειτουργικά Συστήματα. Εισαγωγή

Αρχιτεκτονικη υπολογιστων

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

Κεντρική Μονάδα Επεξεργασίας. Επανάληψη: Απόδοση ΚΜΕ. ΚΜΕ ενός κύκλου (single-cycle) Παραλληλισμός σε επίπεδο εντολών. Υπολογιστικό σύστημα

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαχείριση μνήμης III

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

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 Ενδεικτικά Προγράμματα

Σύγχρονες Πολυεπίπεδες Μηχανές Εφαρμογές Πρόγραμμα γλώσσας υψηλού επιπέδου Πρόγραμμα γλώσσας assembly Συστήματα Αρχιτεκτονική Σενάριο ή κλήση συστήματος (μικτή γλώσσα) Πρόγραμμα σε γλώσσα μηχανής Μικροπρόγραμμα ή γλώσσα περιγραφής υλικού Οργάνωση Υπολογιστής έξι επιπέδων. Η μέθοδος υποστήριξης και η γλώσσα υλοποίησης σημειώνεται κάτω (δίπλα) από κάθε επίπεδο.

Μορφή προγράμματος σε κάθε επίπεδο temp = v[k]; Πρόγραμμα Γλώσσας Υψηλού Επιπέδου v[k] = v[k+1]; v[k+1] = temp; Μεταγλώττιση load $15, 0($2) load $16, 4($2) store $16, 0($2) store $15, 4($2) Πρόγραμμα Γλώσσας Assembly Assembly, Συμβολομετάφραση ISA Πρόγραμμα Γλώσσας Μηχανής 0000 1010 1100 0101 1001 1111 0110 1000 1100 0101 1010 0000 0110 1000 1111 1001 1010 0000 0101 1100 1111 1001 1000 0110 0101 1100 0000 1010 1000 0110 1001 1111 Διερμηνεία, Υλοποίηση Control Signal Specification cslab@ntua 2007-2008 ALUOP[0:3] <= InstReg[9:11] & MASK Register Transfer Notation (RTN) 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..

Περιεχόμενα βασικού εγχειριδίου Intel 64, IA-32 Chapter 1 About This Manual. Chapter 2 Intel 64 and IA-32 Architectures. Chapter 3 Basic Execution Environment. Chapter 5 Instruction Set Summary. Chapter 6 Procedure Calls, Interrupts, and Exceptions. Chapter 7 Programming with General-Purpose Instructions. Chapter 8 Programming with the x87 FPU. Chapter 9 Programming with Intel MMXTM Technology. Chapter 10-12 Programming with Streaming SIMD Extensions (SSE). Chapter 13 Input/Output. Chapter 14 Processor Identification and Feature Determination.

Περιεχόμενα εγχειριδίου JVM 1 Introduction 2 Java Programming Language Concepts 3 The Structure of the Java Virtual Machine 4 The class File Format 5 Loading, Linking, and Initializing 6 The Java Virtual Machine Instruction Set 7 Compiling for the Java Virtual Machine 8 Threads and Locks 9 Opcode Mnemonics by Opcode

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

Αρχιτεκτονική Συνόλου Εντολών Γλώσσα Μηχανής: τι ορίζει; (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 tempreg2, tempreg1, reg STORE mem, tempreg2 για να εκτελεστούν στο σύγχρονο υλικό τύπου 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 και η μικροαρχιτεκτονική διερμηνεύει σε RISC κώδικα.

Τελικά ποιά εντολή εκτελείται; (4) Η Mικροαρχιτεκτονική PicoJava διερμηνεύει τον κώδικα bytecode απ' ευθείας σε εντολές RISC LOAD tempreg1, mem1 LOAD tempreg2, mem2 ADD tempreg2, tempreg1, tempreg2 STORE temreg2, mem2 και εφαρμόζει σύμπτυξη εντολών, αφού η στοίβα βρίσκεται σε register file. ADD tempreg2, tempreg1, tempreg2. 'Ισοδυναμία' hardware-firmware-software..

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις 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: Πλήρης πρόσβαση σε ειδικές εντολές (signal handling) χρήση από το πυρήνα (kernel) του λειτουργικού συστήματος. User mode: Τυπική λειτουργία χρήστη και διεργασιών.

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

Ονομασίες Βασικών Καταχωρητών Μετρητής Προγράμματος (Program Counter, PC) Καταχωρητής Εντολών (Instruction Register, IR ή MBR) Καταχωρητής Διευθύνσεων Μνήμης (Memory Address Register, MAR) Καταχωρητής Δεδομένων Μνήμης (Memory Data Register, MDR) Γενικοί Καταχωρητές (R0, R1, R2,..., R7) Συσσωρευτής (Accumulator, AC) Δείκτης Στοίβας (Stack Pointer, SP) Index, Base, Offset Registers και άλλοι δείκτες (Πλαισίου LV, Σταθερών CPP..) Καταχωρητής Κατάστασης (Status Register, SR Process Status Word PSW)

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

Καταχωρητές 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).

Καταχωρητές PicoJava Εκτός από τους καταχωρητές της JVM OPLIM FRAME PSW Μέγιστο μέγεθος στοίβας Μέγιστο μέγεθος Πλαισίου Τοπικών Μεταβλητών 64 Γενικοί καταχωρητές 4 Καταχωρητές για διαχείριση νημάτων 4 Καταχωρητές για εκσφαλμάτωση

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

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

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

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

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

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

Παράδειγμα Χρήσης Εντολών: Top 10 Intel X86 Instructions Κατηγορία Εντολή Μέσο ποσοστό συνολικής εκτέλεσης 1 load 22% 2 conditional branch 20% 3 compare 16% 4 store 12% 5 add 8% 6 and 6% 7 sub 5% 8 move register-register 4% 9 call 1% 10 return 1% Total 96% Παρατήρηση: Οι απλές εντολές έχουν τις μεγαλύτερες συχνότητες χρησιμοποίησης. 40 cslab@ntua 2007-2008

Ορισμός 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) Σταθερού μήκους Μεταβλητού μήκους αριθμός words Υβριδικού μήκους αριθμός bytes Εφαρμογή σε byte/word -addressable memory (JVM)

Μορφές Εντολών (3) Μερικές πιθανές διευθετήσεις εντολών ανάλογα με το μήκος τους και τι μέγεθος λέξης. (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), κώδικας μέσου μεγέθους.

Ασκήσεις Μελετήστε το Σύνολο Εντολών IJVM και κατατάξτε τις εντολές ανάλογα με το μήκος και τη μορφή τους, με βάση το σχήμα της JVM. Προτείνετε ένα δικό σας σχήμα κωδικοποίησης των εντολών για την 'έκδοση της IJVM για το Mic-4. Αυτό που αλλάζει είναι η χρήση 8 καταχωρητών (R0-R7) στη θέση του stack. Έστω οτι όλες οι εντολές της IJVM έχουν το μέγιστο μήκος. Εφαρμόστε τη λογική των Επεκτεινόμενων Κωδικών. Το ίδιο για το Σύνολο Εντολών IJVM Mic-4.

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις 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)

Ασκήσεις Μελετήστε τις μεθόδους διεθυνσιοδότησης της IJVΜ στις εκδόσεις για Mic-1/3 και για Mic-4 και κατατάξτε τις με βάση τον πίνακα των μεθόδων διευθυνσιοδότησης.

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

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

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

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

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

Εντολές JVM (1)

Εντολές JVM (2)

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

main () { int i, j, n; i=3; j=4; n=i+j; } Πράξη Pentium... 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 καταχωρητής γενικής χρήσης.

Πράξη JVM class j2 { public static void main () { int i, j, n;... i=3; 0: iconst_3 j=4; 1: istore_0 n=i+j; 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.

main () { int i, k; i=3; if (i == 3) k=0; else k=1; } If then else Pentium... 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; 3: for (i=0; i<5; i++) 4: 5: x[i]=i+3; 6: } 7: } 8: Πίνακας, 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 11: 12: Χρήση newarray για λήψη δείκτη από 13: heap και αποθήκευση, φόρτωση με 14: astore, aload. 15: 16: Χρήση iastore + iload για 17: δεικτοδοτημένη προσπέλαση. 20: 23: Tanenbaum, Structured Computer Organization, Fifth Edition, (c) 2006 Pearson... Education, Inc. All rights reserved. 0-13-148521-0

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

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 }

Pointers Pentium #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.... 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)

Pointers JVM 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.... 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

Ασκήσεις Συγκρίνετε τους παραπάνω κώδικες με τους αντίστοιχους της IJVM (JAS) του Mic-1 καθώς και της IJVM του Mic-4. Ποιές είναι οι σημαντικές είναι οι διαφορές του bytecode της JVM από τη JAS της IJVM; Μελετήστε τη διαχείριση της στοίβας και του πλαισίου τοπικών μεταβλητών από τo Pentium και τη JVM.

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις 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). 105

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Intel Pentium Processor Event-Vector Table 123

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Συνόλου Εντολών Επισκόπηση Μνήμη, Καταχωρητές, Δεδομένα Λειτουργίες και Μορφές Εντολών Διευθυνσιοδότηση Ενδεικτικά Σύνολα Εντολών Ρουτίνες και Διακοπές Βελτιστοποιήσεις 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

Ασκήσεις Προσπαθήστε να προγραμματίσετε τον υπολογισμό εκφράσεων RPN στο προσομοιωτή Mic-1. Προσπαθήστε να προγραμματίσετε απλές αναδρομικές διαδικασίες στο προσομοιωτή Mic-1. Παράδειγμα Σi = i + Σ(i-1), i=1,2,..n. Μελετήστε τις αναδρομικές κλήσεις και τη στοίβα.