ULAZNO-IZLAZNI UREDJAJI
=======================

(za detalje pogledati Dandamudi, str. 767-784)

*) ULAZNI UREDJAJI: omogucavaju unos podataka u racunar (tj. u njegovu
   operativnu (RAM) memoriju) od strane drugih uredjaja ili coveka
   (tastatura, mis, mikrofon, skener, i sl.)

*) IZLAZNI UREDJAJI: omogucavaju racunaru da podatke iz svoje
   operativne memorije prenese drugim uredjajima ili ih saopsti coveku
   (monitor, zvucnici, stampaci i sl.)

*) ULAZNO-IZLAZNI UREDJAJI: omogucavaju i ulaz i izlaz. Tipican primer
   su mrezni adapteri koji omogucavaju dvosmernu komunikaciju racunara
   sa drugim racunarima, kao i spoljne memorije (hard diskovi,
   magnetne trake, i sl.) koje takodje mogu da se smatraju
   ulazno/izlaznim uredjajima, jer ih racunar na taj nacin tretira.

*) Procesor sa U/I uredjajima komunicira preko U/I
   KONTROLERA. Kontroler je poseban uredjaj koji je prilagodjen
   uredjaju koji kontrolise i koji obavlja posao komunikacije niskog
   nivoa sa uredjajem, pruzajuci procesoru unifikovani interfejs. Taj
   interfejs U/I kontrolera se obicno sastoji iz skupa registara:

   1) REGISTRI PODATAKA: ovi registri sluze da procesor u njih upise
      podatke (u slucaju izlaznog uredjaja) ili da iz njih procita
      podatke koje je uredjaj dostavio (u slucaju ulaznog uredjaja).

   2) KONTROLNI REGISTAR: ovaj registar sluzi da procesor u njega
      upise komandu namenjenu uredjaju.

   3) STATUSNI REGISTAR: ovaj registar sluzi da procesor iz njega
      procita status U/I operacije.
   
*) Registrima U/I kontrolera procesor pristupa putem magistrale.
   Pri tome postoje dve varijante:

   -) MEMORIJSKI MAPIRANI U/I (engl. memory-mapped), kod koga su
      registri kontrolera u adresnom prostoru procesora, tj.  procesor
      im pristupa na isti nacin kao i lokacijama u glavnoj memoriji.
      Procesor ne razlikuje ove registre od lokacija u glavnoj
      memoriji, pa se prilikom programiranja aplikacija koje koriste
      ovakve uredjaje mogu koristiti uobicajene instrukcije transfera
      (poput MOV instrukcije na IA-32 arhitekturi).

   -) IZOLOVANI U/I, kod koga procesor ima poseban adresni prostor za
      U/I kontrolere i njihove registre. Na primer, IA-32 arhitektura
      ima 16-bitni adresni prostor u kome se nalaze U/I kontroleri,
      odvojen od odgovarajuceg adresnog prostora u kome se nalazi
      glavna memorija. Za pristup tom adresnom prostoru koriste se
      posebne instrukcije (in i out na IA-32 arhitekturi) kojima se
      zadaje adresa u okviru tog adresnog prostora.

   Svi procesori po prirodi stvari podrzavaju memorijski mapirani U/I.
   Pojedini procesori ne podrzavaju izolovani U/I (poput MIPS
   arhitekture). U danasnje vreme, izolovani U/I je u najvecoj meri
   prevazidjen, s obzirom na velicinu regularnog adresnog prostora
   savremenih procesora. U neka ranija vremena, kada su adresni
   prostori bili mali, bilo je skupo trositi adrese na ulazno izlazne
   uredjaje, pa je otuda imalo smisla koristiti zaseban adresni
   prostor za njih. Danas se po pravilu koristi memorijski mapirani
   U/I, osim tamo gde se iz tradicionalnih razloga zadrzao izolovani
   U/I.

