ΗΥ-225: Οργάνωση Υπολογιστών
Άνοιξη 2010 |
Τμήμα Επιστήμης Υπολογιστών © Πανεπιστήμιο Κρήτης |
[Up - Table of Contents] [Prev - 15. Cache Memories] |
[printer version - PDF] [17. I/O and DMA - Next] |
Βιβλίο (Ελλ. έκδοση): διαβάστε το δεύτερο ήμισυ του κεφαλαίου 7 –από § 7.4 και πέρα– σελ. 529–583, και ιδιαίτερα τις σελ. 529–561.
Μέγεθος (Χωρητικότητα - Mbits): Παρά το μειονέκτημά τους αυτό, και παρά την μεγαλύτερη καθυστέρηση προσπέλασης που έχουν, οι DRAM διαθέτουν ένα σημαντικό πλεονέκτημα: προσφέρουν περίπου μία τάξη μεγέθους μεγαλύτερη χωρητικότητα (capacity, Mbits) ανά chip σε σχέση με τις SRAM. Ετσι, οι DRAM χρησιμοποιούνται σχεδόν πάντα γιά την κατασκευή της κύριας μνήμης (main memory) των υπολογιστών, ενώ οι SRAM χρησιμοποιούνται σχεδόν πάντα γιά τις κρυφές μνήμες (cache memories), λόγω της χαμηλότερης καθυστέρησής τους. Με την πρόοδο της τεχνολογίας κατασκευής ολοκληρωμένων κυκλωμάτων (chips), η χωρητικότητα των chips μνήμης συνεχώς αυξάνει. Τις τελευταίες δεκαετίες, ο ρυθμός αυτής της αύξησης ήταν: τετραπλασιασμός (×4) χωρητικότητας κάθε τρία (3) χρόνια. Σήμερα είναι περίπου τόσος (ίσως λίγο χαμηλότερος) αυτός ο ρυθμός αύξησης, και είναι πολύ πιθανό να συνεχίσει έτσι, αν και κάποτε μάλλον θα πέσει. Στα μέσα της πρώτης δεκαετίας του 21ου αιώνα, η τεχνολογία των DRAM βρίσκεται γύρω στο 1 Gbit ανά chip (π.χ. βλ. www.micron.com). Εμπορικά, την μνήμη των υπολογιστών τη βρίσκει κανείς σε μικρές πλακέτες (modules - DIMM), που η καθεμιά έχει πάνω της συνήθως 8 (ή 9) ή 16 (ή 18) chips. Έτσι, ένα module με 8 chips των 256 Mbits καθένα είχε συνολική χωρητικότητα 4 Gbits = 256 MBytes, ενώ ένα αντίστοιχο module με 16 τέτοια chips προσέφερε 512 MBytes. Όταν τα chips είναι 9 αντί 8, ή 18 αντί 16, τα επιπλέον chips χρησιμοποιούνται γιά αποθήκευση κωδίκων ανίχνευσης και διόρθωσης σφαλμάτων (ECC - error correction codes).
Γραμμές και Στήλες: Μέσα στο chip της μνήμης, το κάθε block είναι ένας περίπου τετράγωνος πίνακας από στοιχεία μνήμης, με γύρω στις 64 έως 512 γραμμές επί 64 έως 512 στήλες. Γιά να διαβάσουμε ένα στοιχείο μνήμης επιλέγουμε πρώτα τη γραμμή στην οποία ανήκει αυτό, δίνοντας τη διεύθυνση γραμμής (row address) στον αποκωδικοποιητή γραμμής, ο οποίος ανάβει ένα σύρμα (word line) που διατρέχει και ενεργοποιεί την επιθυμητή γραμμή. Οταν ανάψει το σύρμα αυτό, όλα τα στοιχεία μνήμης (bits) πάνω στη γραμμή αυτή διαβάζονται, δηλαδή τοποθετούν το καθένα την τιμή του (περιεχόμενό του) στο αντίστοιχο σύρμα στήλης (bit line) που διατρέχει τη στήλη του. Ετσι, στο κάτω μέρος του block της μνήμης, στις απολήξεις των συρμάτων στήλης, εμφανίζεται το περιεχόμενο όλων των bits που είναι αποθηκευμένα στην επιλεγείσα γραμμή. Ενας μεγάλος πολυπλέκτης επιλέγει τότε το bit που εμείς θέλαμε, βάσει της διεύθυνσης στήλης (column address), και το δίνει προς τα έξω. Η όλη αυτή διαδικασία, από την είσοδο της διεύθυνσης γραμμής μέχρι να βγεί το τελικό bit στην έξοδο, διαρκεί αρκετό χρόνο (γύρω στα 60 ns γιά τις σημερινές DRAM).
Banks, Ranks, DIMMS: Μία bank μνήμης DRAM αποτελείται από αρκετούς (π.χ. 4–64) πίνακες με τη δομή που αναφέραμε παραπάνω. Η παράλληλη ανάγνωση ενός bit από πολλούς τέτοιους πίνακες μαζί επιτρέπει σε μία bank να επιστρέφει λέξεις (words) σε απάντηση αιτήματος με μία διεύθυνση η οποία δίνεται ταυτόχρονα σε όλους τους πίνακες. Ένα chip DRAM, γνωστό και ως DIMM, περιέχει αρκετές (π.χ. τουλάχιστον 4) banks οι οποίες μπορούν να λειτουργούν ανεξάρτητα και με επικάλυψη μεταξύ τους, δηλαδή ενώ εκκρεμεί μία αίτηση προς μία bank μπορούμε να υποβάλουμε άλλες αιτήσεις σε άλλες banks και έτσι να επικαλύψουμε την αργοπορία της μνήμης DRAM. Πιο συγκεκριμένα η μνήμη DRAM λειτουργεί με ρολόϊ (τυπικά αρκετές φορές πιο αργό από το ρολόϊ του επεξεργαστή) και σε κάθε κύκλο ρολογιού της DRAM μπορούμε να δίνουμε μία νέα διεύθυνση σαν είσοδο στη DRAM. Εάν οι διευθύνσεις που δίνουμε στη DRAM σε συνεχόμενους κύκλους προσπελαύνουν διαφορετικές banks, τότε μπορούμε σε διαδοχικούς κύκλους να ξεκινάμε διαφορετικές αναγνώσεις/εγγραφές από διαφορετικές banks. Αν για παράδειγμα έχουμε ένα κύκλο DRAM των 2 ns και έχουμε 4 banks, η κάθε μία από τις οποίες απαντά σε 60 ns, τότε 4 διαδοχικά αιτήματα σε διευθύνσεις σε διαφορετικές banks απαντώνται σε 4×2=8 + 60 ns = 68 ns. Αντίθετα, 4 αιτήματα στην ίδια bank θα απαντώνταν σε 4 × 60 = 240 ns ενώ 4 αιτήματα σε 2 banks θα απαντώνταν σε 120 ns.
Γειτονικές Προσπελάσεις (sequential Accesses): Εκμεταλλευόμαστε την παραπάνω ιδιότητα τοποθετώντας λέξεις που αντιστοιχούν σε διαδοχικές διευθύνσεις της μνήμης DRAM με την τεχνική του word-interleaving, δηλαδή τοποθετούμε διαδοχικές διευθύνσεις λέξεων σε διαδοχικές banks (μία λέξη ανά bank) και επαναλαμβάνουμε τη διαδικασία κυκλικά για όλες της διευθύνσεις λέξεων (π.χ. αν έχουμε 4 banks τοποθετούμε τη λέξη στη διεύθυνση 1000 στην bank 0, τη λέξη στη διεύθυνση 1004 στην bank 1, τη λέξη στη διεύθυνση 1008 στην bank 2, τη λέξη στη διεύθυνση 100C στην bank 3, τη λέξη στη διεύθυνση 1010 στην bank 0 κ.ο.κ.). Το γεγονός ότι οι μνήμες DRAM μπορούν να διαβάσουν/γράψουν πολλές διαδοχικές λέξεις ταχύτερα από λέξεις που είναι διάσπαρτες με τυχαίο τρόπο στις banks, είναι κίνητρο για να σχεδιάσουμε μνήμες cache που χρησιμοποιούν blocks πολλών διαδοχικών λέξεων. Ο τρόπος με τον οποίο ένα chip DRAM διαβάζει/γράφει πολλές διαδοχικές λέξεις θυμίζει την ομοχειρία: σε κάθε κύκλο ρολογιού της DRAM ή DRAM ξεκινάει μία νέα ανάγνωση/εγγραφή σε διαφορετική bank. Η DRAM μπορεί να επιστρέψει σε διαδοχικούς κύκλους του ρολογιού της διαφορετικές λέξεις που προέρχονται από διαφορετικές banks, δηλ. να εκτελέσει με μία μορφή ομοχειρίας διαδοχικές προσπελάσεις μνήμης.
Ένα chip μνήμης DRAM περιέχει πολλές bank και μία κάρτα μνήμης DRAM περιέχει πολλές γραμμές από τέτοια chips, κάθε μία από τις οποίες ονομάζεται rank. Τυπικά, οι επεξεργαστές μπορούν να προσπελάσουν τα chips μίας rank κάθε φορά ταυτόχρονα και να εκμεταλλευτούν παραλληλισμό μεταξύ των chips της κάθε rank και μεταξύ των banks του κάθε chip. Με τη χρήση ranks και πολλών chips, οι μνήμες DRAM επιτυγχάνουν καλύτερο ρυθμό ανάγνωσης/εγγραφής δεδομένων και για τυχαία διάσπαρτες διευθύνσεις και όχι μόνο για διαδοχικές διευθύνσεις.
Θεωρήστε το εξής μικρό (εξωπραγματικό σήμερα) σύστημα εικονικής μνήμης, σαν απλό παράδειγμα.
Διαχωρισμός και Προστασία Διεργασιών: το hardware του επεξεργαστή βρίσκει τον πίνακα μετάφρασης της τρέχουσας διεργασίας από τη (φυσική) διεύθυνση βάσης του πίνακα αυτού, που είναι γραμμένη (από το λειτουργικό σύστημα) σ' έναν ειδικό καταχωρητή του συστήματος διαχείρισης μνήμης –όχι στο κανονικό register file. Όταν ο επεξεργαστής τρέχει σε "user mode", δεν επιτρέπεται να γράψει αυτόν τον καταχωρητή, ούτως ώστε να μην μπορεί να υποκριθεί ότι είναι άλλη διεργασία, δηλαδή να μην μπορεί να αποκτήσει πρόσβαση στη μνήμη άλλων διεργασιών.
Προστασία Λειτουργικού Συστήματος: Ο παραπάνω ειδικός καταχωρητής που καθορίζει τον τρέχοντα πίνακα μετάφρασης –δηλαδή την τρέχουσα διεργασία– είναι προσπελάσιμος από τον επεξεργαστή μόνον όταν ο επεξεργαστής βρίσκεται σε "kernel mode", δηλαδή τρέχει το λειτουργικό σύστημα. Κάθε εξαίρεση (exception) –περιλαμβανόμενου και του καλέσματος συστήματος (system call)– αποθηκεύει την παλιά κατάσταση (user/kernel) στην οποία έτρεχε ο επεξεργαστής, και φέρνει τον επεξεργαστή σε kernel mode. Έτσι, ο trap (exception) handler εκτελείται πάντα σε kernel mode, ενώ ο μόνος τρόπος γιά ένα χρήστη να φέρει τον επεξεργαστή σε kernel mode είναι να προκαλέσει εξαίρεση, εκτελόντας μιάν εντολή system call –κάτι σαν παράνομη εντολή που προκαλεί εξαίρεση, αλλά που το λειτουργικό σύστημα ξέρει ότι προορίζεται σαν system call και όχι σαν απλή παράνομη εντολή λόγω προγραμματιστικού σφάλματος. Το κάλεσμα συστήματος είναι επίτηδες φτιαγμένο να συμπεριφέρεται σαν εξαίρεση (exception), και όχι σαν απλό κάλεσμα διαδικασίας (εντολή jal), ούτως ώστε η είσοδος στο λειτουργικό σύστημα –που πρέπει να γίνει σε kernel mode– να γίνεται μόνο στην προκαθορισμένη διεύθυνση του trap handler, και όχι σε οιαδήποτε άλλη αυθαίρετη διεύθυνση θα μπορούσε να ζητήσει ένας κακόβουλος χρήστης προκειμένου να παρακάμψει το μέρος εκείνο του λειτουργικού συστήματος που κάνει τους ελέγχους του εάν ο χρήστης έχει δικαίωμα να ζητήσει αυτό που ζητά.
Παρούσες/Απούσες Σελίδες και Προστασία Σελίδων: Κάθε θέση του πίνακα μετάφρασης περιέχει:
(α) Γιά το παραπάνω μικρό (εξωπραγματικό σήμερα) παράδειγμα εικονικής μνήμης, κάντε ένα σχηματικό διάγραμμα που να δείχνει τον καταχωρητή που περιέχει τον pointer στον πίνακα μετάφρασης της παρούσας διεργασίας, τον πίνακα μετάφρασης, την εικονική διεύθυνση (20 bits) που γεννά ο επεξεργαστής, τα πεδία από τα οποία αυτή αποτελείται, από που προέρχεται το index στον πίνακα μετάφρασης, τι διαβάζουμε από τη θέση εκείνη του πίνακα, και πώς συνθέτουμε τη φυσική διεύθυνση (16 bits).
(β) Έστω ότι, στο παραπάνω απλό παράδειγμά μας, η διεργασία μας έχει τις εξής σελίδες:
(γ) Ποιές από τις παρακάτω προσπελάσεις στις εικονικές διευθύνσεις που δίδονται προκαλούν σφάλμα σελίδας και για ποιο λόγο; Οι υπόλοιπες, σε ποιά φυσική διεύθυνση μεταφράζονται;
02038 (read), 03FF4 (write), A001C (read), 0192C (write), 00000 (write), 92FC0 (read), FE5D8 (write), 03FF4 (read), 02340 (write), A1FFC (read), FA000 (read), 008F4 (write), A8A88 (read), A2000 (read), 01E40 (write), 05204 (write), A0F80 (read), A0F88 (write), FEEDC (read), FFEE0 (write)
Θεωρήστε ότι στο σύστημα μνήμης της άσκησης 16.3 αλλάζουμε τον μοναδικό (μονοεπίπεδο) πίνακα μετάφρασης ανά διεργασία σε διεπίπεδους πίνακες, ώς εξής. Κάθε διεργασία έχει έναν πίνακα πρώτου επιπέδου, μεγέθους 32 θέσεων. Τον πίνακα αυτόν τον βρίσκουμε μέσω του γνωστού pointer που περιέχεται στον ειδικό καταχωρητή που αναφέραμε παραπάνω. Χρησιμοποιούμε τον κατάλληλο αριθμό MS bits της εικονικής διεύθυνσης γιά να επιλέξουμε μία από τις 32 θέσεις αυτού του πίνακα. Κάθε συνδυασμός αυτών των bits, επομένως και κάθε θέση αυτού του πίνακα, αντιστοιχεί σε 8 εικονικές σελίδες. Εαν καμία από αυτές τις 8 σελίδες δεν υπάρχει στη φυσική μνήμη, τότε σημειώνουμε τη θέση αυτή του πίνακα πρώτου επιπέδου σαν άκυρη (valid bit = 0). Αλλοιώς, η θέση αυτή του πίνακα πρώτου επιπέδου περιέχει έναν pointer σε ένα πίνακα μετάφρασης δευτέρου επιπέδου. Εάν η εικονική μας διεύθυνση μας οδήγησε σε τέτοια θέση στον πίνακα πρώτου επιπέδου, τότε χρησιμοποιούμε τα επόμενα bits της εικονικής διεύθυνσης σαν index στον πίνακα δευτέρου επιπέδου όπου μας οδήγησε ο πίνακας πρώτου επιπέδου. Εκεί, στον πίνακα δευτέρου επιπέδου, βρίσκουμε τα τελικά στοιχεία γιά τη σελίδα που ζητάμε.
(αβγ) Κάντε ένα διάγραμμα ανάλογο προς αυτό της άσκησης 16.3(α) γιά το διεπίπεδο σύστημα μετάφρασης αυτής της άσκησης. Στο ίδιο διάγραμμα, δείξτε όλους τους πίνακες δευτέρου επιπέδου που θα υπάρχουν γιά τις σελίδες της άσκησης 16.3(β). Επίσης δείξτε, όλα τα περιεχόμενα όλων των πινάκων μετάφρασης, πρώτου και δευτέρου επιπέδου. Βεβαιωθείτε (χωρίς να δώσετε γραπτά την απάντησή σας) ότι το σύστημα αυτό μεταφράζει τις διευθύνσεις της άσκησης 16.3(γ) το ίδιο όπως και το μονοεπίπεδο σύστημα της άσκησης εκείνης.
(δ) Πόσες θέσεις μνήμης καταλαμβάνουν όλοι οι πίνακες μετάφρασης του παρόντος διεπίπεδου συστήματος γιά τη διεργασία μας και γιά τις σελίδες (β); Σε σχέση με το μονοεπίπεδο σύστημα της άσκησης 16.3(β) υπάρχει οικονομία στο χώρο μνήμης που καταλαμβάνεται;
Προκειμένου να μην αναγκαζόμαστε να ακυρώνουμε τα περιεχόμενα του TLB σε κάθε αλλαγή της διεργασίας που τρέχει (context swap), θέλουμε να μπορούμε να έχουμε μέσα στο TLB, ταυτόχρονα, ζευγάρια εικονικής-φυσικής σελίδας πολλών διαφορετικών διεργασιών. Αυτό όμως απαιτεί να μπορούμε να τα ξεχωρίζουμε μεταξύ τους, αφού την κάθε ορισμένη εικονική διεύθυνση ενδέχεται να την χρησιμοποιούν πολλές διεργασίες αλλά γιά διαφορετική πληροφορία και κατά διαφορετικό τρόπο η κάθεμία. Γιά να γίνεται ο διαχωρισμός αυτός, καταγράφουμε τον αριθμό διεργασίας ("PID", Process Identifier) μαζί με τον αριθμό εικονικής σελίδας αυτής της διεργασίας σε κάθε θέση (ζευγάρι εικονικής-φυσικής σελίδας) του TLB.
(α) Θεωρήστε την εικονική μνήμη της άσκησης 16.3, και θεωρήστε ότι το PID έχει μέγεθος 12 bits (μέχρι 4096 ταυτόχρονες διεργασίες). Θεωρήστε ένα TLB μεγέθους 64 θέσεων, με πλήρως προσεταιριστική τοποθέτηση ζευγών (οιοδήποτε ζεύγος μετάφρασης μπορεί να μπεί οπουδήποτε στο TLB). Ποιά πεδία πρέπει να έχει η κάθε θέση αυτού του TLB, και τι μεγέθους το καθένα;
(β) Δώστε ένα αριθμητικό παράδειγμα του πλήρους περιεχομένου του TLB όταν αυτό περιέχει ζευγάρια μετάφρασης γιά τις εξής σελίδες:
(γ) Οι διεργασίες 73B και 83C, παραπάνω, είναι προστατευμένες η μία από την άλλη; Μπορεί η μία να διαβάσει τα δεδομένα της άλλης (κλέβοντας έτσι, π.χ., ο ένας χρήστης τις εμπιστευτικές πληροφορίες που ο άλλος διαβάζει μέσω διαδικτύου); Μπορεί η μία να αλλοιώσει (γράψει) τα δεδομένα της άλλης (παραπλανόντας έτσι, π.χ., ο ένας χρήστης τον άλλον); Μπορεί η μία να καταστρέψει (γράψει) τον κώδικα της άλλης ("κολλώντας" έτσι, π.χ., ο ένας χρήστης τον άλλον); Πώς εξασφαλίζουμε την επιθυμητή προστασία και ανεξαρτησία μεταξύ αυτών των δύο διεργασιών, ενώ ταυτόχρονα κάνουμε και οικονομία μνήμης κρατώντας ένα μόνο φυσικό αντίτυπο του κώδικα που αυτές τρέχουν;
Τρόπος Παράδοσης:
Παραδώστε ηλεκτρονικά τις απαντήσεις σας, σε ένα αρχείο "ask16.pdf" (PDF format). Xρησιμοποιήστε σχεδιαστικό πρόγραμμα της αρεσκείας σας ή σκαναρισμένο χειρόγραφο για τα ζητούμενα σχηματικά διαγράμματα.
[Up - Table of Contents] [Prev - 15. Cache Memories] |
[printer version - PDF] [17. I/O and DMA - Next] |
Up to the Home Page of CS-225
|
© copyright University of Crete, Greece. Last updated: , by D. Nikolopoulos. |