Tuesday, June 14, 2011

HW: DMA, kanaly a I/O procesory

Pri komunikacii s I/O zariadeniami potrebujeme sledovat aktualne prenosy a rozhodovat o priradeni HW. Prenos medzi I/O zariadeniami je zabezpeceny pomocou I/O radica.

Radic je sekvencny obvod, ktory vytvara riadiace signaly pre riadene obvody (jednotky). Riadiace signaly su casto podmienene stavom riadeneho obvodu a preto sa na vstupy riadica privadzaju stavove signaly. Existuje ista hierarchia radicov, radic moze byt nadriadeny a podriadeny. Podriadeny radic je radic, ktory je vlastny riadeny obvodom a do nadriadeneho radica vysiela a od neho prijima signaly, napr. radic ALU a radic pocitaca.

V nasom pripade hovorime o I/O zariadeniach. I/O zariadenia su pripojene k radicu I/O, ten je pripojeny k zbernici, na ktoru je napojeny CPU a hlavna pamat. K jednemu radicu moze byt pripojenych viac zariadeni. I/O zariadenie pripojene k radicu (ktory moze, ale vacsinou nie je sucastou zariadenia) sa nazyva periferne zariadenie. Napriklad monitor s radicom, ku ktoremu je pripojeny sa nazyva periferne zariadenie.



Z obrazku je vidno, ze I/O zariadenia su pripojene k radicu, ktory je dalej pripojeny k roznym typom zbernic. Radic teda tvori interface pre zariadenia. Interface je (v pripade informatiky) konceptualny pojem, ktory "popisuje" komunikaciu medzi komponentami. Komponenty mozu fungovat nezavisle na sebe a pouzivata interface na komunikaciu s ostatnymi komponentami za pouzitia prislusneho protokolu. V nasom pripade sa jedna o komunikaciu medzi zbernicami, pamatovymi zariadeniami a inymi I/O zariadeniami. HW interface je popisany elektrickymi a logickymi signalmi a komunikacnym protokolom (signaly a ich poradie, vlastnosti).


Nasim interfacom je radic, ktory komunikuje s PC cez zbernicu (PC XT, ISA, EISA, PCI, VLB) a so zariadenim alebo jeho riadiacou jednotkou (ak ma zariadenie radic). 


Aby sme to zhrnuli, tak komunikacia s perifernymi zariadeniami prebieha cez radic. Komunikacia s I/O radicom prebieha v podstate na zaklade 


  • realizacie instrukcie assembleru 
  • cinnosti radica DMA 
  • ineho prvku v zostave, ktory dokaze riadit zbernicu
Instrukcia moze na strance pocitaca vyvolat (priklad)
  • vlozenie dat na datovu cast systemovej zbernice
  • vlozenie adresy registru na adresovu cast systemovej zbernice 
  • generovanie riadiaceho signalu zbernice, napr. "zapis do registru"


V pripade instrukcie sa na I/O radici udeje


  • dekodovanie adresy (som to ja a nejaky moj register?)
  • zapis obsahu datovej casti systemovej zbernice do adresovaneho registra. Vzdy je rozpoznany len jeden register
  • vysle sa signal vnutri radica "zapis do registra". Len jeden register dostane tento signal a len do neho je zapisana prenasan informacia 
S I/O radicmi mozme komunikovat 
  • podla sposobu adresacie registrov, ktore su sucastou radica
  • podla sposobu obsluhy a riadenia perifernej operacie 
A ako registre adresujeme?
  • Ak registry maju svoj vlastny adresovy priestor, tak komunikujeme cez izolovane vstupy/vystupy. K dispozicii su v tomto pripade 2 skupiny instrukcii IN a OUT
  • Adresy registrov mozu byt mapovane od adresoveho priestoru operacnej pamate. V takom pripade, cast adresoveho priestoru nie je vyuzivana ako pamat, ale vyuziva sa na uchovavanie adries zariadeni. Vystup zo zariadenia znamena zapis do pamate, naopak zase citanie z pamate. Sada instrukcii je tu podstatne sirsia. 
Inak, ked hovorime o tom, ze adresujeme I/O zariadenie, tak je dobre spomenut termin brana I/O zariadenia. Toto zjavne evokuje miesto pre vstup a vystup :) a patri k inteface I/O zariadenia (a mozno aj k radicu). Na obrazku je nacrtnuta I/O brana. 

