6. Układy we/wy, DMA, magistrale

6.3. Układ DMA

Układ DMA (ang. Direct Memory Access) to inaczej układ bezpośredniego dostępu do pamięci (układ ten nazywamy też sterownikiem lub kontrolerem DMA). Schemat blokowy układu i sposób współpracy z innymi fragmentami systemu komputerowego pokazany jest na rys. 3.

Celem stosowania układu jest odciążenie mikroprocesora od czynności związanych z przekazywaniem danych przez szynę systemową i jednocześnie przyśpieszenie transmisji. W architekturze mikrokomputera DMA podporządkowany jest mikroprocesorowi, który pełni funkcję jednostki nadrzędnej.

Układ DMA musi być przed transmisją zaprogramowany przez procesor przez przesłanie do DMA 3 podstawowych parametrów transmisji:

  • kierunku przesyłania (skąd, dokąd)
  • długości transmitowanego bloku
  • początkowego adresu obszaru pamięci na który będziemy zapisywać dane lub z którego będziemy czytać dane. Z reguły operujemy spójnymi obszarami pamięci.

Rys. 3. Współpraca układu DMA z mikroprocesorem, PAO i układem we/wy (tutaj sterownikiem twardego dysku)

Typowy prosty sterownik DMA składa się z licznika słów LS, licznika adresów LA, rejestru sterującego C i rejestru stanu S. Sterownik ma następujące wejścia i wyjścia:

D - dwukierunkowa szyna danych
A - magistrala adresowa np. linie A0-A15 (A0, A1 są we/wy)
HOLD (wy) - sygnał żądania dostępu do szyny
HOLDA(we) - sygnał akceptacji dostępu do szyny
DRQ (we) - sygnał zgłaszający gotowość urządzenia
DACK (wy) - polecenie przesłania słowa danych np. bajt

 

Rys. 4. Schemat blokowy typowego sterownika DMA

 

Rys. 5. Sygnały sterujące DMA

DMA zgłasza sygnałem HOLD żądanie dostępu do szyny. W momencie gdy mikroprocesor zaakceptuje żądanie dostępu do szyny, wystawia sygnał HOLDA i „przechodzi w trzeci stan”. Kontrolę nad szyną systemową i transmisją danych przejmuje DMA.

Układy DMA są stosowane w systemach mikrokomputerowych przede wszystkim do sterowania przesyłaniem bloków danych między pamięcią operacyjną PAO a szybkimi pamięciami zewnętrznymi np. twardym dyskiem.

Typowy układ DMA to np. Intel 8257