Pa kontroler. Da li si ikada uopšte imao EISA magistralu u računaru? Tako sam i mislio. Malo ljudi ih je imalo jer je jako kratko trajala dok je PCI standard nije prešišao (ni ja je nisam imao :o)). Danas su svi diskovi na PCI sabirnicama. Nekada su se kontroleri za diskove nalazili na interfejs karticama (samu karticu smo kolokvijalno zvali "kontroler", izraz koji se i danas jednako pogrešno upotrebljava za SCSI host adaptere). Danas se kontroleri za diskove nalaze na samim diskovima, zbog toga ih i zovemo IDE (Integrated Drive Electronics).
Čini mi se da je problem što si ti "proučavao" stare MFM i RLL diskove na ISA i EISA magistralama, a gledao u moderno kućište sa integrisanim PCI disk interfejsima.
Što se tiče pitanja "šta je DMA kanal", evo ukratko. Zamislite da treba da prekopirate veliku količinu podataka iz memorije u I/O prostor nekog uređaja. Recimo da treba zvuk koji se nalazi u memoriji na lokacijama od adrese 0x00004000 do adrese 0x00009000, da prebacite na zvučnu karticu, recimo na adresi 0x220, da bi ona puštala zvuk. Naravno, ovo prebacivanje mora da bude u realnom vremenu, da zvuk ne bi bio iseckan. E sad to može da se izvede softverski, naravno (evo u nekom uprošćenom asembleru):
Code:
LOAD 0x00004000 ;učitava jednu reč u neki registar procesora
OUT 0x220 ;upisuje tu reč u data registar kontrolera zvučne kartice
LOAD 0x00004001 ;i onda jovo nanovo
OUT 0x220
LOAD 0x00004002
OUT 0x220
...
LOAD 0x00009000 ;sve do kraja
OUT 0x220
i znači procesoru treba dve instrukcije za svaka 4 bajta, a pritom procesor ne može da radi ništa drugo za sve to vreme. Zamisli da puštaš wav fajl od dva megabajta, koliko bi procesor morao da se optereti samo radeći na magistrali, pretovarujući podatke iz memorije na kontroler zvučne kartice. Zbog toga su ljudi izmislili spravicu koja se zove DMA kontroler. DMA kontroler je naprava koja ima direktnu komunikaciju sa procesorom, i pristup magistrali, i "ume" da radi prebacivanje blokova podataka iz memorije u I/O prostor, iz memorije u memoriju, ili iz I/O prostora u memoriju (kad kažem I/O prostor, mislim na periferijske uređaje, naravno). Procesor njemu samo kaže: "Ajd sad ti Dejane, sinovče moj, pretovari mi onaj tamo zvuk od adrese X do adrese Y na onu tamo karticu na adresi Z", evo ti magistrala, ti si mi odgovoran za nju dok ja idem da računjam neke brojove, javi mi se kad završiš. I onda procesor fino preda magistralu DMA kontroleru (DMA kontroler postaje
master na magistrali), ode da računa svašta, jer ti renderuješ neku sliku u 3D Studiju dok puštaš muziku, i nije 99% opterećen puštanjem glupavog zvuka. DMA kontroler mu se, kad pretovari (tj. pusti zvuk), javi i kaže "završiooo!", procesor kaže "hvala lepo", uzme mu magistralu (sad je procesor opet master) i nastavlja dalje.
E sad u PC-ju DMA kontroler ima 8 kanala, i obično je potrebno da se svaki ekskluzivno dodeli nekoj periferiji. Stari ISA (i EISA i VLB) sistemi su koristili ovaj običan DMA za prenos podataka i za hard diskove (jer je to dovoljno brzo za 20 MB hard na XT-u). Ali za današnje PCI sisteme, to se više ne koristi. Koristi se ili programirani I/O (iliti PIO, to vam je ono bez DMA kontrolera, kad procesor čita svaki podatak "ručno", kao u gornjem primeru) ili takozvani "bus-mastering" (eto i toga da se dotaknem). Bus mastering je kad kontroler na samom uređaju (recimo UDMA kontroler na nekom novom disku), znači ni procesor ni integrisani DMA kontroler, nego sam uređaj, preuzima magistralu i sam vrši prenos. Čak i mnoge nove PCI periferije (SCSI kartice, neke grafičke karte itd.) koriste PCI bus mastering umesto standardnog DMA. Standardni DMA se najviše koristi na ISA zvučnim i mrežnim karticama.
Eto. Ako nešto nije jasno pitajte da pojasnimo. stra, a odnosilo bi se na osobu
int rand(void);
Those who do not understand Unix are condemned to reinvent it, poorly.
Upali lampicu — koristi Jabber!