Kontroler DMA 213
Rozdział 4. Kontroler DMA
DMA jest skrótem od angielskiego określenia Direct Memory Access, oznaczającego bezpośredni dostęp do pamięci. Mowa tu oczywiście o dostępie do pamięci dla urządzeń peryferyjnych, gdyż kontaktu z nią procesora nie należy już w żaden sposób usprawniać. Ten stosunkowo skąpo opisany element architektury komputera IBM PC wymaga wyjaśnień.
W pierwowzorze nowoczesnych komputerów AT-386 i 486, tj. w IBM PC, zastosowano 8-bitowy kontroler DMA typu 823 7A. Stanowiło to w tamtych czasach znaczne ułatwienie pracy procesorów 8-bitowych przy realizacji cykli dostępu do pamięci, zdejmując z nich obowiązek bezpośredniej realizacji transmisji między blokowymi urządzeniami peryferyjnymi a pamięcią oraz przeadresowywania bloków pamięci. Obecnie nowoczesne procesory 80386 i 80486, dysponujące 32-bitową szyną danych, stały się tak szybkie, że realizowane w mikrokodzie procesora rozkazy transmisji blokowej typu rep movsw są bardziej wydajne niż transmisje blokowe w cyklu DMA. Co gorsza, kilka generacji wzwyż od IBM PC, tj. w nowoczesnych AT, doskonała skądinąd idea DMA napotyka na wąskie gardło 8-bitowych kontrolerów DMA (spowalnianych dodatkowo stosowaniem zegara 4.77 MHz), które powstały dla potrzeb procesorów 8086/88.
Począwszy od IBM PC/AT dodano drugi kontroler 8237A, co pozwoliło na realizację obsługi urządzeń 16-bitowych. Dopiero jednak systemy EISA i MCA, o odmiennej filozofii i architekturze, powróciły do stosowania „na poważnie" idei DMA, wykorzystując szybkie, 32-bitowe układy scalone nowej generacji. Ideę bezpośredniej komunikacji urządzeń wejścia-wyjścia z pamięcią przedstawia rysunek 4.1.
Urządzeniem wejścia-wyjścia jest kontroler napędu dysków elastycznych (zarówno ten zainstalowany na płycie głównej jak i ten umieszczony na karcie wkładanej w złącza rozszerzenia), kontroler jednostki pamięci taśmowej (ang. streamer) lub inne podobne urządzenie. Każdemu z nich przyporządkowany jest jeden z tzw. kanałów DMA, tj. logicznych strumieni danych, których przepływ jest inicjowany przez procesor.
214
Anatomia PC
Rysunek 4.1. Ukł
Idea vve
ady Xl r\
Procesor
<f ^> Pamięć
komunikacji / układów wejścia-wyjścia l
f ,
/i M
Kontroler DMA
>
z pamięcią
IX
N
Każdy z układów 8237A może obsługiwać cztery takie strumienie. Możliwy jest też kaskadowy sposób łączenia kontrolerów 8237A; jedno z wejść układu głównego (Master) obsługuje wtedy następny kontroler (Slave) i jest tym samym „stracone". To rozwiązanie stosowane jest w IBM PC/AT i udostępnia siedem kanałów DMA.
Żądające obsługi urządzenie, stowarzyszone z danym kanałem DMA, wysyła sygnał DREQ (DMA Reąuesi). Układ 8237A reaguje na to przejęciem kontroli nad magistralami systemu i przeprowadzeniem wymaganej transmisji, np. jednego sektora odczytanego z dyskietki do bufora w pamięci operacyjnej (RAM), gdzie odbywa się połączenie sektorów w plik danych. W tym czasie procesor jest wolny i może, do czasu wystąpienia przerwania od kontrolera napędu dysków elastycznych (IRQ 6 - odczytano kolejny sektor), zajmować się obróbką tekstu lub grafiki. Należy tu dodać, że oczywiście nie zawsze oznacza to dalsze wykonywanie programu. Trzeba bowiem pamiętać, że szyny: danych i adresowa, są we władaniu kontrolera DMA, a więc procesor może przetwarzać tylko to, co ma w swoich rejestrach. Wszelkie odwołania do pamięci muszą czekać. Sytuację ratuje trochę pamięć podręczna procesora (ang. cache memory) — stosowana w procesorze 80486 wewnętrzna pamięć o wielkości 8 kB. Może w niej być jednak umieszczany tylko kod programu, a nie dane. Dopiero następca procesora 80486 -Pentium - posiada podręczną pamięć danych.
Ta sama akcja realizowana bez układu DMA składałaby się z kolejnych zapisów i odczytów portu kontrolera napędu dysków elastycznych. Kolejne etapy to: załadowanie akumulatora, przesłanie zawartości akumulatora do portu sterującego, odczyt portu danych do akumulatora, przesłanie zawartości akumulatora do komórki pamięci. To dopiero jeden bajt. Oczywiście przy każdym z tych kroków procesor ma „pełne ręce roboty" i nie ma mowy o wielozadaniowości.
Układ scalony 8237A
Rysunek 4.2 przedstawia wyprowadzenia układu scalonego typu 8237A. Jak wiele innych układów, jest on obecnie zawarty w jednym z kilku układów scalonych wysokiej skali integracji, które znajdują się na nowoczesnej płycie głównej. Przykładowo układ 82C206 zawiera programowalne generatory przebiegów czasowych, kontroler DMA, kontroler przerwań i pamięć nieulotną CMOS. Jednak funkcje i znaczenie poszczególnych układów pozostały, ze względu na zachowanie kompatybilności w dół, te same.
215
Rysunek 4.2.
Rozkład wyprowadzeń układu 823 7 A
Z] A7
Z] A5 Zł A4
2 3 4 5
40 39 38 37 36
IOR d
IOW d
MEMR d
MEMW d PIN5 d
Z] EOP
READY d
6
35
Z] A3
HLDA d
7
34
ZD A2
ADSTB d
8
33
Z] A1
AEN d
9
32
ZJ AO
HRQ d CS d
" 8237
31 30
=3 Vcc Z3 DBO
CLK d
12
29
Z] DB1
RESET d
13
28
Z] DB2
DACK2 d
14
27
...
xmen3684