# Řízení IO přenosů řadičem DMA **Koncepce DMA** - při vstupu nebo výstupu dat se opakují jednoduché činnosti - jednotlivé kroky je možné realizovat speciálním HW - CPU - řadič DMA - řadič IO **Průběh DMA přenosu** - IO řadič indikuje požadavek na přenos dat signálem DRQ (Data Request) - DMA řadič žádá CPU o uvolnění sběrnice signálem BREQ (Bus Request) - CPU indikuje uvolnění sběrnice signálem BUSACK (Bus Acknowledge) - DMA řadič požaduje přenos dat do/z IO signálem DACK (DMA Acknowledge) - čtení/zápis dat z/do paměti se řídí obvyklými signály na sběrnici - po přenesení celého bloku může DMA řadič generovat přerušení - indikaci konce přenosu **Přenos DMA** 1. datový registr IO řadiče je plný 2. IO řadič generuje DRQ 3. DMA řadič generuje BREQ 4. procesor dokončí probíhající sběrnicový cyklus a odpojí se od sběrnice - aktivuje BUSACK 5. DMA řadič aktivuje DACK a na sběrnici vysílá adresu a povel k zápisu 6. IO řadič vysílá na datovou sběrnici obsah datového registru 7. IO řadič zruší DRQ 8. DMA řadič zruší BREQ a DACK a přestane vysílat adresu a povel k zápisu - registr adresy se inkrementuje, registr délky se dekrementuje 9. CPU zruší BUSACK 10. CPU se připojí ke sběrnici 11. po přenesení celého bloku generuje DMA řadič přerušení **DMA řadič se dvěma cykly** - jednodušší návrh IO řadiče - univerzální použití (přenosy paměť -> paměť) - funkce 1. čtení ze zdroje dat do interního datového registru 2. zápis dat z interního datového registru do cíle **Charakteristika DMA přenosu** - velmi rychlý přenos dat (nejrychlejší způsob přenosu) - vhodný pro blokové přenosy - vyžaduje speciální HW prostředky - komplikovaný provoz na sběrnici **Sdílení sběrnice** - dva způsoby sdílení sběrnice mezi CPU a DMA 1. DMA uvolňuje sběrnici po každém přenosu (cycle stealing) - procesor není trvale blokován, pomalejší přiřazení DMA řadiči 2. DMA drží obsazenou sběrnici po celou dobu přenosu (burst mode) - procesor blokován po celou dobu přenosu, nejrychlejší DMA přenos **Připojení mastera** - adresní a datové vodiče a signály /RD a /HWR připojeny na sdílenou sbernici pomocí třístavových budičů - ty jsou v aktivním nebo HiZ stavu (= master čeká na stav sběrnice WAIT) **Decentralizovaný arbiter** - každý master ovládá jeden arbitrační vodič, současně sleduje aktivitu ostatních vodičů a porovnává prioritu aktivních vodičů se svou prioritou „Bus Fairness“: vítězný master si pamatuje, že zablokoval přístup na sběrnici jinému masteru (s nižší prioritou) a příště mu dá ve stejné situaci přednost **Složitější architektura** - každý procesor může používat nezávislou lokální sběrnici a lokální paměť - pro sdílená data je určena sdílená paměť přístupná všem procesorům - adresní prostor systému s lokální a sdílenou pamětí - obě paměti ve stejném adresním prostoru - každá z pamětí pokrývá jiný rozsah adres - při adresování sdílené paměti žádá adaptér bus-bus o přístup na sdílenou sběrnici