Bezpośredni dostęp do pamięci
W informatyce , DMA ( Direct Memory Access , " bezpośredni dostęp do pamięci " ) komputera jest mechanizmem , który umożliwia innym podsystemom , takim jak urządzenia peryferyjne , bezpośredni dostęp do pamięci wewnętrznej w celu wymiany danych , odczytu i / lub zapisu , bez obejmujące jednostkę sterującą (CPU) dla każdego bajtu przesyłanego przez zwykły mechanizm przerwań i późniejszego żądania żądanej operacji, ale przez generowanie pojedynczego przerwania na przesyłany blok. [1] [2]
Opis
DMA, poprzez kontroler bezpośredniego dostępu (DMAC), ma zatem za zadanie zarządzanie danymi przechodzącymi przez magistralę , umożliwiając komunikowanie się urządzeń peryferyjnych pracujących z różnymi prędkościami bez narażania procesora na ogromne obciążenie przerwaniami , które stale przerywałoby odpowiednie przetwarzanie . cykl .
DMA jest używane przez wiele systemów sprzętowych, takich jak kontrolery dysków , karty graficzne , karty sieciowe i karty dźwiękowe .
Zasadniczo w transferze DMA blok pamięci jest kopiowany z jednego urządzenia na drugie. Odłączenie szyny danych od procesora w celu przypisania jej do sterowania DMA, którego ten ostatni używa do przesyłania danych między dwoma urządzeniami peryferyjnymi, odbywa się za pomocą przełączników szyny na żądanie DMAC. Procesor po prostu inicjuje transfer zwalniając szynę danych, podczas gdy rzeczywisty transfer jest wykonywany przez kontroler DMA (DMAC). Typowym przypadkiem jest przeniesienie bloku pamięci z zewnętrznego dysku pamięci do pamięci głównej . Jeśli ta operacja, jak to się dzieje dzięki DMA, nie zablokuje procesora, może on dalej wykonywać inne operacje.
DMA zarządza transferami między procesorem a urządzeniami peryferyjnymi za pomocą różnych linii (potwierdzenie, żądanie, sterowanie) oraz dwóch rejestrów DC (licznik danych) i IOAR (rejestr adresów wejściowych/wyjściowych) . Gdy procesor potrzebuje danych znajdujących się w pamięci, ładuje adres, od którego ma rozpocząć operację w IOAR oraz liczbę kolejnych danych do przetworzenia w DC, informując DMA o kolejnym bicie, jeśli jest to operacja odczytu lub zapisu. W tym momencie DMA wysyła żądanie do urządzenia peryferyjnego i po otrzymaniu sygnału potwierdzenia rozpoczyna transmisję. W każdym kroku IOAR jest zwiększane, a DC zmniejszane, aż DC będzie równe 0.
Transfer pomiędzy DMA a I/O może odbywać się na kilka sposobów:
- Burst Transfer : Po rozpoczęciu przesyłania DMA utrzymuje kontrolę nad BUS na koszt procesora, aż do jego zakończenia: dostęp do magistrali przez procesor pozostaje zabroniony przez cały czas przesyłania. Zakłada się, że urządzenie i pamięć pozwalają na tak szybki i trwały transfer, jak potrzebuje kontroler DMA;
- Kradzież cykli : DMA wykonuje transfer słów tylko jeden pełny cykl na raz (tj. dla każdego cyklu łączy się z urządzeniem peryferyjnym i wykonuje transfer tylko wtedy, gdy jest gotowy, innymi słowy poprzez uzgadnianie). W rezultacie czas, w którym procesorowi odmawia się dostępu do szyny danych, jest bardziej fragmentaryczny;
- Transparent / Hidden : DMA zajmuje BUS tylko wtedy, gdy procesor go nie potrzebuje. Aby tak się stało, DMA monitoruje procesor i uruchamia cykl magistrali tylko wtedy, gdy instrukcja wykonywana w procesorze jest wystarczająco długa, aby na to pozwolić i jeśli ta instrukcja nie dotyczy transferów na magistrali.
Technika DMA typu scatter-gather umożliwia przesyłanie danych do wielu regionów pamięci podczas pojedynczej transakcji DMA. Wynik jest równoważny łańcuchowi normalnych żądań DMA, ale to dodatkowo uwalnia procesor od przerwań i operacji kopiowania danych.
Akronim DMREQ oznacza DMA REQuest . DMACK oznacza potwierdzenie DMA .
Operacja
Układ DMA posiada wewnątrz co najmniej cztery rejestry dostępne dla oprogramowania działającego w procesorze:
- Pierwsza zawiera początkowy adres pamięci do odczytu lub zapisu
- Drugi zlicza liczbę bajtów (lub słów) do przesłania
- Trzeci określa numer urządzenia lub przestrzeń adresową I/O do użycia, która określa żądane urządzenie I/O
- Czwarty określa, czy dane powinny być odczytywane z urządzenia I/O, czy też powinny być do niego zapisywane
Dlatego, aby przenieść blok 32 bajtów z adresu pamięci 100 do terminala (jest to urządzenie 4), CPU zapisuje liczby 100, 32 i 4 w pierwszych trzech rejestrach DMA, plus kod do zapisu (w tym przypadku załóżmy, że będzie 1) w czwartym rejestrze. W tym momencie DMA wysyła żądanie odczytu bajtu 100 z pamięci, podobnie jak zrobiłby to CPU. Po uzyskaniu bajtu kontroler DMA wysyła żądanie I/O do urządzenia 4 w celu zapisania bajtu. Po zakończeniu tych operacji kontroler DMA zwiększa swój rejestr adresowy o 1 i zmniejsza rejestr licznika o 1. Jeżeli rejestr licznika jest nadal dodatni, kontynuuje odczyt z pamięci kolejnego bajtu i jego zapis w urządzeniu.
Wreszcie, gdy licznik zeruje się, kontroler DMA przestaje przesyłać dane i wysyła impuls na linię przerwań podłączoną do układu CPU. W obecności DMA, CPU musi tylko zainicjalizować kilka rejestrów, po czym może wykonywać inne zadania aż do zakończenia transferu sygnalizowanego przerwaniem z kontrolera DMA. Niektóre kontrolery DMA mają dwa, trzy lub więcej zestawów rejestrów do kontrolowania jednoczesnych transferów.
Chociaż DMA odciąża procesor od dużego obciążenia I/O, proces ten nie jest całkowicie darmowy. Jeśli szybkie urządzenie, takie jak dysk, jest przesyłane przez DMA, uzyskanie dostępu do pamięci i urządzenia zajmie wiele cykli magistrali. Podczas tych cykli procesor musi czekać (DMA zawsze ma wyższy priorytet magistrali niż procesor, ponieważ urządzenia I/O prawie nie tolerują opóźnień). Zjawisko, które występuje, gdy kontroler DMA kradnie cykle magistrali z procesora, nazywa się kradzieżą cykli . Nawet zysk z braku konieczności obsługi przerwania na bajt (lub na słowo) w dużej mierze nie rekompensuje szkód spowodowanych przez zawłaszczenie pętli.
Notatki
- ^ Tanenbauma , s. 374-375 .
- ^ Bucci 137-143
Bibliografia
- Andrew Stuart Tanenbaum , architektura komputerowa. Podejście strukturalne , Mediolan, Pearson Education, 2006, ISBN 978-88-7192-271-3 .
- Giacomo Bucci , Architektury komputerów elektronicznych , Mediolan, McGraw-Hill, 2001, ISBN 88 386 0889-X .
Powiązane pozycje
Inne projekty
Wikimedia Commons zawiera obrazy lub inne pliki na Direct Memory Access
Linki zewnętrzne
- mmap () i DMA , ze sterowników urządzeń dla systemu Linux, 2. edycja , Alessandro Rubini i Jonathan Corbet
- DMA i obsługa przerwań , na eventhelix.com . Pobrano 28 kwietnia 2005 (zarchiwizowane z oryginału 25 maja 2014) .
- Bezpośredni dostęp do pamięci