Zariadenia mapovane do pamate


I/O brany su mapovane do pamate. Tomu musia zodpovedat aj dekodery adries. Pre vystup sa pouzije instrukcia "zapis do pamate" a pre vstup instrukcia "citaj z pamate". 



Prikladom instrukcie pre tuto kategoriu moze byt instrukcia MOV dest, source, kde destination je adresa v pamati a source je register procesoru, alebo naopak. 

Zariadenia riadene instrukciami
Tieto zariadenia maju vlastny adresovy priestor. Maju specialne instrukcie pre vstup a vystup, IN dest, source OUT dest, source. Jednym operandom moze byt register procesoru a druhym adresa I/O brany. Adresovy priestor je v tomto pripade oddeleny. Pri vykonani instrukcie sa instrukcia posle na radic a z radica procesoru. Pri "splnovani" poziadavku je mozne postupovat viacerymi sposobmi: 
  1. Instrukcie trvaju, kym nie je vykonana operacia, alebo jej cast (nezbytna). 
  2. Existuju instrukcie, ktorymi sa da zistit stav poziadavku a programovo sa zabezpecuje cakanie 
  3. Po vykonani I/O operacie pracuje zariadenie samostatne. Procesor robi co je potreba, napriklad vykonava ine instrukcie. Ukoncenie cinnosti je signalizovane prerusenim. 
SIO model
V tomto modeli existuje nieco, comu budeme nadavat kanalovy podsystem.Kanal vykonava prenos udajou suvisiacich s instrukciou na zaklade kanaloveho programu, ktory tvori postupnost kanalovych prikazov. 

Komunikaciu procesoru a periferie musime nejak synchronizovat a to robime pomocou istych technik, z ktorych niektore su
  • pooling
  • DMA
  • preruseni
  • specializovaneho procesoru 
Pooling

Znamena to, ze aktivne zistujeme status zariadenia Ak vyzadujeme I/O operaciu, tak zistujeme stav zariadenia, az pokym nie je "ready". V tejto chvili je umozneny pristup k zariadeniu - inak povedane - cakame, kym je I/O device ready. Napriklad, mame tlaciaren a poolujeme, az pokym nezistime, ze mozme poslat dalsie pismenko. 
  1. zacni prevod 
  2. aky je stav prevodu? 
    1. ak prebieha, tak checkni znova 
    2. ak je ukonceny, tak dalsie data 
pomocou preruseni
Tu o stave poziadavku informujeme vyslanim prerusenia. Procesor potom zahaji proces, ktory je popisany tu. V pripade castych preruseni trpi priepustnost zbernice. 

pomocou DMA
DMA oznacuje priamy pristup do pamate z anglickeho direct memory access. Tu treba trochu zpozorniet. Doteraz sme niekde nikdy nespomenuli, ze mame nieco ako nepriamy pristup do pamate a zrazu vyuzivame priamy pristup do pamate. O co teda vlastne go? Cenny zdroj najdete na http://www.earchiv.cz/a93/a325c120.php3, ale pokusim sa to nejako zhrnut. 

Cinnost procesoru je riadena instrukciami, ktore su nacitane z opracnej pamate. Zaroven procesor neprenasa data priamo na branu I/O zariadeni, ale na radic, ktory dalej komunikuje so zariadenim. Dovod je ten, ze kazde zariadenie ma ine poziadavky na komunikaciu, napriklad rychlost prenosu/zapisu a pod. Strojove instrukcie prenasaju data z registru zariadenia na register procesoru a potom do hlavnej pamate. A to preto, ze mozme sucasne adresovat len jedno miesto, pretoze mame len jednu zbernicu. Procesor teda nedokaze vyuzit maximalnu rychlost zbernice. Procesor vsak mozme obist. To spravime tak, ze budeme adresovat pamat adresovat pomocou adresovej zbernice a druheho budeme adresovat inak. V tejto chvili uz mozme implementovat DMA. 


DMA sme zaradili na miesto, kde bol povodne I/O radic. K jednotke DMA sa da zariadenie pripojit priamo (ak ma radic) ale cez I/O radic. DMA prijme adresu v pamati, kam sa data maju zapisovat/citat a prijme aj dlzku zapisovaneho/citaneho bloku dat. DMA da prikaz k zapisu/citaniu. Procesor zatial vykonava ine operacie a DMA zapisuje/cita do/z pamate. Ked DMA skonci vysle signal prerusenia. 

