Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

Σχετικά έγγραφα
Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

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

Μάθημα 8: Διαχείριση Μνήμης

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

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

Προγραμματισμός Ι (ΗΥ120)

Διαδικασιακός Προγραμματισμός

Αρχεία. Προγραμματισμός II 1

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Αρχεία. Προγραμματισμός II 1

Προγραμματισμός Ι (ΗΥ120)

ΣΥΣΚΕΥΕΣ ΑΠΟΘΗΚΕΥΣΗΣ (ΜΝΗΜΗ)

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

Προγραμματισμός Ι (HY120)

Ιεραρχία Μνήμης. Εικονική μνήμη (virtual memory) Επεκτείνοντας την Ιεραρχία Μνήμης. Εικονική Μνήμη. Μ.Στεφανιδάκης

Αρχιτεκτονική Eckert-von Neumann. Πως λειτουργεί η ΚΜΕ; Κεντρική μονάδα επεξεργασίας [3] ΕΠΛ 031: ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Ε-85: Ειδικά Θέµατα Λογισµικού

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Παράλληλη Επεξεργασία

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

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

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

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

Το εσωτερικό ενός PC. Τεχνολογία Η/Υ & Πληροφοριών - 05 Κεντρική μονάδα Χουρδάκης Μανόλης

ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. ΚΕΦΑΛΑΙΟ 4ο ΜΝΗΜΕΣ. (c) Αμπατζόγλου Γιάννης, Ηλεκτρονικός Μηχανικός, καθηγητής ΠΕ17

Κεφάλαιο 7 Ιεραρχία Μνήμης (Memory Hierarchy)

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στην επιστήμη των υπολογιστών. Υλικό Υπολογιστών Κεφάλαιο 5ο Οργάνωση υπολογιστών

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

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

Υπολογιστές Ι. Άδειες Χρήσης. Εισαγωγή. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

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

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

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

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

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Εικονική Μνήμη. (και ο ρόλος της στην ιεραρχία μνήμης)

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

ΣΤΑΤΙΚΕΣ ΚΑΙ ΔΥΝΑΜΙΚΕΣ ΜΝΗΜΕΣ ΤΥΧΑΙΑΣ ΠΡΟΣΠΕΛΑΣΗΣ (Static and Dynamic RAMs). ΔΙΑΡΘΡΩΣΗ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΘΕΜΑΤΙΚΕΣ ΕΝΟΤΗΤΕΣ

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

Αναφορές, είκτες και Αλφαριθμητικά

Λειτουργικά Συστήματα (Λ/Σ)

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

Βασικά Στοιχεία της Java

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

Διάλεξη 9: Δυναμική Δέσμευση Μνήμης

Τεχνολογίες Κύριας Μνήμης

Ψηφιακή Λογική Σχεδίαση

Βασικά Θέματα Επικοινωνίας. Κατανεμημένα Συστήματα 1

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Μάθημα 3: Αρχιτεκτονική Υπολογιστών

Προγραμματισμός ΙI (Θ)

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

Εισαγωγή στην επιστήµη των υπολογιστών. Υλικό Υπολογιστών Κεφάλαιο 5ο Οργάνωση υπολογιστών

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

i Στα σύγχρονα συστήματα η κύρια μνήμη δεν συνδέεται απευθείας με τον επεξεργαστή

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

Φροντιστήριο. Παραγωγή τελικού κώδικα. Παραγωγή τελικού κώδικα

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι

Ηλεκτρονικοί Υπολογιστές Δ Εξάμηνο

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

Λειτουργικά Συστήματα (ΗΥ222)

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

Διαδικασιακός Προγραμματισμός

Ποια πρόταση είναι αληθής για τον Μ/Ε 8088: Είναι Μ/Ε 16bit, LSI, 40 pins, 20 γραμμές διευθύνσεων, 8 γραμμές δεδομένων

! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση. ! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες

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

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Η/Υ (ΤΛ2007 )

Με τον όρο μνήμη αναφερόμαστε στα μέσα που χρησιμοποιούνται για την αποθήκευση προγραμμάτων και δεδομένων σε έναν υπολογιστή ή άλλη ψηφιακή

Λειτουργικά Συστήματα Η/Υ

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών

Αντικειμενοστραφής Προγραμματισμός

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

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

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

Βασικά Στοιχεία της Java

Αναπαράσταση Μη Αριθμητικών Δεδομένων

Transcript:

Μνήμη Διευθύνσεις Δείκτες Προγραμματισμός II 1 lalis@inf.uth.gr

Μνήμη Η/Υ Ειδικό υλικό, ξεχωριστό από τον επεξεργαστή Χρησιμεύει για την αποθήκευση δεδομένων και της κατάστασης εκτέλεσης του προγράμματος Η μνήμη του Η/Υ δεν είναι «μόνιμη» Αν σταματήσει η παροχή ρεύματος, τα δεδομένα που βρίσκονται στη μνήμη του Η/Υ χάνονται Αν θέλουμε τα δεδομένα να «επιζήσουν» και να εξακολουθούν να υφίσταται μετά από μια επανεκκίνηση, πρέπει να αποθηκευτούν στον δίσκο βλέπε σχετική ενότητα προς το τέλος του μαθήματος Προγραμματισμός II 2 lalis@inf.uth.gr