*) Postoje tri osnovna nacina komunikacije izmedju procesora i U/I
   uredjaja:

   1) PROGRAMIRANI U/I: Kod ovog pristupa procesor obavlja kompletnu
      komunikaciju sa kontrolerom:

      a) najpre proverava da li je uredjaj zauzet ili ne. Ukoliko
      	 jeste procesor mora da ceka dok se uredjaj ne oslobodi
      	 (najcesce u nekoj beskonacnoj petlji u kojoj se periodicno
      	 proverava stanje statusnog registra kontrolera, dok se ne
      	 ispuni neki uslov).

      b) kada uredjaj postane dostupan, procesor upisuje u registre
      	 podataka one podatke koje zeli da posalje na izlaz (u slucaju
      	 izlaznog uredjaja), a zatim u komadni registar upisuje
      	 odgovarajucu komandu.

      c) dalje, procesor ceka da se obavi operacija, tako sto ponovo
      	 u nekoj beskonacnoj petlji proverava statusni registar.

      d) kada je operacija zavrsena, u slucaju ulazne operacije
      	 procesor prebacuje procitani podatak iz registara podataka
	 u svoje registre.

      S obzirom da je cilj U/I operacija transfer podataka iz glavne
      memorije u izlazni uredjaj ili iz ulaznog uredjaja u glavnu
      memoriju, ovo znaci da ce procesor zapravo biti posrednik u
      komunikaciji izmedju memorije i U/I uredjaja. To znaci da cemo
      imati dva transfera na magistrali (npr. kod citanja, jedan iz
      U/I kontrolera u procesor i drugi iz procesora u memoriju).
      Takodje, losa strana ovog pristupa je to sto procesor trosi
      svoje vreme na obavljanje U/I operacija.

   2) U/I VODJEN PREKIDIMA: ovaj pristup je slican prethodnom, ali se
      sada procesor ne vrti u beskonacnoj petlji cekajuci da se status
      uredjaja promeni, vec procesor samo izda komandu U/I kontroleru
      i nakon toga nastavlja da radi nesto drugo. Kada se operacija
      zavrsi, uredjaj salje signal za prekid procesoru i tako ga
      obavestava o promeni svog statusa. Iako je na ovaj nacin
      procesor u dobroj meri oslobodjen od nepotrebnog cekanja, i
      dalje je problem to sto procesor mora da se bavi ulazom i
      izlazom, kao i to sto se podaci dva puta prenose preko
      magistrale.

   3) DIREKTAN PRISTUP MEMORIJI (engl. Direct Memory Access, DMA): kod
      ovog pristupa postoji poseban DMA KONTROLER koji obavlja posao
      transfera umesto procesora. Komunikacija funkcionise na sledeci
      nacin:

      a) Procesor posalje DMA kontroleru broj koji identifikuje U/I
         uredjaj sa kojim zeli da komunicira, pocetnu adresu u
         memoriji sa koje treba citati podatke (ili u koju treba
         upisati podatke), broj bajtova koje treba procitati/upisati,
         kao i da li je u pitanju citanje ili pisanje. Nakon toga
	 procesor izdaje komandu DMA kontroleru da zapocne transfer.

      b) DMA kontroler sada zahteva pristup magistrali (tj. DMA
      	 kontroler je master koji inicira transfer). Nakon sto od
      	 arbitra magistrale dobije pristup, DMA postavlja adresu na
      	 adresnu magistralu, a zatim salje kontrolne signale U/I
      	 uredjaju i memoriji, cime obezbedjuje da se podatak prenese
      	 preko magistrale podataka. Dakle, DMA kontroler ne ucestvuje
      	 u transferu, vec ga samo kontrolise, izdajuci naredbe
      	 memoriji i U/I uredjaju.

      c) Nakon sto se transfer zavrsi, DMA kontroler salje signal za
      	 prekid procesoru, cime ga obavestava da je transfer uspesno
      	 zavrsen.

      Ovaj pristup je danas dominantan, jer se podatak izmedju
      memorije i U/I uredjaja prenosi direktno, bez posrednika, a za
      to vreme procesor moze slobodno da radi nesto drugo. Procesor
      direktno komunicira samo sa DMA kontrolerom (koji ima slican
      interfejs kao i svi drugi U/I kontroleri), a ostatak posla
      obavlja DMA kontroler.
