H λειτουργία της απευθείας πρόσβασης μνήμης
Το I/O οδηγούμενο από διακοπές απαλλάσσει τον επεξεργαστή από την αναμονή για κάθε λειτουργία I/O. Παρόλ’αυτά, αν χρησιμοποιήσουμε αυτή τη μέθοδο για τη μεταφορά δεδομένων από ή προς ένα σκληρό δίσκο, η επιβάρυνση παραμένει τεράστια, αφού , στο χρονικό διάστημα που ο δίσκος εκτελεί μεταφορές, καταναλώνεται το 100% της επεξεργαστικής ισχύος. Για συσκευές υψηλού εύρους ζώνης, όπως οι σκληροί δίσκοι, οι μεταφορές συνίστανται κυρίως από σχετικά μεγάλα μπλοκ δεδομένων (εκατοντάδες ως χιλιάδες bytes). Για παράδειγμα, για τη μεταφορά ενός μπλοκ 2048 λέξεων θα απαιτούταν τουλάχιστον 2048 αποθηκεύσεις και 2048 φορτώσεις , ενώ θα είχαμε και την επιπρόσθετη επιβάρυνση λόγω των διακοπών.
Για να απαλλαγεί
ο επεξεργαστής όσο το δυνατόν περισσότερο, οι σχεδιαστές υπολογιστών
ανακάλυψαν ένα μηχανισμό όπου για τη μεταφορά των δεδομένων απευθείας προς
ή από τη μνήμη υπεύθυνος είναι ο ελεγκτής της συσκευής, και δεν εμπλέκεται
ο επεξεργαστής. Αυτός ο μηχανισμός ονομάζεται άμεση προσπέλαση μνήμης
(direct memory access – DMA).
Ο μηχανισμός διακοπών
χρησιμοποιείται και τώρα από τη συσκευή για να επικοινωνεί με τον επεξεργαστή,
αλλά μόνο όταν η μεταφορά I/O ολοκληρώνεται ή όταν προκύπτει κάποιο λάθος.
Η
DMA λοιπόν υλοποιείται με έναν εξειδικευμένο επεξεργαστή – ελεγκτή- ο οποίος
μεταφέρει δεδομένα μεταξύ της μνήμης και μιας συσκευής εισόδου/εξόδου,
ενώ την ίδια στιγμή ο επεξεργαστής ασχολείται με άλλες διεργασίες. Γι’αυτό
το λόγο βρίσκεται εκτός του επεξεργαστή και είναι κύριος (master) στην
αρτηρία, κατευθύνοντας τις αναγνώσεις και τις εγγραφές ανάμεσα στη συσκευή
και τη μνήμη.
Στο παρακάτω σχήμα βλέπουμε ένα υπολογιστικό σύστημα με δυο συσκευές εισόδου/εξόδου που χρησιμοποιούν ένα ελεγκτή DMA για να επικοινωνήσουν με τη μνήμη. Η οργάνωση αρτηρίας είναι απλοποιημένη.
Στάδια
σε μία μεταφορά DMA
Υπάρχουν τρία στάδια
σε μια μεταφορά DMA:
1. Ο επεξεργαστής
προετοιμάζει τη DMA παρέχοντας την ταυτότητα της συσκευής, τη λειτουργία
που θα επιτελέσει στη συσκευή, τη διεύθυνση μνήμης που αποτελεί την πηγή
ή τον προορισμό των δεδομένων που πρόκειται να μεταφερθούν και το πλήθος
των bytes.
2. Η DMA ξεκινά
τη λειτουργία στη συσκευή και εμπλέκεται σε ένα σχήμα διαιτησίας για
να γίνει κάτοχος της αρτηρίας. Οταν τα δεδομένα είναι διαθέσιμα (από τη
συσκευή ή τη μνήμη) τα μεταφέρει. Η συσκευή DMA παρέχει τη διεύθυνση μνήμης
για την ανάγνωση ή την εγγραφή. Αν η αίτηση απαιτεί περισσότερες από μία
μεταφορές αρτηρίας, η μονάδα DMA παράγει την επόμενη διεύθυνση μνήμης και
ξεκινά την επόμενη μεταφορά. Χρησιμοποιώντας αυτό το μηχανισμό, μία
μονάδα DMA μπορεί να μεταφέρει έναν ολόκληρο τομέα δίσκου, που μπορεί να
έχει μέγεθος χιλιάδες bytes, χωρίς να ενοχλήσει τον επεξεργαστή. Πολλοί
ελεγκτές DMA περιλαμβάνουν κάποια ενδιάμεση αποθήκευση (buffering) για
να μπορούν να αντιμετωπίσουν με ευελιξία τις όποιες καθυστερήσεις είτε
κατά τη μεταφορά, είτε εκείνες που προκύπτουν όσο ο ελεγκτής περιμένει
να γίνει κύριος της αρτηρίας.
3. Από τη στιγμή που
η μεταφορά DMA έχει ολοκληρωθεί,
ο ελεγκτής στέλνει ένα σήμα διακοπής
στον επεξεργαστή, ο οποίος είναι σε θέση τότε να προσδιορίσει αν η
όλη λειτουργία ολοκληρώθηκε με επιτυχία εξετάζοντας τη συσκευή DMA ή τη
μνήμη.
Πολλαπλές
συσκευές DMA
Μπορεί να υπάρχουν
πολλαπλές συσκευές DMA σε ένα υπολογιστικό σύστημα. Για παράδειγμα, σε
ένα σύστημα με μία μόνο αρτηρία επεξεργαστή-μνήμης και πολλές αρτηρίες
I/O, κάθε ελεγκτής αρτηρίας I/O πολλές φορές περιέχει έναν επεξεργαστή
DMA που διαχειρίζεται κάθε μεταφορά ανάμεσα σε μία συσκευή που βρίσκεται
στην αρτηρία I/O και τη μνήμη.
Ας δούμε τι ποσοστό
του επεξεργαστή καταναλώνεται χρησιμοποιώντας DMA για να αντιμετωπίσουμε
το παράδειγμά μας με το σκληρό δίσκο.
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 1
Τι συμπεράσματα προκύπτουν από το προηγούμενο παράδειγμα όσον αφορά τη χρήση DMA για τη διασύνδεση του σκληρού δίσκου; Να συγκρίνετε την απάντησή σας με την παράγραφο που ακολουθεί.
Επεξεργαστές
Ι/Ο
Για να ελαττώσουμε
περαιτέρω την ανάγκη να διακόπτουμε τον επεξεργαστή και να τον απασχολούμε
με τη διαχείριση μίας αίτησης I/O που μπορεί στην πραγματικότητα να συνεπάγεται
την εκτέλεση αρκετών λειτουργιών, μπορούμε να κάνουμε τον ελεγκτή I/O
να λειτουργεί πιο έξυπνα. Οι έξυπνοι ελεγκτές ονομάζονται συχνά επεξεργαστές
I/O (I/O processors, όπως επίσης και ελεγκτές I/O – I/O controllers
ή ελεγκτές καναλιών – channel controllers).
Αυτοί οι εξειδικευμένοι
επεξεργαστές εκτελούν βασικά μία σειρά από λειτουργίες I/O, που ονομάζεται
πρόγραμμα I/O (I/O program).
Το πρόγραμμα μπορεί να είναι αποθηκευμένο
στον επεξεργαστή I/O ή μπορεί να είναι αποθηκευμένο στη μνήμη και να ανακτάται
από τον επεξεργαστή I/O.
Πριν την ενεργοποίηση
ενός επεξεργαστή I/O, το λειτουργικό σύστημα συνήθως προετοιμάζει ένα πρόγραμμα
I/O που δηλώνει τις λειτουργίες I/O που πρέπει να γίνουν, όπως επίσης και
το μέγεθος και τη διεύθυνση μεταφοράς για τυχόν αναγνώσεις ή εγγραφές.
Στη συνέχεια ο επεξεργαστής I/O διαβάζει το πρόγραμμα Ι/Ο, εκτελεί τις
λειτουργίες που περιγράφονται σε αυτό, και διακόπτει τον επεξεργαστή,
μόνο όταν όλο το πρόγραμμα έχει τελειώσει.
Οι
επεξεργαστές DMA είναι βασικά επεξεργαστές ειδικού σκοπού (συνήθως αποτελούνται
από ένα μόνο κύκλωμα και δεν είναι προγραμματιζόμενοι), ενώ οι επεξεργαστές
I/O υλοποιούνται συχνά με μικροεπεξεργαστές γενικού σκοπού οι οποίοι εκτελούν
ένα εξειδικευμένο πρόγραμμα I/O.
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 2
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 3
![]() |
![]() |
![]() |
![]() |