Random access memory (RAM) Μνήμη που μπορεί να προσπελαστεί άμεσα σε αντίθεση με σειριακή προσπέλαση βλέπε αρχεία Η προσπέλαση οποιουδήποτε σημείου της μνήμης επιφέρει το ίδιο κόστος / καθυστέρηση Σε επίπεδο υλικού, η μνήμη υλοποιείται από ένα ή περισσότερα memory chips Ο επεξεργαστής προσπελάζει την μνήμη μέσω ενός πρωτοκόλλου αίτησης/απάντησης, που λαμβάνει χώρα πάνω από ένα ειδικό δίαυλο επικοινωνίας Προγραμματισμός II 3 lalis@inf.uth.gr

Read transaction request CPU RAM address bus reply CPU RAM data bus Προγραμματισμός II 4 lalis@inf.uth.gr

Write transaction request CPU RAM address + data bus reply CPU RAM acknowledgment bus Προγραμματισμός II 5 lalis@inf.uth.gr

Μνήμη προγράμματος Στατική μνήμη (static memory) δεσμεύεται στατικά, κατά την έναρξη του προγράμματος καθολικές & στατικές μεταβλητές (globals, static) Στοίβα (stack) αυξομειώνεται κατά την κλήση συναρτήσεων τοπικές μεταβλητές συναρτήσεων Δυναμική μνήμη / σωρός (dynamic memory / heap) δεσμεύεται/αποδεσμεύεται δυναμικά, κατά την εκτέλεση στην C, με βάση ρητές εντολές του προγράμματος Προγραμματισμός II 6 lalis@inf.uth.gr

Static Memory Program Instructions Heap grows this way Stack grows this way Προγραμματισμός II 7 lalis@inf.uth.gr

Μεταβλητές Tα περιεχόμενα της μνήμης προσπελάζονται μέσω των αντίστοιχων διευθύνσεων (addresses) Οι μεταβλητές ενός προγράμματος είναι εύχρηστα ονόματα που αντιστοιχίζονται (αυτόματα) στην διεύθυνση της μνήμης που χρησιμοποιείται για να αποθηκευτούν τα περιεχόμενα της μεταβλητής ποιος υλοποιεί αυτή την αντιστοίχηση; O αριθμός των bytes που χρησιμοποιούνται για την αποθήκευση των περιεχομένων μιας μεταβλητής εξαρτάται από τον τύπο της Προγραμματισμός II 8 lalis@inf.uth.gr

address space address of k notation: &k contents of k notation: k #bytes used to store k notation: sizeof(k) Προγραμματισμός II 9 lalis@inf.uth.gr

Ερμηνεία δεδομένων Η τιμή ενός ή περισσοτέρων bytes μπορεί να ερμηνευθεί με διαφορετικούς τρόπους Η ερμηνεία των περιεχομένων των μεταβλητών (bytes στις αντίστοιχες θέσεις μνήμης) γίνεται αυτόματα με βάση τον τύπο τους ο προγραμματιστής δεν χρειάζεται να γνωρίζει την εσωτερική αναπαράσταση στην μνήμη αυτό είναι πολύ σημαντικό γιατί; O προγραμματιστής μπορεί να «εκβιάσει», με δική του ευθύνη) μια διαφορετική ερμηνεία των περιεχομένων της μνήμης με type casting Προγραμματισμός II 10 lalis@inf.uth.gr

char str[5] = "wow!"; char *c; int i; int *k; k = (int *) str; printf("print as int: %d (%x)\n",*k,*k); c = (char *) k; for (i=0; i<sizeof(int); i++) { printf("print byte %d of k as char %c\n",i,*(c+i)); } Προγραμματισμός II 11 lalis@inf.uth.gr

addresses get higher?? 77 6F 77 21 00? τιμή bytes στην μνήμη pointer ερμηνεία ως char ερμηνεία ως string ερμηνεία ως int (little endian) 'w' "wow!" 561475447 dec 21776F77 hex Προγραμματισμός II 12 lalis@inf.uth.gr

Προγραμματισμός II 13 lalis@inf.uth.gr

Δείκτες (pointers) Ο δείκτης είναι ένας μετα-τύπος που μπορεί να εφαρμοστεί σε οποιοδήποτε τύπο δεδομένων Η τιμή ενός δείκτη είναι μια διεύθυνση μνήμης Μπορεί να χρησιμοποιηθεί για να προσπελαστούν τα περιεχόμενα της αντίστοιχης θέσης της μνήμης, ερμηνεύοντας τα με βάση τον τύπο του δείκτη Στην C, επιτρέπεται αριθμητική με δείκτες +1: αύξηση της τιμής του δείκτη (διεύθυνσης) κατά τον αριθμό των bytes που έχουν τα αντικείμενα του τύπου -1: μείωση της τιμής του δείκτη (διεύθυνσης) κατά τον αριθμό των bytes που έχουν τα αντικείμενα του τύπου Προγραμματισμός II 14 lalis@inf.uth.gr

char str[5]="wow!"; char *c = &str[1]; little endian pointer size = 2 bytes (just as an example) char *c2 = c + 1; char **c3 = &c2;?? 77 6F 77 21 00? 03 00? 04 00? 0B 00 address x0000 address x000f Προγραμματισμός II 15 lalis@inf.uth.gr