[Chapter Three][Previous] [Next] [Art of Assembly][Randall Hyde]

Art of Assembly: Κεφαλαιο 3


 3.2. Χρονισμός Συστήματος

 3.2.1. Ρολόι Συστήματος
 3.2.2. Πρόσβαση Μνήμης και Ρολόι Συστήματος
 3.2.3. Wait state - Κατάσταση Αναμονής
 3.2.4. Κρυφή Μνήμη – (Cache Memory)
 


3.2. Χρονισμός Συστήματος

Αν και οι σύγχρονοι Η/Υ είναι αρκετά γρήγοροι και γίνονται συνεχώς γρηγορότεροι, αυτοί απαιτούν ακόμη μια πεπερασμένη χρονική ποσότητα για να εκπληρώσουν ακόμη και την μικρότερη αποστολή. Στις μηχανές VNA, όπως ο 80x86, οι περισσότερες λειτουργίες γίνονται σειριακά. Αυτό σημαίνει ότι ο Η/Υ εκτελεί εντολές με προκαθορισμένη σειρά. Παραδείγματος χάρη, δεν γινεται να εκτελέσει την εντολή I:=I*5+2; πριν να εκτελέσει την εντολή I:=J;, δηλαδη με την ακολουθη σειρα :
 

        I := J;
        I := I * 5 + 2;

 Άρα θα πρέπει να βρούμε τρόπο να ελέγχουμε ποια εντολή εκτελείται πρώτη και ποια δεύτερη.
Σε πραγματικό σύστημα, οι λειτουργίες δεν εκτελούνται ακαριαία. Μεταφέροντας ένα αντίγραφο του J στο I χρειάζεται ένα συγκεκριμένο χρόνο. Το ίδιο και για την δεύτερη εντολή, μόνο που αυτή απαιτεί λίγο περισσότερο χρόνο.
Η CPU είναι ένα περίπλοκο, λεπτομερές σχέδιο κυκλώματος. Πρέπει να τονίσουμε, ότι οι λειτουργίες μέσα στην CPU θα πρέπει να είναι συντονισμένες προσεχτικά, ειδάλλως θα παρουσιάσει εσφαλμένα αποτελέσματα. Για να διασφαλίσεις ότι όλες οι λειτουργίες εκτελούνται στην σωστή χρονική στιγμή, η 80χ86 CPU χρησιμοποιεί ένα ειδικό σήμα το οποίο ονομάζεται ρολόι συστήματος (system clock).


3.2.1. Ρολόι Συστήματος

Στο βασικότερο επίπεδο, το ρολόι συστήματος κρατάει όλους τους συγχρονισμούς μέσα στο  σύστημα του Η/Υ. Το system clock είναι ένα ηλεκτρονικό σήμα στην δίαυλο ελέγχου, το οποίο εναλλάσσεται μεταξύ του 0 και του 1 σε περιοδικό ρυθμό.  

Οι CPU είναι ένα καλό παράδειγμα ενός πολύπλοκου, σύγχρονού λογικού συστήματος. Το System Clock ελέγχει τις πύλες που αποτελούν την CPU, δίνοντας σ’ αυτές την δυνατότητα να εργάζονται με συγχρονισμό.

Ο ρυθμός με τον οποίο το ρολόι εναλλάσσεται μεταξύ 0 και 1 ονομάζεται συχνότητα ρολογιού. (clock frequency). Ο χρόνος που απαιτείται για να γίνει το system clock από 0 1 και αντίστροφα, ονομάζεται περίοδος ρολογιού (clock period). Μια ολοκληρωμένη περίοδος ονομάζεται και κύκλος ρολογιού (clock cycle). Η συχνότητα ρολογιού είναι ο αριθμός των κύκλων ρολογιού οι οποίοι πραγματοποιούνται κάθε λεπτό. Σημειώστε ότι μετατρέπουμε τις περιόδους ρολογιού σε εκατομμύρια ή δισεκατομμύρια του δευτερολέπτου.

Για να σιγουρέψουμε τον συγχρονισμό, οι περισσότερες CPU αρχίζουν μια λειτουργία ή στην ακμή καθόδου (όταν το ρολόι πηγαίνει από το 1 στο 0) ή στην ακμή ανόδου (όταν το ρολόι πηγαίνει από το 0 στο 1). Το ρολόι συστήματος παραμένει τον περισσότερο χρόνο είτε στο 0 είτε στο 1 και κινείται για πολύ λίγο χρόνο μεταξύ των δυο. Γι’ αυτό τα άκρα του ρολογιού είναι το τέλειο σημείο συγχρονισμού.

Εφόσον όλες οι λειτουργίες είναι συγχρονισμένες με το ρολόι, η CPU δεν μπορεί να εκτελέσει την αποστολή της πιο γρήγορα από το ρολόι. Επίσης, επειδή  η CPU τρέχει με κάποια συχνότητα ρολογιού δεν σημαίνει ότι εκτελεί τόσες πολλές λειτουργίες κάθε δευτερόλεπτο. Πολλές λειτουργίες χρειάζονται πολλαπλούς κύκλους ρολογιού για να ολοκληρωθούν και έτσι η CPU συχνά εκτελεί λειτουργίες  σε σημαντικά χαμηλότερο ρυθμό.
 


