
DMA (Direct Memory Access) służy do tego, aby odciążyć procesor z operacji na pamięci w przypadku, gdy chodzi tylko o przesyłanie z jednego urządzenia do drugiego. Przykładowo, gdy chcemy z pamięci wysłać coś przez modem, procesor musiałby pobrać te dane z pamięci i wysłać do modemu. DMA robi to za niego, dzięki czemu procesor może zająć się w tym momencie czymś innym.
DMA nie jest w stanie samodzielnie ,,myśleć'', czyli jeśli trzeba wykonać na danych dodatkowe operacje, to musi już zająć się tym procesor. DMA tylko sobie spokojnie czeka na dane, a gdy dostanie zlecenie (musi mieć określone źródło i cel transmisji, samodzielnie DMA nie jest w stanie nic wymyślić), to bierze się do roboty.
Warto zauważyć, że DMA konkuruje z procesorem o magistralę (co jest zrozumiałe, bo musi jakąś drogą te dane przesłać i pobrać), jednak upomina się o nią tylko, gdy dostanie zadanie do wykonania.
Wyróżniamy następujące tryby pracy:
Blokowy - DMA dostaje zlecenie na przesłanie danych, to je przesyła. Wszystkie na raz. W związku z tym procesor nie ma dostępu do magistrali, więc musi siedzieć cicho i czekać, aż wszystko się prześle. Oczywiście, może sobie coś niecoś obliczać samodzielnie w tym czasie, ale bez dostępu do urządzeń zewnętrznych zwykle niewiele może zrobić. Za to transmisja w tym czasie jest najszybsza.
Wykradanie taktów - Procesor ustala, kiedy DMA może wysyłać dane, a kiedy nie. Dzięki temu może on korzystać z magistrali wtedy, kiedy tylko potrzebuje, ale DMA musi dłużej czekać.
Zgodnie z zapotrzebowaniem - Ustalane jest na początku to, ile danych DMA może na raz przesłać, i kiedy magistrala jest wolna, to DMA sobie przesyła. Po przesłaniu danej porcji (czyli bloku), jeśli procesor nie zażąda dostępu do magistrali, to przesyłany jest następny blok.