Takze, ako pise pan Peterka: 

"U mikroprocesorových systémů má realizaci této techniky na starosti specializovaný obvod, tzv. řadič přímého přístupu do paměti (DMA-řadič). Jeho úkolem je tedy zajišťovat přenos dat po datové sběrnici přímo mezi vstupně-výstupními zařízeními a pamětí, bez dočasného ukládání těchto dat kdekoli v pomocných registrech a bez účasti a bez zprostředkování procesorem."

DMA ale musi mat schopnost synchronizovat sa s procesorom, pretoze potrebuje zbernicu a pamat. Vacsinou o tomto rozhodne procesor a DMA si pridelenie prostriedkov vyziada. Implementacia DMA v pocitacoch je tvorena viacerymi kanalmi pre viac zariadeni. 


Ak si niekto myslel, za uz mame hotovo, tak bohuzial :(. Je dobre vediet, ako moze byt DMA implementovane.

  • zastavovanym procesorom
  • kradnutim cyklov (cycle stealing)
  • transparentne DMA
DMA so zastavovanym procesorom 
Vyssie sme popisali sposob, kedy DMA ziada o pridelenie prostriedkov a pocka si, kym ich dostane. Ked pracu ukonci, tak vrati, co dostal. Tento sposob sa riesi signalmi HOLD a HLDA. DMA signalom HOLD ziada o pridelenie a procesor odpoveda signalom HLDA. Procesor je v tomto pripade nieco ako miestny urad, vyhoviet musi, ale nikdo nevie, kedy sa tak stane. Procesor odpovie az potom, ked on sam dokonci, co prave procesuje, lepsie povedane, teraz potrebuje pamat on a DMA mu do nej nema co sahat. Ked DMA dostane pristup, tak vyuzije zbernicu a pamat a to bud na jeden, alebo viac cyklov. Vratenie signalizuje zmenou signalu HOLD.

Nevyhodou tohto riesenia je, ze 
  • velmi dlhom prenose je CPU zastavene na prilis dlhu dobu
  • problem s obnovovanim dynamickej pamate 
Cykly DMA a procesoru sa preto striedaju podla priority DMA kanalu. DMA prenos sa tak preklada procesorovymi cyklami, co snizuje efektivnost (drasticky) snizuje. V PC sa DMA pouziva len pre diskety a zvukovky (a bit outdated). Existuje este IDE DMA, ale to je vyriesene inak. Tento typ prenosov sa vsak hodi k pravidelnem blokovo orientovanemu prenosu udajov. Toto uz pripomina transparentnu DMA. 

Transparentna DMA
Tu sa vyuziva faktu, ze procesor nevyuziva pamat trvale, ale moze nechat priestor medzi jednotlivymi pristupmi. V tejto chvili prichadza na rad DMA, ktora medzeru vyuzije. Dnes vsak uz procesory pracuju s pamatou prilis intenzivne a data si dokonca nacitavaju vopred do cache pamate a k tomu si este pridajte problemy s koherenciou pamati v pripade, ze procesor ma cache ... 

DMA - Cycle Stealing 
Tento pristup je zalozeny na tom, ze DMA radic dokaze rozpoznat, kedy konci cyklus pristupu do pamate inicializovany procesorom a v spravny okamih prinuti procesor nezahajovat dalsi. V tej chvili zacne pracovat s pamatou on sam a az ked skonci, tak vrati prostriedky procesoru. Taketo hnusne chovanie nazyvame kradnutie cyklov, hoci (vdaka inzinierom) DMA zase pristup vrati. 

DMA vyuziva, ze procesor sa riadi hodinovym signalom. DMA jednoducho zabrani zmene hodinoveho signalu a procesor tak nema na co reagovat. Vdaka tomu sa nemeni jeho stav a DMA ma pristup vsade tam, kam potrebuje. Jediny pruser je v tom, ze registre procesoru su dynamicke (klopny obvod tvoreny kapacitormi) a tak po case zabudnu. Refresh registrov je tiez riadeny sychronizacnym impulzom.