3.2.2. Πρόσβαση Μνήμης και Ρολόι Συστήματος

Η πρόσβαση στην μνήμη είναι πιθανότατα η πιο συνηθισμένη δραστηριότητα της CPU. Η πρόσβαση στην μνήμη είναι σίγουρα μια λειτουργία συγχρονισμένη με το ρολόι. Σε πολλούς 80x86 επεξεργαστές, χρειάζονται αρκετοί κύκλοι ρολογιού για να προσπελαστεί μια θέση μνήμης. Ο χρόνος προσπέλασης της μνήμης είναι ο αριθμός των κύκλων ρολογιού που χρειάζεται το σύστημα για να προσπελάσει μια θέση μνήμης . Αυτή είναι μια σημαντική τιμή καθώς οι μεγαλύτερες μνήμες έχουν υψηλότερους χρόνους προσπέλασης.

Με άλλα λόγια, ο χρόνος προσπέλασης της μνήμης (memory access time) είναι το χρονικό διάστημα που απαιτείται μεταξύ της χρονικής στιγμής που μια λειτουργία μνήμης απαιτήθηκε (για διάβασμα ή γράψιμο) και της στιγμής που η λειτουργία ολοκληρώνεται.

Όταν διαβάζεις από την μνήμη, ο χρόνος προσπέλασης της μνήμης είναι ο χρόνος από την στιγμή που η CPU τοποθετεί μια διεύθυνση στη δίαυλο διευθύνσεων μέχρι η CPU να πάρει τα δεδομένα από την δίαυλο.
 


3.2.3. Wait state - Κατάσταση Αναμονής

Η κατάσταση αναμονής δεν είναι τίποτα παραπάνω από έναν έξτρα κύκλο ρολογιού , για να δώσει λίγο χρόνο μηχανής μέχρι να ολοκληρωθεί η διαδικασία. Π.χ. ένα 80486  σύστημα των 50MHz έχει 20ns περίοδο ρολογιού. Αυτό προϋποθέτει 20 ns μνήμη. Στην πραγματικότητα η κατάσταση είναι χειρότερη. Στα περισσότερα συστήματα υπάρχει ένας πρόσθετος συνδυασμός κυκλωμάτων, μεταξύ της CPU και της μνήμης: λογική καταχωρητή και αποκωδικοποιητή. Αυτό το επιπρόσθετο κύκλωμα προκαλεί πρόσθετες καθυστερήσεις στο σύστημα.
     

Σ’ αυτό το διάγραμμα, το σύστημα χάνει 10ns για καταχώρηση και αποκωδικοποίηση. Έτσι αν η CPU θέλει τα δεδομένα πίσω σε 20ns, η μνήμη θα πρέπει να ανταποκριθεί σε λιγότερα από 10ns. Μπορείς να αγοράσεις 10ns μνήμης, Αυτό όμως για πολλούς λόγους είναι δύσκολό και ασύμφορο.

Πώς τελικά καταφέρνουν οι εταιρίες να πουλάνε γρήγορα PC; Η μια πλευρά της απάντησης είναι το wait state - η κατάσταση αναμονής . Π.χ. αν έxεις 20MHz επεξεργαστή με κύκλο χρόνου μνήμης 50ns και χάνεις 10ns για καταχώρηση και αποκωδικοποίηση, θα χρειαστείς 40ns μνήμης. Τι γίνεται αν μπορείς να έχεις 80ns μνήμης σε σύστημα 20 MHz; Προσθέτοντας ένα wait state για να επεκτείνεις τον κύκλο μνήμης στα 100ns (δυο κύκλοι ρολογιού), λύνεις το πρόβλημα. Αφαιρώντας 10ns για αποκωδικοποίηση και καταχώρηση, απομένουν 90ns. Τα 80ns μνήμης μπορούν να ανταποκριθούν πολύ εύκολα, πριν η CPU απαιτήσει τα δεδομένα.

Σχεδόν όλοι οι γενικής χρήσεως CPU που υπάρχουν , παρέχουν ένα σήμα στον δίαυλο ελέγχου για να επιτρέπει την είσοδο των wait states.
       

Αυτονόητο είναι από την οπτική γωνία της απόδοσης του συστήματος ότι τα wait states δεν είναι ότι καλύτερο. Την ώρα που η CPU περιμένει δεδομένα από την μνήμη, δεν μπορεί να εκμεταλλευτεί αυτά τα δεδομένα. Προσθέτοντας ένα μοναδικό wait state στον κύκλο μνήμης μιας 80486 CPU, διπλασιάζεται  ο απαιτούμενος χρόνος για να έχουμε πρόσβαση στα δεδομένα. Αυτό, έχει ως αποτέλεσμα  να μειώνει στο μισό την ταχύτητα προσπέλασης της μνήμης . Φορτώνοντας ένα wait state σε κάθε προσπέλαση μνήμης είναι κάτι σαν να κόβεις την συχνότητα ρολογιού στο μισό.

Παρόλα αυτά, δεν είμαστε καταδικασμένοι στην χαμηλή απόδοση, λόγω των πρόσθετων wait states. Υπάρχουν διάφορα κόλπα που οι σχεδιαστές hardware χρησιμοποιούν για να πετύχουν μηδενική κατάσταση αναμονής  τον περισσότερο χρόνο. Το πιο συνηθισμένο κόλπο είναι η χρήση της κρυφής μνήμης- (cache memory).
 
 


3.2.4. Κρυφή Μνήμη – (Cache Memory)

Αν κοιτάξεις ένα τυπικό πρόγραμμα (όπως κάνουν οι περισσότεροι ερευνητές ), θα ανακαλύψεις ότι τείνει να προσπελαύνει τις ίδιες θέσεις μνήμης επαναλαμβανόμενα. Επίσης θα παρατηρήσεις ότι το πρόγραμμα συχνά καταλαμβάνει γειτονικές θέσεις. Τα  τεχνικά ονόματα που έχουν δοθεί σ’ αυτό το φαινόμενο είναι χρονική τοπικότητα αναφοράς και χωρική τοπικότητα αναφοράς. Όταν παρουσιάζεται χωρική τοπικότητα, το πρόγραμμα προσπελαύνει γειτονικές θέσεις μνήμης . Όταν παρουσιάζεται χρονική τοπικότητα αναφοράς , το πρόγραμμα, επαναλαμβανόμενα, προσπελαύνει τις ίδιες θέσεις μνήμης μέσα σε μια μικρή χρονική περίοδο. Αυτες οι δυο μορφες τοπικοτητας εμφανιζονται στον παρακατω κωδικα Pascal :
 

        for i := 0 to 10 do
                A [i] := 0;

Αν κοιτάξεις το εκτελεστικό μέρος ενός τυπικού προγράμματος , θα ανακαλύψεις ότι το πρόγραμμα τυπικά εκτελεί λιγότερες από τις μισές δηλώσεις. Γενικά, ένα τυπικό πρόγραμμα ίσως να χρησιμοποιεί μόνο 10-20% από την μνήμη που του έχει κατανεμηθεί. Σε οποιοδήποτε δοσμένο χρόνο, ένα πρόγραμμα του 1 ΜΒ προσπελαύνει 4 ως 8 ΚΒ δεδομένων και κώδικα. Έτσι αν έχεις πληρώσει ένα τεράστιο χρηματικό ποσό για να έχεις μηδενική κατάσταση αναμονής  RAM , δεν θα ήταν και πολύ καλή ιδέα. Δεν θα ήταν πολύ καλύτερο να αγόραζες μικρή ποσότητα γρήγορης RAM και δυναμικά να αναπροσδιόριζες τις διευθύνσεις καθώς το πρόγραμμα εκτελείται;

Αυτό κάνει η cache memory. Μπαίνει ανάμεσα στην CPU και την κύρια μνήμη. Είναι μια μικρή ποσότητα γρήγορης (μηδενικών καταστάσεων αναμονής) μνήμης. Τα bytes που εμφανίζονται μέσα σε μια cache δεν έχουν καθορισμένες διευθύνσεις . Μπορεί να αναπροσδιορίσει την διεύθυνση ενός αντικειμένου δεδομένων. Αυτό επιτρέπει στο σύστημα να κρατάει πρόσφατες προσπελάσιμες τιμές μέσα στην cache.

Ένα  cache hit συμβαίνει όταν η CPU προσπελαύνει την μνήμη και βρίσκει δεδομένα στην cache. Ένα cache miss πραγματοποιείται όταν η CPU προσπελαύνει την μνήμη και τα δεδομένα δεν υπάρχουν στην cache. Τότε η CPU θα πρέπει να διαβάσει τα δεδομένα από την κύρια μνήμη (main memory) , προκαλώντας μείωση της απόδοσης. Για να εκμεταλλευτεί επιτυχώς την τοπικότητα της αναφοράς η CPU αντιγράφει δεδομένα στην cache κάθε φορά που προσπελαύνει μια διεύθυνση η οποία δεν είναι παρούσα στην cache . Όπως γίνεται συνήθως , το σύστημα θα προσπελάσει την ίδια θέση σύντομα και έτσι θα εξασφαλίσει καταστάσεις αναμονής έχοντας δεδομένα στην cache.

Όπως περιγράφτηκε , η cache memory χειρίζεται την χρονική πλευρά της προσπέλασης μνήμης , αλλά όχι και την τοπική πλεύρα.
 
 
 
 

 3.2. Χρονισμός Συστήματος

 3.2.1. Ρολόι Συστήματος
 3.2.2. Πρόσβαση Μνήμης και Ρολόι Συστήματος
 3.2.3. Wait state - Κατάσταση Αναμονής
 3.2.4. Κρυφή Μνήμη – (Cache Memory)
 

Art of Assembly: Κεφαλαιο 3 - 26 SEP 1996

[Chapter Three][Previous] [Next] [Art of Assembly][Randall Hyde]